個人的にCloudformation(yaml)でよく書くやつメモ

はじめに

私がCloudformation用のyamlテンプレート書くときにたびたび忘れるやつをメモしておきます。

パラメータ並び替え

Cloudformation スタック作成時にパラメータ入力を求めると、並びがランダムになってしまう。
Metadata の機能を使って並び替えを行う。

Parameters: 
  test1:
    Description: test1 dayo
    Type: String
    AllowedValues: 
      - 1
      - 2
    Default: 1
  test2:
    Description: test2 dayo
    Type: Number
    Default: 1
  test3:
    Description: test3 dayo
    Type: AWS::EC2::SecurityGroup::Id
    Default: ""
Metadata:
  AWS::CloudFormation::Interface:
    ParameterGroups:
      - 
        Parameters:
          - test1
          - test2
          - test3
Resources:
  ...
Subの使い方

Sub は文字列の中で使う変数のような関数。
!Sub ${String}-test みたいに使う。この場合のStringに入れる文字列としてよく使うものはパラメータ、リソースの論理 ID・リソース属性。

Parameters: 
  test:
    Description: test dayo
    Type: Number
    Default: 1
Resources: 
  S3Bucket:
    Type: AWS::S3::Bucket
    Properties: 
      ...
  リソース例:
    Type: AWS::xxx::xxx
    Properties:
      入力したパラメータ使用: !Sub ap-northeast-${test}
      疑似パラメータ使用: !Sub com.amazonaws.${AWS::Region}.s3
      他のリソースID使用: !Sub arn:aws:s3:::${S3Bucket}
      他のリソース属性使用:!Sub ${S3Bucket.Arn} = !GetAtt S3Bucket.Arn 1つ上と同じ
UserData コマンド

UserData をテンプレートに仕込むときは !Sub のあとに | が必要。
また、!Base64 !Sub のように省略した関数の連続はNG。Fn::Base64: !Sub のようにどちらかは省略しないで書く。(参考)

UserData:
  Fn::Base64:
    !Sub |
      #!/bin/bash
      ...
その他

なんか気づいたら追記します。
DeletionPolicy
DependsOn → お互いに依存しあうとエラーになるので注意。

Resources: 
  リソース例:
    Type: AWS::xxx::xxx
    DeletionPolicy: Retain # スタック消してもリソースが残ってほしいときに記載する。
    DependsOn: # 記載すると指定したリソースが作成された後にこのリソース作成が行われる。
      - SubnetA
      - SubnetD
    Properties:
      ...