CloudFormationの組み込み関数一覧

未分類

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 ]
  • 結果: IsProductiontrue の場合は t2.large を返し、false の場合は t2.micro を返します。

7. !Equals

  • 説明: 2つの値が等しいかどうかを比較します。条件式に使用されます。
  • 構文: !Equals [ value1, value2 ]
Conditions:
  IsProduction: !Equals [ !Ref EnvType, "prod" ]
  • 結果: EnvTypeprod であるかをチェック。

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" ] ]
  • 結果: EnvTypeprod ではない場合に true を返します。

12. !ImportValue

  • 説明: 他のスタックでエクスポートされた値を参照するための関数です。
  • 構文: !ImportValue SharedValueToImport
Resources:
  MyInstance:
    Type: AWS::EC2::Instance
    Properties:
      SecurityGroupIds:
        - !ImportValue MySharedSecurityGroup
  • 結果: 他のスタックでエクスポートされたセキュリティグループIDを取得します。

まとめ

AWS CloudFormationの組み込み関数を使用することで、テンプレートを動的かつ柔軟に作成することができます。!Ref!Joinなどの関数は、特定のリソースやパラメータの参照、文字列操作、条件分岐など、幅広いユースケースに対応しています。これらの関数を適切に組み合わせることで、より洗練されたテンプレートを作成し、効率的なインフラの管理が可能になります。

コメント

タイトルとURLをコピーしました