less is more

心のフルスタックエンジニア👨‍💻バイブスでコードを書いています🤘

cloudformation:CreateStack のオプションを整理する

aws-cli のドキュメントをもとに一つずつ見ていく。

create-stack — AWS CLI 1.18.78 Command Reference

--stack-name

スタック名。必須。
英数字またはハイフンのみ。

最大128文字で、先頭は英文字でなければならない。
また、リージョン内でユニークという制約がある。

--template-body | --template-url

テンプレートファイルの指定。
どちらか片方でよい。

S3に配置されたファイルを使う場合は、--template-urlにURLを指定する。
ローカルのファイルを使う場合は、--template-body file://{path}のような形で指定する。

--parameters

パラメータの受け渡し。 JSON文字列を指定するか、以下のようなショートハンドでも書ける。

ParameterKey=string,ParameterValue=string,UsePreviousValue=boolean,ResolvedValue=string ...

UsePreviousValueは作成時は使えない。更新時に、前回渡したパラメータを引き継ぐかどうか。

ResolvedValueはパラメータストア(ssm)の参照っぽいんですが、ドキュメントが薄くサンプルも見つからないため具体的な挙動は確認できていません。

Read-only. The value that corresponds to a Systems Manager parameter key. This field is returned only for SSM parameter types in the template.

docs.aws.amazon.com

--disable-rollback | --no-disable-rollback

スタックの作成に失敗した時ロールバックするかどうか。
デフォルトではするので、それを無効にしたい場合に--disable-rollbackを渡すような使い方しかないと思う。

また、このオプションは次の--on-failureと競合する。

--on-failure

スタックの作成に失敗した時の挙動を決める。
デフォルトではROLLBACKで、以下の3つから指定できる。

  • DO_NOTHING
  • ROLLBACK
  • DELETE

--disable-rollbackとは併用できない。
明記はないが--disable-rollbackDO_NOTHINGと同じ挙動っぽい。

DELETEはスタックを自動で削除してしまう。削除されるとなんでエラーになったのかイベントが見れなくなるのでおすすめしない。

--rollback-configuration

ロールバックをトリガーするための詳細条件を設定できる。
CloudWatchと連携して各リソースごとに閾値を設定し、アラーム状態になったらオペレーションを中止してロールバックする、みたいなことを実現する。

使ったことがないので想定するケースがよくわからない。

docs.aws.amazon.com

--timeout-in-minutes

スタックの作成ステータスを失敗とするまでのタイムアウト

--notification-arns

Cloudformationのイベントの通知先のSNSのトピックのARN。
オペレーションの実行 IAM がSNS:Publish権限を有している必要がある。

--capabilities

スタックに特定のIAM関連のリソースがある場合、確認用に渡す必要があるちょっと特殊なオプション。

「IAMに関する操作あるけど大丈夫?認識してる?意図通り?」っていう確認。

値としては CAPABILITY_IAM,CAPABILITY_NAMED_IAM,CAPABILITY_AUTO_EXPANDの3種類がある。

基本的にはCAPABILITY_IAM, 名前付きのIAMリソースがある場合はCAPABILITY_NAMED_IAM, マクロでテンプレートを生成する場合はCAPABILITY_AUTO_EXPANDが必要になる。

とりあえず全部わっとまとめて渡しておけば通せる。

--resource-types

これもcapabilitiesっぽい動きをするオプションで、意図せぬリソースが含まれていないかを確認するような仕組み。

AWS::EC2::Instance, AWS::EC2::*,のような値を渡して、このリストに含まれていないリソースを作ろうとしていたらオペレーションを失敗させるみたいな。

これも使ったことない。

--role-arn

オペレーションの実行IAMロールを指定できる。
サービスロールを使う場合ですね。

なんでサービスロールを使ったほうがいいの?という点に関しては拙著ですが以下をお読みください。 bluepixel.hatenablog.com

--stack-policy-body | --stack-policy-url

作成されたスタックの更新許可を制御する仕組み。
デフォルトでは全てのリソースが更新可能になっているが、ポリシーベースで柔軟に制御をかけられる。

例えばデータベースの更新など物理的なリソースの置換を伴いデータが吹っ飛ぶような危険な操作をできないようにするとかだろうか。

docs.aws.amazon.com

テンプレートの時と同じく、S3のURLを指定してファイルを読み込ませることもできる。

--tags

解説不要ですね。

スタックに対してタグを指定すると管理下のリソースに対して一括でタグを付与してくれるのでとても便利。

--client-request-token

一意の値を指定してオペレーションを識別できるようにするトークン。
マネコンではデフォルト非表示っぽい?けど歯車から表示するように設定できる。

f:id:bluepixel:20200613174437p:plain

--enable-termination-protection | --no-enable-termination-protection

削除保護。
デフォルトは無効。

以上です。