0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

CloudFormationの関数!Refと!Subについてまとめてみる

Last updated at Posted at 2024-11-20

はじめに

CloudFormationテンプレートを書く際に組込関数を使用することでテンプレートをより柔軟かつ再現性を高くしてくれて構成管理を効率化できます。
実際にテンプレートで値を参照する際によく使用するRefとSubの違いについてまとめてみました。

RefとSubについて

!Ref

  • !Refは、指定したリソースやパラメータの値を参照するために使用

主な用途

リソースの物理IDを取得:
    例: AWS::EC2::InstanceではインスタンスIDを返す
    例: AWS::S3::Bucketではバケット名を返す
パラメータの値を取得:
    テンプレート内で定義したパラメータの値を取得

使用例

Parameters:
  MyBucketName:
    Type: String
    Default: "example-bucket"

Resources:
  S3Bucket:
    Type: AWS::S3::Bucket
    Properties:
      BucketName: !Ref MyBucketName
  • 上記の例ではMyBucketNameの値を!Refを使用して参照している

!Sub

  • !Subは、文字列をテンプレート化し、リソースの値やパラメータを埋め込むために使用

主な用途

文字列の組み立て:
    プレースホルダーを使って、値を埋め込んだ文字列を生成
リソースやパラメータの値の埋め込み:
    ${}形式でプレースホルダーを定義し、動的に値を挿入

使用例

Resources:
  S3Bucket:
    Type: AWS::S3::Bucket
    Properties:
      BucketName: !Sub "my-bucket-${AWS::Region}-${AWS::AccountId}"
  • 上の例ではリージョンとアカウントIDを含むバケット名を返しています

違いのまとめ

特徴 !Ref !Sub
基本用途 単純な値の参照 動的な文字列の生成
戻り値 物理IDやパラメータの値 プレースホルダーを埋め込んだ文字列
文字列の操作 不可 ${}形式で埋め込み可能
使用シンプルさ 簡単 若干複雑
動的生成の柔軟性 制限あり 柔軟

最後に

単純にパラメータやリソースを参照したいときは!Ref、値を埋め込んで複雑な文字列を作りたいときは!Subというように状況に応じて使い分けるのがよさそう

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?