Konfigurasikan dan sesuaikan sintesis CDK tumpukan - AWS Cloud Development Kit (AWS CDK) v2

Ini adalah Panduan Pengembang AWS CDK v2. CDKV1 yang lebih lama memasuki pemeliharaan pada 1 Juni 2022 dan mengakhiri dukungan pada 1 Juni 2023.

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

Konfigurasikan dan sesuaikan sintesis CDK tumpukan

Sebelum Anda dapat menyebarkan AWS Cloud Development Kit (AWS CDK) tumpukan, itu harus disintesis terlebih dahulu. Stack synthesis adalah proses memproduksi AWS CloudFormation template dan artefak penyebaran dari tumpukan. CDK Template dan artefak dikenal sebagai perakitan cloud. Perakitan cloud adalah apa yang digunakan untuk menyediakan sumber daya Anda. AWS Untuk informasi selengkapnya tentang cara kerja penerapan, lihat. Cara AWS CDK kerja penerapan

Agar CDK aplikasi Anda dapat diterapkan dengan benar, CloudFormation templat yang dihasilkan selama sintesis harus menentukan sumber daya yang dibuat dengan benar selama bootstrap. Oleh karena itu, bootstrap dan sintesis harus saling melengkapi agar penerapan berhasil:

  • Bootstrapping adalah proses satu kali menyiapkan lingkungan untuk penerapan. AWS AWS CDK Ini mengkonfigurasi AWS sumber daya tertentu di lingkungan Anda yang digunakan oleh CDK for deployment. Ini biasanya disebut sebagai sumber daya bootstrap. Untuk petunjuk tentang bootstrap, lihat. Bootstrap lingkungan Anda untuk digunakan dengan AWS CDK

  • CloudFormation template yang dihasilkan selama sintesis mencakup informasi tentang sumber daya bootstrap mana yang akan digunakan. Selama sintesis, CDK CLI tidak tahu secara spesifik bagaimana AWS lingkungan Anda telah di-bootstrap. Sebagai gantinya, CDK CLI menghasilkan CloudFormation template berdasarkan synthesizer yang Anda konfigurasikan untuk setiap CDK tumpukan. Agar penerapan berhasil, synthesizer harus menghasilkan CloudFormation template yang mereferensikan sumber daya bootstrap yang benar untuk digunakan.

Ini CDK dilengkapi dengan synthesizer default dan konfigurasi bootstrap yang dirancang untuk bekerja sama. Jika Anda menyesuaikan satu, Anda harus menerapkan penyesuaian yang relevan ke yang lain.

Konfigurasikan sintesis CDK tumpukan

Anda mengonfigurasi sintesis CDK tumpukan menggunakan synthesizer properti Stack instance Anda. Properti ini menentukan bagaimana CDK tumpukan Anda akan disintesis. Anda memberikan instance dari kelas yang mengimplementasikan IStackSynthesizer atauIReusableStackSynthesizer. Metodenya akan dipanggil setiap kali aset ditambahkan ke tumpukan atau ketika tumpukan disintesis. Berikut ini adalah contoh dasar menggunakan properti ini dalam tumpukan Anda:

TypeScript
new MyStack(this, 'MyStack', { // stack properties synthesizer: new DefaultStackSynthesizer({ // synthesizer properties }), });
JavaScript
new MyStack(this, 'MyStack', { // stack properties synthesizer: new DefaultStackSynthesizer({ // synthesizer properties }), });
Python
MyStack(self, "MyStack", # stack properties synthesizer=DefaultStackSynthesizer( # synthesizer properties ))
Java

new MyStack(app, "MyStack", StackProps.builder() // stack properties .synthesizer(DefaultStackSynthesizer.Builder.create() // synthesizer properties .build()) .build();
C#
new MyStack(app, "MyStack", new StackProps // stack properties { Synthesizer = new DefaultStackSynthesizer(new DefaultStackSynthesizerProps { // synthesizer properties }) });
Go
func main() { app := awscdk.NewApp(nil) NewMyStack(app, "MyStack", &MyStackProps{ StackProps: awscdk.StackProps{ Synthesizer: awscdk.NewDefaultStackSynthesizer(&awscdk.DefaultStackSynthesizerProps{ // synthesizer properties }), }, }) app.Synth(nil) }

Anda juga dapat mengonfigurasi synthesizer untuk semua CDK tumpukan di CDK aplikasi menggunakan defaultStackSynthesizer properti instance Anda: App

TypeScript

import { App, Stack, DefaultStackSynthesizer } from 'aws-cdk-lib'; const app = new App({ // Configure for all stacks in this app defaultStackSynthesizer: new DefaultStackSynthesizer({ /* ... */ }), });
JavaScript

const { App, Stack, DefaultStackSynthesizer } = require('aws-cdk-lib'); const app = new App({ // Configure for all stacks in this app defaultStackSynthesizer: new DefaultStackSynthesizer({ /* ... */ }), });
Python

from aws_cdk import App, Stack, DefaultStackSynthesizer app = App( default_stack_synthesizer=DefaultStackSynthesizer( # Configure for all stacks in this app # ... ) )
Java

import software.amazon.awscdk.App; import software.amazon.awscdk.Stack; import software.amazon.awscdk.DefaultStackSynthesizer; public class Main { public static void main(final String[] args) { App app = new App(AppProps.builder() // Configure for all stacks in this app .defaultStackSynthesizer(DefaultStackSynthesizer.Builder.create().build()) .build() ); } }
C#

using Amazon.CDK; using Amazon.CDK.Synthesizers; namespace MyNamespace { sealed class Program { public static void Main(string[] args) { var app = new App(new AppProps { // Configure for all stacks in this app DefaultStackSynthesizer = new DefaultStackSynthesizer(new DefaultStackSynthesizerProps { // ... }) }); } } }
Go

package main import ( "github.com/aws/aws-cdk-go/awscdk/v2" "github.com/aws/constructs-go/constructs/v10" "github.com/aws/jsii-runtime-go" ) func main() { defer jsii.Close() app := awscdk.NewApp(&awscdk.AppProps{ // Configure for all stacks in this app DefaultStackSynthesizer: awscdk.NewDefaultStackSynthesizer(&awscdk.DefaultStackSynthesizerProps{ // ... }), }) }

Secara default, AWS CDK penggunaannyaDefaultStackSynthesizer. Jika Anda tidak mengkonfigurasi synthesizer, synthesizer ini akan digunakan.

Jika Anda tidak memodifikasi bootstrap, seperti membuat perubahan pada tumpukan atau template bootstrap, Anda tidak perlu memodifikasi sintesis tumpukan. Anda bahkan tidak perlu menyediakan synthesizer. CDKAkan menggunakan DefaultStackSynthesizer kelas default untuk mengkonfigurasi sintesis CDK tumpukan untuk berinteraksi dengan benar dengan tumpukan bootstrap Anda.

Sintesis tumpukan CDK

Untuk mensintesis CDK tumpukan, gunakan AWS CDK perintah Command Line Interface (AWS CDK CLI)cdk synth. Untuk informasi selengkapnya tentang perintah ini, termasuk opsi yang dapat Anda gunakan dengan perintah ini, lihatcdk synthesize.

Jika CDK aplikasi Anda berisi satu tumpukan, atau untuk mensintesis semua tumpukan, Anda tidak perlu memberikan nama CDK tumpukan sebagai argumen. Secara default, CDK CLI akan mensintesis CDK tumpukan Anda ke dalam AWS CloudFormation template. Template json yang diformat untuk setiap tumpukan disimpan ke cdk.out direktori. Jika aplikasi Anda berisi satu tumpukan, templat yang yaml diformat akan dicetak. stdout Berikut adalah contohnya:

$ cdk synth Resources: CDKMetadata: Type: AWS::CDK::Metadata Properties: Analytics: v2:deflate64:H4sIAAAAAAAA/unique-identifier Metadata: aws:cdk:path: CdkAppStack/CDKMetadata/Default Condition: CDKMetadataAvailable ...

Jika CDK aplikasi Anda berisi beberapa tumpukan, Anda dapat memberikan ID logis tumpukan untuk mensintesis satu tumpukan. Berikut adalah contohnya:

$ cdk synth MyStackName

Jika Anda tidak mensintesis tumpukan dan menjalankannyacdk deploy, CDK CLI maka akan secara otomatis mensintesis tumpukan Anda sebelum penerapan.

Sesuaikan sintesis CDK tumpukan

AWS CDK Termasuk synthesizer bawaan berikut yang dapat Anda gunakan untuk menyesuaikan perilaku sintesis:

  • DefaultStackSynthesizer— Jika Anda tidak menentukan synthesizer, yang ini digunakan secara otomatis. Ini mendukung penyebaran dan penerapan lintas akun menggunakan konstruksi Pipelines. CDK Kontrak bootstrap memerlukan bucket Amazon S3 yang ada dengan nama yang dikenal, ECR repositori Amazon yang ada dengan nama yang dikenal, dan lima IAM peran yang ada dengan nama yang dikenal. Template bootstrap default memenuhi persyaratan ini.

  • CliCredentialsStackSynthesizer- Kontrak bootstrap synthesizer ini memerlukan bucket Amazon S3 yang ada dan repositori Amazon yang ada. ECR Itu tidak memerlukan IAM peran apa pun. Untuk melakukan penerapan, synthesizer ini bergantung pada izin CDK CLI pengguna dan direkomendasikan untuk organisasi yang ingin membatasi kredensi penerapan. IAM Synthesizer ini tidak mendukung penerapan lintas akun atau Pipelines. CDK

  • LegacyStackSynthesizer— Synthesizer ini mengemulasi perilaku sintesis CDK v1. Kontrak bootstrap memerlukan bucket Amazon S3 yang ada dengan nama arbitrer dan mengharapkan lokasi aset diteruskan sebagai parameter tumpukan. CloudFormation Jika Anda menggunakan synthesizer ini, Anda harus menggunakan CDK CLI untuk melakukan penyebaran.

Jika tidak satu pun dari synthesizer bawaan ini sesuai untuk kasus penggunaan Anda, Anda dapat menulis synthesizer Anda sendiri sebagai kelas yang mengimplementasikan IStackSynthesizer atau melihat synthesizer dari. Construct Hub

Sesuaikan DefaultStackSynthesizer

DefaultStackSynthesizerIni adalah synthesizer default untuk file. AWS CDK Ini dirancang untuk memungkinkan penyebaran aplikasi lintas akun, serta menyebarkan CDK CDK aplikasi dari sistem CI/CD yang tidak memiliki dukungan eksplisit untuk AWS CDK, tetapi mendukung penerapan reguler, seperti. CloudFormation AWS CodePipeline Synthesizer ini adalah pilihan terbaik untuk sebagian besar kasus penggunaan.

DefaultStackSynthesizerkontrak bootstrap

DefaultStackSynthesizermembutuhkan kontrak bootstrap berikut. Ini adalah sumber daya yang harus dibuat selama bootstrap:

Sumber daya Bootstrap Deskripsi Nama sumber daya yang diharapkan default Tujuan

Bucket Amazon S3

Ember pementasan

cdk-hnb659fds-aset-ACCOUNT-REGION

Menyimpan aset file.

ECRRepositori Amazon

Repositori pementasan

cdk-hnb659 - fds-container-assetsACCOUNT-REGION

Menyimpan dan mengelola aset Docker gambar.

IAMperan

Menyebarkan peran

cdk-hnb659 - fds-deploy-roleACCOUNT-REGION

Diasumsikan oleh CDK CLI dan berpotensi CodePipeline untuk mengambil peran lain dan memulai AWS CloudFormation penerapan.

Kebijakan kepercayaan dari peran ini mengontrol siapa yang dapat menyebarkan dengan AWS CDK di AWS lingkungan ini.

IAMperan

AWS CloudFormation peran eksekusi

cdk-hnb659 - fds-cfn-exec-roleACCOUNT-REGION

Peran ini digunakan oleh AWS CloudFormation untuk melakukan penyebaran.

Kebijakan peran ini mengontrol operasi apa yang dapat dilakukan CDK penyebaran.

IAMperan

Peran pencarian

cdk-hnb659 - fds-lookup-roleACCOUNT-REGION

Peran ini digunakan ketika CDK CLI kebutuhan untuk melakukan pencarian konteks lingkungan.

Kebijakan kepercayaan dari peran ini mengontrol siapa yang dapat mencari informasi di lingkungan.

IAMperan

Peran penerbitan file

cdk-hnb659 - fds-file-publishing-roleACCOUNT-REGION

Peran ini digunakan untuk mengunggah aset ke bucket pementasan Amazon S3. Diasumsikan dari peran penyebaran.

IAMperan

Peran penerbitan gambar

cdk-hnb659 - fds-image-publishing-roleACCOUNT-REGION

Peran ini digunakan untuk mengunggah Docker gambar ke repositori ECR pementasan Amazon. Diasumsikan dari peran penyebaran.

SSMparameter

Parameter versi bootstrap

/cdk-bootstrap/hnb659fds/version

Versi template bootstrap. Ini digunakan oleh template bootstrap dan CDK CLI untuk memvalidasi persyaratan.

Salah satu cara untuk menyesuaikan sintesis CDK tumpukan, adalah dengan memodifikasi. DefaultStackSynthesizer Anda dapat menyesuaikan synthesizer ini untuk satu CDK tumpukan menggunakan synthesizer properti instance AndaStack. Anda juga dapat memodifikasi DefaultStackSynthesizer semua tumpukan di CDK aplikasi menggunakan defaultStackSynthesizer properti App instance Anda.

Ubah kualifikasi

Kualifikasi ditambahkan ke nama sumber daya yang dibuat selama bootstrap. Secara default, nilainya adalah hnb659fds. Saat Anda memodifikasi qualifier selama bootstrap, Anda perlu menyesuaikan sintesis CDK tumpukan untuk menggunakan kualifikasi yang sama.

Untuk mengubah qualifier, konfigurasikan qualifier properti DefaultStackSynthesizer atau konfigurasikan qualifier sebagai kunci konteks dalam file CDK project Anda. cdk.json

Berikut ini adalah contoh konfigurasi qualifier properti dari: DefaultStackSynthesizer

TypeScript
new MyStack(this, 'MyStack', { synthesizer: new DefaultStackSynthesizer({ qualifier: 'MYQUALIFIER', }), });
JavaScript
new MyStack(this, 'MyStack', { synthesizer: new DefaultStackSynthesizer({ qualifier: 'MYQUALIFIER', }), })
Python
MyStack(self, "MyStack", synthesizer=DefaultStackSynthesizer( qualifier="MYQUALIFIER" ))
Java
new MyStack(app, "MyStack", StackProps.builder() .synthesizer(DefaultStackSynthesizer.Builder.create() .qualifier("MYQUALIFIER") .build()) .build();
C#
new MyStack(app, "MyStack", new StackProps { Synthesizer = new DefaultStackSynthesizer(new DefaultStackSynthesizerProps { Qualifier = "MYQUALIFIER" }) });
Go
func NewMyStack(scope constructs.Construct, id string, props *MyStackProps) awscdk.Stack { var sprops awscdk.StackProps if props != nil { sprops = props.StackProps } stack := awscdk.NewStack(scope, &id, &sprops) synth := awscdk.NewDefaultStackSynthesizer(&awscdk.DefaultStackSynthesizerProps{ Qualifier: jsii.String("MYQUALIFIER"), }) stack.SetSynthesizer(synth) return stack }

Berikut ini adalah contoh konfigurasi qualifier sebagai kunci konteks di: cdk.json

{ "app": "...", "context": { "@aws-cdk/core:bootstrapQualifier": "MYQUALIFIER" } }

Ubah nama sumber daya

Semua DefaultStackSynthesizer properti lainnya berhubungan dengan nama sumber daya dalam template bootstrap. Anda hanya perlu menyediakan salah satu properti ini jika Anda memodifikasi template bootstrap dan mengubah nama sumber daya atau skema penamaan.

Semua properti menerima placeholder khusus${Qualifier},, ${AWS::Partition}${AWS::AccountId}, dan. ${AWS::Region} Placeholder ini diganti dengan nilai qualifier parameter dan AWS partisi, ID akun, dan Wilayah AWS nilai untuk lingkungan tumpukan, masing-masing.

Contoh berikut menunjukkan properti yang paling umum digunakan DefaultStackSynthesizer bersama dengan nilai defaultnya, seolah-olah Anda membuat instance synthesizer. Untuk daftar lengkap, lihat DefaultStackSynthesizerProps:

TypeScript
new DefaultStackSynthesizer({ // Name of the S3 bucket for file assets fileAssetsBucketName: 'cdk-${Qualifier}-assets-${AWS::AccountId}-${AWS::Region}', bucketPrefix: '', // Name of the ECR repository for Docker image assets imageAssetsRepositoryName: 'cdk-${Qualifier}-container-assets-${AWS::AccountId}-${AWS::Region}', dockerTagPrefix: '', // ARN of the role assumed by the CLI and Pipeline to deploy here deployRoleArn: 'arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-${Qualifier}-deploy-role-${AWS::AccountId}-${AWS::Region}', deployRoleExternalId: '', // ARN of the role used for file asset publishing (assumed from the CLI role) fileAssetPublishingRoleArn: 'arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-${Qualifier}-file-publishing-role-${AWS::AccountId}-${AWS::Region}', fileAssetPublishingExternalId: '', // ARN of the role used for Docker asset publishing (assumed from the CLI role) imageAssetPublishingRoleArn: 'arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-${Qualifier}-image-publishing-role-${AWS::AccountId}-${AWS::Region}', imageAssetPublishingExternalId: '', // ARN of the role passed to CloudFormation to execute the deployments cloudFormationExecutionRole: 'arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-${Qualifier}-cfn-exec-role-${AWS::AccountId}-${AWS::Region}', // ARN of the role used to look up context information in an environment lookupRoleArn: 'arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-${Qualifier}-lookup-role-${AWS::AccountId}-${AWS::Region}', lookupRoleExternalId: '', // Name of the SSM parameter which describes the bootstrap stack version number bootstrapStackVersionSsmParameter: '/cdk-bootstrap/${Qualifier}/version', // Add a rule to every template which verifies the required bootstrap stack version generateBootstrapVersionRule: true, })
JavaScript
new DefaultStackSynthesizer({ // Name of the S3 bucket for file assets fileAssetsBucketName: 'cdk-${Qualifier}-assets-${AWS::AccountId}-${AWS::Region}', bucketPrefix: '', // Name of the ECR repository for Docker image assets imageAssetsRepositoryName: 'cdk-${Qualifier}-container-assets-${AWS::AccountId}-${AWS::Region}', dockerTagPrefix: '', // ARN of the role assumed by the CLI and Pipeline to deploy here deployRoleArn: 'arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-${Qualifier}-deploy-role-${AWS::AccountId}-${AWS::Region}', deployRoleExternalId: '', // ARN of the role used for file asset publishing (assumed from the CLI role) fileAssetPublishingRoleArn: 'arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-${Qualifier}-file-publishing-role-${AWS::AccountId}-${AWS::Region}', fileAssetPublishingExternalId: '', // ARN of the role used for Docker asset publishing (assumed from the CLI role) imageAssetPublishingRoleArn: 'arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-${Qualifier}-image-publishing-role-${AWS::AccountId}-${AWS::Region}', imageAssetPublishingExternalId: '', // ARN of the role passed to CloudFormation to execute the deployments cloudFormationExecutionRole: 'arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-${Qualifier}-cfn-exec-role-${AWS::AccountId}-${AWS::Region}', // ARN of the role used to look up context information in an environment lookupRoleArn: 'arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-${Qualifier}-lookup-role-${AWS::AccountId}-${AWS::Region}', lookupRoleExternalId: '', // Name of the SSM parameter which describes the bootstrap stack version number bootstrapStackVersionSsmParameter: '/cdk-bootstrap/${Qualifier}/version', // Add a rule to every template which verifies the required bootstrap stack version generateBootstrapVersionRule: true, })
Python
DefaultStackSynthesizer( # Name of the S3 bucket for file assets file_assets_bucket_name="cdk-${Qualifier}-assets-${AWS::AccountId}-${AWS::Region}", bucket_prefix="", # Name of the ECR repository for Docker image assets image_assets_repository_name="cdk-${Qualifier}-container-assets-${AWS::AccountId}-${AWS::Region}", docker_tag_prefix="", # ARN of the role assumed by the CLI and Pipeline to deploy here deploy_role_arn="arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-${Qualifier}-deploy-role-${AWS::AccountId}-${AWS::Region}", deploy_role_external_id="", # ARN of the role used for file asset publishing (assumed from the CLI role) file_asset_publishing_role_arn="arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-${Qualifier}-file-publishing-role-${AWS::AccountId}-${AWS::Region}", file_asset_publishing_external_id="", # ARN of the role used for Docker asset publishing (assumed from the CLI role) image_asset_publishing_role_arn="arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-${Qualifier}-image-publishing-role-${AWS::AccountId}-${AWS::Region}", image_asset_publishing_external_id="", # ARN of the role passed to CloudFormation to execute the deployments cloud_formation_execution_role="arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-${Qualifier}-cfn-exec-role-${AWS::AccountId}-${AWS::Region}", # ARN of the role used to look up context information in an environment lookup_role_arn="arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-${Qualifier}-lookup-role-${AWS::AccountId}-${AWS::Region}", lookup_role_external_id="", # Name of the SSM parameter which describes the bootstrap stack version number bootstrap_stack_version_ssm_parameter="/cdk-bootstrap/${Qualifier}/version", # Add a rule to every template which verifies the required bootstrap stack version generate_bootstrap_version_rule=True, )
Java
DefaultStackSynthesizer.Builder.create() // Name of the S3 bucket for file assets .fileAssetsBucketName("cdk-${Qualifier}-assets-${AWS::AccountId}-${AWS::Region}") .bucketPrefix('') // Name of the ECR repository for Docker image assets .imageAssetsRepositoryName("cdk-${Qualifier}-container-assets-${AWS::AccountId}-${AWS::Region}") .dockerTagPrefix('') // ARN of the role assumed by the CLI and Pipeline to deploy here .deployRoleArn("arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-${Qualifier}-deploy-role-${AWS::AccountId}-${AWS::Region}") .deployRoleExternalId("") // ARN of the role used for file asset publishing (assumed from the CLI role) .fileAssetPublishingRoleArn("arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-${Qualifier}-file-publishing-role-${AWS::AccountId}-${AWS::Region}") .fileAssetPublishingExternalId("") // ARN of the role used for Docker asset publishing (assumed from the CLI role) .imageAssetPublishingRoleArn("arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-${Qualifier}-image-publishing-role-${AWS::AccountId}-${AWS::Region}") .imageAssetPublishingExternalId("") // ARN of the role passed to CloudFormation to execute the deployments .cloudFormationExecutionRole("arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-${Qualifier}-cfn-exec-role-${AWS::AccountId}-${AWS::Region}") .lookupRoleArn("arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-${Qualifier}-lookup-role-${AWS::AccountId}-${AWS::Region}") .lookupRoleExternalId("") // Name of the SSM parameter which describes the bootstrap stack version number .bootstrapStackVersionSsmParameter("/cdk-bootstrap/${Qualifier}/version") // Add a rule to every template which verifies the required bootstrap stack version .generateBootstrapVersionRule(true) .build()
C#
new DefaultStackSynthesizer(new DefaultStackSynthesizerProps { // Name of the S3 bucket for file assets FileAssetsBucketName = "cdk-${Qualifier}-assets-${AWS::AccountId}-${AWS::Region}", BucketPrefix = "", // Name of the ECR repository for Docker image assets ImageAssetsRepositoryName = "cdk-${Qualifier}-container-assets-${AWS::AccountId}-${AWS::Region}", DockerTagPrefix = "", // ARN of the role assumed by the CLI and Pipeline to deploy here DeployRoleArn = "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-${Qualifier}-deploy-role-${AWS::AccountId}-${AWS::Region}", DeployRoleExternalId = "", // ARN of the role used for file asset publishing (assumed from the CLI role) FileAssetPublishingRoleArn = "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-${Qualifier}-file-publishing-role-${AWS::AccountId}-${AWS::Region}", FileAssetPublishingExternalId = "", // ARN of the role used for Docker asset publishing (assumed from the CLI role) ImageAssetPublishingRoleArn = "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-${Qualifier}-image-publishing-role-${AWS::AccountId}-${AWS::Region}", ImageAssetPublishingExternalId = "", // ARN of the role passed to CloudFormation to execute the deployments CloudFormationExecutionRole = "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-${Qualifier}-cfn-exec-role-${AWS::AccountId}-${AWS::Region}", LookupRoleArn = "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-${Qualifier}-lookup-role-${AWS::AccountId}-${AWS::Region}", LookupRoleExternalId = "", // Name of the SSM parameter which describes the bootstrap stack version number BootstrapStackVersionSsmParameter = "/cdk-bootstrap/${Qualifier}/version", // Add a rule to every template which verifies the required bootstrap stack version GenerateBootstrapVersionRule = true, })

Gunakan CliCredentialsStackSynthesizer

Untuk mengubah kredensil keamanan yang digunakan untuk memberikan izin selama CDK penerapan, Anda dapat menyesuaikan sintesis dengan menggunakan. CliCredentialsStackSynthesizer Synthesizer ini bekerja dengan AWS sumber daya default yang dibuat selama bootstrap untuk menyimpan aset, seperti bucket Amazon S3 dan repositori Amazon. ECR Alih-alih menggunakan IAM peran default yang dibuat oleh CDK selama bootstrap, ia menggunakan kredensi keamanan aktor yang memulai penerapan. Oleh karena itu, kredensi keamanan aktor harus memiliki izin yang valid untuk melakukan semua tindakan penerapan. Diagram berikut menggambarkan proses penyebaran saat menggunakan synthesizer ini:

Diagram alir dari proses AWS CDK penerapan default.

Saat menggunakanCliCredentialsStackSynthesizer:

  • Secara default, CloudFormation melakukan API panggilan di akun Anda menggunakan izin aktor. Oleh karena itu, identitas saat ini harus memiliki izin untuk membuat perubahan yang diperlukan pada AWS sumber daya di CloudFormation tumpukan, bersama dengan izin untuk melakukan CloudFormation operasi yang diperlukan, seperti CreateStack atauUpdateStack. Kemampuan penyebaran akan terbatas pada izin aktor.

  • Penerbitan dan CloudFormation penerapan aset akan dilakukan dengan menggunakan identitas saat iniIAM. Identitas ini harus memiliki izin yang cukup untuk membaca dari dan menulis ke bucket aset dan repositori.

  • Pencarian dilakukan menggunakan IAM identitas saat ini, dan pencarian tunduk pada kebijakannya.

Saat menggunakan synthesizer ini, Anda dapat menggunakan peran CloudFormation eksekusi terpisah dengan menentukannya menggunakan --role-arn opsi dengan perintah apa pun. CDK CLI

CliCredentialsStackSynthesizerkontrak bootstrap

CliCredentialsStackSynthesizermembutuhkan kontrak bootstrap berikut. Ini adalah sumber daya yang harus dibuat selama bootstrap:

Sumber daya Bootstrap Deskripsi Nama sumber daya yang diharapkan default Tujuan

Bucket Amazon S3

Ember pementasan

cdk-hnb659fds-aset-ACCOUNT-REGION

Menyimpan aset file.

ECRRepositori Amazon

Repositori pementasan

cdk-hnb659 - fds-container-assetsACCOUNT-REGION

Menyimpan dan mengelola aset Docker gambar.

String hnb659fds dalam nama sumber daya disebut qualifier. Nilai defaultnya tidak memiliki signifikansi khusus. Anda dapat memiliki banyak salinan sumber daya bootstrap dalam satu lingkungan selama mereka memiliki kualifikasi yang berbeda. Memiliki banyak salinan dapat berguna untuk menjaga aset aplikasi yang berbeda di lingkungan yang sama terpisah.

Anda dapat menerapkan template bootstrap default untuk memenuhi CliCredentialsStackSynthesizer kontrak bootstrap. Template bootstrap default akan membuat IAM peran, tetapi synthesizer ini tidak akan menggunakannya. Anda juga dapat menyesuaikan template bootstrap untuk menghapus IAM peran.

Memodifikasi CliCredentialsStackSynthesizer

Jika Anda mengubah qualifier atau salah satu nama sumber daya bootstrap default selama bootstrap, Anda harus memodifikasi synthesizer untuk menggunakan nama yang sama. Anda dapat memodifikasi synthesizer untuk satu tumpukan atau untuk semua tumpukan di aplikasi Anda. Berikut adalah contohnya:

TypeScript
new MyStack(this, 'MyStack', { synthesizer: new CliCredentialsStackSynthesizer({ qualifier: 'MYQUALIFIER', }), });
JavaScript
new MyStack(this, 'MyStack', { synthesizer: new CliCredentialsStackSynthesizer({ qualifier: 'MYQUALIFIER', }), })
Python
MyStack(self, "MyStack", synthesizer=CliCredentialsStackSynthesizer( qualifier="MYQUALIFIER" ))
Java
new MyStack(app, "MyStack", StackProps.builder() .synthesizer(CliCredentialsStackSynthesizer.Builder.create() .qualifier("MYQUALIFIER") .build()) .build();
C#
new MyStack(app, "MyStack", new StackProps { Synthesizer = new CliCredentialsStackSynthesizer(new CliCredentialsStackSynthesizerProps { Qualifier = "MYQUALIFIER" }) });

Contoh berikut menunjukkan properti yang paling umum digunakan CliCredentialsStackSynthesizer bersama dengan nilai default mereka. Untuk daftar lengkap, lihat CliCredentialsStackSynthesizerProps:

TypeScript
new CliCredentialsStackSynthesizer({ // Value for '${Qualifier}' in the resource names qualifier: 'hnb659fds', // Name of the S3 bucket for file assets fileAssetsBucketName: 'cdk-${Qualifier}-assets-${AWS::AccountId}-${AWS::Region}', bucketPrefix: '', // Name of the ECR repository for Docker image assets imageAssetsRepositoryName: 'cdk-${Qualifier}-container-assets-${AWS::AccountId}-${AWS::Region}', dockerTagPrefix: '', })
JavaScript
new CliCredentialsStackSynthesizer({ // Value for '${Qualifier}' in the resource names qualifier: 'hnb659fds', // Name of the S3 bucket for file assets fileAssetsBucketName: 'cdk-${Qualifier}-assets-${AWS::AccountId}-${AWS::Region}', bucketPrefix: '', // Name of the ECR repository for Docker image assets imageAssetsRepositoryName: 'cdk-${Qualifier}-container-assets-${AWS::AccountId}-${AWS::Region}', dockerTagPrefix: '', })
Python
CliCredentialsStackSynthesizer( # Value for '${Qualifier}' in the resource names qualifier="hnb659fds", # Name of the S3 bucket for file assets file_assets_bucket_name="cdk-${Qualifier}-assets-${AWS::AccountId}-${AWS::Region}", bucket_prefix="", # Name of the ECR repository for Docker image assets image_assets_repository_name="cdk-${Qualifier}-container-assets-${AWS::AccountId}-${AWS::Region}", docker_tag_prefix="", )
Java
CliCredentialsStackSynthesizer.Builder.create() // Value for '${Qualifier}' in the resource names .qualifier("hnb659fds") // Name of the S3 bucket for file assets .fileAssetsBucketName("cdk-${Qualifier}-assets-${AWS::AccountId}-${AWS::Region}") .bucketPrefix('') // Name of the ECR repository for Docker image assets .imageAssetsRepositoryName("cdk-${Qualifier}-container-assets-${AWS::AccountId}-${AWS::Region}") .dockerTagPrefix('') .build()
C#
new CliCredentialsStackSynthesizer(new CliCredentialsStackSynthesizerProps { // Value for '${Qualifier}' in the resource names Qualifier = "hnb659fds", // Name of the S3 bucket for file assets FileAssetsBucketName = "cdk-${Qualifier}-assets-${AWS::AccountId}-${AWS::Region}", BucketPrefix = "", // Name of the ECR repository for Docker image assets ImageAssetsRepositoryName = "cdk-${Qualifier}-container-assets-${AWS::AccountId}-${AWS::Region}", DockerTagPrefix = "", })

Gunakan LegacyStackSynthesizer

LegacyStackSynthesizerMengemulasi perilaku penerapan CDK v1. Kredensi keamanan aktor yang melakukan penyebaran akan digunakan untuk menetapkan izin. Aset file akan diunggah ke bucket yang harus dibuat menggunakan AWS CloudFormation tumpukan bernamaCDKToolkit. Ini CDK CLI akan membuat ECR repositori Amazon yang tidak dikelola bernama aws-cdk/assets untuk menyimpan Docker aset gambar. Anda akan bertanggung jawab untuk membersihkan dan mengelola repositori ini. Tumpukan yang disintesis menggunakan hanya LegacyStackSynthesizer dapat digunakan menggunakan file. CDK CLI

Anda dapat menggunakan LegacyStackSynthesizer jika Anda bermigrasi dari CDK v1 ke CDK v2, dan tidak dapat mem-bootstrap ulang lingkungan Anda. Untuk proyek baru, kami sarankan Anda tidak menggunakannyaLegacyStackSynthesizer.

LegacyStackSynthesizerkontrak bootstrap

LegacyStackSynthesizermembutuhkan kontrak bootstrap berikut. Ini adalah sumber daya yang harus dibuat selama bootstrap:

Sumber daya Bootstrap Deskripsi Nama sumber daya yang diharapkan default Tujuan

Bucket Amazon S3

Ember pementasan

cdk-hnb659fds-aset-ACCOUNT-REGION

Menyimpan aset file.

CloudFormation keluaran

Keluaran nama ember

Tumpukan — CDKToolkit

Nama keluaran — BucketName

CloudFormation Output yang menjelaskan nama ember pementasan

LegacyStackSynthesizerItu tidak mengasumsikan keberadaan bucket Amazon S3 dengan nama tetap. Sebagai gantinya, CloudFormation template yang disintesis akan berisi tiga CloudFormation parameter untuk setiap aset file. Parameter ini akan menyimpan nama bucket Amazon S3, kunci objek Amazon S3, dan hash artefak untuk setiap aset file.

Dockeraset gambar akan dipublikasikan ke ECR repositori Amazon bernama. aws-cdk/assets Nama ini dapat diubah per aset. Repositori akan dibuat jika tidak ada.

CloudFormation Tumpukan harus ada dengan nama defaultCDKToolkit. Tumpukan ini harus memiliki nama CloudFormation ekspor BucketName yang mengacu pada bucket pementasan.

Template bootstrap default memenuhi kontrak LegacyStackSynthesizer bootstrap. Namun, hanya bucket Amazon S3 dari sumber daya bootstrap template bootstrap yang akan digunakan. Anda dapat menyesuaikan template bootstrap untuk menghapus AmazonECR,IAM, dan sumber daya SSM bootstrap.

LegacyStackSynthesizerproses penyebaran

Saat Anda menggunakan synthesizer ini, proses berikut dilakukan selama penerapan:

  • Pencarian CDK CLI CloudFormation tumpukan bernama CDKToolkit di lingkungan Anda. Dari tumpukan ini, CDK CLI membaca CloudFormation output bernamaBucketName. Anda dapat menggunakan --toolkit-stack-name opsi dengan cdk deploy untuk menentukan nama tumpukan yang berbeda.

  • Kredensi keamanan aktor yang memulai penerapan akan digunakan untuk menetapkan izin untuk penerapan. Oleh karena itu, aktor harus memiliki izin yang cukup untuk melakukan semua tindakan penerapan. Ini termasuk membaca dan menulis ke bucket pementasan Amazon S3, membuat dan menulis ke ECR repositori Amazon, memulai dan memantau AWS CloudFormation penerapan, dan melakukan panggilan apa pun yang diperlukan untuk penerapan. API

  • Jika perlu, dan jika izin valid, aset file akan dipublikasikan ke bucket pementasan Amazon S3.

  • Jika perlu, dan jika izin valid, aset Docker gambar dipublikasikan ke repositori yang dinamai oleh repositoryName properti aset. Nilai defaultnya adalah 'aws-cdk/assets' jika Anda tidak memberikan nama repositori.

  • Jika izin valid, AWS CloudFormation penerapan dilakukan. Lokasi bucket dan kunci pementasan Amazon S3 diteruskan sebagai parameter. CloudFormation