ある企業がAWS SAMテンプレートを使ってAPI Gateway + Lambda構成のサーバーレスAPIをデプロイしている。本番環境でのカナリアデプロイを実装したい。新バージョンへのトラフィック移行中にCloudWatchアラームがエラー増加を検知したら自動的にロールバックし、かつデプロイ完了後にPostTrafficHookでデータ整合性チェックを行いたい。SAMテンプレートで設定すべき項目を2つ選択してください。
- A. DeploymentPreference.Type: Canary10Percent5MinutesとDeploymentPreference.Alarmsに既存のCloudWatchアラームARNを指定する
- B. Lambda関数にプロビジョニング済み同時実行数(Provisioned Concurrency)を設定する
- C. API GatewayのステージにカナリアリリースとCloudWatchアラームを設定する
- D. DeploymentPreference.HooksのPostTrafficHookにデータ整合性チェック用Lambda関数のARNを指定する
- E. AutoPublishAliasをテンプレートのGlobalsセクションに設定する
解答と解説を見る
正解: A, D
SAMのDeploymentPreferenceでカナリアデプロイを設定するには、Type: Canary10Percent5Minutesなどのデプロイタイプを指定し、Alarmsセクションに自動ロールバックのトリガーとなるCloudWatchアラームARNを列挙する。アラームがALARM状態になるとCodeDeployがデプロイをロールバックする。PostTrafficHookはDeploymentPreference.Hooks.PostTrafficHookに検証用Lambda関数のARNを指定することで、トラフィック切り替え後の整合性チェックを実行でき、この関数がエラーを返せばロールバックが発動する。EのGlobalsセクションにはAutoPublishAliasを書けず、各関数リソースのPropertiesに書く必要がある(Globalsに書いてもAutoPublishAliasは適用されない)。CはAPI GatewayネイティブのカナリアリリースでありSAMのDeploymentPreferenceとは別の仕組みで、Lambda版のカナリアとは設定方法が異なる。Bのプロビジョニング済み同時実行はコールドスタート対策であり、カナリアデプロイの設定とは無関係である。
📚 関連サービスの解説: Amazon CloudWatch ・ AWS Lambda