【AWS】CloudFormation ~ AWS CLI ~

■ はじめに

AWS CloudFormation について担当することになりそうで
後輩にGUIよりAWS CLIの方が作業しやすいですよって
教えてくれたので、メモ。感謝、、、

目次

【1】AWS CLI
 1)aws cloudformation create-stack
 2)aws cloudformation deploy
 3)aws cloudformation delete-stack
 4)aws cloudformation continue-update-rollback
【2】使用上の注意
 1)IAM関連を作成する場合
 2)create-stack/update-stackではなくdeployを使う方がよさげ
【3】サンプル
 例1:スタック作成
 例2:デプロイ
 例3:スタック削除

【1】AWS CLI

* 以下を参照

https://awscli.amazonaws.com/v2/documentation/api/latest/reference/cloudformation/index.html

補足:スタック (Stacks) とは?
https://dk521123.hatenablog.com/entry/2024/02/10/231900

より抜粋
~~~~~~~
テンプレートによって作成されたAWSリソース群の単位
~~~~~~~

1)aws cloudformation create-stack

* スタックの作成

https://awscli.amazonaws.com/v2/documentation/api/latest/reference/cloudformation/create-stack.html

コマンド例
https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/using-cfn-cli-creating-stack.html

aws cloudformation create-stack \
  --region us-west-2 \
  --stack-name myteststack \
  --template-body file:///home/testuser/mytemplate.json \
  --parameters ParameterKey=Parm1,ParameterValue=test1 ParameterKey=Parm2,ParameterValue=test2

2)aws cloudformation deploy

* CloudFormationによるデプロイ
 => 新規も更新もこのコマンドで完結

https://awscli.amazonaws.com/v2/documentation/api/latest/reference/cloudformation/deploy/index.html
--no-execute-changeset

* dry-run

コマンド例
https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/using-cfn-cli-deploy.html

aws cloudformation deploy \
  --region us-west-2 \
  --template path_to_template/my-template.json \
  --stack-name my-new-stack \
  --parameter-overrides Key1=Value1 Key2=Value2

3)aws cloudformation delete-stack

* スタック削除

https://awscli.amazonaws.com/v2/documentation/api/latest/reference/cloudformation/delete-stack.html

4)aws cloudformation continue-update-rollback

* UPDATE_ROLLBACK_FAILED 状態でロールバックを続けるように促す

https://awscli.amazonaws.com/v2/documentation/api/latest/reference/cloudformation/continue-update-rollback.html

* 以下の関連記事の
 「【4】エラー「XXX is in UPDATE_ROLLBACK_FAILED state and can not be updated」が表示」
 も参照

CloudFormation でのトラブル
https://dk521123.hatenablog.com/entry/2022/05/30/191507

【2】使用上の注意

1)IAM関連を作成する場合

* IAM関連を作成する場合には、
「 --capabilities CAPABILITY_NAMED_IAM/CAPABILITY_IAM」を指定する必要がある
 => 詳しくは以下の公式ドキュメントの記述参照。

https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/automation-action-createstack.html

より抜粋

CAPABILITY_IAM および CAPABILITY_NAMED_IAM

IAM リソースがある場合、どちらの機能でも指定できます。
カスタム名を持つ IAM リソースがある場合は、
CAPABILITY_NAMED_IAM を指定する必要があります。
このパラメータを指定しない場合、
このアクションは InsufficientCapabilities エラーを返します。

コマンド例

# For IAM
aws cloudformation create-stack \
  --region us-west-2 \
  --stack-name my-iam-teststack \
  --template-body file:///home/testuser/my-iam-template.json \
  --parameters ParameterKey=Parm1,ParameterValue=test1 ParameterKey=Parm2,ParameterValue=test2 \
  --capabilities CAPABILITY_NAMED_IAM # ★ここ★

2)create-stack/update-stackではなくdeployを使う方がよさげ

https://dev.classmethod.jp/articles/aws-all-iac/

より抜粋
~~~~~~~~~~~~~~~~~
(推奨)deployの挙動
自分が推奨しているdeployの特徴を以下にあげます。

新規も更新もこのコマンドで完結
チェンジセット(後述)が必ず作成される
validate-templateの実行とか流さなくてもdeployするだけでエラーは把握可能
コマンドが同期的に実行される→スタック作成完了時に結果が戻る
~~~~~~~~~~~~~~~~~

【3】サンプル

例1:スタック作成

aws cloudformation create-stack \
  --region us-west-2 \
  --stack-name demo-stack \
  --template-body file:///demo-template.yml \
  --parameters ParameterKey=Parm1,ParameterValue=test1 ParameterKey=Parm2,ParameterValue=test2

例2:デプロイ

#!/bin/bash -xe

cat <<EOF > deploy-params.txt
Env=dev
Version=1.0.0
EOF

aws cloudformation deploy \
  --region us-west-2 \
  --template demo-template.yml \
  --stack-name demo-stack \
  --parameter-overrides $(cat deploy-params.txt)

例3:スタック削除

aws cloudformation delete-stack \
  --region us-west-2 \
  --stack-name demo-stack

例4:UPDATE_ROLLBACK_FAILED 状態の解消

https://repost.aws/ja/knowledge-center/cloudformation-update-rollback-failed

aws cloudformation continue-update-rollback \
--region us-west-2 \
--stack-name awsstackname123 \
--resources-to-skip awsfaultyresource123

関連記事

CloudFormation ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2024/02/10/231900
CloudFormation ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2021/10/26/224812
CloudFormation ~ 基本編 ~
https://dk521123.hatenablog.com/entry/2021/12/01/170326
CloudFormation ~ 開発環境 ~
https://dk521123.hatenablog.com/entry/2022/05/22/000000
CloudFormation ~ 組み込み関数 ~
https://dk521123.hatenablog.com/entry/2021/12/04/202519
CloudFormation ~ 条件分岐 ~
https://dk521123.hatenablog.com/entry/2022/07/02/214543
CloudFormation ~ 疑似パラメータ ~
https://dk521123.hatenablog.com/entry/2021/12/05/134313
CloudFormation ~ DeletionPolicy 属性 ~
https://dk521123.hatenablog.com/entry/2021/12/27/211328
CloudFormation ~ 認証情報の扱い ~
https://dk521123.hatenablog.com/entry/2021/12/28/224501
CloudFormation ~ S3 ~
https://dk521123.hatenablog.com/entry/2022/05/25/220037
CloudFormation ~ KMS ~
https://dk521123.hatenablog.com/entry/2022/05/26/112627
CloudFormation ~ IAM ~
https://dk521123.hatenablog.com/entry/2022/05/27/100820
CloudFormation ~ EC2 ~
https://dk521123.hatenablog.com/entry/2024/02/11/010935
CloudFormation で Github/CodePipeline/CodeBuild を構築する
https://dk521123.hatenablog.com/entry/2021/12/26/155956
CloudFormation でのトラブル
https://dk521123.hatenablog.com/entry/2022/05/30/191507
シェル ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2014/10/23/005406
シェル ~ Shebang
https://dk521123.hatenablog.com/entry/2024/02/02/000000