Seleccione sus preferencias de cookies

Usamos cookies esenciales y herramientas similares que son necesarias para proporcionar nuestro sitio y nuestros servicios. Usamos cookies de rendimiento para recopilar estadísticas anónimas para que podamos entender cómo los clientes usan nuestro sitio y hacer mejoras. Las cookies esenciales no se pueden desactivar, pero puede hacer clic en “Personalizar” o “Rechazar” para rechazar las cookies de rendimiento.

Si está de acuerdo, AWS y los terceros aprobados también utilizarán cookies para proporcionar características útiles del sitio, recordar sus preferencias y mostrar contenido relevante, incluida publicidad relevante. Para aceptar o rechazar todas las cookies no esenciales, haga clic en “Aceptar” o “Rechazar”. Para elegir opciones más detalladas, haga clic en “Personalizar”.

Solución de AWS CDK problemas comunes

Modo de enfoque
Solución de AWS CDK problemas comunes - AWS Cloud Development Kit (AWS CDK) v2

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.

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.

En este tema se describe cómo solucionar los siguientes problemas con AWS CDK.

Tras actualizar el AWS CDK, el AWS CDK kit de herramientas (CLI) informa de una discordancia con la biblioteca Construct AWS

La versión del AWS CDK kit de herramientas (que proporciona el cdk comando) debe ser al menos igual a la versión del módulo principal de AWS Construct Library,. aws-cdk-lib El kit de herramientas se diseñó para ser compatible con versiones anteriores. La última versión 2.x del kit de herramientas se puede utilizar con cualquier versión 1.x o 2.x de la biblioteca. Por esta razón, le recomendamos que instale este componente de forma global y lo mantenga actualizado.

npm update -g aws-cdk

Si necesita trabajar con varias versiones del kit de AWS CDK herramientas, instale una versión específica del kit de herramientas de forma local en la carpeta de su proyecto.

Si está utilizando TypeScript o JavaScript, el directorio de su proyecto ya contiene una copia local versionada del kit de herramientas del CDK.

Si utiliza otro idioma, úselo npm para instalar el AWS CDK kit de herramientas, omitiendo la -g marca y especificando la versión deseada. Por ejemplo:

npm install aws-cdk@2.0

Para ejecutar un AWS CDK kit de herramientas instalado localmente, utilice el comando npx aws-cdk en lugar de solo. cdk Por ejemplo:

npx aws-cdk deploy MyStack

npx aws-cdkejecuta la versión local del AWS CDK kit de herramientas, si existe alguna. Esta recurre a la versión global cuando un proyecto no tiene una instalación local. Puede que le resulte conveniente configurar un alias en el intérprete de comandos para asegurarse de que el cdk siempre se invoque de esta manera.

macOS/Linux
alias cdk="npx aws-cdk"
Windows
doskey cdk=npx aws-cdk $*
alias cdk="npx aws-cdk"

(volver a la lista)

Al implementar mi AWS CDK pila, recibo un error NoSuchBucket

Su AWS entorno no se ha iniciado y, por lo tanto, no tiene un bucket de Amazon S3 para almacenar los recursos durante la implementación. Puede crear un bucket transitorio y otros recursos necesarios con el siguiente comando:

cdk bootstrap aws://ACCOUNT-NUMBER/REGION

Para evitar que se generen AWS cargos inesperados, AWS CDK no arranca automáticamente ningún entorno. Usted debe arrancar de forma explícita cada entorno en el que vaya a realizar implementaciones.

De forma predeterminada, los recursos de arranque se crean en la región o regiones que utilizan las pilas de la aplicación de AWS CDK actual. Como alternativa, se crean en la región especificada en su AWS perfil local (establecida poraws configure), utilizando la cuenta de ese perfil. Puede especificar una cuenta y una región diferentes en la línea de comandos de la siguiente manera. (Debe especificar la cuenta y la región en caso de no encontrarse en el directorio de una aplicación).

cdk bootstrap aws://ACCOUNT-NUMBER/REGION

Para obtener más información, consulte AWS CDK arranque.

(volver a la lista)

Al implementar mi AWS CDK pila, recibo un forbidden: null mensaje

La pila que está implementando requiere recursos de arranque, pero está utilizando una cuenta o un rol de IAM que no tiene permiso para escribir en ella. (El bucket transitorio se usa cuando se implementan pilas que contienen activos o que sintetizan una plantilla de AWS CloudFormation de más de 50 000). Utilice un rol o cuenta que tenga permiso para realizar la acción s3:* en el bucket que se menciona en el mensaje de error.

(volver a la lista)

Al sintetizar una AWS CDK pila, recibo el mensaje --app is required either in command-line, in cdk.json or in ~/.cdk.json

Este mensaje normalmente significa que no estás en el directorio principal de tu AWS CDK proyecto cuando lo publicas. cdk synth El archivo cdk.json de este directorio, creado por el cdk init comando, contiene la línea de comandos necesaria para ejecutar (y, por lo tanto, sintetizar) AWS CDK la aplicación. En el caso de una TypeScript aplicación, por ejemplo, el valor cdk.json predeterminado es el siguiente:

{ "app": "npx ts-node bin/my-cdk-app.ts" }

Te recomendamos que cdk emitas comandos solo en el directorio principal de tu proyecto, de modo que el AWS CDK kit de herramientas pueda cdk.json encontrarlos allí y ejecutar tu aplicación correctamente.

Si esto no resulta práctico por alguna razón, el AWS CDK kit de herramientas busca la línea de comandos de la aplicación en otras dos ubicaciones:

  • En cdk.json en el directorio principal

  • En el mismo comando cdk synth al usar la opción -a

Por ejemplo, puedes sintetizar una pila de una TypeScript aplicación de la siguiente manera.

cdk synth --app "npx ts-node my-cdk-app.ts" MyStack

(volver a la lista)

Al sintetizar una AWS CDK pila, recibo un error porque la AWS CloudFormation plantilla contiene demasiados recursos

AWS CDK Genera e implementa AWS CloudFormation plantillas. AWS CloudFormation tiene un límite estricto en la cantidad de recursos que puede contener una pila. Con el AWS CDK, puedes superar este límite más rápido de lo que cabría esperar.

nota

El límite AWS CloudFormation de recursos es de 500 al momento de escribir este artículo. Consulte las cuotas de AWS CloudFormation para ver el límite de recursos actual.

Las estructuras de nivel superior basadas en la intención de la biblioteca AWS Construct proporcionan automáticamente todos los recursos auxiliares necesarios para el registro, la administración de claves, la autorización y otros fines. Por ejemplo, al otorgar acceso a un recurso desde otro, se generan objetos IAM necesarios para que los servicios relevantes puedan comunicarse.

Según nuestra experiencia, el uso real de construcciones basadas en la intención genera de 1 a 5 AWS CloudFormation recursos por construcción, aunque esto puede variar. En el caso de las aplicaciones sin servidor, lo habitual es disponer de 5 a 8 recursos por punto final AWS de la API.

Los patrones, que representan un mayor nivel de abstracción, permiten definir incluso más AWS recursos con incluso menos código. ¡El AWS CDK código deEjemplo: crear un AWS Fargate servicio mediante el AWS CDK, por ejemplo, genera más de 50 AWS CloudFormation recursos y define solo tres construcciones!

Superar el límite AWS CloudFormation de recursos es un error durante la AWS CloudFormation síntesis. AWS CDK Emite una advertencia si tu pila supera el 80% del límite. Puede usar un límite diferente tras configurar la propiedad maxResources en la pila, o deshabilitar la validación al configurar maxResources en 0.

sugerencia

Puede obtener un recuento exacto de los recursos en su salida sintetizada utilizando el siguiente script de utilidad. (Como todos los AWS CDK desarrolladores necesitan Node.js, el script está escrito en él) JavaScript.

// rescount.js - count the resources defined in a stack // invoke with: node rescount.js <path-to-stack-json> // e.g. node rescount.js cdk.out/MyStack.template.json import * as fs from 'fs'; const path = process.argv[2]; if (path) fs.readFile(path, 'utf8', function(err, contents) { console.log(err ? `${err}` : `${Object.keys(JSON.parse(contents).Resources).length} resources defined in ${path}`); }); else console.log("Please specify the path to the stack's output .json file");

A medida que el recuento de recursos de su pila se acerque al límite, considere la posibilidad de rediseñar la arquitectura para reducir la cantidad de recursos que contiene la pila: por ejemplo, combine algunas funciones de Lambda o divida la pila en varias pilas. CDK admite referencias entre pilas, por lo que puede separar la funcionalidad de su aplicación en pilas diferentes de la forma que más le convenga.

nota

AWS CloudFormation los expertos suelen sugerir el uso de pilas anidadas como solución al límite de recursos. AWS CDK Apoya este enfoque a través del NestedStackconstructo.

(volver a la lista)

Especifiqué tres (o más) zonas de disponibilidad para mi grupo de escalado automático o VPC, pero solo se implementó en dos

Para obtener el número de zonas de disponibilidad que solicita, especifique la cuenta y la región en la propiedad env de la pila. Si no especificas ambos, de forma predeterminada AWS CDK, sintetiza la pila como independiente del entorno. A continuación, puede implementar la pila en una región específica utilizando. AWS CloudFormation Como algunas regiones solo tienen dos zonas de disponibilidad, una plantilla independiente del entorno no utiliza más de dos.

nota

En el pasado, las regiones se lanzaban ocasionalmente con una sola zona de disponibilidad. AWS CDK Las pilas independientes del entorno no se pueden implementar en dichas regiones. Sin embargo, al momento de escribir este artículo, todas AWS las regiones tienen al menos dos. AZs

Puede cambiar este comportamiento mediante la anulación de la propiedad de su pila availablilityZones (Python: availability_zones) para especificar de forma explícita las zonas que quiere usar.

Para obtener más información acerca de cómo establecer la cuenta y la región de una pila en el momento de la síntesis y, al mismo tiempo, mantener la flexibilidad de implementarla en cualquier región, consulte Entornos para AWS CDK.

(volver a la lista)

Mi bucket de S3, mi tabla de DynamoDB u otro recurso no se eliminan cuando ejecuto cdk destroy

De forma predeterminada, los recursos que pueden contener datos de usuario tienen la propiedad removalPolicy (Python:removal_policy) de RETAIN, y el recurso no se elimina cuando se destruye la pila. En su lugar, el recurso queda huérfano de la pila. A continuación, una vez que se destruya la pila, debe eliminar el recurso de forma manual. Hasta que lo haga, se producirá un error al volver a implementar la pila. Esto se debe a que el nombre del nuevo recurso que se crea durante la implementación entra en conflicto con el nombre del recurso huérfano.

Si establece una política de eliminación de un recurso en DESTROY, ese recurso se eliminará cuando se destruya la pila.

TypeScript
import * as cdk from 'aws-cdk-lib'; import { Construct } from 'constructs'; import * as s3 from 'aws-cdk-lib/aws-s3'; export class CdkTestStack extends cdk.Stack { constructor(scope: Construct, id: string, props?: cdk.StackProps) { super(scope, id, props); const bucket = new s3.Bucket(this, 'Bucket', { removalPolicy: cdk.RemovalPolicy.DESTROY, }); } }
JavaScript
const cdk = require('aws-cdk-lib'); const s3 = require('aws-cdk-lib/aws-s3'); class CdkTestStack extends cdk.Stack { constructor(scope, id, props) { super(scope, id, props); const bucket = new s3.Bucket(this, 'Bucket', { removalPolicy: cdk.RemovalPolicy.DESTROY }); } } module.exports = { CdkTestStack }
Python
import aws_cdk as cdk from constructs import Construct import aws_cdk.aws_s3 as s3 class CdkTestStack(cdk.stack): def __init__(self, scope: Construct, id: str, **kwargs): super().__init__(scope, id, **kwargs) bucket = s3.Bucket(self, "Bucket", removal_policy=cdk.RemovalPolicy.DESTROY)
Java
software.amazon.awscdk.*; import software.amazon.awscdk.services.s3.*; import software.constructs; public class CdkTestStack extends Stack { public CdkTestStack(final Construct scope, final String id) { this(scope, id, null); } public CdkTestStack(final Construct scope, final String id, final StackProps props) { super(scope, id, props); Bucket.Builder.create(this, "Bucket") .removalPolicy(RemovalPolicy.DESTROY).build(); } }
C#
using Amazon.CDK; using Amazon.CDK.AWS.S3; public CdkTestStack(Construct scope, string id, IStackProps props) : base(scope, id, props) { new Bucket(this, "Bucket", new BucketProps { RemovalPolicy = RemovalPolicy.DESTROY }); }
import * as cdk from 'aws-cdk-lib'; import { Construct } from 'constructs'; import * as s3 from 'aws-cdk-lib/aws-s3'; export class CdkTestStack extends cdk.Stack { constructor(scope: Construct, id: string, props?: cdk.StackProps) { super(scope, id, props); const bucket = new s3.Bucket(this, 'Bucket', { removalPolicy: cdk.RemovalPolicy.DESTROY, }); } }
nota

AWS CloudFormation no puede eliminar un bucket de Amazon S3 que no esté vacío. Si establece la política de eliminación de un bucket de Amazon S3 en DESTROY y este contiene datos, el intento para destruir la pila fallará porque el bucket no puede eliminarse. Puede hacer que el AWS CDK elimine los objetos del bucket antes de intentar destruirlo al establecer la propiedad autoDeleteObjects del bucket en true.

(volver a la lista)

PrivacidadTérminos del sitioPreferencias de cookies
© 2025, Amazon Web Services, Inc o sus afiliados. Todos los derechos reservados.