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.
Bekerja dengan AWS CDK perpustakaan
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 CDK Library:
- TypeScript
-
Menginstal |
npm install aws-cdk-lib |
Import |
import * as cdk from 'aws-cdk-lib'; |
- JavaScript
-
Menginstal |
npm install aws-cdk-lib |
Import |
const cdk = require('aws-cdk-lib'); |
- Python
-
Menginstal |
python -m pip install aws-cdk-lib |
Import |
import aws_cdk as cdk |
- Java
-
Dipom.xml , tambahkan |
Kelompoksoftware.amazon.awscdk ; artefak aws-cdk-lib |
Import |
import software.amazon.awscdk.App; |
- C#
-
Menginstal |
dotnet add package Amazon.CDK.Lib |
Import |
using Amazon.CDK; |
- Go
-
Menginstal |
go get github.com/aws/aws-cdk-go/awscdk/v2 |
Import |
import (
"github.com/aws/aws-cdk-go/awscdk/v2"
)
|
Kelas construct
dasar dan kode pendukung ada di constructs
perpustakaan. Konstruksi eksperimental, di mana API masih mengalami penyempurnaan, didistribusikan sebagai modul terpisah.
Menggunakan AWS CDK API Referensi
Gunakan AWS CDK APIreferensi 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. CDKMenggunakan 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 CDK rilis. 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 CDK aplikasi menggunakan metode sepertiBucket.fromBucketArn()
. Sumber daya eksternal tidak dapat dimodifikasi dan mungkin tidak memiliki semua fungsionalitas yang tersedia dengan sumber daya yang ditentukan dalam CDK aplikasi 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 CDK aplikasi, 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 CDK -defined, tentukan tipe 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.
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 CDK inti 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 CDK kode contoh 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, '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
-
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"))
- 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, "amzn-s3-demo-bucket");
// Instantiate Bucket with bucketName and versioned properties
Bucket bucket = Bucket.Builder.create(self, "amzn-s3-demo-bucket")
.bucketName("amzn-s3-demo-bucket").versioned(true)
.build();
# Instantiate Bucket with websiteRedirect, which has its own sub-properties
Bucket bucket = Bucket.Builder.create(self, "amzn-s3-demo-bucket")
.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, "amzn-s3-demo-bucket");
// Instantiate Bucket with BucketName and Versioned properties
var bucket = Bucket(self, "amzn-s3-demo-bucket", new BucketProps {
BucketName = "amzn-s3-demo-bucket",
Versioned = true});
// Instantiate Bucket with WebsiteRedirect, which has its own sub-properties
var bucket = Bucket(self, "amzn-s3-demo-bucket", 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("amzn-s3-demo-bucket"), nil)
// Instantiate Bucket with BucketName and Versioned properties
bucket1 := awss3.NewBucket(stack, jsii.String("amzn-s3-demo-bucket"), &awss3.BucketProps{
BucketName: jsii.String("amzn-s3-demo-bucket"),
Versioned: jsii.Bool(true),
})
// Instantiate Bucket with WebsiteRedirect, which has its own sub-properties
bucket2 := awss3.NewBucket(stack, jsii.String("amzn-s3-demo-bucket"), &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
-
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())
}