

Ini adalah *Panduan Referensi CloudFormation Template* baru. Harap perbarui bookmark dan tautan Anda. Untuk bantuan memulai CloudFormation, lihat [Panduan AWS CloudFormation Pengguna](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html).

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

# `Fn::Sub`
<a name="intrinsic-function-reference-sub"></a>

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
<a name="intrinsic-function-reference-sub-declaration"></a>

Bagian berikut menunjukkan sintaks fungsi ini.

### JSON
<a name="intrinsic-function-reference-sub-syntax.json"></a>

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

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

```
{ "Fn::Sub" : String }
```

### YAML
<a name="intrinsic-function-reference-sub-syntax.yaml"></a>

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 daya IDs, 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
<a name="w2aac24c66b7"></a>

`String`  
String dengan variabel yang CloudFormation menggantikan nilai terkait saat runtime. Tulis variabel sebagai `${MyVarName}`. Variabel dapat berupa nama parameter template, logika sumber daya IDs, atribut sumber daya, atau variabel dalam peta nilai-kunci. Jika Anda hanya menentukan nama parameter template, logika sumber daya IDs, dan atribut sumber daya, jangan tentukan peta nilai kunci.  
Jika Anda menentukan nama parameter template atau sumber daya logis IDs, 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}`  
Jika Anda menggunakan template peluncuran, tambahkan garis miring terbalik `\` sebelum tanda dolar, seperti, jika tidak`\${!Literal}`, literal akan diselesaikan sebagai string kosong.

`VarName`  
Nama variabel yang Anda sertakan dalam parameter `String`.

`VarValue`  
Nilai yang CloudFormation menggantikan nama variabel terkait saat runtime.

## Nilai yang dikembalikan
<a name="w2aac24c66b9"></a>

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

## Contoh
<a name="w2aac24c66c11"></a>

Contoh berikut menunjukkan cara menggunakan fungsi `Fn::Sub`.

### Gunakan `Fn::Sub` tanpa peta nilai kunci
<a name="w2aac24c66c11b5"></a>

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
<a name="intrinsic-function-reference-sub-example-1.json"></a>

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

#### YAML
<a name="intrinsic-function-reference-sub-example-1.yaml"></a>

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

### Gunakan `Fn::Sub` dengan peta nilai kunci
<a name="w2aac24c66c11b7"></a>

Dalam contoh ini, nama `WWWBucket` sumber daya dibuat secara dinamis dengan peta nilai kunci. `Fn::Sub`Fungsi 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
<a name="intrinsic-function-reference-sub-example-2.json"></a>

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

#### YAML
<a name="intrinsic-function-reference-sub-example-2.yaml"></a>

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

### Gunakan beberapa variabel untuk membangun ARNs
<a name="w2aac24c66c11b9"></a>

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

#### JSON
<a name="intrinsic-function-reference-sub-example-3.json"></a>

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

#### YAML
<a name="intrinsic-function-reference-sub-example-3.yaml"></a>

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

### Lulus nilai parameter dalam skrip data pengguna
<a name="w2aac24c66c11c11"></a>

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

#### JSON
<a name="intrinsic-function-reference-sub-example.json"></a>

Agar mudah dibaca, contoh JSON menggunakan fungsi `Fn::Join` untuk memisahkan setiap perintah, bukannya menentukan seluruh skrip data pengguna dalam nilai string tunggal.

```
"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
<a name="intrinsic-function-reference-sub-example.yaml"></a>

Contoh YAML 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
<a name="w2aac24c66c11c13"></a>

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
<a name="intrinsic-function-reference-sub-example-5.json"></a>

```
{
  "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
<a name="intrinsic-function-reference-sub-example-5.yaml"></a>

```
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
<a name="intrinsic-function-reference-sub-supported-functions"></a>

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

Untuk parameter `VarName` dan `VarValue`, Anda dapat menggunakan fungsi berikut:
+ [`Fn::Base64`](intrinsic-function-reference-base64.md)
+ [`Fn::FindInMap`](intrinsic-function-reference-findinmap.md)
+ [`Fn::GetAtt`](intrinsic-function-reference-getatt.md)
+ [`Fn::GetAZs`](intrinsic-function-reference-getavailabilityzones.md)
+ [`Fn::If`](intrinsic-function-reference-conditions.md#intrinsic-function-reference-conditions-if)
+ [`Fn::ImportValue`](intrinsic-function-reference-importvalue.md)
+ [`Fn::Join`](intrinsic-function-reference-join.md)
+ [`Fn::Select`](intrinsic-function-reference-select.md)
+ [`Fn::Sub`](#intrinsic-function-reference-sub)
+ [`Ref`](intrinsic-function-reference-ref.md)