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.
Impor dan gunakan AWS Cloud Development Kit (AWS CDK) pustaka untuk menentukan AWS Cloud infrastruktur Anda dengan bahasa pemrograman yang didukung.
Impor AWS CDK Perpustakaan
AWS CDK Perpustakaan sering disebut dengan TypeScript nama paketaws-cdk-lib
. Nama paket sebenarnya bervariasi menurut bahasa. Berikut ini adalah contoh cara menginstal dan mengimpor Perpustakaan CDK:
Menginstal | npm install aws-cdk-lib |
---|---|
Import | import * as cdk from 'aws-cdk-lib'; |
Kelas construct
dasar dan kode pendukung ada di constructs
perpustakaan. Konstruksi eksperimental, di mana API masih mengalami penyempurnaan, didistribusikan sebagai modul terpisah.
Menggunakan Referensi AWS CDK API
Gunakan referensi AWS CDK API saat Anda mengembangkan dengan AWS CDK.
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 (
props
argumen 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 tipe 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:
Membandingkan AWS CDK di 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 mendukung mengimpor seluruh namespace, atau objek individual dari namespace. Setiap namespace mencakup konstruksi dan kelas lain untuk digunakan dengan layanan tertentu. 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(...);
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 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(...)
Membuat instance 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.
// Instantiate default Bucket
const bucket = new s3.Bucket(this, 'amzn-s3-demo-bucket');
// Instantiate Bucket with bucketName and versioned properties
const bucket = new s3.Bucket(this, 'amzn-s3-demo-bucket', {
bucketName: 'amzn-s3-demo-bucket',
versioned: true,
});
// Instantiate Bucket with websiteRedirect, which has its own sub-properties
const bucket = new s3.Bucket(this, 'amzn-s3-demo-bucket', {
websiteRedirect: {host: 'aws.amazon.com'}});
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, "amzn-s3-demo-bucket")
# Instantiate Bucket with bucket_name and versioned properties
bucket = s3.Bucket(self, "amzn-s3-demo-bucket", bucket_name="amzn-s3-demo-bucket", versioned=true)
# Instantiate Bucket with website_redirect, which has its own sub-properties
bucket = s3.Bucket(self, "amzn-s3-demo-bucket", website_redirect=s3.WebsiteRedirect(
host_name="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. Sebaliknya, metode pengambil disediakan.
Nama adalahcamelCase
.
bucket.bucketArn
Nama adalahsnake_case
.
bucket.bucket_arn
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
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 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)