3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【備忘録】Ref関数・Sub関数・GetAtt関数

Last updated at Posted at 2024-11-01

Ref関数・Sub関数・GetAtt関数の違いを理解する

まず、Ref関数・Sub関数・GetAtt関数の違いを覚えます。

次にRef関数はそのリソースのキーっぽいものを返す故にリソースから他のリソースが読めることと、

Sub関数は文字列結合に使えることを意識する。

Ref・Sub関数を使うと、パラメータやリソースを変数のように参照できます。

AWS公式 - Ref関数

AWS公式 - Sub関数

作ったリソースから、インスタンスIDとかではなく特定の属性値を参照する場合は、

GetAtt関数を使います。

AWS公式 - GetAtt関数

Ref関数・Sub関数・GetAtt関数

※ パラメータは別ファイルの JSON 形式で定義し、その他の基本設定は YAML を軸に記述しています。
これにより、パラメータの値を変更する際には JSON ファイルを更新するだけで済み、YAML の可読性やメンテナンス性も確保できます。

!Ref

パラメーターから取るときは、そのまま値をとる

同ファイルのParameters:,そしてparameters.jsonファイルを作りParameters のValueを設定する事(戻り値)で、下記のように変数として使用する事ができる。

Parameters:
  SystemName:
    Type: String
    
parameters.json
{
    "Parameters": [
        {
            "ParameterKey": "SystemName",
            "ParameterValue": "First"
        }
    ]
}

Parameters を変数として使用する

      Tags: 
        - Key: SystemName
          Value: !Ref SystemName
  • これでTagのValueにFirstが入る

!Sub

  • Parametersを結合して使いたいときに使用する
Parameters:
  SystemName:
    Type: String
  EnvType:
    Type: String
parameters.json
{
    "Parameters": [
        {
            "ParameterKey": "SystemName",
            "ParameterValue": "First"
        },
        {
            "ParameterKey": "EnvType",
            "ParameterValue": "dev"
        }
    ]
}
Tags: 
	- Key: Name
    Value: !Sub
	    - ${SystemName}-${EnvType}-ec2-bastion
	    - {SystemName: !Ref SystemName, EnvType: !Ref EnvType}
            
- または -

Tags:
  - Key: Name
    Value: !Sub ${SystemName}-${EnvType}-ec2-bastion
  • これでTagのValueにFirst-dev-ec2-bationが入る

!GetAtt

!Refと!GetAttの違い

!Ref VPC などリソース名 => IDが返される

GetAttは○○の中の○○

!GetAtt VPC ⇒ ×
!GetAtt VPC.CiderBlock ⇒ ◎
!Ref VPC = GetAtt VPC.VpcId

  • !Ref はリソースの ID などの基本的な情報を取得するのに使います。
  • !GetAtt はリソースの特定の属性を取得するために使用し、柔軟にプロパティにアクセスできるため、構成の詳細な指定が必要な場合に便利です。

※GetAtt関数で取れる属性の種類は、リソースの種類によって変わります。
例えば先述のDynamoDBテーブルですが、

!GetAtt DynamoDBTable.TableName

とかできそうですがこれはできません。
テーブル名はRef関数で取るのが正解です。

Ref関数で何が返り、GetAttで何が取れるかは各リソースのタイプの公式ページをみなくてはわかりません。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?