Personalizar a síntese de pilhas do CDK - AWS Kit de desenvolvimento em nuvem (AWS CDK) v2

Este é o Guia do desenvolvedor do AWS CDK v2. O CDK v1 antigo entrou em manutenção em 1º de junho de 2022 e encerrou o suporte em 1º de junho de 2023.

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Personalizar a síntese de pilhas do CDK

É possível personalizar a síntese de pilhas do kit de desenvolvimento em nuvem da AWS (CDK da AWS) modificando o sintetizador padrão, usando outros sintetizadores integrados disponíveis ou criar seu próprio sintetizador.

O AWS CDK inclui os sintetizadores integrados a seguir que podem ser usado para personalizar o comportamento da síntese:

  • DefaultStackSynthesizer: se um sintetizador não for especificado, este será usado automaticamente. Ele oferece suporte a implantações entre contas e implantações usando o constructo do CDK Pipelines. Seu contrato de bootstrapping exige um bucket do Amazon S3 existente com um nome conhecido, um repositório do Amazon ECR existente com um nome conhecido e cinco perfis do IAM existentes com nomes conhecidos. O modelo de bootstrapping padrão atende a esses requisitos.

  • CliCredentialsStackSynthesizer: o contrato de bootstrapping desse sintetizador exige um bucket do Amazon S3 existente e um repositório do Amazon ECR existente. Não é necessário ter um perfil do IAM. Para realizar implantações, esse sintetizador depende das permissões do usuário da CLI do CDK e é recomendado para organizações que desejem restringir as credenciais de implantação do IAM. Esse sintetizador não é compatível com implantações entre contas ou CDK Pipelines.

  • LegacyStackSynthesizer – este sintetizador emula o comportamento de síntese do CDK v1. Seu contrato de bootstrapping exige um bucket do Amazon S3 existente com um nome arbitrário e espera que as localizações dos ativos sejam passadas como parâmetros de pilha do CloudFormation. Se você usar esse sintetizador, deverá usar a CLI do CDK para realizar a implantação.

Se nenhum desses sintetizadores integrados for apropriado para seu caso de uso, é possível escrever seu próprio sintetizador como uma classe que implemente IStackSynthesizer ou analisar os sintetizadores do Construct Hub.

Personalizar o DefaultStackSynthesizer

O DefaultStackSynthesizer é o sintetizador padrão para o AWS CDK. Ele foi projetado para permitir implantações entre contas de aplicações do CDK, bem como a implantação de aplicações do CDK a partir de um sistema de CI/CD que não tem suporte explícito para o AWS CDK, mas oferece suporte a implantações regulares do CloudFormation, como AWS CodePipeline. Esse sintetizador é a melhor opção para a maioria dos casos de uso.

Contrato de bootstrapping DefaultStackSynthesizer

DefaultStackSynthesizer requer o seguinte contrato de bootstrap. Estes são os recursos que devem ser criados durante o bootstrapping:

Recurso de bootstrap Descrição Nome padrão do recurso esperado Finalidade

Bucket do Amazon S3

Bucket de preparação

cdk-hnb659fds-assets-<ACCOUNT>-<REGION>

Armazena ativos de arquivos.

Repositório do Amazon ECR

Repositório de preparação

cdk-hnb659fds-container-assets-<ACCOUNT>-<REGION>

Armazena e gerencia ativos de imagem do Docker.

Perfil do IAM

Perfil de implantação

cdk-hnb659fds-deploy-role-<ACCOUNT>-<REGION>

Assumido pela CLI do CDK e, potencialmente, pelo CodePipeline para assumir outros perfis e iniciar a implantação do AWS CloudFormation.

A política de confiança desse perfil controla quem pode implantar com o AWS CDK nesse ambiente da AWS.

Perfil do IAM

Perfil de execução do AWS CloudFormation

cdk-hnb659fds-cfn-exec-role-<ACCOUNT>-<REGION>

Esse perfil é usado pelo AWS CloudFormation para realizar a implantação.

As políticas desse perfil controlam quais operações a implantação do CDK pode realizar.

Perfil do IAM

Perfil de pesquisa

cdk-hnb659fds-lookup-role-<ACCOUNT>-<REGION>

Esse perfil é usado quando a CLI do CDK precisa realizar pesquisas de contexto ambiental.

A política de confiança desse perfil controla quem pode pesquisar informações no ambiente.

Perfil do IAM

Perfil de publicação de arquivos

cdk-hnb659fds-file-publishing-role-<ACCOUNT>-<REGION>

Esse perfil é usado para fazer o carregamento de ativos no bucket de preparação do Amazon S3. É assumido a partir do perfil de implantação.

Perfil do IAM

Perfil de publicação de imagens

cdk-hnb659fds-image-publishing-role-<ACCOUNT>-<REGION>

Esse perfil é usado para fazer o carregamento de imagens do Docker no repositório de teste do Amazon ECR. É assumido a partir do perfil de implantação.

Parâmetro do SSM

Parâmetro de versão de bootstrap

/cdk-bootstrap/hnb659fds/<version>

A versão do modelo de bootstrap. Ele é usado pelo modelo de bootstrapping e pela CLI do CDK para validar os requisitos.

Uma forma de personalizar a síntese da pilha do CDK é modificando o DefaultStackSynthesizer. É possível personalizar esse sintetizador para uma única pilha do CDK usando a propriedade synthesizer da sua instância Stack. Você também pode modificar DefaultStackSynthesizer em todas as pilhas de sua aplicação CDK usando a propriedade defaultStackSynthesizer da sua instância App.

Alterar o qualificador

O qualificador é adicionado ao nome dos recursos criados durante o bootstrapping. Por padrão, esse valor é hnb659fds. Ao modificar o qualificador durante o bootstrapping, você precisa personalizar a síntese da pilha do CDK para usar o mesmo qualificador.

Para alterar o qualificador, configure a propriedade qualifier do DefaultStackSynthesizer ou configure o qualificador como uma chave de contexto no arquivo cdk.json do seu projeto do CDK.

Veja a seguir um exemplo de como configurar a propriedade qualifier do DefaultStackSynthesizer:

exemplo
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 }

Veja a seguir um exemplo de como configurar o qualificador como uma chave de contexto em cdk.json:

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

Alterar nomes de recursos

Todas as outras propriedades DefaultStackSynthesizer estão relacionadas aos nomes dos recursos no modelo de bootstrap. Você só precisa fornecer qualquer uma dessas propriedades se tiver modificado o modelo de bootstrapping e alterado os nomes dos recursos ou o esquema de nomenclatura.

Todas as propriedades aceitam os espaços reservados especiais ${Qualifier}, ${AWS::Partition}, ${AWS::AccountId} e ${AWS::Region}. Esses espaços reservados são substituídos pelos valores do parâmetro qualifier e da partição AWS, ID da conta e valores da região da AWS do ambiente da pilha, respectivamente.

O exemplo a seguir mostra as propriedades mais usadas para DefaultStackSynthesizer junto com seus valores padrão, como se você estivesse instanciando o sintetizador. Para obter uma lista completa, consulte DefaultStackSynthesizerProps:

exemplo
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, })

Use CliCredentialsStackSynthesizer

Para modificar as credenciais de segurança usadas para fornecer permissões durante as implantações do CDK, você pode personalizar a síntese usando CliCredentialsStackSynthesizer. Esse sintetizador funciona com os recursos padrão da AWS que são criados durante o bootstrapping para armazenar ativos, como o bucket do Amazon S3 e o repositório do Amazon ECR. Em vez de usar os perfis do IAM padrão criados pelo CDK durante o bootstrapping, ele usa as credenciais de segurança do ator que está iniciando a implantação. Portanto, as credenciais de segurança do ator devem ter permissões válidas para realizar todas as ações de implantação. O diagrama a seguir ilustra o processo de implantação ao usar esse sintetizador:

Processo de implantação usando o CLICredentialsStackSynthesizer.

Ao usar um CliCredentialsStackSynthesizer:

  • Por padrão, o CloudFormation realiza chamadas de API em sua conta usando as permissões do ator. Portanto, a identidade atual deve ter permissão para fazer as alterações necessárias nos recursos da AWS na pilha do CloudFormation, junto com as permissões para realizar as operações necessárias do CloudFormation, como CreateStack ou UpdateStack. Os recursos de implantação serão limitados às permissões do ator.

  • A publicação de ativos e as implantações do CloudFormation serão feitas usando a identidade do IAM atual. Essa identidade deve ter permissões suficientes para ler e gravar no bucket de ativos e no repositório.

  • As pesquisas são realizadas usando a identidade do IAM atual e estão sujeitas às suas políticas.

Ao usar esse sintetizador, será possível usar um perfil de execução separado do CloudFormation especificando-o usando a opção --role-arn com qualquer comando da CLI do CDK.

Contrato de bootstrapping CliCredentialsStackSynthesizer

CliCredentialsStackSynthesizer requer o seguinte contrato de bootstrap. Estes são os recursos que devem ser criados durante o bootstrapping:

Recurso de bootstrap Descrição Nome padrão do recurso esperado Finalidade

Bucket do Amazon S3

Bucket de preparação

cdk-hnb659fds-assets-<ACCOUNT>-<REGION>

Armazena ativos de arquivos.

Repositório do Amazon ECR

Repositório de preparação

cdk-hnb659fds-container-assets-<ACCOUNT>-<REGION>

Armazena e gerencia ativos de imagem do Docker.

O hnb659fds da string no nome do recurso é chamado de qualificador. Seu valor padrão não tem nenhum significado especial. É possível ter várias cópias dos recursos de bootstrapping em um único ambiente, desde que eles tenham um qualificador diferente. Ter várias cópias pode ser útil para manter ativos de aplicações diferentes separados no mesmo ambiente.

É possível implantar o modelo de bootstrapping padrão para satisfazer o contrato de bootstrapping do CliCredentialsStackSynthesizer. O modelo de bootstrapping padrão criará perfis do IAM, mas esse sintetizador não as usará. Você também pode personalizar o modelo de bootstrapping para remover os perfis do IAM.

Modificar CliCredentialsStackSynthesizer

Se você alterar o qualificador ou qualquer um dos nomes de recursos de bootstrapping padrão durante o bootstrapping, precisará modificar o sintetizador para usar os mesmos nomes. É possível modificar o sintetizador para uma única pilha ou para todas as pilhas de sua aplicação. Veja um exemplo a seguir:

exemplo
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" }) });

O exemplo a seguir mostra as propriedades mais usadas para CliCredentialsStackSynthesizer junto com seus valores padrão. Para obter uma lista completa, consulte CliCredentialsStackSynthesizerProps:

exemplo
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 = "", })

Use LegacyStackSynthesizer

O LegacyStackSynthesizer emula o comportamento das implantações do CDK v1. As credenciais de segurança do ator que executa a implantação serão usadas para estabelecer permissões. Os ativos do arquivo serão carregados em um bucket que deve ser criado usando uma pilha do AWS CloudFormation chamada CDKToolkit. A CLI do CDK criará um repositório Amazon ECR não gerenciado chamado aws-cdk/assets para armazenar ativos de imagem do Docker. Você será responsável por limpar e gerenciar esse repositório. As pilhas sintetizadas usando o LegacyStackSynthesizer só podem ser implantadas usando a CLI do CDK.

É possível usar o LegacyStackSynthesizer se estiver migrando do CDK v1 para o CDK v2 e não conseguir fazer bootstrapping novamente em seus ambientes. Para novos projetos, recomendamos que você não use LegacyStackSynthesizer.

Contrato de bootstrapping LegacyStackSynthesizer

LegacyStackSynthesizer requer o seguinte contrato de bootstrap. Estes são os recursos que devem ser criados durante o bootstrapping:

Recurso de bootstrap Descrição Nome padrão do recurso esperado Finalidade

Bucket do Amazon S3

Bucket de preparação

cdk-hnb659fds-assets-<ACCOUNT>-<REGION>

Armazena ativos de arquivos.

Saída do CloudFormation

Saída do nome do bucket

Pilha – CDKToolkit

Nome da saída – BucketName

Uma saída do CloudFormation descrevendo o nome do bucket de preparação

O LegacyStackSynthesizer não pressupõe a existência de um bucket do Amazon S3 com um nome fixo. Em vez disso, o modelo sintetizado do CloudFormation conterá três parâmetros do CloudFormation para cada ativo de arquivo. Esses parâmetros armazenarão o nome do bucket do Amazon S3, a chave do objeto do Amazon S3 e o hash do artefato de cada ativo do arquivo.

Os ativos de imagem do Docker serão publicados em um repositório Amazon ECR chamado aws-cdk/assets. Esse nome pode ser alterado por ativo. Os repositórios serão criados se não existirem.

Uma pilha do CloudFormation deve existir com o nome padrão CDKToolkit. Essa pilha deve ter uma exportação do CloudFormation chamada BucketName que se refira ao bucket de teste.

O modelo de bootstrapping padrão satisfaz o contrato de bootstrapping do LegacyStackSynthesizer. No entanto, somente o bucket do Amazon S3 dos recursos de bootstrapping do modelo de bootstrapping será usado. É possível personalizar o modelo de bootstrapping para remover os recursos de bootstrapping do Amazon ECR, IAM e SSM.

Andamento da implantação do LegacyStackSynthesizer

Quando você usa esse sintetizador, o seguinte processo é executado durante a implantação:

  • O CDK CLI procura uma pilha do CloudFormation chamada CDKToolkit em seu ambiente. A partir dessa pilha, o CDK CLI lê a saída do CloudFormation chamada BucketName. É possível usar a opção --toolkit-stack-name com o cdk deploy para especificar outro nome de pilha.

  • As credenciais de segurança do ator que está iniciando a implantação serão usadas para estabelecer permissões para a implantação. Portanto, o ator deve ter permissões suficientes para realizar todas as ações de implantação. Isso inclui ler e gravar no bucket de preparação do Amazon S3, criar e gravar no repositório do Amazon ECR, iniciar e monitorar implantações do AWS CloudFormation e realizar todas as chamadas de API necessárias para a implantação.

  • Se necessário, e se as permissões forem válidas, os ativos do arquivo serão publicados no bucket de armazenamento do Amazon S3.

  • Se necessário e se as permissões forem válidas, os ativos de imagem do Docker serão publicados no repositório nomeado pela propriedade repositoryName do ativo. O valor padrão é 'aws-cdk/assets' se você não fornecer um nome de repositório.

  • Se as permissões forem válidas, a implantação do AWS CloudFormation será executada. As localizações do bucket de armazenamento e das chaves do Amazon S3 são transmitidas como parâmetros do CloudFormation.