Fn::Sub - AWS CloudFormation

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Fn::Sub

Fungsi instrinsik Fn::Sub menggantikan variabel dalam string input dengan nilai-nilai yang Anda tentukan. Dalam templat Anda, Anda dapat menggunakan fungsi ini untuk membuat perintah atau output yang menyertakan nilai-nilai yang tidak tersedia sampai Anda membuat atau memperbarui tumpukan.

Pernyataan

Bagian berikut menunjukkan sintaks fungsi ini.

JSON

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

Jika Anda hanya mengganti parameter templat, logika sumber dayaIDs, atau atribut sumber daya dalam String parameter, jangan tentukan peta variabel.

{ "Fn::Sub" : String }

YAML

Sintaks untuk nama fungsi penuh:

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

Sintaks untuk bentuk pendek:

!Sub - String - Var1Name: Var1Value Var2Name: Var2Value

Jika Anda hanya mengganti parameter templat, logika sumber dayaIDs, atau atribut sumber daya dalam String parameter, jangan tentukan peta variabel.

Sintaks untuk nama fungsi penuh:

Fn::Sub: String

Sintaks untuk bentuk pendek:

!Sub String

Parameter

String

Sebuah string dengan variabel yang AWS CloudFormation pengganti dengan nilai terkait mereka saat runtime. Tulis variabel sebagai ${MyVarName}. Variabel dapat berupa nama parameter template, logika sumber dayaIDs, atribut sumber daya, atau variabel dalam peta nilai-kunci. Jika Anda hanya menentukan nama parameter template, logika sumber dayaIDs, dan atribut sumber daya, jangan tentukan peta nilai kunci.

Jika Anda menentukan nama parameter template atau sumber daya logisIDs, seperti${InstanceTypeParameter}, CloudFormation mengembalikan nilai yang sama seperti jika Anda menggunakan fungsi Ref intrinsik. Jika Anda menentukan atribut sumber daya, seperti${MyInstance.PublicIp}, CloudFormation mengembalikan nilai yang sama seperti jika Anda menggunakan fungsi Fn::GetAtt intrinsik.

Untuk menulis tanda dolar dan kurawal kurawal (${}) secara harfiah, tambahkan tanda seru (!) setelah penjepit keriting terbuka, seperti. ${!Literal} CloudFormation menyelesaikan teks ini sebagai. ${Literal}

VarName

Nama variabel yang Anda sertakan dalam parameter String.

VarValue

Nilai yang CloudFormation menggantikan nama variabel terkait saat runtime.

Nilai yang dikembalikan

CloudFormation mengembalikan string asli, menggantikan nilai-nilai untuk semua variabel.

Contoh

Contoh berikut menunjukkan cara menggunakan fungsi Fn::Sub.

Gunakan Fn::Sub tanpa peta nilai kunci

Dalam contoh sederhana ini, deskripsi InstanceSecurityGroup sumber daya dibuat secara dinamis dengan parameter AWS::StackName semu. Misalnya, jika nama tumpukan adalah”VPC-EC2-ALB-Stack“, deskripsi yang dihasilkan adalah”SSH security group for VPC-EC2-ALB-Stack".

JSON

"InstanceSecurityGroup" : { "Type" : "AWS::EC2::SecurityGroup", "Properties" : { "GroupDescription" : {"Fn::Sub": "SSH security group for ${AWS::StackName}"} }}

YAML

InstanceSecurityGroup: Type: AWS::EC2::SecurityGroup Properties: GroupDescription: !Sub "SSH security group for ${AWS::StackName}"

Gunakan Fn::Sub dengan peta nilai kunci

Dalam contoh ini, nama WWWBucket sumber daya dibuat secara dinamis dengan peta nilai kunci. Fn::SubFungsi menggantikan ${Domain} string input www.${Domain} dengan nilai dari Ref fungsi yang mereferensikan RootDomainName parameter yang didefinisikan dalam template tumpukan yang sama. Misalnya, jika nama domain root adalah”mydomain.com“, nama yang dihasilkan untuk sumber daya ini adalah”www.mydomain.com".

JSON

"WWWBucket":{ "Type":"AWS::S3::Bucket", "Properties":{ "BucketName":{ "Fn::Sub":[ "www.${Domain}", { "Domain":{ "Ref":"RootDomainName" } } ] } } }

YAML

WWWBucket: Type: AWS::S3::Bucket Properties: BucketName: !Sub - 'www.${Domain}' - Domain: !Ref RootDomainName

Gunakan beberapa variabel untuk membangun ARNs

Contoh berikut menggunakan Fn::Sub parameter AWS::AccountId semu AWS::Region dan ID logis vpc sumber daya untuk membuat Amazon Resource Name (ARN) untuk file. VPC

JSON

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

YAML

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

Lulus nilai parameter dalam skrip data pengguna

Contoh berikut digunakan Fn::Sub untuk mengganti parameter AWS::StackName dan AWS::Region pseudo untuk nama tumpukan aktual dan Wilayah saat runtime.

JSON

Untuk keterbacaan, JSON contoh menggunakan Fn::Join fungsi untuk memisahkan setiap perintah, alih-alih menentukan seluruh skrip data pengguna dalam satu nilai string.

"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

YAMLContoh menggunakan blok literal untuk menentukan skrip data pengguna.

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}

Tentukan nilai bersyarat menggunakan pemetaan

Dalam contoh ini, nama myLogGroup sumber daya dibuat secara dinamis dengan mengganti log_group_name variabel dengan nilai yang dihasilkan dari fungsi. Fn::FindInMap

JSON

{ "Mappings": { "LogGroupMapping": { "Test": { "Name": "test_log_group" }, "Prod": { "Name": "prod_log_group" } } }, "Resources": { "myLogGroup": { "Type": "AWS::Logs::LogGroup", "Properties": { "LogGroupName": { "Fn::Sub": [ "cloud_watch_${log_group_name}", { "log_group_name": { "Fn::FindInMap": [ "LogGroupMapping", "Test", "Name" ] } } ] } } } } }

YAML

Mappings: LogGroupMapping: Test: Name: test_log_group Prod: Name: prod_log_group Resources: myLogGroup: Type: 'AWS::Logs::LogGroup' Properties: LogGroupName: !Sub - 'cloud_watch_${log_group_name}' - log_group_name: !FindInMap - LogGroupMapping - Test - Name

Fungsi yang didukung

Untuk parameter String, Anda tidak dapat menggunakan fungsi apapun. Anda harus menentukan nilai string.

Untuk parameter VarName dan VarValue, Anda dapat menggunakan fungsi berikut: