Configure y personalice la síntesis de CDK pilas - AWS Cloud Development Kit (AWS CDK) v2

Esta es la guía para AWS CDK desarrolladores de la versión 2. La CDK versión anterior entró en mantenimiento el 1 de junio de 2022 y finalizó el soporte el 1 de junio de 2023.

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Configure y personalice la síntesis de CDK pilas

Antes de poder implementar una AWS Cloud Development Kit (AWS CDK) pila, primero se debe sintetizar. La síntesis de pilas es el proceso de producir una AWS CloudFormation plantilla y desplegar artefactos a partir de una CDK pila. La plantilla y los artefactos se conocen como ensamblaje de nubes. El ensamblaje de nubes es lo que se implementa para aprovisionar sus recursos AWS. Para obtener más información sobre cómo funcionan las implementaciones, consulteCómo funcionan AWS CDK las implementaciones.

Para que sus CDK aplicaciones se desplieguen correctamente, las CloudFormation plantillas generadas durante la síntesis deben especificar correctamente los recursos creados durante el arranque. Por lo tanto, el arranque y la síntesis deben complementarse entre sí para que una implementación sea exitosa:

  • El arranque es un proceso único que consiste en configurar un entorno para las implementaciones. AWS AWS CDK Configura los AWS recursos específicos de su entorno que utiliza para las implementaciones. CDK Por lo general, se denominan recursos de arranque. Para obtener instrucciones sobre el arranque, consulte. Inicie su entorno para usarlo con AWS CDK

  • CloudFormation las plantillas producidas durante la síntesis incluyen información sobre qué recursos de bootstrap utilizar. Durante la síntesis, CDK CLI no sabe específicamente cómo se ha AWS iniciado su entorno. En su lugar, CDK CLI produce CloudFormation plantillas basadas en el sintetizador que configure para cada pila. CDK Para que una implementación sea exitosa, el sintetizador debe producir CloudFormation plantillas que hagan referencia a los recursos de arranque correctos que se van a utilizar.

CDKViene con un sintetizador predeterminado y una configuración de arranque que están diseñados para funcionar juntos. Si personaliza una, debe aplicar las personalizaciones pertinentes a la otra.

Configure la síntesis CDK de pilas

La síntesis de CDK pilas se configura mediante la synthesizer propiedad de la Stack instancia. Esta propiedad especifica cómo se sintetizarán las CDK pilas. Usted proporciona una instancia de una clase que implementa IStackSynthesizer oIReusableStackSynthesizer. Sus métodos se invocarán cada vez que se añada un activo a la pila o cuando se sintetice la pila. El siguiente es un ejemplo básico del uso de esta propiedad en tu pila:

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

También puedes configurar un sintetizador para todas las CDK pilas de tu CDK aplicación mediante la defaultStackSynthesizer propiedad de tu instancia: 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{ // ... }), }) }

De forma predeterminada, los usos. AWS CDK DefaultStackSynthesizer Si no configura un sintetizador, se utilizará este sintetizador.

Si no modifica el bootstrapping (por ejemplo, realizando cambios en la pila o plantilla del bootstrap), no tendrá que modificar la síntesis de la pila. Ni siquiera tienes que proporcionar un sintetizador. CDKUsará la DefaultStackSynthesizer clase predeterminada para configurar la síntesis de pilas para que interactúe correctamente con tu CDK pila de bootstrap.

Sintetiza una pila CDK

Para sintetizar una CDK pila, utilice el AWS CDK comando Command Line Interface (AWS CDK CLI). cdk synth Para obtener más información sobre este comando, incluidas las opciones que puede utilizar con este comando, consultecdk synthesize.

Si tu CDK aplicación contiene una sola pila, o si quieres sintetizar todas las pilas, no tienes que proporcionar el nombre de la CDK pila como argumento. De forma predeterminada, CDK CLI sintetizará tus pilas en CDK plantillas. AWS CloudFormation En el directorio se guarda una plantilla json formateada para cada pila. cdk.out Si la aplicación contiene una sola pila, se imprime una plantilla yaml formateada. stdout A continuación, se muestra un ejemplo:

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

Si tu CDK aplicación contiene varias pilas, puedes proporcionar el ID lógico de una pila para sintetizar una sola pila. A continuación, se muestra un ejemplo:

$ cdk synth MyStackName

Si no sintetizas una pila y la ejecutascdk deploy, la CDK CLI sintetizará automáticamente antes de la implementación.

Personalice CDK la síntesis de pilas

AWS CDK Incluye los siguientes sintetizadores integrados que puede utilizar para personalizar el comportamiento de la síntesis:

  • DefaultStackSynthesizer— Si no especificas un sintetizador, este se usa automáticamente. Admite despliegues entre cuentas y despliegues que utilicen la estructura Pipelines. CDK Su contrato de arranque requiere un depósito de Amazon S3 existente con un nombre conocido, un ECR repositorio de Amazon existente con un nombre conocido y cinco IAM funciones existentes con nombres conocidos. La plantilla de arranque predeterminada cumple estos requisitos.

  • CliCredentialsStackSynthesizer— El contrato de arranque de este sintetizador requiere un depósito de Amazon S3 y un repositorio de Amazon existentes. ECR No requiere ningún rol. IAM Para realizar las implementaciones, este sintetizador depende de los permisos del CDK CLI usuario y se recomienda para las organizaciones que desean restringir IAM las credenciales de implementación. Este sintetizador no admite despliegues entre cuentas ni canalizaciones. CDK

  • LegacyStackSynthesizer— Este sintetizador emula el comportamiento de síntesis de la versión 1. CDK Su contrato de arranque requiere un depósito de Amazon S3 existente con un nombre arbitrario y espera que las ubicaciones de los activos se CloudFormation transmitan como parámetros de pila. Si usa este sintetizador, debe usarlo CDK CLI para realizar la implementación.

Si ninguno de estos sintetizadores integrados es adecuado para su caso de uso, puede escribir su propio sintetizador como una clase que implemente IStackSynthesizer o analice los sintetizadores desde el. Construct Hub

Personalizar DefaultStackSynthesizer

El DefaultStackSynthesizer es el sintetizador predeterminado para. AWS CDK Está diseñado para permitir el despliegue de aplicaciones entre cuentas, así como el despliegue de CDK CDK aplicaciones desde un sistema de CI/CD que no tenga soporte explícito para ello AWS CDK, pero que sea compatible con despliegues regulares, por ejemplo. CloudFormation AWS CodePipeline Este sintetizador es la mejor opción para la mayoría de los casos de uso.

DefaultStackSynthesizercontrato bootstrap

DefaultStackSynthesizerrequiere el siguiente contrato de bootstrap. Estos son los recursos que se deben crear durante el arranque:

Recurso de Bootstrap Descripción Nombre de recurso esperado predeterminado Finalidad

Bucket de Amazon S3

Cubeta de almacenamiento provisional

cdk-hnb659fds- activos-ACCOUNT-REGION

Almacena los activos de los archivos.

ECRRepositorio de Amazon

Repositorio provisional

cdk-hnb659 - fds-container-assetsACCOUNT-REGION

Almacena y gestiona los activos de imagen. Docker

IAMrol

Desplegar el rol

cdk-hnb659 - fds-deploy-roleACCOUNT-REGION

Asumido por el CDK CLI y, potencialmente, CodePipeline para asumir otras funciones e iniciar el despliegue. AWS CloudFormation

La política de confianza de este rol controla quién puede realizar el despliegue AWS CDK en este AWS entorno.

IAMrol

AWS CloudFormation función de ejecución

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

Esta función la utiliza para realizar el despliegue AWS CloudFormation .

Las políticas de este rol controlan las operaciones que puede realizar la CDK implementación.

IAMrol

Rol de búsqueda

cdk-hnb659 - fds-lookup-roleACCOUNT-REGION

Esta función se utiliza cuando es CDK CLI necesario realizar búsquedas del contexto ambiental.

La política de confianza de este rol controla quién puede buscar información en el entorno.

IAMrol

Función de publicación de archivos

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

Esta función se utiliza para cargar activos en el bucket de almacenamiento provisional de Amazon S3. Se asume a partir de la función de implementación.

IAMrol

Función de publicación de imágenes

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

Esta función se utiliza para subir Docker imágenes al repositorio de Amazon ECR Staging. Se asume a partir de la función de despliegue.

SSMparámetro

parámetro de versión de Bootstrap

/cdk-bootstrap/hnb659fds/version

La versión de la plantilla de bootstrap. La utiliza la plantilla de bootstrap y CDK CLI para validar los requisitos.

Una forma de personalizar la síntesis de CDK pilas es modificando elDefaultStackSynthesizer. Puede personalizar este sintetizador para una sola CDK pila utilizando la synthesizer propiedad de su Stack instancia. También puedes modificar todas DefaultStackSynthesizer las pilas de tu CDK aplicación mediante la defaultStackSynthesizer propiedad de tu instancia. App

Cambia el calificador

El calificador se añade al nombre de los recursos creados durante el arranque. De forma predeterminada, este valor es hnb659fds. Al modificar el calificador durante el arranque, es necesario personalizar CDK la síntesis de pilas para utilizar el mismo calificador.

Para cambiar el calificador, configure la qualifier propiedad del calificador DefaultStackSynthesizer o configúrelo como una clave de contexto en el archivo del proyecto. CDK cdk.json

A continuación se muestra un ejemplo de cómo configurar la qualifier propiedad de: 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 }

A continuación se muestra un ejemplo de configuración del calificador como clave de contexto encdk.json:

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

Cambiar los nombres de los recursos

Todas las demás DefaultStackSynthesizer propiedades se refieren a los nombres de los recursos de la plantilla de arranque. Solo necesita proporcionar alguna de estas propiedades si ha modificado la plantilla de arranque y ha cambiado los nombres de los recursos o el esquema de nomenclatura.

Todas las propiedades aceptan los marcadores de posición especiales${Qualifier}, ${AWS::Partition}${AWS::AccountId}, y. ${AWS::Region} Estos marcadores de posición se sustituyen por los valores del qualifier parámetro y la AWS partición, el identificador de cuenta y Región de AWS los valores del entorno de la pila, respectivamente.

En el siguiente ejemplo, se muestran las propiedades más utilizadas DefaultStackSynthesizer junto con sus valores predeterminados, como si se estuviera creando una instancia del sintetizador. Para obtener una lista completa, consulte: 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, })

Utilizar CliCredentialsStackSynthesizer

Para modificar las credenciales de seguridad utilizadas para conceder permisos durante CDK las implementaciones, puede personalizar la síntesis medianteCliCredentialsStackSynthesizer: Este sintetizador funciona con los AWS recursos predeterminados que se crean durante el arranque para almacenar activos, como el bucket de Amazon S3 y el repositorio de Amazon. ECR En lugar de utilizar las IAM funciones predeterminadas que creó CDK durante el arranque, utiliza las credenciales de seguridad del actor que inicia la implementación. Por lo tanto, las credenciales de seguridad del actor deben tener permisos válidos para realizar todas las acciones de despliegue. El siguiente diagrama ilustra el proceso de despliegue cuando se utiliza este sintetizador:

Diagrama de flujo del proceso de despliegue predeterminado AWS CDK .

Cuando se usaCliCredentialsStackSynthesizer:

  • De forma predeterminada, CloudFormation realiza API llamadas en tu cuenta con los permisos del actor. Por lo tanto, la identidad actual debe tener permiso para realizar los cambios necesarios en los AWS recursos de la CloudFormation pila, además de los permisos para realizar CloudFormation las operaciones necesarias, como CreateStack oUpdateStack. Las capacidades de despliegue se limitarán a los permisos del actor.

  • La publicación y el CloudFormation despliegue de los activos se realizarán con la IAM identidad actual. Esta identidad debe tener permisos suficientes para leer y escribir en el depósito de activos y el repositorio.

  • Las búsquedas se realizan con la IAM identidad actual y están sujetas a sus políticas.

Al usar este sintetizador, puede usar una función de CloudFormation ejecución independiente especificándola mediante la opción con cualquier comando. --role-arn CDK CLI

CliCredentialsStackSynthesizercontrato bootstrap

CliCredentialsStackSynthesizerrequiere el siguiente contrato de bootstrap. Estos son los recursos que se deben crear durante el arranque:

Recurso de Bootstrap Descripción Nombre de recurso esperado predeterminado Finalidad

Bucket de Amazon S3

Cubeta de almacenamiento provisional

cdk-hnb659fds- activos-ACCOUNT-REGION

Almacena los activos de los archivos.

ECRRepositorio de Amazon

Repositorio provisional

cdk-hnb659 - fds-container-assetsACCOUNT-REGION

Almacena y gestiona los activos de imagen. Docker

La cadena hnb659fds del nombre del recurso se denomina calificador. Su valor predeterminado no tiene ningún significado especial. Puede tener varias copias de los recursos de arranque en un solo entorno siempre que tengan un calificador diferente. Tener varias copias puede resultar útil para mantener separados los activos de diferentes aplicaciones en el mismo entorno.

Puede implementar la plantilla de bootstrap predeterminada para cumplir con el contrato CliCredentialsStackSynthesizer de bootstrap. La plantilla de bootstrap predeterminada creará IAM roles, pero este sintetizador no los usará. También puede personalizar la plantilla de bootstrap para eliminar los roles. IAM

Modificar CliCredentialsStackSynthesizer

Si cambia el calificador o alguno de los nombres de los recursos de arranque predeterminados durante el arranque, tendrá que modificar el sintetizador para que utilice los mismos nombres. Puedes modificar el sintetizador para una sola pila o para todas las pilas de tu aplicación. A continuación, se muestra un ejemplo:

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

En el siguiente ejemplo, se muestran las propiedades más utilizadas CliCredentialsStackSynthesizer junto con sus valores predeterminados. Para obtener una lista completa, consulte 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 = "", })

Utilizar LegacyStackSynthesizer

LegacyStackSynthesizerEmula el comportamiento de las implementaciones de la CDK versión 1. Las credenciales de seguridad del actor que realiza el despliegue se utilizarán para establecer los permisos. Los activos de los archivos se subirán a un depósito que se debe crear con una AWS CloudFormation pila denominadaCDKToolkit. CDKCLICreará un ECR repositorio de Amazon no administrado con el nombre de aws-cdk/assets almacenar activos de Docker imágenes. Serás responsable de limpiar y administrar este repositorio. Las pilas sintetizadas con el solo se LegacyStackSynthesizer pueden implementar con. CDK CLI

Puede usarlo LegacyStackSynthesizer si va a migrar de la CDK versión 1 a la CDK versión 2 y no puede volver a iniciar sus entornos. Para proyectos nuevos, le recomendamos que no utilice. LegacyStackSynthesizer

LegacyStackSynthesizercontrato bootstrap

LegacyStackSynthesizerrequiere el siguiente contrato de bootstrap. Estos son los recursos que se deben crear durante el arranque:

Recurso de Bootstrap Descripción Nombre de recurso esperado predeterminado Finalidad

Bucket de Amazon S3

Cubeta de almacenamiento provisional

cdk-hnb659fds- activos-ACCOUNT-REGION

Almacena los activos de los archivos.

CloudFormation salida

Salida con el nombre del bucket

Pila — CDKToolkit

Nombre de salida — BucketName

Un CloudFormation resultado que describe el nombre del depósito provisional

LegacyStackSynthesizerNo presupone la existencia de un bucket de Amazon S3 con un nombre fijo. En su lugar, la CloudFormation plantilla sintetizada contendrá tres CloudFormation parámetros para cada activo de archivo. Estos parámetros almacenarán el nombre del bucket de Amazon S3, la clave de objeto de Amazon S3 y el hash del artefacto de cada activo de archivo.

Dockerlos activos de imagen se publicarán en un ECR repositorio de Amazon denominadoaws-cdk/assets. Este nombre se puede cambiar por activo. Los repositorios se crearán si no existen.

Debe existir una CloudFormation pila con el nombre CDKToolkit predeterminado. Esta pila debe tener un nombre de CloudFormation exportación BucketName que haga referencia al depósito provisional.

La plantilla de bootstrap predeterminada cumple con el LegacyStackSynthesizer contrato de bootstrap. Sin embargo, solo se utilizará el bucket de Amazon S3 de los recursos de bootstrap de la plantilla de bootstrap. Puede personalizar la plantilla de bootstrap para eliminar los recursos de Amazon ECR y SSM bootstrap. IAM

LegacyStackSynthesizerproceso de despliegue

Cuando se utiliza este sintetizador, se lleva a cabo el siguiente proceso durante el despliegue:

  • CDKCLIBusca una CloudFormation pila con un nombre CDKToolkit en su entorno. De esta pila, CDK CLI lee la CloudFormation salida nombradaBucketName. Puede usar la --toolkit-stack-name opción con cdk deploy para especificar un nombre de pila diferente.

  • Las credenciales de seguridad del actor que inicia el despliegue se utilizarán para establecer los permisos de despliegue. Por lo tanto, el actor debe tener permisos suficientes para realizar todas las acciones de despliegue. Esto incluye leer y escribir en el depósito provisional de Amazon S3, crear y escribir en el ECR repositorio de Amazon, iniciar y supervisar AWS CloudFormation las implementaciones y realizar las API llamadas necesarias para la implementación.

  • Si es necesario y si los permisos son válidos, los activos de los archivos se publicarán en el depósito provisional de Amazon S3.

  • Si es necesario, y si los permisos son válidos, los activos de Docker imagen se publican en el repositorio nombrado por la repositoryName propiedad del activo. El valor predeterminado es 'aws-cdk/assets' si no proporciona un nombre de repositorio.

  • Si los permisos son válidos, se realiza el AWS CloudFormation despliegue. Las ubicaciones del depósito de almacenamiento provisional y las claves de Amazon S3 se transfieren como CloudFormation parámetros.