Esta es la guía para desarrolladores de AWS CDK v2. 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.
Arranque su entorno para utilizarlo con AWS CDK
Arranque su entorno de AWS para prepararlo para las implementaciones de pilas de AWS Cloud Development Kit (AWS CDK).
-
Para obtener una introducción a los entornos, consulte Entornos para AWS CDK.
-
Para obtener una introducción al arranque, consulte Arranque de AWS CDK.
Cómo arrancar su entorno
Puede utilizar la interfaz de línea de comandos de AWS CDK (la CLI de AWS) o la herramienta de implementación de AWS CloudFormation que prefiera para arrancar su entorno.
- Use la CLI de CDK
-
Puede usar el comando
cdk bootstrapde la CLI de CDK para arrancar su entorno. Este es el método que recomendamos si no necesita realizar modificaciones importantes en el arranque.- Arranque desde cualquier directorio de trabajo
-
Para arrancar desde cualquier directorio de trabajo, proporcione el entorno de arranque como un argumento de la línea de comandos. A continuación, se muestra un ejemplo:
$ cdk bootstrap <aws://123456789012/us-east-1>sugerencia
Si no tiene su número de cuenta de AWS, puede obtenerlo en la Consola de adminsitración de AWS. También puede utilizar el siguiente comando de la AWS CLI para mostrar la información de la cuenta predeterminada, incluido el número de cuenta:
$ aws sts get-caller-identitySi tiene perfiles con nombre en sus archivos
configycredentialsde AWS, utilice la opción--profilepara recuperar la información de la cuenta de un perfil específico. A continuación, se muestra un ejemplo:$ aws sts get-caller-identity --profile <prod>Para mostrar la región predeterminada, utilice el comando
aws configure get:$ aws configure get region $ aws configure get region --profile <prod>Al proporcionar un argumento, el prefijo
aws://es opcional. Lo siguiente es válido:$ cdk bootstrap <123456789012/us-east-1>Para arrancar varios entornos al mismo tiempo, proporcione varios argumentos:
$ cdk bootstrap <aws://123456789012/us-east-1> <aws://123456789012/us-east-2> - Arranque desde el directorio principal de un proyecto de CDK
-
Puede ejecutar
cdk bootstrapdesde el directorio principal de un proyecto de CDK que contenga un archivocdk.json. Si no proporciona un entorno como argumento, la CLI de CDK obtendrá la información del entorno de las fuentes predeterminadas, como sus archivosconfigycredentialso cualquier información del entorno especificada para la pila de CDK.Al arrancar desde el directorio principal de un proyecto de CDK, los entornos proporcionados a partir de los argumentos de la línea de comandos tienen prioridad sobre otras fuentes.
Para arrancar un entorno especificado en sus archivos
configycredentials, utilice la opción--profile:$ cdk bootstrap --profile <prod>Para obtener más información sobre el comando
cdk bootstrapy las opciones admitidas, consulte cdk bootstrap.
- Use cualquier herramienta de AWS CloudFormation
-
Puede copiar la plantilla de arranque
del repositorio de aws-cdk-cli GitHub u obtenerla con el comando cdk bootstrap --show-template. A continuación, utilice cualquier herramienta de AWS CloudFormation para implementar la plantilla en su entorno.Con este método, puede utilizar los conjuntos de pilas de AWS CloudFormation o AWS Control Tower. También puede usar la consola AWS CloudFormation o la interfaz de línea de comandos de AWS (AWS CLI). Puede realizar modificaciones en la plantilla antes de implementarla. Este método puede ser más flexible y adecuado para implementaciones a gran escala.
El siguiente es un ejemplo del uso de la opción
--show-templatepara recuperar y guardar la plantilla de arranque en su máquina local:nota
Si aparecen avisos de CDK en el resultado de la plantilla de AWS CloudFormation, proporcione la opción
--no-noticescon el comando.Para implementar esta plantilla mediante la CLI de CDK, puede ejecutar lo siguiente:
$ cdk bootstrap --template <bootstrap-template.yaml>El siguiente es un ejemplo del uso de la AWS CLI para implementar una plantilla:
Para obtener información sobre el uso de CloudFormation StackSets para arrancar varios entornos, consulte Arranque de varias cuentas de AWS para AWS CDK con CloudFormation StackSets
en el Blog de migraciones y operaciones en la nube de AWS.
Cuando arrancar su entorno
Debe iniciar cada entorno de AWS antes de implementarlo en el entorno. Recomendamos arrancar de forma proactiva cada entorno que desee utilizar. Puede hacerlo antes de planificar la implementación efectiva de las aplicaciones CDK en el entorno. Al arrancar sus entornos de forma proactiva, evita posibles problemas futuros, como conflictos de nombres de bucket de Amazon S3 o la implementación de aplicaciones CDK en entornos que no se iniciaron.
Está bien arrancar un entorno más de una vez. Si un entorno ya se inició, la pila de arranque se actualizará si es necesario. De lo contrario, no pasará nada.
Si intenta implementar una pila de CDK en un entorno que no arrancó, verá un error como el siguiente:
$ cdk deploy ✨ Synthesis time: 2.02s ❌ Deployment failed: Error: BootstrapExampleStack: SSM parameter /cdk-bootstrap/hnb659fds/version not found. Has the environment been bootstrapped? Please run 'cdk bootstrap' (see https://docs.aws.amazon.com/cdk/latest/guide/bootstrapping.html)
- Actualización de la pila de arranque
-
De forma periódica, el equipo de CDK actualizará la plantilla de arranque a una versión nueva. Cuando esto sucede, le recomendamos que actualice la pila de arranque. Si no personalizó el proceso de arranque, puede actualizar su pila de arranque con los mismos pasos que siguió para arrancar su entorno originalmente. Para obtener más información, consulte el historial de versiones de la plantilla de arranque.
Recursos predeterminados creados durante el arranque
- Roles de IAM creados durante el arranque
-
De forma predeterminada, el arranque aprovisiona los siguientes roles de AWS Identity and Access Management (IAM) en el entorno:
-
CloudFormationExecutionRole -
DeploymentActionRole -
FilePublishingRole -
ImagePublishingRole -
LookupRole
-
CloudFormationExecutionRole -
Este rol de IAM es un rol de servicio de CloudFormation que otorga permiso a CloudFormation para realizar implementaciones de pilas en su nombre. Este rol otorga a CloudFormation permiso para realizar llamadas a la API de AWS en su cuenta, incluida la implementación de pilas.
Al usar un rol de servicio, los permisos aprovisionados para el rol de servicio determinan qué acciones se pueden realizar en los recursos de CloudFormation. Sin este rol de servicio, las credenciales de seguridad que proporcione con la CLI de CDK determinarían lo que CloudFormation puede hacer.
-
DeploymentActionRole -
Este rol de IAM concede permiso para realizar implementaciones en su entorno. La CLI de CDK lo asume durante las implementaciones.
Al utilizar un rol para las implementaciones, puede realizar implementaciones entre cuentas, ya que el rol lo pueden asumir las identidades de AWS en otra cuenta.
-
FilePublishingRole -
Este rol de IAM concede permiso para realizar acciones contra el bucket de Amazon Simple Storage Service (Amazon S3) que arrancó, incluidas la carga y eliminación de activos. La CLI de CDK lo asume durante las implementaciones.
-
ImagePublishingRole -
Este rol de IAM concede permiso para realizar acciones contra el repositorio Amazon Elastic Container Registry (Amazon ECR) que arrancó. La CLI de CDK lo asume durante las implementaciones.
-
LookupRole -
Este rol de IAM otorga permiso de
readOnlypara buscar valores de contexto en el entorno de AWS. La CLI de CDK lo asume al realizar tareas como la síntesis de plantillas y las implementaciones.
-
- ID de recursos creados durante el arranque
-
Al implementar la plantilla de arranque predeterminada, los ID físicos de los recursos de arranque se crean con la siguiente estructura:
cdk-<qualifier>-<description>-<account-ID>-<Region>.-
Calificador: un valor de cadena único de nueve caracteres de
hnb659fds. El valor real no tiene importancia. -
Descripción: una descripción corta del recurso. Por ejemplo,
container-assets. -
ID de cuenta: el ID de la cuenta de AWS del entorno.
-
Región: la región de AWS del entorno.
El siguiente es un ejemplo de ID físico del bucket transitorio de Amazon S3 creado durante el arranque:
cdk-hnb659fds-assets-012345678910-us-west-1. -
Permisos que se deben utilizar al arrancar el entorno
Al arrancar un entorno de AWS, la identidad de IAM que realice el arranque debe disponer al menos de los siguientes permisos:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "cloudformation:*", "ecr:*", "ssm:*", "s3:*", "iam:*" ], "Resource": "*" } ] }
Con el tiempo, la pila de arranque, incluidos los recursos que se crean y los permisos que requieren, puede cambiar. Con cambios futuros, es posible que tenga que modificar los permisos necesarios para arrancar un entorno.
Personalice el arranque
Si la plantilla de arranque predeterminada no se ajusta a sus necesidades, puede personalizar el arranque de recursos a su entorno de las siguientes maneras:
-
Utilizar las opciones de línea de comandos con el comando
cdk bootstrap: este método es el mejor para realizar cambios pequeños y específicos que se admiten mediante las opciones de la línea de comandos. -
Modificar la plantilla de arranque predeterminada e implementarla: este método es el mejor para realizar cambios complejos o si desea tener un control total sobre la configuración de los recursos aprovisionados durante el arranque.
Para obtener más información sobre la personalización del proceso de arranque, consulte Personalizar el arranque de AWS CDK.
Proceso de arranque con CDK Pipelines
Si utiliza CDK Pipelines para realizar la implementación en el entorno de otra cuenta y recibe un mensaje como el siguiente:
Policy contains a statement with one or more invalid principals
Este mensaje de error significa que los roles de IAM adecuados no existen en el otro entorno. La causa más probable es que el entorno no arrancó. Arranque el entorno e inténtelo de nuevo.
- Proteja su pila de arranque para que no se elimine
-
Si se elimina una pila de arranque, también se eliminarán los recursos de AWS que se aprovisionaron originalmente en el entorno para respaldar las implementaciones del CDK. Esto hará que la canalización deje de funcionar. Si esto sucede, no existe una solución general para la recuperación.
Una vez que se arranque el entorno, no elimine ni vuelva a crear la pila de arranque del entorno. En su lugar, intente actualizar la pila de arranque a una nueva versión ejecutando el comando
cdk bootstrapde nuevo.Para evitar que se elimine accidentalmente la pila de arranque, le recomendamos que proporcione la opción
--termination-protectionjunto con el comandocdk bootstrappara habilitar la protección contra la terminación. Puede habilitar la protección contra la terminación en pilas de arranque nuevas o existentes. Para obtener instrucciones sobre cómo habilitar la protección de terminación, consulte Enable termination protection for the bootstrap stack.
Historial de versiones de la plantilla de arranque
La plantilla de arranque cuenta con control de versiones y evoluciona con el tiempo junto con el AWS CDK. Si proporciona su propia plantilla de arranque, manténgala actualizada mediante la plantilla canónica predeterminada. Querrá asegurarse de que su plantilla siga funcionando con todas las características del CDK.
nota
Las versiones anteriores de la plantilla de arranque creaban un entorno de clave de AWS KMS en cada entorno de arranque de forma predeterminada. Para evitar que se le cobre por la clave KMS, reinicie el arranque de estos entornos con --no-bootstrap-customer-key. El valor predeterminado actual es sin una clave KMS, lo que ayuda a evitar estos cargos.
Esta sección contiene una lista de los cambios realizados en cada versión.
| Versión de plantilla | Versión de la AWS CLI | Cambios |
|---|---|---|
|
1 |
1.40.0 |
Versión inicial de la plantilla con el bucket, la clave, el repositorio y los roles. |
|
2 |
1.45.0 |
Se dividió el rol del publicador de activos en roles independientes del publicador de archivos e imágenes. |
|
3 |
1.46.0 |
Se agregó la opción de exportación de |
|
4 |
1.61.0 |
Los permisos de AWS KMS ahora están implícitos a través de Amazon S3 y ya no es necesario |
|
5 |
1.87.0 |
El rol de implementación puede leer el parámetro SSM. |
|
6 |
1.108.0 |
Se agregó un rol de búsqueda independiente del rol de implementación. |
|
6 |
1.109.0 |
Se adjuntó una etiqueta |
|
7 |
1.110.0 |
El rol de implementación ya no puede leer directamente los buckets de la cuenta de destino. (Sin embargo, este rol es, en efecto, el de administrador y, de todos modos, siempre puede usar sus permisos de AWS CloudFormation para hacer que el bucket sea legible). |
|
8 |
1.114.0 |
El rol de búsqueda tiene permisos completos de solo lectura para el entorno de destino y también tiene una etiqueta de |
|
9 |
2.1.0 |
Corrige el rechazo de las cargas de activos de Amazon S3 por parte del SCP de cifrado al que se hace referencia comúnmente. |
|
10 |
2.4.0 |
Amazon ECR ScanOnPush ahora está habilitado de forma predeterminada. |
|
11 |
2.18.0 |
Agrega una política que permite a Lambda extraer datos de los repositorios de Amazon ECR para sobrevivir al reinicio del arranque. |
|
12 |
2.20.0 |
Agrega soporte para experimentos de |
|
13 |
2.25.0 |
Hace que las imágenes del contenedor de los repositorios de Amazon ECR creados en el arranque sean inmutables. |
|
14 |
2.34.0 |
Desactiva de forma predeterminada el escaneo de imágenes de Amazon ECR en el nivel del repositorio para permitir el arranque de regiones que no admiten el escaneo de imágenes. |
|
15 |
2.60.0 |
Las claves KMS no se pueden etiquetar. |
|
16 |
2.69.0 |
Aborda el resultado de Security HubKMS.2. |
|
17 |
2.72.0 |
Aborda el resultado de Security Hub ECR.3. |
|
18 |
2.80.0 |
Se revirtieron los cambios realizados en la versión 16, ya que no funcionan en todas las particiones y no se recomiendan. |
|
19 |
2.106.1 |
Se revirtieron los cambios realizados en la versión 18, en los que se eliminó la propiedad AccessControl de la plantilla. (#27964 |
|
20 |
2.119.0 |
Se agregó una acción |
|
21 |
2.149.0 |
Se agregó una condición al rol de publicación de archivos. |
|
22 |
2.160.0 |
Se agregaron permisos de |
|
23 |
2.161.0 |
Se agregaron permisos de |
|
24 |
2.165.0 |
Cambie el periodo de días durante el que se conservarán los objetos no actuales del bucket de arranque, de 365 a 30 días. Dado que el nuevo comando |
|
25 |
2.165.0 |
Agregue soporte al bucket de arranque para eliminar las cargas de varias partes incompletas. Las cargas de varias partes incompletas se eliminarán después de 1 día. Para obtener más información sobre este cambio, consulte |
|
26 |
2.1002.0 |
Agregue al recurso dos políticas relacionadas con la eliminación ( |
|
27 |
2.1003.0 |
Agregue una nueva política de recursos de Amazon ECR para conceder a Amazon EMR sin servidor permisos específicos para recuperar imágenes de contenedores. Para obtener más información sobre este cambio, consulte |
Actualización de una plantilla de arranque de heredada a una moderna
La versión 1 de AWS CDK admitía dos plantillas de arranque, heredada y moderna. CDK v2 solo admite la plantilla moderna. Como referencia, estas son las diferencias de alto nivel entre estas dos plantillas.
| Característica | Heredada (solo en la v1) | Moderna (v1 y v2) |
|---|---|---|
|
Implementaciones entre cuentas |
No permitido |
Permitido |
|
Permisos de AWS CloudFormation |
Se implementa con los permisos del usuario actual (determinados por el perfil AWS, las variables del entorno, etc.) |
Se implementa con los permisos especificados cuando se aprovisionó la pila de arranque (por ejemplo, mediante el uso de |
|
Control de versiones |
Solo hay disponible una versión de la pila de arranque |
La pila de arranque cuenta con control de versiones; se pueden agregar nuevos recursos en futuras versiones y las aplicaciones de AWS CDK pueden requerir una versión mínima |
|
Recursos* |
Bucket de Amazon S3 |
|
|
AWS Clave de KMS de |
Roles de IAM |
Repositorio de Amazon ECR |
|
Nombramiento de los recursos |
Se generan de forma automática |
Determinista |
|
Cifrado de bucket |
Clave predeterminada |
Clave administrada de AWS de forma predeterminada. Se puede personalizar para utilizar una clave administrada por el cliente. |
-
Agregaremos recursos adicionales a la plantilla de arranque según sea necesario.
Un entorno que arrancó con la plantilla heredada debe actualizarse para utilizar la plantilla moderna de CDK v2 mediante el reinicio del arranque. Vuelva a implementar todas las aplicaciones de AWS CDK del entorno al menos una vez antes de eliminar el bucket heredado.
Abordar los resultados de Security Hub
Si utiliza AWS Security Hub, es posible que vea un informe con los resultados sobre algunos de los recursos creados por el proceso de arranque de AWS CDK. Los resultados de Security Hub le ayudan a encontrar configuraciones de recursos que debe comprobar para garantizar su precisión y seguridad. Revisamos estas configuraciones de recursos específicas con AWS Security y estamos seguros de que no constituyen un problema de seguridad.
- [KMS.2] Los directores de IAM no deberían tener políticas integradas de IAM que permitan realizar acciones de descifrado en todas las claves de KMS
-
El rol de implementación (
DeploymentActionRole) otorga permiso para leer datos cifrados, lo cual es necesario para las implementaciones entre cuentas con CDK Pipelines. Las políticas de este rol no otorgan permisos a todos los datos. Solo concede permiso para leer datos cifrados de Amazon S3 y AWS KMS, y solo cuando esos recursos lo permiten a través de su política de claves o de bucket.A continuación, se incluye un fragmento de estas dos instrucciones sobre el rol de implementación de la plantilla de arranque:
DeploymentActionRole: Type: AWS::IAM::Role Properties: ... Policies: - PolicyDocument: Statement: ... - Sid: PipelineCrossAccountArtifactsBucket Effect: Allow Action: - s3:GetObject* - s3:GetBucket* - s3:List* - s3:Abort* - s3:DeleteObject* - s3:PutObject* Resource: "*" Condition: StringNotEquals: s3:ResourceAccount: Ref: AWS::AccountId - Sid: PipelineCrossAccountArtifactsKey Effect: Allow Action: - kms:Decrypt - kms:DescribeKey - kms:Encrypt - kms:ReEncrypt* - kms:GenerateDataKey* Resource: "*" Condition: StringEquals: kms:ViaService: Fn::Sub: s3.${AWS::Region}.amazonaws.com ...- Por qué Security Hub marca esto?
-
Las políticas contienen un
Resource: *combinado con una cláusulaCondition. Security Hub marca el comodín*. Este comodín se utiliza porque, en el momento en que se inicia la cuenta, la clave de AWS KMS creada por CDK Pipelines para el bucket de artefactos de CodePipeline aún no existe y, por lo tanto, ARN no puede hacer referencia a ella en la plantilla de arranque. Además, Security Hub no tiene en cuenta la cláusulaConditional hacer esta marca. EstaConditionlimitaResource: *a las solicitudes realizadas desde la misma cuenta de AWS de la clave de AWS KMS. Estas solicitudes deben provenir de Amazon S3 en la misma región de AWS que la clave de AWS KMS. - Tengo que corregir este resultado?
-
Mientras no haya modificado la clave de AWS KMS de la plantilla de arranque para que sea demasiado permisiva, el rol de implementación no permitirá más acceso del que necesita. Por lo tanto, no es necesario corregir este resultado.
- Qué sucede si quiero corregir este resultado?
-
La forma de solucionar este resultado dependerá de si utilizará o no CDK Pipelines para las implementaciones entre cuentas.
- Para corregir el resultado de Security Hub y utilizar CDK Pipelines para las implementaciones entre cuentas
-
-
Si aún no lo hizo, implemente la pila arranque de CDK mediante el comando
cdk bootstrap. -
Si aún no lo hizo, cree e implemente la Pipeline de CDK. Para obtener instrucciones, consulte Integración y entrega continuas (CI/CD) con CDK Pipelines.
-
Obtenga el ARN de la clave AWS KMS del bucket de artefactos de CodePipeline. Este recurso se crea durante la creación de la canalización.
-
Obtenga una copia de la plantilla de arranque de CDK para modificarla. A continuación, se muestra un ejemplo mediante la CLI de AWS CDK:
$ cdk bootstrap --show-template > bootstrap-template.yaml -
Modifique la plantilla mediante la sustitución del
Resource: *de la instrucciónPipelineCrossAccountArtifactsKeypor su valor de ARN. -
Implemente la plantilla para actualizar su pila de arranque. A continuación, se muestra un ejemplo mediante la CLI de CDK:
$ cdk bootstrap aws://<account-id>/<region> --template bootstrap-template.yaml
-
- Para solucionar el resultado de Security Hub si no utiliza CDK Pipelines para la implementación entre cuentas
-
-
Obtenga una copia de la plantilla de arranque de CDK para modificarla. A continuación, se muestra un ejemplo mediante la CLI de CDK:
$ cdk bootstrap --show-template > bootstrap-template.yaml -
Elimine las instrucciones
PipelineCrossAccountArtifactsBucketyPipelineCrossAccountArtifactsKeyde la plantilla. -
Implemente la plantilla para actualizar su pila de arranque. A continuación, se muestra un ejemplo mediante la CLI de CDK:
$ cdk bootstrap aws://<account-id>/<region> --template bootstrap-template.yaml
-
Consideraciones
Dado que el arranque aprovisiona recursos en su entorno, puede incurrir en cargos de AWS si esos recursos se utilizan con el AWS CDK.