Pisahkan template menjadi potongan-potongan yang dapat digunakan kembali menggunakan tumpukan bersarang - AWS CloudFormation

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

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 AWS::CloudFormation::Stacksumber 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.

Sebelum dan sesudah contoh pemisahan template

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

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

Contoh arsitektur tumpukan bersarang

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.

Langkah 1: Buat template untuk tumpukan bersarang di sistem lokal Anda

Contoh berikut menunjukkan format template stack bersarang.

YAML

AWSTemplateFormatVersion: 2010-09-09 Description: Nested stack template for Lambda function deployment Parameters: MemorySize: Type: Number Default: 128 MinValue: 128 MaxValue: 10240 Description: Lambda function memory allocation (128-10240 MB) Resources: LambdaFunction: Type: AWS::Lambda::Function Properties: FunctionName: !Sub "${AWS::StackName}-Function" Runtime: nodejs18.x Handler: index.handler Role: !GetAtt LambdaExecutionRole.Arn Code: ZipFile: | exports.handler = async (event) => { return { statusCode: 200, body: JSON.stringify('Hello from Lambda!') }; }; MemorySize: !Ref MemorySize LambdaExecutionRole: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Version: '2012-10-17' Statement: - Effect: Allow Principal: Service: lambda.amazonaws.com Action: sts:AssumeRole ManagedPolicyArns: - 'arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole' Outputs: LambdaArn: Description: ARN of the created Lambda function Value: !GetAtt LambdaFunction.Arn

Langkah 2: Buat template untuk tumpukan tingkat atas pada sistem lokal Anda

Contoh berikut menunjukkan format template tumpukan tingkat atas dan AWS::CloudFormation::Stacksumber daya yang mereferensikan tumpukan yang Anda buat pada langkah sebelumnya.

YAML

AWSTemplateFormatVersion: 2010-09-09 Description: Top-level stack template that deploys a nested stack Resources: NestedStack: Type: AWS::CloudFormation::Stack Properties: TemplateURL: /path_to_template/nested-template.yaml Parameters: MemorySize: 256 Outputs: NestedStackLambdaArn: Description: ARN of the Lambda function from nested stack Value: !GetAtt NestedStack.Outputs.LambdaArn

Langkah 3: Package dan deploy template

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 (TemplateURLtermasuk) 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.

Selanjutnya, Anda dapat menggunakan packageperintah 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 deployperintah. 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

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.

Gunakan prosedur berikut untuk menemukan tumpukan root dan tumpukan bersarang.

Untuk melihat tumpukan akar suatu tumpukan nest
  1. Masuk ke AWS Management Console dan buka AWS CloudFormation konsol di https://console.aws.amazon.com/cloudformation.

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

    Tumpukan bersarang menampilkan NESTED di atas nama tumpukannya.

  3. 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.

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