AWS CloudFormation
ユーザーガイド (API バージョン 2010-05-15)

Fn::Sub

この組み込み関数 Fn::Sub は特定した値の入力文字列にある変数の代わりになります。テンプレートで、スタックを作成または更新するまで使用できない値を含むコマンドまたは出力を作成するために、この関数を使用できます。

宣言

以下のセクションでは、関数の構文を示します。

JSON

{ "Fn::Sub" : [ String, { Var1Name: Var1Value, Var2Name: Var2Value } ] }

String パラメーターのテンプレートパラメーター、リソースの論理 ID、またはリソース属性のみを置き換える場合、変数マップを指定しないでください。

{ "Fn::Sub" : String }

YAML

完全名関数の構文:

Fn::Sub: - String - Var1Name: Var1Value Var2Name: Var2Value

短縮形の構文:

!Sub - String - Var1Name: Var1Value Var2Name: Var2Value

String パラメーターのテンプレートパラメーター、リソースの論理 ID、またはリソース属性のみを置き換える場合、変数マップを指定しないでください。

完全名関数の構文:

Fn::Sub: String

短縮形の構文:

!Sub String

パラメータ

String

実行時に、AWS CloudFormation が関連する値と置き換わる変数のある文字列。変数を ${MyVarName} として書き込みます。変数は、テンプレートパラメーター名、リソースの論理 ID、リソース属性、またはキー/値マップの変数です。テンプレートパラメーター名、リソースの論理 ID、およびリソース属性のみを指定する場合、キー/値マップを指定しないでください。

テンプレートパラメータ名、または ${InstanceTypeParameter} などのリソースの論理 ID を指定すると、AWS CloudFormation は Ref 組み込み関数を使用した場合と同じ値を返します。${MyInstance.PublicIp} などのリソース属性を指定すると、AWS CloudFormation は Fn::GetAtt 組み込み関数を使用した場合と同じ値を返します。

ドル記号と中括弧 (${}) をそのまま書き込むには、最初の中括弧の後に感嘆符 (!) を追加します (${!Literal} など)。AWS CloudFormation では、このテキストは ${Literal} のようになります。

VarName

String パラメーターに含めた変数の名前。

VarValue

実行時に AWS CloudFormation が関連する変数の名前と置き換える値。

戻り値

AWS CloudFormation は、すべての変数の値を置き換え、元の文字列を返します。

次の例では、Fn::Sub 関数を使用する方法を示します。

マッピングで Fn::Sub

次の例では、${Domain} 変数を Ref 関数の結果の値と置き換えるためにマッピングを使用します。

JSON

{ "Fn::Sub": [ "www.${Domain}", { "Domain": {"Ref" : "RootDomainName" }} ]}

YAML

Name: !Sub - www.${Domain} - { Domain: !Ref RootDomainName }

 

マッピングなしの Fn::Sub

次の例では、VPC の Amazon リソースネーム (ARN) を作成するために、AWS::RegionAWS::AccountId 擬似パラメータおよびvpc リソース論理 ID と共に Fn::Sub を使用します。

JSON

{ "Fn::Sub": "arn:aws:ec2:${AWS::Region}:${AWS::AccountId}:vpc/${vpc}" }

YAML

!Sub 'arn:aws:ec2:${AWS::Region}:${AWS::AccountId}:vpc/${vpc}'

 

UserData コマンド

以下の例では、Fn::Sub を使用して、実行時に実際のスタック名とリージョンに AWS::StackNameAWS::Region 擬似パラメータを置き換えます。

JSON

読みやすくするため、JSON の例では、ユーザーデータのスクリプト全体を単一文字列値で指定する代わりに、Fn::Join 関数を使用して各コマンドを分けています。

"UserData": { "Fn::Base64": { "Fn::Join": ["\n", [ "#!/bin/bash -xe", "yum update -y aws-cfn-bootstrap", { "Fn::Sub": "/opt/aws/bin/cfn-init -v --stack ${AWS::StackName} --resource LaunchConfig --configsets wordpress_install --region ${AWS::Region}" }, { "Fn::Sub": "/opt/aws/bin/cfn-signal -e $? --stack ${AWS::StackName} --resource WebServerGroup --region ${AWS::Region}" }]] }}

YAML

YAML の例では、ユーザーデータスクリプトを指定してリテラルブロックを使用しています。

UserData: Fn::Base64: !Sub | #!/bin/bash -xe yum update -y aws-cfn-bootstrap /opt/aws/bin/cfn-init -v --stack ${AWS::StackName} --resource LaunchConfig --configsets wordpress_install --region ${AWS::Region} /opt/aws/bin/cfn-signal -e $? --stack ${AWS::StackName} --resource WebServerGroup --region ${AWS::Region}

サポートされている関数

String パラメータには、関数を使用できません。文字列値を指定する必要があります。

VarName および VarValue パラメータに対して、以下の関数を使用できます。

  • Fn::Base64

  • Fn::FindInMap

  • Fn::GetAtt

  • Fn::GetAZs

  • Fn::If

  • Fn::ImportValue

  • Fn::Join

  • Fn::Select

  • Ref