タダです.
タグリリースを CodePipeline と CodeBuild でやろうとしたときの記事を以前書きました.実際に運用しようと思ったとき,通常は最新のバージョンでいいけど,変更を加えたら意図せず障害が起こり安定したバージョンに障害復旧のために切り戻したいケースが出てくることが想定されます.そのケースに対して対応を考えてみたので記事にします.
結論
今回,CodePipeline で CodeBuild のジョブで使う環境変数を設定できます.切り戻したいバージョンを環境変数に設定して,パイプラインを走らせて切り戻します.画像では CodePipeline で関連づけた CodeBuild に環境変数を指定できて RESTORE_TAG_VERSION
を設定してます.
また,buildspec.yml
では次のような条件分岐を使って,設定してない場合は最新のバージョンを変数を設定している場合は,指定バージョンをチェックアウトするような動作ができます.これで CodePipeline のリリースをスタートすれば切り戻しができます.ただ,切り戻す時は環境変数の値を設定し,切り戻せたらその設定を取り外さなきゃ障害じゃないのに最新のコードをデプロイできなくなる点は運用上注意です.
version: 0.2 phases: build: commands: - echo Checkout tags - git fetch --tags - | if [ "$RECOVEY_TAG_VERSION" = "" ]; then git checkout $(git describe --tags --abbrev=0) else git checkout $RECOVEY_TAG_VERSION fi ~中略~
関連情報
AWS CLI で実行する場合
今回のオペレーションを画面操作ではなく AWS CLI でやったらどうなるかも最後に確認しておきます.2つの作業が必要で1つ目は環境変数の値のセット,2つ目は CodePipeline のリリースを開始する作業です.それぞれ以下のコマンドで実行できます.
環境変数の値のセット
aws codepipeline update-pipeline --cli-input-json file://xxx.json
CodePipeline のリリースを開始する
aws codepipeline start-pipeline-execution --name xxx
関連情報
まとめ
タグリリース運用時に考えられる,切り戻しの方法を検証したので記事にしました.環境変数をセットする時としない時が運用上発生するので,この辺は仕組み化していかないと繰り返しの作業になってしまうので検討しなきゃいけない課題があります.仕組み化してまた記事にしたいと思います.