Los identificadores y el AWS CDK - AWS Cloud Development Kit (AWS CDK) v2

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

Los identificadores y el AWS CDK

Al crear AWS Cloud Development Kit (AWS CDK) aplicaciones, utilizarás muchos tipos de identificadores y nombres. Para utilizarlos de AWS CDK forma eficaz y evitar errores, es importante entender los tipos de identificadores.

Los identificadores deben ser únicos dentro del ámbito en el que se crean; no es necesario que sean únicos a nivel mundial en su aplicación AWS CDK .

Si intentas crear un identificador con el mismo valor dentro del mismo ámbito, se generará AWS CDK una excepción.

Construye IDs

El identificador más común, id, es el identificador que se pasa como segundo argumento al crear una instancia de un objeto de constructo. Este identificador, como todos los identificadores, solo debe ser único dentro del ámbito en el que se creó, que es el primer argumento al crear una instancia un objeto de constructo.

nota

El id de una pila es también el identificador que se utiliza para hacer referencia a ella en la AWS CDK CLI referencia.

Veamos un ejemplo en el que tenemos dos constructos con el identificador MyBucket en nuestra aplicación. El primero se define en el ámbito de la pila con el identificador Stack1. El segundo se define en el ámbito de una pila con el identificador Stack2. Como se definen en ámbitos diferentes, esto no genera ningún conflicto y pueden coexistir en la misma aplicación sin problemas.

TypeScript
import { App, Stack, StackProps } from 'aws-cdk-lib'; import { Construct } from 'constructs'; import * as s3 from 'aws-cdk-lib/aws-s3'; class MyStack extends Stack { constructor(scope: Construct, id: string, props: StackProps = {}) { super(scope, id, props); new s3.Bucket(this, 'MyBucket'); } } const app = new App(); new MyStack(app, 'Stack1'); new MyStack(app, 'Stack2');
JavaScript
const { App , Stack } = require('aws-cdk-lib'); const s3 = require('aws-cdk-lib/aws-s3'); class MyStack extends Stack { constructor(scope, id, props = {}) { super(scope, id, props); new s3.Bucket(this, 'MyBucket'); } } const app = new App(); new MyStack(app, 'Stack1'); new MyStack(app, 'Stack2');
Python
from aws_cdk import App, Construct, Stack, StackProps from constructs import Construct from aws_cdk import aws_s3 as s3 class MyStack(Stack): def __init__(self, scope: Construct, id: str, **kwargs): super().__init__(scope, id, **kwargs) s3.Bucket(self, "MyBucket") app = App() MyStack(app, 'Stack1') MyStack(app, 'Stack2')
Java
// MyStack.java package com.myorg; import software.amazon.awscdk.App; import software.amazon.awscdk.Stack; import software.amazon.awscdk.StackProps; import software.constructs.Construct; import software.amazon.awscdk.services.s3.Bucket; public class MyStack extends Stack { public MyStack(final Construct scope, final String id) { this(scope, id, null); } public MyStack(final Construct scope, final String id, final StackProps props) { super(scope, id, props); new Bucket(this, "MyBucket"); } } // Main.java package com.myorg; import software.amazon.awscdk.App; public class Main { public static void main(String[] args) { App app = new App(); new MyStack(app, "Stack1"); new MyStack(app, "Stack2"); } }
C#
using Amazon.CDK; using constructs; using Amazon.CDK.AWS.S3; public class MyStack : Stack { public MyStack(Construct scope, string id, IStackProps props) : base(scope, id, props) { new Bucket(this, "MyBucket"); } } class Program { static void Main(string[] args) { var app = new App(); new MyStack(app, "Stack1"); new MyStack(app, "Stack2"); } }

Rutas

Los constructos de una AWS CDK aplicación forman una jerarquía basada en la App clase. Nos referimos a la colección IDs de un constructo dado, su constructo padre, su antepasado, etc. hasta la raíz del árbol del constructo, como ruta.

AWS CDK Por lo general, muestra las rutas de las plantillas en forma de cadena. Los niveles están separados por barras diagonales, empezando por el nodo situado inmediatamente debajo de la App instancia raíz, que suele ser una pila. IDs Por ejemplo, las rutas de los dos recursos de bucket de Amazon S3 del ejemplo de código anterior son Stack1/MyBucket y Stack2/MyBucket.

Puede proporcionar la ruta de cualquier constructo mediante programación, como se muestra en el siguiente ejemplo. Esto obtiene la ruta myConstruct (o my_construct, como lo escribirían los desarrolladores de Python). Como IDs deben ser únicas dentro del ámbito en el que se crean, sus rutas siempre son únicas dentro de una AWS CDK aplicación.

TypeScript
const path: string = myConstruct.node.path;
JavaScript
const path = myConstruct.node.path;
Python
path = my_construct.node.path
Java
String path = myConstruct.getNode().getPath();
C#
string path = myConstruct.Node.Path;

Únicos IDs

AWS CloudFormation requiere que toda la lógica IDs de una plantilla sea única. Por ello, AWS CDK debe poder generar un identificador único para cada construcción de una aplicación. Los recursos tienen rutas que son únicas a nivel mundial (los nombres de todos los ámbitos de la pila hasta un recurso específico). Por lo tanto, AWS CDK genera los identificadores únicos necesarios concatenando los elementos de la ruta y añadiendo un hash de 8 dígitos. (El hash es necesario para distinguir rutas distintas, como A/B/C yA/BC, que darían como resultado el mismo identificador. AWS CloudFormation AWS CloudFormation los identificadores son alfanuméricos y no pueden contener barras ni otros caracteres separadores.) Él AWS CDK llama a esta cadena el identificador único de la construcción.

En general, no es necesario que tu AWS CDK aplicación conozca lo que es únicoIDs. Sin embargo, es posible acceder al ID único de cualquier constructo mediante programación, como se muestra en el ejemplo siguiente.

TypeScript
const uid: string = Names.uniqueId(myConstruct);
JavaScript
const uid = Names.uniqueId(myConstruct);
Python
uid = Names.unique_id(my_construct)
Java
String uid = Names.uniqueId(myConstruct);
C#
string uid = Names.Uniqueid(myConstruct);

La dirección es otro tipo de identificador único que distingue de forma única CDK los recursos. Derivado del hash SHA -1 de la ruta, no es legible por humanos. Sin embargo, su longitud constante y relativamente corta (siempre 42 caracteres hexadecimales) la hace útil en situaciones en las que el ID único “tradicional” puede ser demasiado largo. Algunas construcciones pueden usar la dirección de la AWS CloudFormation plantilla sintetizada en lugar del identificador único. De nuevo, por lo general, la aplicación no debería necesitar conocer las direcciones de sus constructos, pero puede recuperar la dirección de un componente de la siguiente manera.

TypeScript
const addr: string = myConstruct.node.addr;
JavaScript
const addr = myConstruct.node.addr;
Python
addr = my_construct.node.addr
Java
String addr = myConstruct.getNode().getAddr();
C#
string addr = myConstruct.Node.Addr;

Lógico IDs

Los únicos IDs sirven como identificadores lógicos (o nombres lógicos) de los recursos en las AWS CloudFormation plantillas generadas para las construcciones que representan AWS recursos.

Por ejemplo, el bucket de Amazon S3 del ejemplo anterior que se crea dentro de Stack2 da como resultado un recurso de AWS::S3::Bucket. El identificador lógico del recurso se encuentra Stack2MyBucket4DD88B4F en la plantilla resultante AWS CloudFormation . (Para obtener más información sobre cómo se genera este identificador, consulte Únicos IDs).

Estabilidad de ID lógico

Evite cambiar el identificador lógico de un recurso una vez creado. AWS CloudFormation identifica los recursos por su identificador lógico. Por lo tanto, si cambia el identificador lógico de un recurso, AWS CloudFormation crea un nuevo recurso con el nuevo identificador lógico y, a continuación, elimina el existente. Según el tipo de recurso, esto puede provocar la interrupción del servicio, la pérdida de datos o ambas cosas.