継続は力なり

タイトル通り定期的な更新を心掛けるブログです。

CodePipeline と CodeBuild で Git のタグを使ったリリースで切り戻し方を考えた

タダです.

タグリリースを CodePipeline と CodeBuild でやろうとしたときの記事を以前書きました.実際に運用しようと思ったとき,通常は最新のバージョンでいいけど,変更を加えたら意図せず障害が起こり安定したバージョンに障害復旧のために切り戻したいケースが出てくることが想定されます.そのケースに対して対応を考えてみたので記事にします.

sadayoshi-tada.hatenablog.com

結論

今回,CodePipeline で CodeBuild のジョブで使う環境変数を設定できます.切り戻したいバージョンを環境変数に設定して,パイプラインを走らせて切り戻します.画像では CodePipeline で関連づけた CodeBuild に環境変数を指定できて RESTORE_TAG_VERSION を設定してます.

f:id:sadayoshi_tada:20211001013438p:plain

また,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.amazon.com

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

関連情報

docs.aws.amazon.com

docs.aws.amazon.com

まとめ

タグリリース運用時に考えられる,切り戻しの方法を検証したので記事にしました.環境変数をセットする時としない時が運用上発生するので,この辺は仕組み化していかないと繰り返しの作業になってしまうので検討しなきゃいけない課題があります.仕組み化してまた記事にしたいと思います.