個人的に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: ...