sam deploy コマンドで変更セットの扱いを決める2つのオプションについて整理した (no_execute_changeset/confirm_changeset)

記事タイトルとURLをコピーする

こんにちは、サービス開発部のくればやしです。

CloudFormationでのデプロイにおいて、変更セットの利用は非常に便利でデプロイの安全性を高めてくれるものです。 AWS SAM CLIでも変更セットを利用したデプロイが行われます。

今回は AWS SAMのデプロイコマンドである sam deploy で利用できる --confirm-changeset--no-execute-changeset というオプションについて解説します。

AWS SAM CLIで選択できるデプロイ動作の種類とオプションとの対応

SAM CLIではオプションの指定方法で以下の3種類のデプロイに関する動作を選択できます。 それぞれの動作に対応するコマンドのオプションを記します。

  • ① 変更セットの確認をスキップしてデプロイまで行う→ オプション不要
  • ② 変更セットを確認して、コンソール上でデプロイするかを選択する → --confirm-changeset
  • ③ 変更セットの作成までで、コンソール上でデプロイは行わない → --no-execute-changeset

オプション選択をチャートで示すと以下のように表すことができます。

それぞれのオプションの実行例

--confirm-changeset

変更セット作成した後、実行前に確認プロンプトを表示します。

sam deploy --confirm-changeset

以下のように y/N の確認が求められるため、意図しない変更の適用を防ぐことができます。 ただし、CI/CD等で実行する際にはプロンプトへの入力は基本的には難しいと思いますので、手元から実行する時に使うオプションと考えてよいと思います。

Changeset created successfully. arn:aws:cloudformation:...

Previewing CloudFormation changeset before deployment
======================================================
Deploy this changeset? [y/N]:

--no-execute-changeset

変更セット作成した後、実行せずに終了します。

sam deploy --no-execute-changeset

変更セットはマネジメントコンソール等で確認してから、手動で実行することが可能です。 また、デプロイ前にチームの別のメンバーが変更セットをレビューすることも可能となります。

まとめ

ユースケースとしては以下のように使い分けられると思います。

  • 開発時等で開発者が手元からデプロイする時 → 「オプション無し」や --confirm-changeset でコンソール上でデプロイまで実行する
  • CI/CD や、チームでレビューしながらデプロイする時 → --no-execute-changeset で一度変更セットを確認できる状態にしてから実行する

2つのオプションを組み合わせる意味はないため、排他的な選択肢として捉えておくとスッキリすると思います。

どなたかの一助になれば幸いです。

おまけ(深堀り): SAM CLIの実装をみると分かりやすい

--no-execute-changeset--confirm-changeset の関係性について気になったので、SAM CLI のソースコード を確認してみました。

if no_execute_changeset:
    return  # ここで終了、confirm_changeset には到達しない

if confirm_changeset:
    if not click.confirm(...):
        return

コードを見ると、--no-execute-changeset が先に評価されて処理が終了するため、--confirm-changeset には到達しません。つまり両方を同時に指定してもエラーにはなりませんが、実質的には --no-execute-changeset のみを指定したのと同じ動作になります。

関連

blog.serverworks.co.jp

紅林輝(くればやしあきら)(サービス開発部) 記事一覧

サービス開発部所属。2015年にサーバーワークスにJOIN。クラウドインテグレーション部を経て、現在はCloud Automatorの開発に従事。ドラクエ部。推しナンバーはⅤ、推しモンスターはクックルー。