Identificadores e o AWS CDK - AWS Cloud Development Kit (AWS CDK) v2

Este é o Guia do Desenvolvedor AWS CDK v2. A versão CDK 1 mais antiga entrou em manutenção em 1º de junho de 2022 e encerrou o suporte em 1º de junho de 2023.

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Identificadores e o AWS CDK

Ao criar AWS Cloud Development Kit (AWS CDK) aplicativos, você usará vários tipos de identificadores e nomes. Para usá-los de AWS CDK forma eficaz e evitar erros, é importante entender os tipos de identificadores.

Os identificadores devem ser exclusivos dentro do escopo em que foram criados; eles não precisam ser globalmente exclusivos em seu AWS CDK aplicativo.

Se você tentar criar um identificador com o mesmo valor dentro do mesmo escopo, isso AWS CDK gerará uma exceção.

Construir IDs

O identificador mais comum,id, é o identificador passado como segundo argumento ao instanciar um objeto de construção. Esse identificador, como todos os identificadores, só precisa ser exclusivo dentro do escopo em que foi criado, que é o primeiro argumento ao instanciar um objeto de construção.

nota

O id de uma pilha também é o identificador que você usa para se referir a ela noAWS CDK CLI referência.

Vejamos um exemplo em que temos duas construções com o identificador amzn-s3-demo-bucket em nosso aplicativo. O primeiro é definido no escopo da pilha com o identificadorStack1. O segundo é definido no escopo de uma pilha com o identificadorStack2. Como eles são definidos em escopos diferentes, isso não causa nenhum conflito e eles podem coexistir no mesmo aplicativo sem 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, 'amzn-s3-demo-bucket'); } } 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, 'amzn-s3-demo-bucket'); } } 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, "amzn-s3-demo-bucket") 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, "amzn-s3-demo-bucket"); } } // 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, "amzn-s3-demo-bucket"); } } class Program { static void Main(string[] args) { var app = new App(); new MyStack(app, "Stack1"); new MyStack(app, "Stack2"); } }

Caminhos

As construções em um AWS CDK aplicativo formam uma hierarquia enraizada na classe. App Nós nos referimos à coleção IDs de uma determinada construção, sua construção original, sua avô e assim por diante até a raiz da árvore de construção, como um caminho.

AWS CDK Normalmente, exibe caminhos em seus modelos como uma string. Os IDs níveis são separados por barras, começando no nó imediatamente abaixo da App instância raiz, que geralmente é uma pilha. Por exemplo, os caminhos dos dois recursos de bucket do Amazon S3 no exemplo de código anterior são e. Stack1/amzn-s3-demo-bucket Stack2/amzn-s3-demo-bucket

Você pode acessar o caminho de qualquer construção programaticamente, conforme mostrado no exemplo a seguir. Isso segue o caminho de myConstruct (oumy_construct, como escreveriam os desenvolvedores do Python). Como IDs devem ser exclusivos dentro do escopo em que são criados, seus caminhos são sempre exclusivos em um AWS CDK aplicativo.

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;

Único IDs

AWS CloudFormation exige que toda lógica IDs em um modelo seja exclusiva. Por isso, eles AWS CDK devem ser capazes de gerar um identificador exclusivo para cada construção em um aplicativo. Os recursos têm caminhos que são globalmente exclusivos (os nomes de todos os escopos da pilha até um recurso específico). Portanto, AWS CDK gera os identificadores exclusivos necessários concatenando os elementos do caminho e adicionando um hash de 8 dígitos. (O hash é necessário para distinguir caminhos distintos, como A/B/C eA/BC, que resultariam no mesmo AWS CloudFormation identificador. AWS CloudFormation os identificadores são alfanuméricos e não podem conter barras ou outros caracteres separadores.) O AWS CDK chama essa string de ID exclusivo da construção.

Em geral, seu AWS CDK aplicativo não precisa conhecer o que é exclusivoIDs. No entanto, você pode acessar o ID exclusivo de qualquer construção programaticamente, conforme mostrado no exemplo a seguir.

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);

O endereço é outro tipo de identificador exclusivo que distingue CDK recursos de forma exclusiva. Derivado do hash SHA -1 do caminho, não é legível por humanos. No entanto, seu comprimento constante e relativamente curto (sempre 42 caracteres hexadecimais) o torna útil em situações em que o ID exclusivo “tradicional” pode ser muito longo. Algumas construções podem usar o endereço no AWS CloudFormation modelo sintetizado em vez do ID exclusivo. Novamente, seu aplicativo geralmente não precisa saber sobre os endereços de suas construções, mas você pode recuperar o endereço de uma construção da seguinte maneira.

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

Os exclusivos IDs servem como identificadores lógicos (ou nomes lógicos) dos recursos nos AWS CloudFormation modelos gerados para construções que representam AWS recursos.

Por exemplo, o bucket do Amazon S3 no exemplo anterior, criado dentro, Stack2 resulta em um AWS::S3::Bucket recurso. O ID lógico do recurso está Stack2amzn-s3-demo-bucket4DD88B4F no AWS CloudFormation modelo resultante. (Para obter detalhes sobre como esse identificador é gerado, consulteÚnico IDs.)

Estabilidade lógica de ID

Evite alterar a ID lógica de um recurso após sua criação. AWS CloudFormation identifica os recursos por meio de sua ID lógica. Portanto, se você alterar a ID lógica de um recurso, AWS CloudFormation cria um novo recurso com a nova ID lógica e exclui a existente. Dependendo do tipo de recurso, isso pode causar interrupção do serviço, perda de dados ou ambas.