Esta es la segunda versión de la Guía para desarrolladores de AWS CDK. 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.
Implementar aplicaciones de AWS CDK
Una implementación de AWS Cloud Development Kit (AWS CDK) es el proceso de aprovisionamiento de la infraestructura de AWS.
Funcionamiento de las implementaciones de AWS CDK
El AWS CDK utiliza el servicio de AWS CloudFormation para realizar implementaciones. Antes de la implementación, se sintetizan las pilas de CDK. Esto crea una plantilla de CloudFormation y artefactos de implementación para cada pila de CDK de la aplicación. Las implementaciones se inician desde una máquina de desarrollo local o desde un entorno de integración y entrega continuas (CI/CD). Durante la implementación, los activos se cargan en los recursos de inicio y la plantilla de CloudFormation se envía a CloudFormation para aprovisionar los recursos de AWS.
Para que la implementación se realice correctamente, se requiere lo siguiente:
-
La interfaz de línea de comandos de AWS CDK (CLI de AWS CDK) debe contar con permisos válidos.
-
El entorno de AWS debe estar iniciado.
-
El AWS CDK debe conocer los recursos de inicio en los que cargar los activos.
Requisitos previos para las implementaciones de CDK
Antes de poder implementar una aplicación de AWS CDK, debe ejecutar los siguientes pasos:
-
Configure las credenciales de seguridad para la CLI del CDK.
-
Inicie su entorno de AWS.
-
Configure un entorno de AWS para cada una de sus pilas de CDK.
-
Desarrolle su aplicación de CDK.
Configuración de credenciales de seguridad
Para utilizar la CLI del CDK a la hora de interactuar con AWS, debe configurar las credenciales de seguridad en su máquina local. Para obtener instrucciones, consulte Configuración de las credenciales de seguridad para la CLI de AWS CDK.
Inicie su entorno de AWS
Una implementación siempre está asociada a uno o más entornos de AWS. Antes de poder realizar la implementación, primero se debe iniciar el entorno. El inicio aprovisiona recursos en su entorno que el CDK utiliza para realizar y gestionar las implementaciones. Estos recursos incluyen un bucket de Amazon Simple Storage Service (Amazon S3) y un repositorio de Amazon Elastic Container Registry (Amazon ECR) para almacenar y gestionar los activos. Estos recursos también incluyen roles AWS Identity and Access Management (IAM) que se utilizan para proporcionar permisos durante el desarrollo y la implementación.
Le recomendamos que utilice el comando cdk bootstrap
de la interfaz de línea de comandos del AWS CDK (la CLI del AWS CDK) para iniciar el entorno. Si es necesario, puede personalizar el inicio o crear estos recursos manualmente en su entorno. Para obtener instrucciones, consulte Arranque su entorno para utilizarlo con AWS CDK.
Configure los entornos de AWS
Cada pila del CDK debe estar asociada a un entorno para determinar dónde se implementa la pila. Para obtener instrucciones, consulte Configuración de los entornos para usarlos con AWS CDK.
Desarrolle su aplicación del CDK
Dentro de un proyecto de CDK, usted crea y desarrolla su aplicación de CDK. Dentro de la aplicación, se crean una o más pilas de CDK. Dentro de sus pilas, puede importar y usar constructos de la Biblioteca de constructos de AWS para definir su infraestructura. Antes de poder implementarla, la aplicación de CDK debe contener al menos una pila.
Síntesis de aplicaciones del CDK
Para realizar la síntesis, le recomendamos que utilice el comando cdk synth
de la CLI del CDK. El comando cdk
deploy
también realizará una síntesis antes de iniciar la implementación. Sin embargo, usando cdk
synth
, puede validar su aplicación de CDK y detectar errores antes de iniciar la implementación.
El comportamiento de la síntesis está determinado por el sintetizador de pila que configure para la pila del CDK. Si no configura un sintetizador, se utilizará DefaultStackSynthesizer
. También puede configurar y personalizar la síntesis para que se adapte a sus necesidades. Para obtener instrucciones, consulte Configurar y realizar la síntesis de pilas de CDK.
Para que la plantilla sintetizada de CloudFormation se implemente correctamente en su entorno, debe ser compatible con la forma en que se inició su entorno. Por ejemplo, la plantilla de CloudFormation debe especificar el bucket de Amazon S3 correcto en el que implementar los activos. Si utiliza el método predeterminado para iniciar su entorno, el sintetizador de pilas predeterminado funcionará. Si personaliza el comportamiento del CDK, por ejemplo, si personaliza el inicio o la síntesis, el comportamiento de implementación del CDK puede variar.
El ciclo de vida de la aplicación
Al realizar la síntesis, la aplicación del CDK pasa por las siguientes fases, conocidas como el ciclo de vida de la aplicación:
- Construcción (o inicialización)
-
El código crea instancias de todos los constructos definidos y, a continuación, los vincula entre sí. En esta etapa, se crean instancias de todos los constructos (aplicación, pilas y constructos secundarios) y se ejecuta la cadena de constructos. La mayor parte del código de la aplicación se ejecuta en esta etapa.
- Preparación
-
Todos los constructos que han implementado el método
prepare
participan en una ronda final de modificaciones para configurar su estado final. La fase de preparación se produce automáticamente. Como usuario, no ve ningún comentario de esta fase. Es poco frecuente que necesite usar el enlace de “prepare” y, por lo general, no se recomienda. Tenga mucho cuidado al mutar el árbol de constructos durante esta fase, ya que el orden de las operaciones podría afectar al comportamiento.Durante esta fase, una vez que se haya creado el árbol de constructos, también se aplicarán todos los aspectos que haya configurado.
- Validación
-
Todos los constructos que han implementado el método
validate
pueden validarse a sí mismos para garantizar que se encuentren en un estado que permita su correcta implementación. Se le notificará de cualquier error de validación que se produzca durante esta fase. Por lo general, le recomendamos que realice la validación lo antes posible (normalmente tan pronto como reciba información) y que descarte las excepciones lo antes posible. Realizar la validación de forma temprana mejora la fiabilidad, ya que los seguimientos de las pilas son más precisos y garantizan que el código pueda seguir ejecutándose de forma segura. - Síntesis
-
Esta es la etapa final de la ejecución de la aplicación de CDK. Se activa con una llamada a
app.synth()
, recorre el árbol de constructos e invoca el métodosynthesize
en todos los constructos. Los constructos que implementansynthesize
pueden participar en la síntesis y producir artefactos de implementación para el montaje en la nube resultante. Estos artefactos incluyen plantillas de CloudFormation, paquetes de aplicaciones AWS Lambda, activos de archivos e imágenes de Docker y otros artefactos de implementación. En la mayoría de los casos, no necesitará implementar el métodosynthesize
.
Ejecute una aplicación
La CLI del CDK necesita saber cómo ejecutar su aplicación de CDK. Si creó el proyecto a partir de una plantilla mediante el comando cdk init
, el archivo cdk.json
de su aplicación incluye una clave de app
. Esta clave especifica el comando necesario para el lenguaje en el que está escrita la aplicación. Si su lenguaje requiere compilación, la línea de comandos realiza este paso antes de ejecutar la aplicación automáticamente.
Si no creó su proyecto con la CLI del CDK o si desea anular la línea de comandos incluida en cdk.json
, puede proporcionar la opción --app
al ejecutar el comando cdk
.
$
cdk --app 'executable
'cdk-command
...
La parte ejecutable
del comando indica el comando que debe ejecutarse para ejecutar la aplicación CDK. Use las comillas como se muestra, ya que estos comandos contienen espacios. cdk-command
es un subcomando similar a synth
o deploy
que le indica a la CLI del CDK lo que quiere hacer con su aplicación. Siga esto con cualquier opción adicional necesaria para ese subcomando.
La CLI del CDK también puede interactuar directamente con un montaje en la nube ya sintetizado. Para ello, pase el directorio en el que está almacenado el montaje en la nube en --app
. En el siguiente ejemplo, se enumeran las pilas definidas en el montaje en la nube almacenado en ./my-cloud-assembly
.
$
cdk --app./my-cloud-assembly
ls
Montajes en la nube
La llamada a app.synth()
es lo que le indica al AWS CDK que hay que sintetizar un montaje en la nube a partir de una aplicación. Por lo general, no se interactúa directamente con los montajes en la nube. Son archivos que incluyen todo lo necesario para implementar la aplicación en un entorno de nube. Por ejemplo, incluye una plantilla de AWS CloudFormation para cada pila de la aplicación. También incluye una copia de cualquier archivo, activo o imagen de Docker a los que haga referencia en su aplicación.
Consulte la especificación del montaje en la nube
Para interactuar con el montaje en la nube que crea su aplicación de AWS CDK, normalmente usará la CLI de AWS CDK. Sin embargo, se puede usar cualquier herramienta que pueda leer el formato del montaje en la nube para implementar su aplicación.
Implementar la aplicación
Para implementar la aplicación, le recomendamos que utilice el comando cdk deploy
de la CLI del CDK para iniciar las implementaciones o configurar las implementaciones automatizadas.
Cuando ejecuta cdk deploy
, la CLI del CDK inicia cdk synth
para prepararse para la implementación. En el siguiente diagrama, se ilustra el ciclo de vida de una aplicación en el contexto de una implementación:
Durante la implementación, la CLI del CDK toma el montaje en la nube producido por la síntesis y lo implementa en un entorno de AWS. Los activos se cargan en Amazon S3 y Amazon ECR y la plantilla de CloudFormation se envía a AWS CloudFormation para su implementación.
Cuando comience la fase de implementación de AWS CloudFormation, su aplicación de CDK ya habrá terminado de ejecutarse y se habrá cerrado. Esto tiene las siguientes implicaciones:
-
La aplicación del CDK no puede responder a los eventos que se producen durante la implementación, como la creación de un recurso o la finalización de toda la implementación. Para ejecutar el código durante la fase de implementación, debe inyectarlo a la plantilla de AWS CloudFormation como un recurso personalizado. Para obtener más información sobre cómo agregar un recurso personalizado a su aplicación, consulte el módulo de AWS CloudFormation o el ejemplo del recurso personalizado
. También puede configurar el módulo Triggers para que ejecute código durante las implementaciones. -
Es posible que la aplicación del CDK tenga que funcionar con valores que no se pueden conocer al momento en que se ejecuta. Por ejemplo, si la aplicación de AWS CDK define un bucket de Amazon S3 con un nombre generado automáticamente y usted recupera el atributo
bucket.bucketName
(Python:bucket_name
), ese valor no es el nombre del bucket implementado. En su lugar, se obtiene un valor deToken
. Para determinar si un valor concreto está disponible, realice una llamada acdk.isUnresolved(value)
(Python:is_unresolved
). Para obtener más información, consulte Token y AWS CDK.
Permisos de implementación
Antes de poder realizar la implementación, se deben establecer los permisos. El siguiente diagrama ilustra los permisos que se utilizan durante una implementación predeterminada, cuando se utiliza el proceso de inicio y el sintetizador de pilas predeterminados:
- Actor inicia la implementación
-
Un actor inicia las implementaciones mediante la CLI del CDK. Un actor puede ser una persona o un servicio como AWS CodePipeline.
Si es necesario, la CLI del CDK ejecuta
cdk synth
cuando usted ejecutecdk deploy
. Durante la síntesis, la identidad de AWS asume el rolLookupRole
para realizar búsquedas de contexto en el entorno de AWS. - Los permisos están establecidos
-
En primer lugar, las credenciales de seguridad del actor se utilizan para autenticarse con AWS y obtener la primera identidad de IAM del proceso. Para actores humanos, la forma en que configure las credenciales de seguridad depende de la forma en que usted o su organización administren los usuarios. Para obtener más información, consulte Configuración de las credenciales de seguridad para la CLI de AWS CDK. Para los actores de servicio, como CodePipeline, se asume y utiliza un rol de ejecución de IAM.
A continuación, los roles de IAM creados en el entorno de AWS durante el inicio se utilizan para establecer los permisos necesarios para realizar las acciones necesarias para la implementación. Para obtener más información acerca de los roles y sus permisos, consulte Roles de IAM creados durante el arranque. Este proceso consta de los pasos siguientes:
-
La identidad de AWS asume el rol
DeploymentActionRole
y transfiere el rolCloudFormationExecutionRole
a CloudFormation, lo que garantiza que CloudFormation asuma el rol cuando realice cualquier acción en su entorno de AWS.DeploymentActionRole
otorga permiso para realizar implementaciones en su entorno yCloudFormationExecutionRole
determina qué acciones puede realizar CloudFormation. -
La identidad de AWS asume el rol
FilePublishingRole
, lo que determina las acciones que se pueden realizar en el bucket de Amazon S3 creado durante el inicio. -
La identidad de AWS asume el rol
ImagePublishingRole
, lo que determina las acciones que se pueden realizar en el repositorio de Amazon ECR creado durante el inicio. -
Durante la síntesis, la identidad de AWS asume el rol
LookupRole
para realizar búsquedas de contexto en el entorno de AWS. Esta acción también se puede realizar durante la síntesis de plantillas.
-
- Se realiza la implementación
-
Durante la implementación, la CLI del CDK lee el parámetro de la versión de inicio para confirmar el número de versión de inicio. AWS CloudFormation también lee este parámetro al momento de la implementación para confirmarlo. Si los permisos en todo el flujo de trabajo de implementación son válidos, se realiza la implementación. Los activos se cargan en los recursos de inicio y la plantilla de CloudFormation producida en la síntesis se implementa mediante el servicio de CloudFormation como una pila de CloudFormation para aprovisionar los recursos.