Bekerja dengan AWS CDK dalam bahasa pemrograman yang didukung - AWS Cloud Development Kit (AWS CDK) v2

Ini adalah Panduan Pengembang AWS CDK v2. CDK v1 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.

Bekerja dengan AWS CDK dalam bahasa pemrograman yang didukung

Gunakan AWS Cloud Development Kit (AWS CDK) untuk menentukan AWS Cloud infrastruktur Anda dengan bahasa pemrograman yang didukung.

Mengimpor Perpustakaan AWS Konstruksi

AWS CDK Termasuk AWS Construct Library, kumpulan konstruksi yang diselenggarakan oleh AWS layanan. Konstruksi stabil perpustakaan ditawarkan dalam satu modul, dipanggil dengan nama TypeScript paketnya:aws-cdk-lib. Nama paket sebenarnya bervariasi menurut bahasa.

TypeScript
Menginstal instal npm aws-cdk-lib
Impor const cdk = membutuhkan ('aws-cdk-lib');
JavaScript
Menginstal instal npm aws-cdk-lib
Impor const cdk = membutuhkan ('aws-cdk-lib');
Python
Menginstal instalasi python -m pip aws-cdk-lib
Impor impor aws_cdk sebagai cdk
Java
Tambahkan ke pom.xml Group software.amazon.awscdk; artifact aws-cdk-lib
Impor impor software.amazon.awscdk.app; (for example)
C#
Menginstal dotnet tambahkan paket Amazon.cdk.lib
Impor menggunakan Amazon.cdk;

Kelas construct dasar dan kode pendukung ada di constructs modul. Konstruksi eksperimental, di mana API masih mengalami penyempurnaan, didistribusikan sebagai modul terpisah.

Referensi AWS CDK API

Referensi AWS CDK API menyediakan dokumentasi rinci tentang konstruksi (dan komponen lainnya) di pustaka. Versi Referensi API disediakan untuk setiap bahasa pemrograman yang didukung.

Bahan referensi setiap modul dipecah menjadi bagian-bagian berikut.

  • Ikhtisar: Materi pengantar yang perlu Anda ketahui untuk bekerja dengan layanan di AWS CDK, termasuk konsep dan contoh.

  • Konstruksi: Kelas perpustakaan yang mewakili satu atau lebih AWS sumber daya konkret. Ini adalah sumber daya atau pola “dikurasi” (L2) (sumber daya L3) yang menyediakan antarmuka tingkat tinggi dengan default yang waras.

  • Kelas: Kelas non-konstruksi yang menyediakan fungsionalitas yang digunakan oleh konstruksi dalam modul.

  • Structs: Struktur data (bundel atribut) yang mendefinisikan struktur nilai komposit seperti properti (propsargumen konstruksi) dan opsi.

  • Antarmuka: Antarmuka, yang namanya semua dimulai dengan “I”, mendefinisikan fungsionalitas minimum absolut untuk konstruksi yang sesuai atau kelas lainnya. CDK menggunakan antarmuka konstruksi untuk merepresentasikan AWS sumber daya yang ditentukan di luar AWS CDK aplikasi Anda dan direferensikan dengan metode seperti. Bucket.fromBucketArn()

  • Enum: Koleksi nilai bernama untuk digunakan dalam menentukan parameter konstruksi tertentu. Menggunakan nilai yang disebutkan memungkinkan CDK untuk memeriksa nilai-nilai ini untuk validitas selama sintesis.

  • CloudFormation Sumber daya: Konstruksi L1 ini, yang namanya dimulai dengan “Cfn”, mewakili sumber daya yang ditentukan dalam spesifikasi. CloudFormation Mereka secara otomatis dihasilkan dari spesifikasi itu dengan setiap rilis CDK. Setiap konstruksi L2 atau L3 merangkum satu atau lebih sumber daya. CloudFormation

  • CloudFormation Jenis Properti: Kumpulan nilai bernama yang menentukan properti untuk setiap CloudFormation Sumber Daya.

Antarmuka dibandingkan dengan kelas konstruksi

AWS CDK Penggunaan antarmuka dengan cara tertentu yang mungkin tidak jelas bahkan jika Anda terbiasa dengan antarmuka sebagai konsep pemrograman.

AWS CDK Dukungan menggunakan sumber daya yang didefinisikan di luar aplikasi CDK menggunakan metode sepertiBucket.fromBucketArn(). Sumber daya eksternal tidak dapat dimodifikasi dan mungkin tidak memiliki semua fungsionalitas yang tersedia dengan sumber daya yang ditentukan dalam aplikasi CDK Anda menggunakan misalnya Bucket kelas. Antarmuka, kemudian, mewakili fungsionalitas minimum yang tersedia di CDK untuk jenis AWS sumber daya tertentu, termasuk sumber daya eksternal.

Saat membuat instance resource di aplikasi CDK, Anda harus selalu menggunakan class konkret seperti. Bucket Saat menentukan jenis argumen yang Anda terima di salah satu konstruksi Anda sendiri, gunakan jenis antarmuka seperti IBucket jika Anda siap untuk berurusan dengan sumber daya eksternal (yaitu, Anda tidak perlu mengubahnya). Jika Anda memerlukan konstruksi yang ditentukan CDK, tentukan jenis paling umum yang dapat Anda gunakan.

Beberapa antarmuka adalah versi minimum properti atau bundel opsi yang terkait dengan kelas tertentu, bukan konstruksi. Antarmuka seperti itu dapat berguna saat mensubklasifikasikan untuk menerima argumen yang akan Anda sampaikan ke kelas induk Anda. Jika Anda memerlukan satu atau lebih properti tambahan, Anda akan ingin menerapkan atau menurunkan dari antarmuka ini, atau dari jenis yang lebih spesifik.

catatan

Beberapa bahasa pemrograman yang didukung oleh AWS CDK tidak memiliki fitur antarmuka. Dalam bahasa-bahasa ini, antarmuka hanyalah kelas biasa. Anda dapat mengidentifikasi mereka dengan nama mereka, yang mengikuti pola awal “I” diikuti dengan nama beberapa konstruksi lain (misalnyaIBucket). Aturan yang sama berlaku.

Mengelola dependensi

Dependensi untuk AWS CDK aplikasi atau library Anda dikelola menggunakan alat manajemen paket. Alat-alat ini biasanya digunakan dengan bahasa pemrograman.

Biasanya, AWS CDK mendukung standar bahasa atau alat manajemen paket resmi jika ada. Jika tidak, AWS CDK akan mendukung bahasa yang paling populer atau didukung secara luas. Anda mungkin juga dapat menggunakan alat lain, terutama jika mereka bekerja dengan alat yang didukung. Namun, dukungan resmi untuk alat lain terbatas.

AWS CDK Mendukung manajer paket berikut:

Bahasa Alat manajemen paket yang didukung
TypeScript/JavaScript NPM (Node Package Manager) atau Yarn
Python PIP (Package Installer untuk Python)
Java Maven
C# NuGet
Go Modul Go

Saat Anda membuat proyek baru menggunakan AWS CDK CLI cdk init perintah, dependensi untuk pustaka inti CDK dan konstruksi stabil ditentukan secara otomatis.

Untuk informasi selengkapnya tentang mengelola dependensi untuk bahasa pemrograman yang didukung, lihat berikut ini:

AWS CDK Membandingkan TypeScript dengan bahasa lain

TypeScript adalah bahasa pertama yang didukung untuk mengembangkan AWS CDK aplikasi. Oleh karena itu, sejumlah besar contoh kode CDK ditulis dalam TypeScript. Jika Anda mengembangkan dalam bahasa lain, mungkin berguna untuk membandingkan bagaimana AWS CDK kode diimplementasikan TypeScript dibandingkan dengan bahasa pilihan Anda. Ini dapat membantu Anda menggunakan contoh di seluruh dokumentasi.

Mengimpor modul

TypeScript/JavaScript

TypeScript mendukung mengimpor seluruh namespace, atau objek individual dari namespace. Setiap namespace mencakup konstruksi dan kelas lain untuk digunakan dengan layanan yang diberikan. AWS

// Import main CDK library as cdk import * as cdk from 'aws-cdk-lib'; // ES6 import preferred in TS const cdk = require('aws-cdk-lib'); // Node.js require() preferred in JS // Import specific core CDK classes import { Stack, App } from 'aws-cdk-lib'; const { Stack, App } = require('aws-cdk-lib'); // Import AWS S3 namespace as s3 into current namespace import { aws_s3 as s3 } from 'aws-cdk-lib'; // TypeScript const s3 = require('aws-cdk-lib/aws-s3'); // JavaScript // Having imported cdk already as above, this is also valid const s3 = cdk.aws_s3; // Now use s3 to access the S3 types const bucket = s3.Bucket(...); // Selective import of s3.Bucket import { Bucket } from 'aws-cdk-lib/aws-s3'; // TypeScript const { Bucket } = require('aws-cdk-lib/aws-s3'); // JavaScript // Now use Bucket to instantiate an S3 bucket const bucket = Bucket(...);
Python

Seperti TypeScript, Python mendukung impor modul namespaced dan impor selektif. Ruang nama dengan Python terlihat seperti aws_cdk. xxx, di mana xxx mewakili nama AWS layanan, seperti s3 untuk Amazon S3. (Amazon S3 digunakan dalam contoh-contoh ini).

# Import main CDK library as cdk import aws_cdk as cdk # Selective import of specific core classes from aws_cdk import Stack, App # Import entire module as s3 into current namespace import aws_cdk.aws_s3 as s3 # s3 can now be used to access classes it contains bucket = s3.Bucket(...) # Selective import of s3.Bucket into current namespace from aws_cdk.s3 import Bucket # Bucket can now be used to instantiate a bucket bucket = Bucket(...)
Java

Impor Java bekerja secara berbeda dari TypeScript's. Setiap pernyataan impor mengimpor nama kelas tunggal dari paket tertentu, atau semua kelas yang didefinisikan dalam paket itu (menggunakan*). Kelas dapat diakses menggunakan nama kelas dengan sendirinya jika telah diimpor, atau nama kelas yang memenuhi syarat termasuk paketnya.

Library dinamai seperti software.amazon.awscdk.services.xxx untuk AWS Construct Library (perpustakaan utamanya adalahsoftware.amazon.awscdk). ID grup Maven untuk AWS CDK paket adalah. software.amazon.awscdk

// Make certain core classes available import software.amazon.awscdk.Stack; import software.amazon.awscdk.App; // Make all Amazon S3 construct library classes available import software.amazon.awscdk.services.s3.*; // Make only Bucket and EventType classes available import software.amazon.awscdk.services.s3.Bucket; import software.amazon.awscdk.services.s3.EventType; // An imported class may now be accessed using the simple class name (assuming that name // does not conflict with another class) Bucket bucket = Bucket.Builder.create(...).build(); // We can always use the qualified name of a class (including its package) even without an // import directive software.amazon.awscdk.services.s3.Bucket bucket = software.amazon.awscdk.services.s3.Bucket.Builder.create(...) .build(); // Java 10 or later can use var keyword to avoid typing the type twice var bucket = software.amazon.awscdk.services.s3.Bucket.Builder.create(...) .build();
C#

Di C #, Anda mengimpor tipe dengan using arahan. Ada dua gaya. Satu memberi Anda akses ke semua jenis di namespace yang ditentukan dengan menggunakan nama polos mereka. Dengan yang lain, Anda dapat merujuk ke namespace itu sendiri dengan menggunakan alias.

Paket diberi nama seperti Amazon.CDK.AWS.xxx untuk paket AWS Construct Library. (Modul inti adalahAmazon.CDK.)

// Make CDK base classes available under cdk using cdk = Amazon.CDK; // Make all Amazon S3 construct library classes available using Amazon.CDK.AWS.S3; // Now we can access any S3 type using its name var bucket = new Bucket(...); // Import the S3 namespace under an alias using s3 = Amazon.CDK.AWS.S3; // Now we can access an S3 type through the namespace alias var bucket = new s3.Bucket(...); // We can always use the qualified name of a type (including its namespace) even without a // using directive var bucket = new Amazon.CDK.AWS.S3.Bucket(...)
Go

Setiap modul AWS Construct Library disediakan sebagai paket Go.

import ( "github.com/aws/aws-cdk-go/awscdk/v2" // CDK core package "github.com/aws/aws-cdk-go/awscdk/v2/awss3" // AWS S3 construct library module ) // now instantiate a bucket bucket := awss3.NewBucket(...) // use aliases for brevity/clarity import ( cdk "github.com/aws/aws-cdk-go/awscdk/v2" // CDK core package s3 "github.com/aws/aws-cdk-go/awscdk/v2/awss3" // AWS S3 construct library module ) bucket := s3.NewBucket(...)

Membuat instantiasi sebuah konstruksi

AWS CDK kelas construct memiliki nama yang sama di semua bahasa yang didukung. Sebagian besar bahasa menggunakan new kata kunci untuk membuat instance kelas (Python dan Go tidak). Juga, dalam sebagian besar bahasa, kata kunci this mengacu pada contoh saat ini. (Python menggunakan self berdasarkan konvensi.) Anda harus meneruskan referensi ke instance saat ini sebagai scope parameter untuk setiap konstruksi yang Anda buat.

Argumen ketiga untuk AWS CDK konstruksi adalahprops, objek yang berisi atribut yang diperlukan untuk membangun konstruksi. Argumen ini mungkin opsional, tetapi ketika diperlukan, bahasa yang didukung menanganinya dengan cara idiomatik. Nama-nama atribut juga disesuaikan dengan pola penamaan standar bahasa.

TypeScript/JavaScript
// Instantiate default Bucket const bucket = new s3.Bucket(this, 'MyBucket'); // Instantiate Bucket with bucketName and versioned properties const bucket = new s3.Bucket(this, 'MyBucket', { bucketName: 'my-bucket', versioned: true, }); // Instantiate Bucket with websiteRedirect, which has its own sub-properties const bucket = new s3.Bucket(this, 'MyBucket', { websiteRedirect: {host: 'aws.amazon.com'}});
Python

Python tidak menggunakan new kata kunci saat membuat instance kelas. Argumen properti direpresentasikan menggunakan argumen kata kunci, dan argumen diberi nama menggunakansnake_case.

Jika nilai props itu sendiri merupakan bundel atribut, itu diwakili oleh kelas dinamai setelah properti, yang menerima argumen kata kunci untuk subproperti.

Dalam Python, instance saat ini diteruskan ke metode sebagai argumen pertama, yang dinamai self oleh konvensi.

# Instantiate default Bucket bucket = s3.Bucket(self, "MyBucket") # Instantiate Bucket with bucket_name and versioned properties bucket = s3.Bucket(self, "MyBucket", bucket_name="my-bucket", versioned=true) # Instantiate Bucket with website_redirect, which has its own sub-properties bucket = s3.Bucket(self, "MyBucket", website_redirect=s3.WebsiteRedirect( host_name="aws.amazon.com"))
Java

Di Jawa, argumen props diwakili oleh kelas bernama XxxxProps (misalnya, BucketProps untuk alat peraga Bucket konstruksi). Anda membangun argumen props menggunakan pola pembangun.

Setiap XxxxProps kelas memiliki pembangun. Ada juga pembangun yang nyaman untuk setiap konstruksi yang membangun alat peraga dan konstruksi dalam satu langkah, seperti yang ditunjukkan pada contoh berikut.

Alat peraga diberi nama sama seperti di TypeScript, menggunakancamelCase.

// Instantiate default Bucket Bucket bucket = Bucket(self, "MyBucket"); // Instantiate Bucket with bucketName and versioned properties Bucket bucket = Bucket.Builder.create(self, "MyBucket") .bucketName("my-bucket").versioned(true) .build(); # Instantiate Bucket with websiteRedirect, which has its own sub-properties Bucket bucket = Bucket.Builder.create(self, "MyBucket") .websiteRedirect(new websiteRedirect.Builder() .hostName("aws.amazon.com").build()) .build();
C#

Dalam C #, alat peraga ditentukan menggunakan penginisialisasi objek ke kelas bernama XxxxProps (misalnya, BucketProps untuk alat peraga Bucket konstruksi).

Alat peraga diberi nama mirip dengan TypeScript, kecuali menggunakanPascalCase.

Lebih mudah menggunakan var kata kunci saat membuat instance konstruksi, jadi Anda tidak perlu mengetikkan nama kelas dua kali. Namun, panduan gaya kode lokal Anda mungkin berbeda.

// Instantiate default Bucket var bucket = Bucket(self, "MyBucket"); // Instantiate Bucket with BucketName and Versioned properties var bucket = Bucket(self, "MyBucket", new BucketProps { BucketName = "my-bucket", Versioned = true}); // Instantiate Bucket with WebsiteRedirect, which has its own sub-properties var bucket = Bucket(self, "MyBucket", new BucketProps { WebsiteRedirect = new WebsiteRedirect { HostName = "aws.amazon.com" }});
Go

Untuk membuat konstruksi di Go, panggil fungsi di NewXxxxxx mana Xxxxxxx adalah nama konstruksi. Properti konstruksi didefinisikan sebagai struct.

Di Go, semua parameter konstruksi adalah pointer, termasuk nilai seperti angka, Boolean, dan string. Gunakan fungsi kenyamanan seperti jsii.String untuk membuat pointer ini.

// Instantiate default Bucket bucket := awss3.NewBucket(stack, jsii.String("MyBucket"), nil) // Instantiate Bucket with BucketName and Versioned properties bucket1 := awss3.NewBucket(stack, jsii.String("MyBucket"), &awss3.BucketProps{ BucketName: jsii.String("my-bucket"), Versioned: jsii.Bool(true), }) // Instantiate Bucket with WebsiteRedirect, which has its own sub-properties bucket2 := awss3.NewBucket(stack, jsii.String("MyBucket"), &awss3.BucketProps{ WebsiteRedirect: &awss3.RedirectTarget{ HostName: jsii.String("aws.amazon.com"), }})

Mengakses anggota

Adalah umum untuk merujuk pada atribut atau properti konstruksi dan AWS CDK kelas lain dan menggunakan nilai-nilai ini sebagai, misalnya, input untuk membangun konstruksi lain. Perbedaan penamaan yang dijelaskan sebelumnya untuk metode berlaku di sini juga. Selain itu, di Jawa, tidak mungkin untuk mengakses anggota secara langsung. Sebagai gantinya, metode pengambil disediakan.

TypeScript/JavaScript

Nama-nama adalahcamelCase.

bucket.bucketArn
Python

Nama-nama adalahsnake_case.

bucket.bucket_arn
Java

Metode getter disediakan untuk setiap properti; nama-nama ini adalahcamelCase.

bucket.getBucketArn()
C#

Nama-nama adalahPascalCase.

bucket.BucketArn
Go

Nama-nama adalahPascalCase.

bucket.BucketArn

Konstanta enum

Konstanta enum dicakup ke kelas, dan memiliki nama huruf besar dengan garis bawah dalam semua bahasa (kadang-kadang disebut sebagai). SCREAMING_SNAKE_CASE Karena nama kelas juga menggunakan casing yang sama di semua bahasa yang didukung kecuali Go, nama enum yang memenuhi syarat juga sama dalam bahasa ini.

s3.BucketEncryption.KMS_MANAGED

Di Go, konstanta enum adalah atribut dari namespace modul dan ditulis sebagai berikut.

awss3.BucketEncryption_KMS_MANAGED

Antarmuka objek

AWS CDK Menggunakan antarmuka TypeScript objek untuk menunjukkan bahwa kelas mengimplementasikan serangkaian metode dan properti yang diharapkan. Anda dapat mengenali antarmuka objek karena namanya dimulai denganI. Kelas konkret menunjukkan antarmuka yang diimplementasikan dengan menggunakan kata kunci. implements

TypeScript/JavaScript
catatan

JavaScript tidak memiliki fitur antarmuka. Anda dapat mengabaikan implements kata kunci dan nama kelas yang mengikutinya.

import { IAspect, IConstruct } from 'aws-cdk-lib'; class MyAspect implements IAspect { public visit(node: IConstruct) { console.log('Visited', node.node.path); } }
Python

Python tidak memiliki fitur antarmuka. Namun, untuk AWS CDK Anda dapat menunjukkan implementasi antarmuka dengan mendekorasi kelas Anda dengan@jsii.implements(interface).

from aws_cdk import IAspect, IConstruct import jsii @jsii.implements(IAspect) class MyAspect(): def visit(self, node: IConstruct) -> None: print("Visited", node.node.path)
Java
import software.amazon.awscdk.IAspect; import software.amazon.awscdk.IConstruct; public class MyAspect implements IAspect { public void visit(IConstruct node) { System.out.format("Visited %s", node.getNode().getPath()); } }
C#
using Amazon.CDK; public class MyAspect : IAspect { public void Visit(IConstruct node) { System.Console.WriteLine($"Visited ${node.Node.Path}"); } }
Go

Go struct tidak perlu secara eksplisit mendeklarasikan antarmuka mana yang mereka terapkan. Kompiler Go menentukan implementasi berdasarkan metode dan properti yang tersedia pada struktur. Misalnya, dalam kode berikut, MyAspect mengimplementasikan IAspect antarmuka karena menyediakan Visit metode yang mengambil konstruksi.

type MyAspect struct { } func (a MyAspect) Visit(node constructs.IConstruct) { fmt.Println("Visited", *node.Node().Path()) }