deploy_cdk_applications.sh 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. #!/usr/bin/env bash
  2. #
  3. # Copyright (c) Contributors to the Open 3D Engine Project.
  4. # For complete copyright and license terms please see the LICENSE at the root of this distribution.
  5. #
  6. # SPDX-License-Identifier: Apache-2.0 OR MIT
  7. #
  8. # Deploy the CDK applications for AWS gems (Linux only)
  9. SOURCE_DIRECTORY=$PWD
  10. PATH=$SOURCE_DIRECTORY/python/runtime/$PYTHON_RUNTIME/python/bin:$PATH
  11. GEM_DIRECTORY=$SOURCE_DIRECTORY/Gems
  12. DeployCDKApplication()
  13. {
  14. # Deploy the CDK application for a specific AWS gem
  15. GEM_NAME=$1
  16. ADDITIONAL_ARGUMENTS=$2
  17. echo [cdk_deployment] Deploy the CDK application for the $GEM_NAME gem
  18. pushd $GEM_DIRECTORY/$GEM_NAME/cdk
  19. # Revert the CDK application code to a stable state using the provided commit ID
  20. if ! git checkout $COMMIT_ID -- .;
  21. then
  22. echo [git_checkout] Failed to checkout the CDK application for the $GEM_NAME gem using commit ID $COMMIT_ID
  23. popd
  24. exit 1
  25. fi
  26. # Install required packages for the CDK application
  27. if ! python -m pip install -r requirements.txt;
  28. then
  29. echo [cdk_deployment] Failed to install required packages for the $GEM_NAME gem
  30. popd
  31. exit 1
  32. fi
  33. # Deploy the CDK application
  34. if ! cdk deploy $ADDITIONAL_ARGUMENTS --require-approval never;
  35. then
  36. echo [cdk_deployment] Failed to deploy the CDK application for the $GEM_NAME gem
  37. popd
  38. exit 1
  39. fi
  40. popd
  41. }
  42. echo [cdk_installation] Install nvm $NVM_VERSION
  43. curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/$NVM_VERSION/install.sh | bash
  44. export NVM_DIR="$HOME/.nvm"
  45. [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
  46. [ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion
  47. echo [cdk_installation] Install the current version of nodejs
  48. nvm install node
  49. echo [cdk_installation] Install aws-cdk@$CDK_VERSION
  50. if ! npm uninstall -g aws-cdk;
  51. then
  52. echo [cdk_bootstrap] Failed to uninstall the current version of CDK
  53. exit 1
  54. fi
  55. if ! npm install -g aws-cdk@$CDK_VERSION;
  56. then
  57. echo [cdk_bootstrap] Failed to install aws-cdk@$CDK_VERSION
  58. exit 1
  59. fi
  60. # Set temporary AWS credentials from the assume role
  61. credentials=$(aws sts assume-role --query Credentials.[SecretAccessKey,SessionToken,AccessKeyId] --output text --role-arn $ASSUME_ROLE_ARN --role-session-name o3de-Automation-session)
  62. export AWS_SECRET_ACCESS_KEY=$(echo $credentials | cut -d' ' -f1)
  63. export AWS_SESSION_TOKEN=$(echo $credentials | cut -d' ' -f2)
  64. export AWS_ACCESS_KEY_ID=$(echo $credentials | cut -d' ' -f3)
  65. export O3DE_AWS_DEPLOY_ACCOUNT=$(echo "$ASSUME_ROLE_ARN" | cut -d':' -f5)
  66. if [[ -z "$O3DE_AWS_PROJECT_NAME" ]]; then
  67. # To avoid resource name length issues, potentially verbose pipeline names are capped at 25 chars.
  68. # TODO: consolidate project name formulation for tests and deploy/destroy scripts to same place.
  69. pipeline_short=${PIPELINE_NAME:0:25}
  70. echo Truncated pipeline name is: $pipeline_short
  71. export O3DE_AWS_PROJECT_NAME=$BRANCH_NAME-$pipeline_short-Linux
  72. export O3DE_AWS_PROJECT_NAME=${O3DE_AWS_PROJECT_NAME///} # remove occurances of "/" b/c not allowed in AWS CFN stack names
  73. fi
  74. # Bootstrap and deploy the CDK applications
  75. echo [cdk_bootstrap] Bootstrap CDK
  76. if ! cdk bootstrap aws://$O3DE_AWS_DEPLOY_ACCOUNT/$O3DE_AWS_DEPLOY_REGION;
  77. then
  78. echo [cdk_bootstrap] Failed to bootstrap CDK
  79. exit 1
  80. fi
  81. if ! DeployCDKApplication AWSCore "-c disable_access_log=true -c remove_all_storage_on_destroy=true --all";
  82. then
  83. exit 1
  84. fi
  85. if ! DeployCDKApplication AWSClientAuth;
  86. then
  87. exit 1
  88. fi
  89. if ! DeployCDKApplication AWSMetrics "-c batch_processing=true";
  90. then
  91. exit 1
  92. fi
  93. exit 0