contents
AWS CodeDeploy、AWS CodeBuild 、Fargate、Auroraを用いた、
blue green デプロイ環境、およびフローイメージ図
また、stg環境、dev環境、prod環境などでデプロイメントを使い分けるための参考に
対象者
CodeDeployを用いた環境構築を一旦一例でざっくり掴みたい方
環境で同一のスクリプトを使ってみる参考に
イメージ
codeDeployのデプロイ処理開始例(updateProdECSService.shは後述)
bash ./scripts/updateProdECSService.sh --ENVIRONMENT_NAME prod --AWS_ACCOUNT_ID
hoge --SERVICE_NAME hoge --PORT_NUM hoge --TASK_REVISION_NUM hoge
hoge
script例:updateProdECSService.sh
# 本番環境のECSサービスをcodedeployで更新するための処理 # shの使用方法説明関数 function usage() { cat <<EOS Usage: $0 [REQUIRED OPTIONS] [REQUIRED OPTIONS] --ENVIRONMENT_NAME : ENVIRONMENT_NAME --AWS_ACCOUNT_ID : AWS_ACCOUNT_ID --SERVICE_NAME : SERVICE_NAME --PORT_NUM : PORT_NUM --TASK_REVISION_NUM : TASK_REVISION_NUM EOS exit 1 } # 引数から変数への格納部分 --** という引数を明示するために必要 ARGS=($@) for ((i = 0; i < ${#ARGS[@]}; i++)); do case "${ARGS[$i]}" in "--ENVIRONMENT_NAME") i=$(expr $i + 1) readonly ENVIRONMENT_NAME="${ARGS[$i]}" ;; "--AWS_ACCOUNT_ID") i=$(expr $i + 1) readonly AWS_ACCOUNT_ID="${ARGS[$i]}" ;; "--SERVICE_NAME") i=$(expr $i + 1) readonly SERVICE_NAME="${ARGS[$i]}" ;; "--PORT_NUM") i=$(expr $i + 1) readonly PORT_NUM="${ARGS[$i]}" ;; "--TASK_REVISION_NUM") i=$(expr $i + 1) readonly TASK_REVISION_NUM="${ARGS[$i]}" ;; *) usage ;; esac done # 引数をチェック。必要な引数がない場合は使用方法を説明 if [ -z "${ENVIRONMENT_NAME}" -o -z "${AWS_ACCOUNT_ID}" -o -z "${SERVICE_NAME}" -o -z "${PORT_NUM}" -o -z "${TASK_REVISION_NUM}" ]; then usage fi readonly ECS_CLUSTER_NAME="sample-${ENVIRONMENT_NAME}-cluster" readonly ECS_SERVICE_NAME="sample-${ENVIRONMENT_NAME}-${SERVICE_NAME}" readonly APPLICATION_NAME="AppECS-${ECS_CLUSTER_NAME}-${ECS_SERVICE_NAME}" readonly DEPLOYMENT_G_NAME="DgpECS-${ECS_CLUSTER_NAME}-${ECS_SERVICE_NAME}" TASK_JSON_DATA=$(cat << EOS | jq {"revisionType": "AppSpecContent", "appSpecContent": {"content": "{\"version\": 1, \"Resources\": [{\"TargetService\": {\"Type\": \"AWS::ECS::Service\", \"Properties\": {\"TaskDefinition\": \"arn:aws:ecs:ap-northeast-1:${AWS_ACCOUNT_ID}:task-definition/${ECS_SERVICE_NAME}:${TASK_REVISION_NUM}\", \"LoadBalancerInfo\": {\"ContainerName\": \"${SERVICE_NAME}\", \"ContainerPort\": ${PORT_NUM}}}}}]}"}} EOS ) # codeDeployのデプロイ処理開始 aws deploy create-deployment --application-name "${APPLICATION_NAME}" --deployment-group-name "${DEPLOYMENT_G_NAME}" --revision "${TASK_JSON_DATA}"
補足:
フロントアプリに関して、
テストポートへのアクセスに関して、フロント及びバックエンドサーバーもテスト用のものにアクセスしたい場合があると思う、そういった場合はもしaxiosなどを使っていたらaxios.tsなどを変更してあげる必要がある。
e.g. hostNameを見て向き先やポート番号、プロトコルを修正するなど