Fn::Sub
組み込み関数 Fn::Sub
は、入力文字列の変数を、指定した値に置き換えます。テンプレートで、スタックを作成または更新するまで使用できない値を含むコマンドまたは出力を作成するために、この関数を使用できます。
宣言
以下のセクションでは、関数の構文を示します。
JSON
{ "Fn::Sub" : [
String
, {Var1Name
:Var1Value
,Var2Name
:Var2Value
} ] }
パラメーターのテンプレートパラメーター、リソースの論理 ID、またはリソース属性のみを置き換える場合、変数マップを指定しないでください。String
{ "Fn::Sub" :
String
}
YAML
完全関数名の構文:
Fn::Sub: -
String
-Var1Name
:Var1Value
Var2Name
:Var2Value
短縮形の構文:
!Sub -
String
-Var1Name
:Var1Value
Var2Name
:Var2Value
パラメーターのテンプレートパラメーター、リソースの論理 ID、またはリソース属性のみを置き換える場合、変数マップを指定しないでください。String
完全関数名の構文:
Fn::Sub:
String
短縮形の構文:
!Sub
String
パラメータ
String
-
実行時に、AWS CloudFormation が関連する値と置き換わる変数のある文字列。変数を
${
として書き込みます。変数は、テンプレートパラメーター名、リソースの論理 ID、リソース属性、またはキー/値マップの変数です。テンプレートパラメーター名、リソースの論理 ID、およびリソース属性のみを指定する場合、キー/値マップを指定しないでください。MyVarName
}テンプレートパラメータ名、または
${InstanceTypeParameter}
などのリソースの論理 ID を指定すると、CloudFormation はRef
組み込み関数を使用した場合と同じ値を返します。${MyInstance.PublicIp}
などのリソース属性を指定すると、CloudFormation はFn::GetAtt
組み込み関数を使用した場合と同じ値を返します。USD 記号と中括弧 (
${}
) をそのまま書き込むには、最初の中括弧の後に感嘆符 (!
) を追加します (${!
など)。CloudFormation は、このテキストをLiteral
}${
として解決します。Literal
} VarName
-
String
パラメーターに含めた変数の名前。 VarValue
-
実行時に CloudFormation が関連する変数の名前と置き換える値。
戻り値
CloudFormation は、すべての変数の値を置き換え、元の文字列を返します。
例
次の例では、Fn::Sub
関数を使用する方法を示します。
マッピング付き Fn::Sub
次の例では、${Domain}
変数を Ref
関数の結果の値と置き換えるためにマッピングを使用します。
JSON
{ "Name": { "Fn::Sub": [ "www.${Domain}", { "Domain": { "Ref": "RootDomainName" } } ] } }
YAML
Name: !Sub - 'www.${Domain}' - Domain: !Ref RootDomainName
マッピングなし Fn::Sub
次の例では、VPC の Amazon リソースネーム (ARN) を作成するために、AWS::Region
、AWS::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::StackName
と AWS::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
パラメータに対して、以下の関数を使用できます。