2
0

More than 3 years have passed since last update.

Lambda+SAMテンプレートのBlue/Greenデプロイメントで「デプロイの再試行」した際の動作を検証する

Posted at

はじめに

デプロイ運用は、Blue/Greenでシームレスにサービス移行できるのも重要だが、デプロイに失敗した際のロールバックと再デプロイをスムースに行えることも重要だ。

Canaryなデプロイにおける自動ロールバックについては、過去の記事で調査を行ったので、今回は手動ロールバックと再デプロイについての動作検証を行う。

なお、最初に断っておくと、この方法は結果的に期待した動作になっているが、途中でエラーが出たりして怪しさ満点である。もう少しちゃんとした検証が必要かもしれない。

前提条件

  • Lambda+SAMテンプレートでの基本的な動作の仕様を理解している(過去の記事で紹介済み)
  • デプロイは以下の仕様とする

    • Prodのエイリアスを使用してCanaryの向き先を制御する(SAMテンプレートでAutoPublishAlias: Prodとしている)
    • API GatewayのLambda統合プロキシで、上記Prodをターゲットにしている

初回デプロイ直後の状態

以下のようになっている。初版と言いながらバージョン8なのは、この記事を書くにあたりいろいろ試行錯誤した結果なのであしからず。
キャプチャ1.png

初回の修正を行った状態

初回の修正を行い、パイプラインが走った後、以下の状態になる。
バージョン9が作られ、Prodのエイリアスが最新バージョンに向いている状態だ。
キャプチャ4.png

ここで、バージョン9に不具合があったことが分かったと仮定して、ロールバックをしてみよう。

キャプチャ3.png

うーん、この「デプロイの再試行」ボタンなのか?日本語的には意味が違うが……
AWSはたまに翻訳が怪しいので、とりあえず押してみると…

キャプチャ6.png
キャプチャ7.png

なんかエラーが一度出た。が、結果として最後のデプロイは成功しているようなので、確認してみる。

キャプチャ8.png

期待した通り、Prodのエイリアスが元通り8を指している。
curlによる正常性確認も、しっかりバージョン8の動作をした。

では、ここで再度バージョン9の不具合修正を行い、デプロイを行う。

キャプチャ10.png

すると、バージョン9を飛ばしてしっかりバージョン10を向くようになった。
では、仮にここで、さらにバージョン10にも不具合があってロールバックしたらどうなるだろうか?
ここでバージョン9に戻ってしまうと、瑕疵のあるバージョンがデプロイされてしまう。
では、再び「デプロイの再試行」ボタンを押してみよう。

キャプチャ12.png

しっかりと、バージョン9ではなくてバージョン8に戻ってくれた。

この後、バージョン11をデプロイして、これはデプロイ成功したと仮定して、さらにバージョン12をデプロイ→ロールバックとしてみた。

キャプチャ14.png

うむ、デプロイ成功したバージョンについてはしっかり覚えてくれて、そこまでロールバックしてくれるという仕様のようだ。

これ、エラーの謎さえ解けて、これが仕様通りの動作なのだとしたら、完璧に期待通りの動作なのだけど。
エラー内容をGoogleで確認しても分からなかったので、迷宮入りしてしまいそうである……。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0