

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

# Pisahkan template menjadi potongan-potongan yang dapat digunakan kembali menggunakan tumpukan bersarang
<a name="using-cfn-nested-stacks"></a>

Seiring pertumbuhan infrastruktur Anda, Anda mungkin menemukan diri Anda berulang kali membuat konfigurasi sumber daya yang identik di beberapa templat. Untuk menghindari redundansi ini, Anda dapat memisahkan konfigurasi umum ini menjadi template khusus. Kemudian, Anda dapat menggunakan [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-cloudformation-stack.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-cloudformation-stack.html)sumber daya di templat lain untuk mereferensikan templat khusus ini, membuat tumpukan bersarang.

Misalnya, Anda memiliki konfigurasi penyeimbang beban yang Anda gunakan untuk sebagian besar tumpukan Anda. Alih-alih menyalin dan menempelkan konfigurasi yang sama ke dalam templat, Anda dapat membuat templat khusus untuk penyeimbang beban. Kemudian, Anda dapat mereferensikan template ini dari dalam template lain yang memerlukan konfigurasi penyeimbang beban yang sama.

Tumpukan bersarang sendiri dapat berisi tumpukan bersarang lainnya, menghasilkan hierarki tumpukan, seperti yang ditunjukkan pada diagram di bawah ini. *Tumpukan root adalah tumpukan* tingkat atas yang menjadi milik semua tumpukan bersarang. Setiap tumpukan bersarang memiliki tumpukan induk langsung. Untuk tingkat pertama tumpukan bersarang, tumpukan root juga merupakan tumpukan induk.
+ Tumpukan A adalah tumpukan akar untuk seluruh tumpukan nest dalam hierarki.
+ Untuk tumpukan B, tumpukan A adalah tumpukan induk sekaligus tumpukan akar.
+ Untuk tumpukan D, tumpukan C adalah tumpukan induk; sedangkan untuk tumpukan C, tumpukan B adalah tumpukan induk.

![\[Tumpukan nest, yang dibuat sebagai bagian dari tumpukan lain, memiliki tumpukan induk langsung, dan tumpukan akar tingkat atas.\]](http://docs.aws.amazon.com/id_id/AWSCloudFormation/latest/UserGuide/images/cfn-console-nested-stacks.png)


**Topics**
+ [Sebelum dan sesudah contoh pemisahan template](#create-nested-stack-template)
+ [Contoh arsitektur tumpukan bersarang](#nested-stack-examples)
+ [Melakukan operasi tumpukan pada tumpukan bersarang](#perform-stack-operations-on-nested-stacks)
+ [Informasi Terkait](#nested-stacks-related-information)

## Sebelum dan sesudah contoh pemisahan template
<a name="create-nested-stack-template"></a>

Contoh ini menunjukkan bagaimana Anda dapat mengambil satu CloudFormation template besar dan mengaturnya kembali menjadi desain yang lebih terstruktur dan dapat digunakan kembali menggunakan templat bersarang. Awalnya, template “Sebelum tumpukan bersarang” menunjukkan semua sumber daya yang ditentukan dalam satu file. Ini bisa menjadi berantakan dan sulit dikelola seiring bertambahnya jumlah sumber daya. Template “After nesting stacks” membagi sumber daya menjadi template yang lebih kecil dan terpisah. Setiap tumpukan bersarang menangani serangkaian sumber daya terkait tertentu, membuat struktur keseluruhan lebih terorganisir dan lebih mudah dirawat.


| Sebelum tumpukan bersarang | Setelah tumpukan bersarang | 
| --- | --- | 
| <pre>AWSTemplateFormatVersion: 2010-09-09<br />Parameters:<br />  InstanceType:<br />    Type: String<br />    Default: t2.micro<br />    Description: The EC2 instance type<br />  <br />  Environment:<br />    Type: String<br />    Default: Production<br />    Description: The deployment environment<br /><br />Resources:<br />  MyEC2Instance:<br />    Type: AWS::EC2::Instance<br />    Properties:<br />      ImageId: ami-1234567890abcdef0<br />      InstanceType: !Ref InstanceType<br /><br />  MyS3Bucket:<br />    Type: AWS::S3::Bucket</pre> | <pre>AWSTemplateFormatVersion: 2010-09-09<br />Resources:<br />  MyFirstNestedStack:<br />    Type: AWS::CloudFormation::Stack<br />    Properties:<br />      TemplateURL: https://s3.amazonaws.com/amzn-s3-demo-bucket/first-nested-stack.yaml<br />      Parameters:<br />        # Pass parameters to the nested stack if needed<br />        InstanceType: t3.micro<br /><br />  MySecondNestedStack:<br />    Type: AWS::CloudFormation::Stack<br />    Properties:<br />      TemplateURL: https://s3.amazonaws.com/amzn-s3-demo-bucket/second-nested-stack.yaml<br />      Parameters:<br />        # Pass parameters to the nested stack if needed<br />        Environment: Testing<br />    DependsOn: MyFirstNestedStack</pre> | 

## Contoh arsitektur tumpukan bersarang
<a name="nested-stack-examples"></a>

Bagian ini menunjukkan arsitektur tumpukan bersarang yang terdiri dari tumpukan tingkat atas yang mereferensikan tumpukan bersarang. Tumpukan bersarang menerapkan fungsi Lambda Node.js, menerima nilai parameter dari tumpukan tingkat atas, dan mengembalikan output yang diekspos melalui tumpukan tingkat atas.

**Topics**
+ [Langkah 1: Buat template untuk tumpukan bersarang di sistem lokal Anda](#create-a-nested-stack-template)
+ [Langkah 2: Buat template untuk tumpukan tingkat atas pada sistem lokal Anda](#create-a-nested-stack-parent-template)
+ [Langkah 3: Package dan deploy template](#create-a-nested-stack-parent-template)

### Langkah 1: Buat template untuk tumpukan bersarang di sistem lokal Anda
<a name="create-a-nested-stack-template"></a>

Contoh berikut menunjukkan format template stack bersarang.

#### YAML
<a name="nested-stack-child-example.yaml"></a>

```
 1. AWSTemplateFormatVersion: 2010-09-09
 2. Description: Nested stack template for Lambda function deployment
 3. Parameters:
 4.   MemorySize:
 5.     Type: Number
 6.     Default: 128
 7.     MinValue: 128
 8.     MaxValue: 10240
 9.     Description: Lambda function memory allocation (128-10240 MB)
10. Resources:
11.   LambdaFunction:
12.     Type: AWS::Lambda::Function
13.     Properties:
14.       FunctionName: !Sub "${AWS::StackName}-Function"
15.       Runtime: nodejs18.x
16.       Handler: index.handler
17.       Role: !GetAtt LambdaExecutionRole.Arn
18.       Code:
19.         ZipFile: |
20.           exports.handler = async (event) => {
21.             return {
22.               statusCode: 200,
23.               body: JSON.stringify('Hello from Lambda!')
24.             };
25.           };
26.       MemorySize: !Ref MemorySize
27.   LambdaExecutionRole:
28.     Type: AWS::IAM::Role
29.     Properties:
30.       AssumeRolePolicyDocument:
31.         Version: '2012-10-17'
32.         Statement:
33.           - Effect: Allow
34.             Principal:
35.               Service: lambda.amazonaws.com
36.             Action: sts:AssumeRole
37.       ManagedPolicyArns:
38.         - 'arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole'
39. Outputs:
40.   LambdaArn:
41.     Description: ARN of the created Lambda function
42.     Value: !GetAtt LambdaFunction.Arn
```

### Langkah 2: Buat template untuk tumpukan tingkat atas pada sistem lokal Anda
<a name="create-a-nested-stack-parent-template"></a>

Contoh berikut menunjukkan format template tumpukan tingkat atas dan [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-cloudformation-stack.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-cloudformation-stack.html)sumber daya yang mereferensikan tumpukan yang Anda buat pada langkah sebelumnya.

#### YAML
<a name="nested-stack-parent-example.yaml"></a>

```
 1. AWSTemplateFormatVersion: 2010-09-09
 2. Description: Top-level stack template that deploys a nested stack
 3. Resources:
 4.   NestedStack:
 5.     Type: AWS::CloudFormation::Stack
 6.     Properties:
 7.       TemplateURL: /path_to_template/nested-template.yaml
 8.       Parameters:
 9.         MemorySize: 256
10. Outputs:
11.   NestedStackLambdaArn:
12.     Description: ARN of the Lambda function from nested stack
13.     Value: !GetAtt NestedStack.Outputs.LambdaArn
```

### Langkah 3: Package dan deploy template
<a name="create-a-nested-stack-parent-template"></a>

**catatan**  
Saat bekerja dengan templat secara lokal, AWS CLI **package** perintah dapat membantu Anda menyiapkan templat untuk penerapan. Ini secara otomatis menangani unggahan artefak lokal ke Amazon S3 (`TemplateURL`termasuk) dan menghasilkan file template baru dengan referensi yang diperbarui ke lokasi S3 ini. Untuk informasi selengkapnya, lihat [Unggah artefak lokal ke bucket S3 dengan AWS CLI](using-cfn-cli-package.md). 

Selanjutnya, Anda dapat menggunakan [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/package.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/package.html)perintah untuk mengunggah template bersarang ke bucket Amazon S3.

```
aws cloudformation package \
  --s3-bucket amzn-s3-demo-bucket \
  --template /path_to_template/top-level-template.yaml \
  --output-template-file packaged-template.yaml \
  --output json
```

Perintah menghasilkan template baru di jalur yang ditentukan oleh`--output-template-file`. Ini menggantikan `TemplateURL` referensi dengan lokasi Amazon S3, seperti yang ditunjukkan di bawah ini.

**Template yang dihasilkan**

```
AWSTemplateFormatVersion: 2010-09-09
Description: Top-level stack template that deploys a nested stack
Resources:
  NestedStack:
    Type: AWS::CloudFormation::Stack
    Properties:
      TemplateURL: https://s3.us-west-2.amazonaws.com/amzn-s3-demo-bucket/8b3bb7aa7abfc6e37e2d06b869484bed.template
      Parameters:
        MemorySize: 256
Outputs:
  NestedStackLambdaArn:
    Description: ARN of the Lambda function from nested stack
    Value:
      Fn::GetAtt:
      - NestedStack
      - Outputs.LambdaArn
```

Setelah Anda menjalankan **package** perintah, Anda dapat menggunakan template yang diproses menggunakan [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/deploy/](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/deploy/)perintah. Untuk tumpukan bersarang yang berisi sumber daya IAM, Anda harus mengakui kemampuan IAM dengan menyertakan opsi. `--capabilities`

```
aws cloudformation deploy \
  --template-file packaged-template.yaml \
  --stack-name stack-name \
  --capabilities CAPABILITY_NAMED_IAM
```

## Melakukan operasi tumpukan pada tumpukan bersarang
<a name="perform-stack-operations-on-nested-stacks"></a>

Saat bekerja dengan tumpukan bersarang, Anda harus menanganinya dengan hati-hati selama operasi. Operasi tumpukan tertentu, seperti pembaruan tumpukan, harus dimulai dari tumpukan root daripada dilakukan langsung pada tumpukan bersarang. Saat Anda memperbarui tumpukan root, hanya tumpukan bersarang dengan perubahan templat yang akan diperbarui. 

Selain itu, keberadaan tumpukan bersarang dapat memengaruhi operasi pada tumpukan root. Misalnya, jika satu tumpukan bersarang macet dalam `UPDATE_ROLLBACK_IN_PROGRESS` status, tumpukan root akan menunggu hingga tumpukan bersarang itu menyelesaikan rollback-nya sebelum melanjutkan. Sebelum melanjutkan dengan operasi pembaruan, pastikan bahwa Anda memiliki izin IAM untuk membatalkan pembaruan tumpukan jika itu kembali. Untuk informasi selengkapnya, lihat [Kontrol CloudFormation akses dengan AWS Identity and Access Management](control-access-with-iam.md).

Gunakan prosedur berikut untuk menemukan tumpukan root dan tumpukan bersarang.

**Untuk melihat tumpukan akar suatu tumpukan nest**

1. Masuk ke Konsol Manajemen AWS dan buka CloudFormation konsol di [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/).

1. Pada halaman **Stacks**, pilih nama tumpukan bersarang yang ingin Anda lihat tumpukan root.

   Tumpukan bersarang menampilkan **NESTED di atas nama tumpukannya**.

1. Pada tab **Stack info**, di bagian **Ikhtisar**, pilih nama tumpukan yang terdaftar sebagai **tumpukan Root**.

**Untuk melihat tumpukan nest yang dimiliki suatu tumpukan akar**

1. Dari tumpukan root yang tumpukan bersarangnya ingin Anda lihat, pilih tab **Resources**.

1. Di kolom **Type**, cari sumber daya tipe **AWS::CloudFormation::Stack**.

## Informasi Terkait
<a name="nested-stacks-related-information"></a>
+ [Membuat nest tumpukan yang ada](resource-import-nested-stacks.md)
+ [Memahami perilaku pembaruan sumber daya tumpukan](using-cfn-updating-stacks-update-behaviors.md)
+ [Lanjutkan memutar kembali dari pembaruan tumpukan bersarang yang gagal](using-cfn-updating-stacks-continueupdaterollback.md#nested-stacks)
+ [Kegagalan rollback tumpukan bersarang](troubleshooting.md#troubleshooting-errors-nested-stacks-are-stuck)