AWS CloudFormationでは、組み込み関数(Intrinsic Functions) を使用して、テンプレート内のさまざまな値を動的に操作できます。これにより、リソースの設定やテンプレート全体の柔軟性が大幅に向上します。以下は代表的なCloudFormationの組み込み関数である!Ref
や!Join
を含む主要な関数の一覧とその解説です。
1. !Ref(Reference)
- 説明: 他のリソースやパラメータの値を参照するための関数です。
- 使用例:
- パラメータの参照:
!Ref
を使うと、テンプレート内で定義されたパラメータやリソースの論理IDを参照できます。 - 結果: パラメータの場合は値、リソースの場合はARNなどの物理IDが返されます。
Parameters:
InstanceType:
Type: String
Default: t2.micro
Resources:
EC2Instance:
Type: AWS::EC2::Instance
Properties:
InstanceType: !Ref InstanceType
2. !Join
- 説明: 文字列のリストを結合し、1つの文字列として返す関数です。区切り文字も指定できます。
- 構文:
!Join [ delimiter, [ list of values ] ]
delimiter
:各要素の間に入れる区切り文字(例:"-"
)。list of values
:結合する文字列のリスト。
Resources:
S3BucketName:
Type: AWS::S3::Bucket
Properties:
BucketName: !Join [ "-", [ "my-bucket", !Ref "AWS::Region", "production" ] ]
- 結果:
my-bucket-us-east-1-production
3. !Sub(Substitute)
- 説明: 変数を文字列内に挿入するための関数です。
${}
で変数を囲みます。 - 使用例: パラメータやリソースの参照を文字列内に挿入する場合に便利です。
Resources:
MyBucket:
Type: AWS::S3::Bucket
Properties:
BucketName: !Sub "${AWS::StackName}-bucket"
- 結果:
my-stack-bucket
4. !GetAtt(Get Attribute)
- 説明: あるリソースの属性を取得するための関数です。たとえば、リソースのARNやDNS名などが取得できます。
- 構文:
!GetAtt [ ResourceName, AttributeName ]
Resources:
MyEC2Instance:
Type: AWS::EC2::Instance
Properties:
InstanceType: t2.micro
Outputs:
InstancePublicDNS:
Value: !GetAtt [ MyEC2Instance, PublicDnsName ]
- 結果: EC2インスタンスのパブリックDNS名を取得。
5. !FindInMap
- 説明:
Mappings
セクションで定義されたマッピングの値を取得するための関数です。 - 構文:
!FindInMap [ MappingName, TopLevelKey, SecondLevelKey ]
Mappings:
RegionMap:
us-east-1:
HVM64: "ami-0abcdef1234567890"
us-west-1:
HVM64: "ami-0fedcba9876543210"
Resources:
MyInstance:
Type: AWS::EC2::Instance
Properties:
ImageId: !FindInMap [ RegionMap, !Ref "AWS::Region", HVM64 ]
- 結果: 指定されたリージョンのAMI IDを取得。
6. !If
- 説明: 条件付きで値を返す関数です。テンプレート内の
Conditions
セクションで定義された条件に基づいて動作します。 - 構文:
!If [ ConditionName, ValueIfTrue, ValueIfFalse ]
Conditions:
IsProduction: !Equals [ !Ref EnvType, "prod" ]
Resources:
MyInstance:
Type: AWS::EC2::Instance
Properties:
InstanceType: !If [ IsProduction, t2.large, t2.micro ]
- 結果:
IsProduction
がtrue
の場合はt2.large
を返し、false
の場合はt2.micro
を返します。
7. !Equals
- 説明: 2つの値が等しいかどうかを比較します。条件式に使用されます。
- 構文:
!Equals [ value1, value2 ]
Conditions:
IsProduction: !Equals [ !Ref EnvType, "prod" ]
- 結果:
EnvType
がprod
であるかをチェック。
8. !Select
- 説明: リストから特定のインデックスにある値を取得するための関数です。
- 構文:
!Select [ index, list ]
Resources:
MyInstance:
Type: AWS::EC2::Instance
Properties:
SecurityGroupIds:
- !Select [ 0, !Ref MySecurityGroups ]
- 結果:
MySecurityGroups
から最初のセキュリティグループIDを取得。
9. !And
- 説明: 複数の条件がすべて
true
の場合にtrue
を返す関数です。 - 構文:
!And [ condition1, condition2, ... ]
Conditions:
IsProduction: !Equals [ !Ref EnvType, "prod" ]
IsUSRegion: !Equals [ !Ref "AWS::Region", "us-east-1" ]
IsProdAndUSRegion: !And [ IsProduction, IsUSRegion ]
- 結果: 両方の条件が
true
ならtrue
を返します。
10. !Or
- 説明: 複数の条件のうち1つ以上が
true
の場合にtrue
を返す関数です。 - 構文:
!Or [ condition1, condition2, ... ]
Conditions:
IsProduction: !Equals [ !Ref EnvType, "prod" ]
IsStaging: !Equals [ !Ref EnvType, "staging" ]
IsProdOrStaging: !Or [ IsProduction, IsStaging ]
- 結果: どちらかの条件が
true
ならtrue
を返します。
11. !Not
- 説明: 条件が
false
ならtrue
を返す関数です。 - 構文:
!Not [ condition ]
Conditions:
IsNotProduction: !Not [ !Equals [ !Ref EnvType, "prod" ] ]
- 結果:
EnvType
がprod
ではない場合にtrue
を返します。
12. !ImportValue
- 説明: 他のスタックでエクスポートされた値を参照するための関数です。
- 構文:
!ImportValue SharedValueToImport
Resources:
MyInstance:
Type: AWS::EC2::Instance
Properties:
SecurityGroupIds:
- !ImportValue MySharedSecurityGroup
- 結果: 他のスタックでエクスポートされたセキュリティグループIDを取得します。
まとめ
AWS CloudFormationの組み込み関数を使用することで、テンプレートを動的かつ柔軟に作成することができます。!Ref
や!Join
などの関数は、特定のリソースやパラメータの参照、文字列操作、条件分岐など、幅広いユースケースに対応しています。これらの関数を適切に組み合わせることで、より洗練されたテンプレートを作成し、効率的なインフラの管理が可能になります。
コメント