CodedeployのLifeCycleに関する雑な理解
大きくアプリケーション周りのライフサイクル(7つ)とロードバランサーに関係するライフサイクル(6つ)がある。初回デプロイ時にはDownloadBundleされる前のApplicationStopはrunscriptがないので実行されない。
Application周りのライフサイクル(Application止めて、正常稼働確認まで)
- ApplicationStop
- DownloadBundle
- BeforeInstall
- Install
- AfterInstall
- ApplicationStart
- ValidateService
LB周りのライフサイクル
- BeforeBlockTraffic
- BlockTraffic
- AfterBlockTraffic
- BeforeAllowTraffic
- AllowTraffic
- AfterAllowTraffic
runscriptの実行可否一覧
IP:InPlaceDeployment
BG:Blue/GreenDeployment
BGR:Blue/GreenDeployment Rollback
CLB:ClassicELB
◯:runscriptは実行される
△:runscriptは場合によって実行される(2回目以降のデプロイから)
×:runscriptは実行されない
太字:runscriptは実行されない。codedeploy占有。
LifeCycleEvent | IP(LB無し) | IP+CLB | IP+ALB | BG(Blue) | BG(Green) | BGR(Blue) | BGR(Green) |
---|---|---|---|---|---|---|---|
1.ApplicationStop | △ | △ | △ | × | △ | × | × |
2.DownloadBundle | × | × | × | × | × | × | × |
3.BeforeInstall | ○ | ○ | ○ | × | ○ | × | × |
4.Install | × | × | × | × | × | × | × |
5.AfterInstall | ○ | ○ | ○ | × | ○ | × | × |
6.ApplicationStart | ○ | ○ | ○ | × | ○ | × | × |
7.ValidateService | ○ | ○ | ○ | × | ○ | × | × |
8.BeforeBlockTraffic | × | ○ | × | ○ | × | × | ○ |
9.BlockTraffic | × | × | × | × | × | × | × |
10.AfterBlockTraffic | × | ○ | × | ○ | × | × | ○ |
11.BeforeAllowTraffic | × | ○ | × | × | ○ | ○ | × |
12.AllowTraffic | × | × | × | × | × | × | × |
13.AfterAllowTraffic | × | ○ | × | × | ○ | ○ | × |
runscript内で使える環境変数
個人的にDEPLOYMENT_GROUP_NAMEくらいしか使わない。
- APPLICATION_NAME
- DEPLOYMENT_ID
- DEPLOYMENT_GROUP_NAME
- DEPLOYMENT_GROUP_ID
- LIFECYCLE_EVENT
個人的Tips
- runscriptの名前にイベントの順序ごとに番号つける。
1_application_stop.sh
等にしておくと順序悩まない。 - とりあえずEC2のUSERDATAやAutoScalingのLaunchConfigurationに以下のコード入れて置くと楽。
# !/bin/bash
REGION=$(curl 169.254.169.254/latest/meta-data/placement/availability-zone/ | sed 's/[a-z]$//')
yum install -y aws-cli
cd /home/ec2-user/
aws s3 cp s3://aws-codedeploy-${REGION}/latest/install . --region ${REGION}
chmod +x ./install
./install auto