CloudFormation の Outputs
セクションで Elastic IP (EIP) の情報を出力する際に、!Ref !Sub ${EnvName}-xxx
を !GetAtt
を使って書き換えたい場合、以下のように進めます。
ポイント:
!GetAtt
はリソースの属性値を取得します。- リソースの論理IDはテンプレート内で静的に定義されており、
!Sub
や他の関数で動的に生成することはできません。 !GetAtt
の構文は!GetAtt [リソース論理ID, 属性名]
です。
手順:
- リソースの論理IDを直接使用する:
- まず、EIP リソースの論理IDを確認します。例えば、
MyEIP
とします。 !GetAtt
を使って、そのリソースの特定の属性(例えばPublicIp
)を取得します。
- まず、EIP リソースの論理IDを確認します。例えば、
- Outputs セクションの書き換え:
Outputs: EipOutput: Value: !GetAtt MyEIP.PublicIp
- これにより、指定した EIP リソースのパブリックIPアドレスを出力します。
注意点:
- リソースの論理IDは動的に変更できない:
!Sub
を使ってリソースの論理IDを動的に生成することはできません。- そのため、
!GetAtt
内で!Sub ${EnvName}-xxx
のようにリソース名を組み立てることはできません。
- リソースが他のスタックにある場合:
- 別のスタックからリソースを参照する場合は、スタックのエクスポート/インポート機能(
Export
とImportValue
)を使用します。
- 別のスタックからリソースを参照する場合は、スタックのエクスポート/インポート機能(
例:
Resources:
MyEIP:
Type: AWS::EC2::EIP
Properties:
Domain: vpc
Tags:
- Key: Name
Value: !Sub '${EnvName}-xxx'
Outputs:
EipPublicIp:
Value: !GetAtt MyEIP.PublicIp
これにより、MyEIP
リソースのパブリックIPアドレスを出力できます。
まとめ:
!Ref !Sub ${EnvName}-xxx
を !GetAtt
で書き換える場合、リソースの論理IDを直接指定し、その属性を取得する形にします。動的にリソースの論理IDを生成することはできないため、テンプレート内で使用している論理IDを正確に指定する必要があります。
コメント