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を見て向き先やポート番号、プロトコルを修正するなど