Esta es la guía para AWS CDK desarrolladores de la versión 2. La primera versión del CDK pasó a la etapa de mantenimiento el 1.° de junio de 2022 y no cuenta con soporte desde 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.
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 pila de CDK. La plantilla y los artefactos se conocen como ensamblaje de nubes. El ensamblaje de nubes es lo que se implementa para aprovisionar sus recursos en AWS. Para obtener más información sobre cómo funcionan las implementaciones, consulte Cómo funcionan AWS CDK las implementaciones.
Cómo funcionan en conjunto la síntesis y el arranque
Para que las aplicaciones de CDK 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 se deben complementar 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 la CDK para las implementaciones. Estos se denominan comúnmente recursos de arranque. Para obtener instrucciones sobre los arranques, consulte. Inicie su entorno para usarlo con AWS CDK
-
CloudFormation las plantillas generadas durante la síntesis incluyen información sobre los recursos de arranque que se deben utilizar. Durante la síntesis, el CDK CLI no sabe específicamente cómo se ha AWS iniciado su entorno. En cambio, el CDK CLI produce CloudFormation plantillas basadas en el sintetizador que configure para cada pila de CDK. Para que una implementación se realice correctamente, el sintetizador debe producir CloudFormation plantillas que hagan referencia a los recursos de arranque correctos que se van a utilizar.
El CDK viene 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.
Cómo configurar la síntesis de pilas de CDK
La síntesis de pilas de CDK se configura mediante la propiedad synthesizer
de la instancia Stack
. Esta propiedad especifica cómo se sintetizarán las pilas de CDK. Usted proporciona una instancia de una clase que implementa IStackSynthesizer
o IReusableStackSynthesizer
. Sus métodos se invocarán cada vez que se agregue un activo a la pila o cuando se sintetice la pila. El siguiente es un ejemplo básico del uso de esta propiedad en su pila:
new MyStack(this, 'MyStack', {
// stack properties
synthesizer: new DefaultStackSynthesizer({
// synthesizer properties
}),
});
También puede configurar un sintetizador para todas las pilas de CDK de su aplicación de CDK mediante la propiedad defaultStackSynthesizer
de tu instancia App
:
import { App, Stack, DefaultStackSynthesizer } from 'aws-cdk-lib';
const app = new App({
// Configure for all stacks in this app
defaultStackSynthesizer: new DefaultStackSynthesizer({
/* ... */
}),
});
De forma predeterminada, los usos. AWS CDK DefaultStackSynthesizer
Si no configura un sintetizador, se utilizará este sintetizador.
Si no modifica el arranque (por ejemplo, realizando cambios en la pila o plantilla del arranque), no tendrá que modificar la síntesis de la pila. Ni siquiera tiene que proporcionar un sintetizador. La CDK utilizará la clase DefaultStackSynthesizer
predeterminada para configurar la síntesis de pilas de CDK para que interactúe correctamente con la pila de arranque.
Cómo sintetizar una pila de CDK
Para sintetizar una pila de CDK, utilice la interfaz de línea de AWS CDK comandos (AWS CDK CLIcomando). cdk synth
Para obtener más información sobre este comando, incluidas las opciones que puede utilizar con este comando, consulte cdk synthesize.
Si su aplicación de CDK contiene una sola pila o quiere sintetizar todas las pilas, no tiene que proporcionar el nombre de la pila de CDK como argumento. De forma predeterminada, el CDK CLI sintetizará sus pilas de CDK en plantillas. AWS CloudFormation
En el directorio cdk.out
se guarda una plantilla formateada json
para cada pila. Si la aplicación contiene una sola pila, se imprime en stdout
una plantilla formateada yaml
. 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 su aplicación de CDK contiene varias pilas, puede proporcionar el identificador 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 ejecutas, el CDK cdk deploy
CLI sintetizará automáticamente su pila antes de la implementación.
Cómo funciona la síntesis de forma predeterminada
Generó lógica IDs en su plantilla AWS CloudFormation
Al sintetizar una pila de CDK para producir una CloudFormation plantilla, la lógica IDs se genera a partir de las siguientes fuentes, con el siguiente formato: <construct-path><construct-ID><unique-hash>
-
Ruta del constructo: la ruta completa al constructo en su aplicación de CDK. Esta ruta no incluye el identificador del constructo de nivel uno, que siempre es
Resource
oDefault
, ni el identificador de la pila de nivel superior de la que forma parte. -
Identificador del constructo: el identificador que se proporciona como segundo argumento al crear una instancia del constructo.
-
Hash único: AWS CDK genera un hash único de 8 caracteres mediante un algoritmo de hash determinista. Este hash único ayuda a garantizar que los valores de identificadores lógicos de la plantilla sean únicos entre sí. El comportamiento determinista de esta generación de hash garantiza que el valor de identificador lógico generado para cada constructo permanezca igual cada vez que se realice la síntesis. El valor hash solo cambiará si se modifican valores de constructo específicos, como el identificador del constructo o su ruta.
IDs Los lógicos tienen una longitud máxima de 255 caracteres. Por lo tanto, AWS CDK truncará la ruta de construcción y el ID de construcción si es necesario para mantenerse dentro de ese límite.
A continuación, se muestra un ejemplo de un constructo que define un bucket de Amazon Simple Storage Service (Amazon S3). Aquí, pasamos myBucket
como identificador de nuestro constructo:
import * as cdk from 'aws-cdk-lib';
import { Construct} from 'constructs';
import * as s3 from 'aws-cdk-lib/aws-s3';
export class MyCdkAppStack extends cdk.Stack {
constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
// Define the S3 bucket
new s3.Bucket(this, 'myBucket', {
versioned: true,
removalPolicy: cdk.RemovalPolicy.DESTROY,
});
}
}
Cuando ejecutamos cdk synth
, se genera un identificador lógico con el formato de myBucket
. A continuación se muestra un ejemplo de este recurso en la plantilla generada AWS CloudFormation :unique-hash
Resources:
myBucket5AF9C99B:
Type: AWS::S3::Bucket
Properties:
VersioningConfiguration:
Status: Enabled
UpdateReplacePolicy: Delete
DeletionPolicy: Delete
Metadata:
aws:cdk:path: S3BucketAppStack/myBucket/Resource
A continuación, se muestra un ejemplo de un constructo llamado Bar
que define un bucket de Amazon S3. El constructo Bar
incluye el constructo personalizado Foo
en su ruta:
import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
import * as s3 from 'aws-cdk-lib/aws-s3';
// Define the Bar construct
export class Bar extends Construct {
constructor(scope: Construct, id: string) {
super(scope, id);
// Define an S3 bucket inside of Bar
new s3.Bucket(this, 'Bucket', {
versioned: true,
removalPolicy: cdk.RemovalPolicy.DESTROY,
} );
}
}
// Define the Foo construct
export class Foo extends Construct {
constructor(scope: Construct, id: string) {
super(scope, id);
// Create an instance of Bar inside Foo
new Bar(this, 'Bar');
}
}
// Define the CDK stack
export class MyCustomAppStack extends cdk.Stack {
constructor(scope: Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
// Instantiate Foo construct in the stack
new Foo(this, 'Foo');
}
}
Cuando ejecutamos cdk synth
, se genera un identificador lógico con el formato de FooBarBucket
. El siguiente es un ejemplo de este recurso en la AWS CloudFormation plantilla generada:unique-hash
Resources:
FooBarBucketBA3ED1FA:
Type: AWS::S3::Bucket
Properties:
VersioningConfiguration:
Status: Enabled
UpdateReplacePolicy: Delete
DeletionPolicy: Delete
# ...
Personalice la síntesis de pilas de CDK
Si el comportamiento predeterminado de la síntesis de CDK no satisface sus necesidades, puede personalizar la síntesis de CDK. Para hacerlo, modifique DefaultStackSynthesizer
, utilice otros sintetizadores integrados disponibles o cree su propio sintetizador. Para obtener instrucciones, consulte Personalizar la síntesis de pilas de CDK.