Identificatori e AWS CDK - AWS Cloud Development Kit (AWS CDK) v2

Questa è la guida per sviluppatori AWS CDK v2. La versione precedente della CDK versione 1 è entrata in manutenzione il 1° giugno 2022 e ha terminato il supporto il 1° giugno 2023.

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Identificatori e AWS CDK

Durante la creazione di AWS Cloud Development Kit (AWS CDK) app, utilizzerai molti tipi di identificatori e nomi. Per utilizzarli AWS CDK in modo efficace ed evitare errori, è importante comprendere i tipi di identificatori.

Gli identificatori devono essere univoci nell'ambito in cui vengono creati; non è necessario che siano univoci a livello globale nell'applicazione AWS CDK .

Se si tenta di creare un identificatore con lo stesso valore all'interno dello stesso ambito, viene generata un' AWS CDK eccezione.

Costruisci IDs

L'identificatore più comune,id, è l'identificatore passato come secondo argomento durante l'istanziazione di un oggetto di costruzione. Questo identificatore, come tutti gli identificatori, deve essere univoco solo nell'ambito in cui viene creato, che è il primo argomento quando si crea un'istanza di un oggetto di costruzione.

Nota

L'idof a stack è anche l'identificatore utilizzato per fare riferimento ad esso in. AWS CDK CLI riferimento

Diamo un'occhiata a un esempio in cui abbiamo due costrutti con l'identificatore amzn-s3-demo-bucket nella nostra app. Il primo è definito nell'ambito dello stack con l'identificatore. Stack1 Il secondo è definito nell'ambito di uno stack con l'identificatore. Stack2 Poiché sono definiti in ambiti diversi, ciò non causa alcun conflitto e possono coesistere nella stessa app senza problemi.

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

Percorsi

I costrutti di un' AWS CDK applicazione formano una gerarchia radicata nella classe. App Ci riferiamo alla raccolta di elementi IDs da un determinato costrutto, dal suo costrutto genitore, dal suo predecessore e così via alla radice dell'albero di costruzione, come percorso.

AWS CDK In genere visualizza i percorsi nei modelli come una stringa. I livelli sono separati IDs da barre, a partire dal nodo immediatamente sotto l'Appistanza root, che di solito è una pila. Ad esempio, i percorsi delle due risorse del bucket Amazon S3 nell'esempio di codice precedente sono e. Stack1/amzn-s3-demo-bucket Stack2/amzn-s3-demo-bucket

È possibile accedere al percorso di qualsiasi costrutto a livello di codice, come illustrato nell'esempio seguente. Questo ottiene il percorso di myConstruct (omy_construct, come lo scriverebbero gli sviluppatori Python). Poiché IDs devono essere unici nell'ambito in cui vengono creati, i loro percorsi sono sempre unici all'interno di un' AWS CDK applicazione.

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;

Unico IDs

AWS CloudFormation richiede che tutte le IDs logiche di un modello siano uniche. Per questo motivo, AWS CDK deve essere in grado di generare un identificatore univoco per ogni costrutto in un'applicazione. Le risorse hanno percorsi univoci a livello globale (i nomi di tutti gli ambiti dallo stack a una risorsa specifica). Pertanto, AWS CDK genera gli identificatori univoci necessari concatenando gli elementi del percorso e aggiungendo un hash a 8 cifre. (L'hash è necessario per distinguere percorsi distinti, come A/B/C eA/BC, che risulterebbero nello stesso identificatore. AWS CloudFormation AWS CloudFormation gli identificatori sono alfanumerici e non possono contenere barre o altri caratteri separatori.) AWS CDK Chiama questa stringa l'ID univoco del costrutto.

In generale, la tua AWS CDK app non dovrebbe aver bisogno di conoscere l'unicitàIDs. Tuttavia, potete accedere all'ID univoco di qualsiasi costrutto a livello di codice, come illustrato nell'esempio seguente.

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

L'indirizzo è un altro tipo di identificatore univoco che distingue in modo univoco le risorse. CDK Derivato dall'hash SHA -1 del percorso, non è leggibile dall'uomo. Tuttavia, la sua lunghezza costante e relativamente breve (sempre 42 caratteri esadecimali) lo rende utile in situazioni in cui l'ID univoco «tradizionale» potrebbe essere troppo lungo. Alcuni costrutti possono utilizzare l'indirizzo nel AWS CloudFormation modello sintetizzato anziché l'ID univoco. Anche in questo caso, la tua app in genere non dovrebbe aver bisogno di conoscere gli indirizzi dei suoi costrutti, ma puoi recuperare l'indirizzo di un costrutto come segue.

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;

Logico IDs

Gli unici IDs fungono da identificatori logici (o nomi logici) delle risorse nei AWS CloudFormation modelli generati per i costrutti che rappresentano AWS le risorse.

Ad esempio, il bucket Amazon S3 dell'esempio precedente creato all'interno Stack2 restituisce una risorsa. AWS::S3::Bucket L'ID logico della risorsa si trova Stack2amzn-s3-demo-bucket4DD88B4F nel modello risultante AWS CloudFormation . (Per i dettagli su come viene generato questo identificatore, vedereUnico IDs.)

Stabilità dell'ID logico

Evita di modificare l'ID logico di una risorsa dopo che è stata creata. AWS CloudFormation identifica le risorse in base al relativo ID logico. Pertanto, se si modifica l'ID logico di una risorsa, AWS CloudFormation crea una nuova risorsa con il nuovo ID logico, quindi elimina quello esistente. A seconda del tipo di risorsa, ciò potrebbe causare l'interruzione del servizio, la perdita di dati o entrambe le cose.