7
2

More than 5 years have passed since last update.

CloudFormationでスタック内の特定リソースを変更せずに変更扱いする方法 (超簡単で地味に実現)

Last updated at Posted at 2019-06-02

背景

AWS CloudFormationでスタックの更新(update-stack)を実行するとき、各リソースのコードに変更がなければ、そのリソースは変更されません。
ただ、Lambda-backed カスタムリソース(CloudFormationテンプレート内でLambdaを実行し、その戻り値を別リソースのパラメータとして使用する)のように、スタックを更新する度に毎回更新(実行)されないと困るものがあります。
そこで、超簡単に特定のリソースを毎回更新扱いにする方法を思いつきました。

実現方法

実現方法は以下の通りです。
任意にパラメータを定義し、パラメータをDescriptionに含めるだけです。
万が一Descriptionがない場合は、そのリソースを説明する任意文字列を意味する代替パラメータに含めます。(そもそもDescriptionがないリソースがあるかは、途方も無いので調べていません。。。)
ものすごく地味な方法ですが、簡単に特定のリソースだけに更新フラグを付けることができます。

Parametersの例

Parameters: 
  ModifyStackDate: 
    Type: String
    Default: '201901010000'
    Description: Enter Date of Modify Stack.

変更を加えるリソース

以下のようにDescriptionにパラメータを含めます。
!Refでパラメータを指定するだけで、簡単にできます。
他の文字列と結合したい場合は、以下のように!Joinを使うだけです。

HogeHoge:
  Type: "AWS::Lambda::リソースの種類"
  Properties:
    Description: !Join [ ":", [ 'リソースの説明', !Ref ModifyStackDate ] ]
    (以下略)

update-stack

以下のように--parametersを含め、ParameterKeyとParameterValueでパラメータ名と値の組合せを指定するだけです。

aws cloudformation update-stack --stack-name Hoge-Stack --template-body file://hoge.yaml --capabilities CAPABILITY_NAMED_IAM --parameters ParameterKey=ModifyStackDate,ParameterValue=201906030600

実行結果

Lambda-backed カスタムリソースでLambdaのBoto3を自動で最新化する」で書いた、毎回最新化したいLambda Layerで試してみました。
以下のように、説明文に毎回任意のパラメータ値を付加することで、変更扱いとなります。
image.png

超簡単にCloudFormationのスタック内にある特定のリソースだけを変更扱いにできました。
超地味な方法ですが、Lambda-backed カスタムリソースで毎回実行させたい処理がある場合に、超簡単に威力を発揮します。

7
2
2

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
7
2