AWS CDK aplicaciones - AWS Cloud Development Kit (AWS CDK) v2

Esta es la guía para AWS CDK desarrolladores de la versión 2. La versión anterior del CDK v1 entró en mantenimiento el 1 de junio de 2022 y dejó de ofrecer 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.

AWS CDK aplicaciones

La AWS Cloud Development Kit (AWS CDK) aplicación o aplicación es una colección de una o más pilas de CDK. Las pilas son un conjunto de una o más estructuras que definen AWS los recursos y las propiedades. Por lo tanto, la agrupación general de las pilas y construcciones se conoce como aplicación CDK.

Definir aplicaciones

Para crear una aplicación, defina una instancia de aplicación en el archivo de aplicación de su proyecto. Para ello, importe y utilice el componente fijo Appde la biblioteca AWS de componentes. La App construcción no requiere ningún argumento de inicialización. Es la única construcción que se puede utilizar como raíz.

StackLas clases App y de la biblioteca de AWS construcciones son construcciones únicas. En comparación con otras construcciones, no configuran AWS los recursos por sí mismas. En cambio, se utilizan para proporcionar contexto a las otras construcciones. Todos los constructos que representan AWS recursos deben definirse, directa o indirectamente, dentro del ámbito de un Stack constructo. Stacklas construcciones se definen dentro del ámbito de una App construcción.

Luego, las aplicaciones se sintetizan para crear AWS CloudFormation plantillas para tus pilas. A continuación, se muestra un ejemplo:

TypeScript
const app = new App(); new MyFirstStack(app, 'hello-cdk'); app.synth();
JavaScript
const app = new App(); new MyFirstStack(app, 'hello-cdk'); app.synth();
Python
app = App() MyFirstStack(app, "hello-cdk") app.synth()
Java
App app = new App(); new MyFirstStack(app, "hello-cdk"); app.synth();
C#
var app = new App(); new MyFirstStack(app, "hello-cdk"); app.Synth();
Go
app := awscdk.NewApp(nil) MyFirstStack(app, "MyFirstStack", &MyFirstStackProps{ awscdk.StackProps{ Env: env(), }, }) app.Synth(nil)

Las pilas de una sola aplicación pueden hacer referencia fácilmente a los recursos y propiedades de las demás. AWS CDK Deduce las dependencias entre las pilas para poder desplegarlas en el orden correcto. Puedes implementar una o todas las pilas de una aplicación con un solo comando. cdk deploy

El árbol de construcción

Las construcciones se definen dentro de otras construcciones mediante el scope argumento que se pasa a cada construcción, con la App clase como raíz. De esta forma, una AWS CDK aplicación define una jerarquía de construcciones conocida como árbol de construcciones.

La raíz de este árbol es tu aplicación, que es una instancia de la App clase. Dentro de la aplicación, se crean instancias de una o más pilas. Dentro de las pilas, se crean instancias de componentes fijos, que a su vez pueden crear instancias de recursos u otros componentes, y así sucesivamente en el resto del árbol.

Los constructos siempre se definen de forma explícita dentro del ámbito de otro constructo, lo que crea relaciones entre los constructos. Casi siempre, debes pasar this (en Pythonself) como ámbito, lo que indica que la nueva construcción es un elemento secundario de la construcción actual. El patrón previsto consiste en derivar la construcción y, a continuación Construct, crear una instancia de las construcciones que utiliza en su constructor.

Pasar el ámbito de forma explícita permite que cada construcción se añada al árbol, y este comportamiento está contenido exclusivamente en la Construct clase base. Funciona de la misma manera en todos los idiomas admitidos por el AWS CDK y no requiere ninguna personalización adicional.

importante

Técnicamente, es posible pasar algún ámbito distinto this al de instanciar una construcción. Puedes añadir componentes fijos en cualquier parte del árbol o incluso en otra pila de la misma aplicación. Por ejemplo, puedes escribir una función de estilo mixto que añada construcciones a un ámbito pasado como argumento. La dificultad práctica en este caso es que no es fácil garantizar que los identificadores que elija para sus construcciones sean únicos dentro del ámbito de otra persona. Esta práctica también hace que el código sea más difícil de entender, mantener y reutilizar. Casi siempre es mejor encontrar una manera de expresar tu intención sin recurrir a abusar del scope argumento.

AWS CDK Utiliza los ID de todas las construcciones de la ruta desde la raíz del árbol hasta cada construcción secundaria para generar las ID únicas que necesita. AWS CloudFormation Este enfoque significa que los ID de construcción solo tienen que ser únicos dentro de su ámbito, y no en toda la pila, como en el caso de los nativos AWS CloudFormation. Sin embargo, si mueves una construcción a un ámbito diferente, el identificador único de la pila generado cambia y AWS CloudFormation no se considerará el mismo recurso.

El árbol de construcciones es independiente de las construcciones que definas en el código. AWS CDK Sin embargo, se puede acceder a él a través del node atributo de cualquier construcción, que es una referencia al nodo que representa esa construcción en el árbol. Cada nodo es una Nodeinstancia, cuyos atributos proporcionan acceso a la raíz del árbol y a los ámbitos principales y secundarios del nodo.

  1. node.children— Los hijos directos de la construcción.

  2. node.id— El identificador del constructo dentro de su ámbito.

  3. node.path— La ruta completa del constructo, incluidos los identificadores de todos sus padres.

  4. node.root— La raíz del árbol de construcción (la aplicación).

  5. node.scope— El ámbito (principal) de la construcción, o indefinido si el nodo es la raíz.

  6. node.scopes— Todos los padres de la construcción, hasta la raíz.

  7. node.uniqueId— El identificador alfanumérico único de esta construcción dentro del árbol (de forma predeterminada, se genera a partir de node.path un hash).

El árbol de construcciones define un orden implícito en el que las construcciones se sintetizan en recursos en la plantilla final. AWS CloudFormation Donde se debe crear un recurso antes que otro, AWS CloudFormation o la biblioteca de AWS construcción generalmente deduce la dependencia. A continuación, se aseguran de que los recursos se creen en el orden correcto.

También puede añadir una dependencia explícita entre dos nodos mediantenode.addDependency(). Para obtener más información, consulta las dependencias en la referencia de la AWS CDK API.

AWS CDK Proporciona una forma sencilla de visitar todos los nodos del árbol de construcción y realizar una operación en cada uno de ellos. Para obtener más información, consulte Aspectos.

El ciclo de vida de la aplicación

Al implementar la aplicación CDK, se llevan a cabo las siguientes fases. Esto se conoce como ciclo de vida de la aplicación:

Una AWS CDK aplicación pasa por las siguientes fases de su ciclo de vida.

  • Construcción (o inicialización): el código crea una instancia de todas las construcciones definidas y, a continuación, las vincula entre sí. En esta etapa, se instancian todas las construcciones (app, stacks y sus construcciones secundarias) y se ejecuta la cadena de constructores. La mayor parte del código de la aplicación se ejecuta en esta etapa.

  • Preparación: todas las construcciones que han implementado el prepare método participan en una ronda final de modificaciones para configurar su estado final. La fase de preparación se produce automáticamente. Como usuario, no ves ningún comentario sobre esta fase. Es poco frecuente que necesites usar el anzuelo de «preparar» y, por lo general, no se recomienda. Tenga mucho cuidado al mutar el árbol de construcción durante esta fase, ya que el orden de las operaciones podría afectar al comportamiento.

  • Validación: todas las construcciones que han implementado el validate método pueden validarse a sí mismas para garantizar que se encuentren en un estado que permita su despliegue correcto. Se le notificará cualquier error de validación que se produzca durante esta fase. Por lo general, te recomendamos que realices la validación lo antes posible (normalmente tan pronto como recibas información) y que descartes 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 garantiza que el código pueda seguir ejecutándose de forma segura.

  • Síntesis: esta es la etapa final de la ejecución de la AWS CDK aplicación. Se activa con una llamada aapp.synth(), recorre el árbol de construcción e invoca el synthesize método en todas las construcciones. Las construcciones que se implementan synthesize pueden participar en la síntesis y emitir artefactos de implementación al ensamblaje de nube resultante. Estos artefactos incluyen AWS CloudFormation plantillas, paquetes de AWS Lambda aplicaciones, activos de archivos e Docker imágenes y otros artefactos de implementación. Conjuntos en la nubedescribe el resultado de esta fase. En la mayoría de los casos, no necesitará implementar el synthesize método.

  • Despliegue: en esta fase, AWS CDK CLI se toman los artefactos de despliegue en la nube generados por la fase de síntesis y se despliegan en un AWS entorno. Carga los activos a Amazon S3 y Amazon ECR, o a cualquier lugar al que tengan que ir. A continuación, inicia una AWS CloudFormation implementación para implementar la aplicación y crear los recursos.

Cuando comience la fase de AWS CloudFormation implementación, la AWS CDK aplicación ya habrá finalizado y se habrá cerrado. Esto tiene las siguientes implicaciones:

  • La AWS CDK aplicación 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 despliegue, debes inyectarlo en la AWS CloudFormation plantilla como un recurso personalizado. Para obtener más información sobre cómo agregar un recurso personalizado a tu aplicación, consulta el AWS CloudFormation módulo o el ejemplo del recurso personalizado.

  • Es posible que la AWS CDK aplicación tenga que funcionar con valores que no se pueden conocer en el momento en que se ejecuta. Por ejemplo, si la AWS CDK aplicación 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 Token valor. Para determinar si un valor concreto está disponible, llama a cdk.isUnresolved(value) (Python:is_unresolved). Para obtener más información, consulte Tokens.

Conjuntos en la nube

La llamada a app.synth() es lo que indica que hay que AWS CDK sintetizar un ensamblaje en la nube a partir de una aplicación. Por lo general, no se interactúa directamente con los ensamblajes en la nube. Son archivos que incluyen todo lo necesario para implementar la aplicación en un entorno de nube. Por ejemplo, incluye una AWS CloudFormation plantilla para cada pila de la aplicación. También incluye una copia de cualquier recurso de archivo o imagen de Docker a los que hagas referencia en tu aplicación.

Consulte la especificación de ensamblaje en la nube para obtener detalles sobre el formato de los ensamblados en la nube.

Para interactuar con el ensamblaje de nubes que crea tu AWS CDK aplicación, normalmente usas el AWS CDK CLI. Sin embargo, cualquier herramienta que pueda leer el formato de ensamblaje en la nube se puede usar para implementar su aplicación.

Ejecutando tu aplicación

El CDK CLI necesita saber cómo ejecutar tu AWS CDK aplicación. Si creaste el proyecto a partir de una plantilla mediante el cdk init comando, el cdk.json archivo de tu aplicación incluye una app clave. Esta clave especifica el comando necesario para el idioma en el que está escrita la aplicación. Si tu idioma requiere compilación, la línea de comandos realiza este paso antes de ejecutar la aplicación, para que no te olvides de hacerlo.

TypeScript
{ "app": "npx ts-node --prefer-ts-exts bin/my-app.ts" }
JavaScript
{ "app": "node bin/my-app.js" }
Python
{ "app": "python app.py" }
Java
{ "app": "mvn -e -q compile exec:java" }
C#
{ "app": "dotnet run -p src/MyApp/MyApp.csproj" }
Go
{ "app": "go mod download && go run my-app.go" }

Si no creaste tu proyecto con el CDKCLI, o si deseas anular la línea de comandos incluidacdk.json, puedes usar --app esta opción 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 comillas como se muestra, ya que estos comandos contienen espacios. El comando cdk es un subcomando similar synth o deploy que le indica al CDK CLI lo que quieres hacer con tu aplicación. Siga esto con cualquier opción adicional necesaria para ese subcomando.

También AWS CDK CLI pueden interactuar directamente con un conjunto de nubes ya sintetizado. Para ello, pase el directorio en el que está almacenado el ensamblaje de la nube. --app En el siguiente ejemplo, se enumeran las pilas definidas en el ensamblaje de nube en el que se almacenan. ./my-cloud-assembly

$ cdk --app ./my-cloud-assembly ls