何
- CloudFormationテンプレートについて、文法を勉強したので小さな構成でメモする。
- EC2インスタンスをひとつ立てて、各文法でOutputsすることで動作を確認している。
- 全体的に、思い出し用のとっかかり程度の内容です。
テンプレート
- リージョンは「バージニア北部」で実施する想定で書いている。
template.yaml
---
# 任意の Mappings セクションでは、キーと名前付きの一連の値とが対応付けられます。
Mappings:
RegionMap:
us-east-1:
Name1: Value01
Name2: Value02
other:
Name1: Value03
Name2: Value04
# オプションの Parameters セクションを使用して、テンプレートをカスタマイズします。
# パラメーターを使用すると、スタックを作成または更新するたびにテンプレートにカスタム値を入力できます。
Parameters:
EnvType:
Description: Environment type.
Default: test
Type: String
AllowedValues:
- prod
- test
ConstraintDescription: must specify prod or test.
# オプションの Conditions セクションには、エンティティが作成または設定される状況を定義する文が含まれています。
Conditions:
CreateProdResources: !Equals [ !Ref EnvType, prod ]
# 必須の Resources セクションでは、スタックに含める AWS リソース (Amazon EC2 インスタンスや Amazon S3 バケットなど) を宣言します。
Resources:
MyInstance:
Type: AWS::EC2::Instance
Properties:
AvailabilityZone: us-east-1a
ImageId: ami-a4c7edb2
InstanceType: t2.micro
# オプションの Outputs セクションは、他のスタックにインポートする (クロススタック参照を作成)、応答として返す (スタック呼び出しについて記述)、
# または、AWS CloudFormation コンソールで表示する出力値を宣言します。
Outputs:
# 組み込み関数 Ref は、指定したパラメータまたはリソースの値を返します。
ByRef:
Description: Ref
Value: !Ref MyInstance
# Export: クロススタック参照にエクスポートされるリソース出力の名前。
Export:
Name: MyInstanceId
# Fn::GetAtt 組み込み関数は、テンプレートのリソースから属性の値を返します
ByGetAtt:
Description: GetAtt
Value: !GetAtt MyInstance.AvailabilityZone
# 組み込み関数 Fn::Sub は特定した値の入力文字列にある変数の代わりになります。
BySub:
Description: Sub
Condition: CreateProdResources
Value: !Sub
- ${A}-${B}
- { A: !FindInMap [RegionMap, !Ref "AWS::Region", Name1], B: !Ref MyInstance }
# 組み込み関数 Fn::Join は、一連の値を特定の区切り文字で区切って 1 つの値に追加します。
ByJoin:
Description: Join
Value: !Join [ ":", [ a, b, z ] ]
出力
メモ
- パラメータはRefで参照する。
- exportはこの例では必要なかったが、文法の確認用に行った(※Nameはリージョン内で一意である必要がある)
- RefとGetAttの違いが分かりにくかったが、リソースリファレンスで該当する項目の戻り値をみると違いや属性の種類がわかった。
- 完全名関数と短縮形では、文法が結構違う。
Fn::GetAtt: [ logicalNameOfResource, attributeName ]
!GetAtt logicalNameOfResource.attributeName