Pengidentifikasi dan AWS CDK - AWS Cloud Development Kit (AWS CDK) v2

Ini adalah Panduan Pengembang AWS CDK v2. CDKV1 yang lebih lama memasuki pemeliharaan pada 1 Juni 2022 dan mengakhiri dukungan pada 1 Juni 2023.

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Pengidentifikasi dan AWS CDK

Saat membuat AWS Cloud Development Kit (AWS CDK) aplikasi, Anda akan menggunakan banyak jenis pengenal dan nama. Untuk menggunakan secara AWS CDK efektif dan menghindari kesalahan, penting untuk memahami jenis pengidentifikasi.

Pengidentifikasi harus unik dalam ruang lingkup di mana mereka dibuat; mereka tidak perlu unik secara global dalam AWS CDK aplikasi Anda.

Jika Anda mencoba membuat pengenal dengan nilai yang sama dalam lingkup yang sama, maka akan AWS CDK melempar pengecualian.

Membangun IDs

Pengidentifikasi yang paling umum,id, adalah pengidentifikasi yang diteruskan sebagai argumen kedua saat membuat instance objek konstruksi. Pengidentifikasi ini, seperti semua pengidentifikasi, hanya perlu unik dalam lingkup di mana ia dibuat, yang merupakan argumen pertama ketika membuat instance objek konstruksi.

catatan

Tumpukan juga merupakan pengidentifikasi yang Anda gunakan untuk merujuknya di. id AWS CDKCLIreferensi

Mari kita lihat contoh di mana kita memiliki dua konstruksi dengan identifier MyBucket di aplikasi kita. Yang pertama didefinisikan dalam lingkup tumpukan dengan pengenalStack1. Yang kedua didefinisikan dalam lingkup tumpukan dengan pengenalStack2. Karena mereka didefinisikan dalam cakupan yang berbeda, ini tidak menyebabkan konflik apa pun, dan mereka dapat hidup berdampingan di aplikasi yang sama tanpa masalah.

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

Jalan

Konstruksi dalam AWS CDK aplikasi membentuk hierarki yang berakar di kelas. App Kami mengacu pada koleksi IDs dari konstruksi tertentu, konstruksi induknya, kakek-neneknya, dan seterusnya ke akar pohon konstruksi, sebagai jalan.

AWS CDK Biasanya menampilkan jalur di template Anda sebagai string. IDsDari tingkat dipisahkan oleh garis miring, dimulai dari node segera di bawah App instance root, yang biasanya tumpukan. Misalnya, jalur dari dua sumber daya bucket Amazon S3 dalam contoh kode sebelumnya adalah Stack1/MyBucket dan. Stack2/MyBucket

Anda dapat mengakses jalur konstruksi apa pun secara terprogram, seperti yang ditunjukkan pada contoh berikut. Ini mendapatkan jalur myConstruct (ataumy_construct, seperti yang akan ditulis oleh pengembang Python). Karena IDs harus unik dalam ruang lingkup mereka dibuat, jalur mereka selalu unik dalam AWS CDK aplikasi.

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;

Unik IDs

AWS CloudFormation mengharuskan semua logis IDs dalam template menjadi unik. Karena itu, AWS CDK harus dapat menghasilkan pengidentifikasi unik untuk setiap konstruksi dalam aplikasi. Sumber daya memiliki jalur yang unik secara global (nama semua cakupan dari tumpukan ke sumber daya tertentu). Oleh karena itu, AWS CDK menghasilkan pengidentifikasi unik yang diperlukan dengan menggabungkan elemen jalur dan menambahkan hash 8 digit. (Hash diperlukan untuk membedakan jalur yang berbeda, seperti A/B/C danA/BC, yang akan menghasilkan AWS CloudFormation pengenal yang sama. AWS CloudFormation pengidentifikasi alfanumerik dan tidak dapat berisi garis miring atau karakter pemisah lainnya.) AWS CDK Memanggil string ini ID unik dari konstruksi.

Secara umum, AWS CDK aplikasi Anda tidak perlu tahu tentang unikIDs. Namun, Anda dapat mengakses ID unik dari konstruksi apa pun secara terprogram, seperti yang ditunjukkan pada contoh berikut.

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

Alamat adalah jenis lain dari pengidentifikasi unik yang secara unik membedakan sumber daya. CDK Berasal dari hash SHA -1 jalur, itu tidak dapat dibaca manusia. Namun, panjangnya yang konstan dan relatif pendek (selalu 42 karakter heksadesimal) membuatnya berguna dalam situasi di mana ID unik “tradisional” mungkin terlalu panjang. Beberapa konstruksi mungkin menggunakan alamat dalam AWS CloudFormation template yang disintesis, bukan ID unik. Sekali lagi, aplikasi Anda umumnya tidak perlu tahu tentang alamat konstruksinya, tetapi Anda dapat mengambil alamat konstruksi sebagai berikut.

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;

Logis IDs

Unik IDs berfungsi sebagai pengidentifikasi logis (atau nama logis) sumber daya dalam AWS CloudFormation templat yang dihasilkan untuk konstruksi yang mewakili AWS sumber daya.

Misalnya, bucket Amazon S3 pada contoh sebelumnya yang dibuat dalam Stack2 menghasilkan sumber daya. AWS::S3::Bucket ID logis sumber daya ada Stack2MyBucket4DD88B4F di AWS CloudFormation template yang dihasilkan. (Untuk detail tentang cara pengenal ini dihasilkan, lihatUnik IDs.)

Stabilitas ID logis

Hindari mengubah ID logis sumber daya setelah dibuat. AWS CloudFormation mengidentifikasi sumber daya dengan ID logisnya. Oleh karena itu, jika Anda mengubah ID logis sumber daya, AWS CloudFormation membuat sumber daya baru dengan ID logis baru, lalu hapus yang sudah ada. Tergantung pada jenis sumber daya, ini dapat menyebabkan gangguan layanan, kehilangan data, atau keduanya.