Bekerja dengan Construct CDK
App AWS CDK bergantung pada construct sebagai elemen struktural esensialnya. Kode infrastruktur Anda akan menjadi lebih modular, mudah dirawat, dan mudah dibaca saat Anda menguasai construct, baik menggunakan construct layanan bawaan maupun membuat pola dapat digunakan ulang milik Anda.
Bagian ini mengajarkan Anda tentang penggunaan construct L2 (tingkat tinggi) dan cara mengembangkan construct kustom yang mengurangi pola berulang.
Menggunakan construct L2
Construct L2 adalah abstraksi native CDK yang lebih mudah digunakan daripada CloudFormation mentah (L1). Mereka memiliki default yang masuk akal dan type safety, seringkali membutuhkan lebih sedikit baris kode untuk menyiapkan sumber daya AWS.
Mengapa menggunakan construct L2?
- Lebih sedikit boilerplate — lebih sedikit field wajib dibandingkan L1
- Kode Python lebih mudah dibaca dan idiomatis
- Mencakup metode utilitas seperti
.add_to_role_policy()atau.add_event_notification() - Secara otomatis mengelola dependensi antar sumber daya
Contoh: Membuat bucket S3 menggunakan L2
from aws_cdk import aws_s3 as s3
# Create a versioned and encrypted S3 bucket
bucket = s3.Bucket(
self,
"MyBucket",
versioned=True,
encryption=s3.BucketEncryption.S3_MANAGED
)
Construct L1 yang setara, s3.CfnBucket, akan memerlukan semua properti disetel secara manual dan konfigurasi didefinisikan sebagai dict mentah—jauh kurang intuitif.
Construct L2 umum lainnya meliputi:
lambda_.Function()untuk AWS Lambdadynamodb.Table()untuk DynamoDBsqs.Queue()untuk SQSsns.Topic()untuk SNS
Membuat construct kustom
Infrastruktur Anda akan berkembang dengan pola berulang, seperti membuat fungsi Lambda dengan izin tertentu dan bucket S3. Construct kustom adalah solusi ideal untuk skenario ini.
Construct kustom memungkinkan Anda menggabungkan sumber daya terkait menjadi satu unit logis, yang dapat digunakan ulang di berbagai stack atau proyek.
Kapan membuat construct kustom:
- Saat Anda memiliki 3+ sumber daya yang selalu disediakan bersama
- Saat Anda ingin mengenkapsulasi logika yang dapat digunakan ulang
- Saat Anda ingin mengurangi duplikasi kode di berbagai stack
Contoh: Pola S3 + Lambda yang dapat digunakan ulang
from constructs import Construct
from aws_cdk import aws_s3 as s3, aws_lambda as lambda_
class StorageWithLambda(Construct):
def __init__(self, scope: Construct, id: str) -> None:
super().__init__(scope, id)
# S3 bucket
self.bucket = s3.Bucket(self, "MyBucket")
# Lambda function
self.function = lambda_.Function(
self,
"MyFunction",
runtime=lambda_.Runtime.PYTHON_3_9,
handler="index.handler",
code=lambda_.Code.from_asset("lambda")
)
# Grant Lambda access to the S3 bucket
self.bucket.grant_read_write(self.function)
Sekarang Anda dapat menggunakan construct ini di dalam stack mana pun seperti ini:
from my_project.storage_with_lambda import StorageWithLambda
storage = StorageWithLambda(self, "ReusableComponent")
Sebelum menjalankan hal di atas, buat folder bernama lambda di root proyek dan buat file index.py dengan konten berikut:
def handler(event, context):
return {
"statusCode": 200,
"body": "Hello from Lambda!"
}
Kiat keterpakaiulangan
- Awali file dengan
construct_atau tempatkan di dalam folderconstructs/ - Ekspos output seperti
self.bucketatauself.functionuntuk fleksibilitas - Jaga setiap construct fokus pada satu tanggung jawab
Menguji dan Mensintesis App CDK
Setelah menulis kode infrastruktur Anda, penting untuk memeriksa apa yang akan diterapkan CDK dan idealnya menguji bahwa stack Anda berperilaku seperti yang diharapkan. AWS CDK menyediakan alat untuk mensintesis template CloudFormation dan menulis pengujian otomatis guna menangkap salah konfigurasi sebelum deployment.
Mensintesis template
Perintah cdk synth menghasilkan template CloudFormation dari kode CDK Anda.
cdk synth
Saat Anda menjalankannya, CDK akan:
- Memuat app Anda (melalui
app.py) - Menyelesaikan semua construct dan stack
- Menghasilkan template CloudFormation mentah dalam YAML/JSON

Template CloudFormation yang disintesis
Secara default, output ditampilkan di terminal Anda, tetapi Anda juga dapat mengarahkannya ke file jika diperlukan:
cdk synth > template.yaml
Ini berguna ketika:
- Anda ingin memeriksa template sebenarnya sebelum deployment
- Anda sedang men-debug struktur sebuah stack
- Anda berbagi template dengan tim yang tidak menggunakan CDK
Menguji infrastruktur
Meskipun menguji infrastructure as code mungkin terdengar tidak biasa, ini bermanfaat, terutama saat stack Anda menjadi besar atau mencakup logika kondisional, loop, atau construct yang dapat digunakan ulang.
AWS CDK menawarkan modul assertions untuk menguji stack yang disintesis.
Menulis pengujian sederhana dengan pytest
Berikut contoh pengujian yang memeriksa apakah sumber daya tertentu (seperti bucket S3) disertakan dalam stack:
# test/test_cdk_datacamp_stack.py
import aws_cdk as cdk
from aws_cdk.assertions import Template
from cdk_datacamp.cdk_datacamp_stack import CdkDatacampStack
def test_s3_bucket_created():
app = cdk.App()
stack = CdkDatacampStack(app, "TestStack")
template = Template.from_stack(stack)
# Assert that an S3 bucket exists
template.resource_count_is("AWS::S3::Bucket", 1)
Untuk menjalankan pengujian, pastikan pytest terpasang:
pip install -U pytest
Lalu jalankan:
pytest
Jika semuanya lolos, Anda akan melihat tanda centang hijau. Jika tidak, output pengujian akan memberi tahu Anda apa yang kurang.
Output Pytest yang menunjukkan eksekusi sukses semua kasus uji untuk stack AWS CDK
Anda juga dapat menyertakan validasi di stack CDK Anda. Pengujian validasi adalah pemeriksaan runtime di dalam kode construct atau stack Anda yang memvalidasi input sebelum deployment terjadi. Ini membantu menangkap salah konfigurasi atau menegakkan batasan lebih awal dalam siklus pengembangan.
Misalkan kita ingin meneruskan bucket_name sebagai variabel konteks, tetapi kita ingin memvalidasi bahwa:
- Nama bucket tidak kosong
- Memenuhi aturan penamaan S3 (mis., huruf kecil saja)
Buat file bernama test/test_storage_with_lambda.py dan tambahkan berikut ini:
import pytest
from aws_cdk import App, Stack
from cdk_datacamp.storage_with_lambda import StorageWithLambda
def test_missing_bucket_name():
app = App()
stack = Stack(app, "TestStack")
with pytest.raises(ValueError, match="bucket_name is required"):
StorageWithLambda(stack, "FailingConstruct", bucket_name=None)
def test_bucket_name_uppercase():
app = App()
stack = Stack(app, "TestStack")
with pytest.raises(ValueError, match="must be lowercase"):
StorageWithLambda(stack, "FailingConstruct", bucket_name="InvalidName")
Untuk menguji validasi, jalankan perintah di bawah ini:
test/test_storage_with_lambda.py
Output Pytest yang menunjukkan eksekusi sukses semua kasus uji untuk stack AWS CDK
Kapan menggunakan pengujian:
- Anda membuat construct atau pola yang dapat digunakan ulang.
- Penerapan pengujian berfungsi untuk menetapkan persyaratan teknis standar di antara anggota tim.
- Anda ingin menangkap regresi atau perubahan yang tidak diinginkan selama CI/CD.
Ingin memperkuat pengetahuan CDK Anda dalam situasi wawancara? Kumpulan pertanyaan wawancara AWS DevOps teratas ini dapat membantu Anda bersiap.
Praktik Terbaik dan Kiat untuk Bekerja dengan AWS CDK
Setelah menguasai pembuatan dan deployment stack CDK, Anda harus mengikuti praktik terbaik untuk menjaga kode infrastruktur tetap bersih, aman, dan skalabel. Bagian ini akan membahas cara menyusun proyek besar, menangani keamanan dengan benar, dan mengintegrasikan CDK ke pipeline CI/CD.
Mengorganisasi proyek besar
Saat app CDK Anda berkembang, mengorganisasi kode menjadi unit yang dapat dikelola menjadi hal penting.
Gunakan beberapa stack
Pisahkan infrastruktur berdasarkan concern. Misalnya:
- NetworkingStack: VPC, subnet, security group
- ComputeStack: EC2, Lambda
- StorageStack: S3, DynamoDB
Ini memungkinkan Anda menerapkan, menguji, atau menghapus bagian infrastruktur secara mandiri. Berikut cara menyertakannya dalam app.py:
network_stack = NetworkingStack(app, "NetworkingStack")
compute_stack = ComputeStack(app, "ComputeStack")
Anda juga dapat meneruskan sumber daya antar stack menggunakan output atau referensi.
Buat construct bertingkat yang dapat digunakan ulang
Enkapsulasi sumber daya terkait (seperti Lambda dan izinnya) ke dalam construct kustom, seperti yang Anda lakukan dengan StorageWithLambda. Ini meningkatkan keterbacaan dan keterpakaiulangan lintas stack atau app.
Gunakan konfigurasi spesifik lingkungan
Dukung beberapa lingkungan (dev, staging, prod) menggunakan:
cdk.jsondengan nilai konteks- Override CLI:
cdk deploy -c env=prod - Logika kondisional di stack Anda
env = app.node.try_get_context("env")
if env == "prod":
bucket_name = "mycompany-prod-logs"
Keamanan dan izin
Setiap proyek infrastruktur harus memprioritaskan keamanan selama proses deployment otomatis AWS CDK. Bagian berikut menunjukkan pengelolaan sumber daya IAM yang aman melalui prinsip least privilege.
Definisikan role IAM alih-alih menggunakan default
Construct CDK, termasuk tugas Lambda atau ECS, akan otomatis membuat role IAM. Meskipun nyaman, ini dapat membatasi kontrol Anda atas izin dan penamaan.
Sebagai gantinya, definisikan role secara eksplisit:
from aws_cdk import aws_iam as iam
execution_role = iam.Role(
self,
"LambdaExecutionRole",
assumed_by=iam.ServicePrincipal("lambda.amazonaws.com"),
description="Custom role for Lambda with least privilege",
managed_policies=[
iam.ManagedPolicy.from_aws_managed_policy_name("service-role/AWSLambdaBasicExecutionRole")
]
)
Role ini hanya mengizinkan logging dan tidak ada yang lain secara default.
Terapkan prinsip least privilege
Hindari menggunakan "*" pada actions atau resources kecuali benar-benar diperlukan.
Contoh:
lambda_fn.add_to_role_policy(
iam.PolicyStatement(
actions=["*"],
resources=["*"]
)
)
Anda juga dapat menggunakan grant spesifik sumber daya jika tersedia:
bucket.grant_read(lambda_fn)
Ini secara otomatis menghasilkan kebijakan yang diperlukan dengan akses yang dibatasi ke bucket S3 tersebut.
Gunakan managed policy jika memungkinkan
AWS-managed policy menyederhanakan pemeliharaan dan mengurangi kemungkinan kesalahan.
iam.ManagedPolicy.from_aws_managed_policy_name("AmazonSQSReadOnlyAccess")
Anda dapat melampirkannya ke role kustom untuk layanan seperti ECS, Batch, atau Step Functions.
Integrasi CI/CD
AWS CDK memberikan kekuatan luar biasa melalui kemampuannya berintegrasi dengan pipeline CI/CD kontemporer. CDK mendukung delivery infrastruktur otomatis melalui deployment kode yang dikendalikan versi, yang bekerja dengan GitHub, GitLab, dan layanan native AWS termasuk CodePipeline. Sistem ini mengurangi kesalahan manusia sambil memperpendek siklus umpan balik dan memungkinkan deployment di berbagai lingkungan.
GitHub Actions: Mengotomatiskan deployment CDK
Anda dapat menggunakan GitHub Actions untuk melakukan synth, diff, test, dan deploy stack CDK pada setiap push atau pull request.
Lihat .github/workflows/deploy.yml ini:
name: Deploy CDK App
on:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
with:
python-version: 3.11
- name: Install dependencies
run: |
pip install -r requirements.txt
npm install -g aws-cdk
- name: Run unit tests
run: pytest
- name: CDK Synth
run: cdk synth -c environment=prod
- name: Deploy to AWS
run: cdk deploy --require-approval never
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
Gunakan cdk diff dalam PR untuk meninjau perubahan infra sebelum menggabungkan.
CDK pipelines: CI/CD native CDK dengan CodePipeline
Untuk deployment terkelola penuh di dalam AWS, CDK menyediakan modul bernama aws_cdk.pipelines, yang memungkinkan Anda mendefinisikan seluruh pipeline CI/CD sebagai kode, seperti halnya infrastruktur.
Berikut contoh yang disederhanakan:
from aws_cdk import pipelines, SecretValue, Stack
from constructs import Construct
from my_app_stage import MyAppStage # replace with your actual stage import
class PipelineStack(Stack):
def __init__(
self,
scope: Construct,
construct_id: str,
**kwargs
) -> None:
super().__init__(scope, construct_id, **kwargs)
# Define the source of the pipeline from a GitHub repository
source = pipelines.CodePipelineSource.git_hub(
repo_string="your-org/your-repo", # GitHub org/repo
branch="main",
authentication=SecretValue.secrets_manager("GITHUB_TOKEN")
)
# Define the CodePipeline and its synthesis step
pipeline = pipelines.CodePipeline(
self,
"MyAppPipeline",
synth=pipelines.ShellStep(
"Synth",
input=source,
commands=[
"pip install -r requirements.txt",
"npm install -g aws-cdk",
"cdk synth"
]
)
)
# Add an application stage (e.g., production deployment)
pipeline.add_stage(
MyAppStage(self, "ProdStage")
)
Pada kode di atas:
SecretValue.secrets_manager("GITHUB_TOKEN")secara aman mengambil token GitHub Anda dari Secrets Manager.MyAppStageharus berupa kelas yang memperluasStagedan membungkus stack CDK Anda yang sebenarnya.
Jika Anda menerapkan sistem machine learning, integrasi CDK dengan praktik deployment berkelanjutan dibahas dalam kursus CI/CD for Machine Learning kami.
Kesimpulan
Tutorial ini menunjukkan cara membangun dan menerapkan infrastruktur cloud dalam Python melalui operasi AWS Cloud Development Kit (CDK). Anda telah mempelajari cara:
- Membuat stack CDK pertama Anda.
- Mendefinisikan dan memvalidasi bucket S3 dan fungsi Lambda sebagai sumber daya.
- Mengorganisasi proyek melalui construct kustom dan pola multi-stack.
- Menerapkan praktik keamanan terbaik melalui prinsip least privilege.
- Mengotomatiskan deployment dengan menggabungkan GitHub Actions dan CDK Pipelines.
- Menulis pengujian untuk memvalidasi logika infrastruktur Anda.
Sekarang Anda telah menerapkan app CDK pertama Anda, berikut beberapa cara untuk naik tingkat:
- Gunakan lingkungan terparametrisasi untuk dev/staging/prod
- Tambahkan CloudWatch alarms, API Gateway, atau Step Functions
- Jelajahi construct CDK seperti
aws_s3_deployment,aws_ecs_patterns, dancdk.pipelines - Ubah construct Anda menjadi pustaka Python internal untuk keterpakaiulangan
Untuk terus belajar dan membangun, simak kursus Introduction to AWS Boto in Python!
FAQs
Apa itu AWS CDK, dan bagaimana bedanya dengan CloudFormation atau Terraform?
AWS CDK memungkinkan Anda mendefinisikan infrastruktur cloud menggunakan bahasa pemrograman seperti Python, sementara CloudFormation dan Terraform mengandalkan JSON/YAML atau HCL. CDK menawarkan abstraksi dan keterpakaiulangan yang lebih tinggi melalui construct.
Apakah saya perlu mengetahui CloudFormation untuk menggunakan AWS CDK?
Tidak, CDK mengabstraksi sebagian besar kompleksitas CloudFormation. Namun, memahami CloudFormation membantu saat menggunakan construct tingkat lebih rendah atau menelusuri masalah deployment.
Bisakah saya menerapkan beberapa lingkungan (mis., dev, prod) dengan AWS CDK?
Ya! CDK mendukung konfigurasi spesifik lingkungan menggunakan nilai konteks dan flag CLI seperti cdk deploy -c env=prod.
Bagaimana cara menguji kode infrastruktur CDK saya?
Anda dapat menggunakan pytest bersama modul assertions dan template CDK untuk menulis unit test yang memverifikasi sumber daya dan konfigurasi stack Anda sebelum deployment.
Apa yang terjadi di balik layar saat saya menjalankan cdk deploy?
cdk deploy mensintesis kode Python Anda menjadi template CloudFormation, mengunggahnya ke AWS, dan menyediakan sumber daya yang didefinisikan di akun Anda.
Rahul Sharma adalah AWS Ambassador, Arsitek DevOps, dan blogger teknis yang mengkhususkan diri pada komputasi awan, praktik DevOps, serta teknologi open-source. Dengan keahlian di AWS, Kubernetes, dan Terraform, ia menyederhanakan konsep yang kompleks bagi pelajar dan profesional melalui artikel dan tutorial yang menarik. Rahul bersemangat memecahkan tantangan DevOps dan berbagi wawasan untuk memberdayakan komunitas teknologi.


Mengelola infrastruktur cloud dengan template JSON atau YAML mentah bisa melelahkan dan rentan kesalahan. AWS Cloud Development Kit (CDK) mengubah itu dengan memungkinkan Anda mendefinisikan sumber daya cloud menggunakan bahasa pemrograman modern seperti Python, TypeScript, Java, dan C#.
Dengan CDK, infrastruktur menjadi kode yang dapat digunakan ulang, diuji, dan dikendalikan versinya. Ini memungkinkan Anda berpikir seperti pengembang bahkan saat menyediakan sistem cloud yang kompleks.
Dalam tutorial ini, Anda akan belajar cara menyiapkan proyek AWS CDK menggunakan Python. Kita akan menelusuri proses menulis stack pertama Anda, menambahkan sumber daya AWS penting, dan menerapkannya ke akun AWS Anda. Pada akhirnya, Anda akan memahami dengan jelas cara kerja CDK dan cara menggunakannya untuk mengelola infrastruktur dengan cara yang ramah pengembang, melalui kode.
Untuk memahami lebih baik praktik di balik alat seperti AWS CDK, jelajahi prinsip-prinsip dasar dalam kursus DevOps Concepts kami.
Prasyarat
Sebelum kita mulai menulis kode dengan AWS CDK, pastikan lingkungan Anda telah disiapkan dengan benar. Berikut yang Anda perlukan:
Akun AWS untuk eksperimen
Anda memerlukan akses ke akun AWS untuk menerapkan aplikasi yang akan kita bangun. Jika sistem Anda sudah dikonfigurasi dengan kredensial untuk pengguna tingkat administrator, silakan lewati ke bagian berikutnya.
Jika Anda belum memiliki akun AWS, buat di sini.
Untuk jalur belajar terstruktur yang mencakup dasar-dasar AWS, AWS Cloud Practitioner track adalah tempat yang sangat baik untuk memulai.
Pengguna administrator
Anda memerlukan pengguna dengan akses terprogram dan izin penuh untuk mengikuti langkah-langkahnya.
Di layar terakhir, catat Access key ID dan Secret access key Anda. Anda akan memerlukannya di langkah berikutnya.
Konfigurasikan kredensial AWS Anda
Buka terminal dan jalankan:
Anda akan diminta memasukkan kredensial dari konsol IAM:
Pilih IDE untuk pengembangan
AWS CDK memungkinkan pengembang bekerja dalam lingkungan pemrograman lengkap alih-alih template YAML atau JSON. Lingkungan penuh fitur ini memungkinkan Anda menggunakan IDE pilihan sambil mendapatkan manfaat dari fitur pelengkapan kode, linting real-time, dan alat refactoring untuk manajemen kode infrastruktur yang efisien.
Untuk mendapatkan pengalaman pengembangan terbaik dengan Python CDK, saya sarankan menggunakan IDE yang mendukung hal-hal berikut:
Instal Python dan pip
Untuk menggunakan AWS CDK dengan Python, Anda perlu memasang Python versi 3.8 atau lebih tinggi pada sistem Anda. Jika belum, Anda dapat mengunduh versi terbaru dari situs resmi Python.
Jika Anda menggunakan Windows, pastikan Python ditambahkan ke variabel lingkungan
PATHsistem Anda. Untuk memeriksa, buka terminal atau command prompt dan jalankan:Jika Anda melihat kesalahan “command not found” atau serupa, kemungkinan Python belum ada di
PATHAnda. Perbaikan termudah adalah mencentang kotak “Add Python 3.x to PATH” saat instalasi.Anda juga memerlukan pip, penginstal paket Python, untuk memasang dependensi AWS CDK nanti. Sebagian besar distribusi Python modern sudah menyertakan pip.
Jika belum terpasang, ikuti panduan instalasi pip resmi.
Mulai Menggunakan AWS CDK
Sebelum kita menulis kode, penting untuk memahami apa itu AWS CDK, mengapa ada, dan bagaimana posisinya dalam dunia infrastructure as code (IaC) yang lebih luas. Bagian ini akan memperkenalkan konsep inti di balik CDK dan menunjukkan perbandingannya dengan alat IaC populer lainnya.
Apa itu AWS CDK, dan mengapa digunakan?
AWS Cloud Development Kit (CDK) adalah kerangka kerja open-source yang memungkinkan pengguna membuat infrastruktur cloud melalui bahasa pemrograman yang familier, termasuk Python, TypeScript, Java, dan C#.
CDK memungkinkan pengguna menghasilkan template CloudFormation secara terprogram melalui kode nyata alih-alih mengharuskan penulisan template JSON atau YAML secara manual.
Artinya Anda dapat:
Pada intinya, CDK berputar di sekitar tiga konsep utama:
Hierarki visual dari sebuah app AWS CDK
CDK vs Terraform vs CloudFormation
Tabel berikut menjelaskan perbedaan antara alat yang tersedia di AWS untuk mengelola infrastruktur.
Fitur
AWS CDK
Terraform
AWS CloudFormation
Dukungan Bahasa
Python, TypeScript, Java, C#
HCL (deklaratif)
YAML / JSON
Tingkat Abstraksi
Tinggi (OOP + pustaka)
Sedang
Rendah
Modularitas
Kuat (construct, kelas)
Kuat (modul)
Lemah (nested stack)
Manajemen State
Ditangani oleh CloudFormation
Ditangani oleh Terraform (tfstate)
Ditangani oleh CloudFormation
Multi-cloud
Hanya AWS
Ya
Hanya AWS
Bahasa yang didukung dan prasyarat
AWS CDK mendukung beberapa bahasa pemrograman, memungkinkan pengembang memilih yang paling nyaman digunakan:
Dalam tutorial ini, kita akan fokus pada Python, tetapi konsep intinya berlaku di semua bahasa yang didukung.
Instalasi dan penyiapan
Sekarang lingkungan Anda siap, saatnya menggunakan Python untuk membuat kerangka app AWS CDK pertama Anda. Perintah CDK
initmenyiapkan seluruh struktur proyek, termasuk file, direktori, dan virtual environment, untuk membantu Anda memulai dengan cepat.Buat direktori proyek
Buka terminal dan jalankan perintah berikut untuk membuat direktori baru dan masuk ke dalamnya:
Inisialisasi app CDK
Ini membuat proyek awal yang telah dikonfigurasi dengan contoh dasar yang mencakup:
cdk_datacamp_stack)cdk.jsonyang mengonfigurasi cara app CDK Anda berjalan.venv) untuk dependensi PythonSaat perintah selesai, Anda akan melihat output serupa ini:
Kerangka proyek CDK Python
Penyiapan Virtual Environment
Jika proses
cdk inittidak otomatis membuat virtual environment, Anda dapat melakukannya secara manual:Setelah diaktifkan, pasang dependensi yang diperlukan:
Memahami Konsep CDK
Sebelum menyelami lebih dalam kode, mari kita jelajahi bagaimana komponen inti AWS CDK—app, stack, dan construct—bekerja bersama dalam praktik. Sekarang Anda sudah familier dengan apa yang diwakili masing-masing, penting untuk melihat bagaimana mereka berinteraksi membentuk infrastruktur yang skalabel dan modular.
Kita juga akan mengurai berbagai level construct (L1, L2, L3) dan meninjau pustaka CDK yang memungkinkannya.
App, stack, dan construct
Sekarang Anda tahu apa itu App, Stack, dan Construct dari bagian sebelumnya, mari pahami bagaimana mereka bekerja bersama dalam aplikasi CDK.
Anggap seperti membangun rumah:
Dalam kode, relasinya terlihat seperti ini:
Di sini, App menginstansiasi sebuah Stack, yang mencakup Construct seperti bucket S3.
Memahami level construct: L1, L2, dan L3
Dalam AWS CDK, construct hadir dalam tiga tingkat abstraksi, memberi Anda fleksibilitas berdasarkan seberapa banyak kontrol atau kesederhanaan yang Anda perlukan.
Level 1 (L1) – Construct CloudFormation
Ini adalah blok bangunan mentah yang dihasilkan langsung dari spesifikasi AWS CloudFormation. Setiap sumber daya AWS di CloudFormation memiliki construct L1 yang setara di CDK; namanya selalu diawali dengan “Cfn”.
Construct L1 mengekspos semua opsi konfigurasi yang mungkin tetapi tidak menawarkan abstraksi atau default. Ideal saat Anda memerlukan kontrol penuh atau menggunakan fitur AWS yang lebih baru yang belum dibungkus oleh construct tingkat lebih tinggi.
s3.CfnBucketLevel 2 (L2) – Construct native AWS CDK
Construct L2 menyediakan abstraksi yang lebih tinggi dan ramah pengembang di atas construct L1. Ini adalah komponen opinionated dengan default yang masuk akal dan metode bawaan yang menyederhanakan tugas sehari-hari. Dirancang untuk penggunaan harian dan membantu mengurangi boilerplate sambil tetap menawarkan tingkat kustomisasi yang baik.
s3.Bucket– Anda dapat membuat bucket berversi hanya dengan satu baris kode.Level 3 (L3) – Construct Pola
Construct L3 adalah abstraksi yang menggabungkan beberapa sumber daya AWS ke dalam pola arsitektur umum. Dapat disediakan oleh AWS atau dibangun sebagai komponen yang dapat digunakan ulang oleh komunitas atau Anda. Gunakan construct L3 untuk mengenkapsulasi kompleksitas dan menggunakan ulang pola infrastruktur di berbagai proyek atau tim.
aws_s3_deployment.BucketDeployment– Menggabungkan bucket S3 dan strategi deployment untuk mengotomatiskan unggahan aset.Kebanyakan pengembang mulai dengan construct L2 dan memperkenalkan L1 hanya saat diperlukan. L3 menjadi berguna saat proyek Anda berkembang dan Anda ingin mengabstraksi pola berulang ke dalam komponen yang dapat digunakan ulang.
Pustaka dan modul CDK
Anda tidak berinteraksi langsung dengan CloudFormation mentah saat membangun dengan AWS CDK. Sebagai gantinya, Anda menggunakan pustaka modular CDK, yang menyediakan construct untuk layanan AWS seperti S3, Lambda, IAM, dan lainnya. Semua modul layanan AWS dibundel di bawah paket inti bernama
aws-cdk-lib, dan ini diorganisasi lebih lanjut berdasarkan layanan.Pustaka yang umum digunakan di Python
Berikut beberapa pustaka (atau modul) yang paling sering digunakan dari
aws-cdk-libdalam proyek Python:aws_cdk.aws_s3– Untuk membuat bucket S3aws_cdk.aws_lambda– Untuk mendefinisikan fungsi Lambdaaws_cdk.aws_iam– Untuk mengelola role dan izinaws_cdk.aws_dynamodb– Untuk bekerja dengan tabel DynamoDBaws_cdk.aws_ec2– Untuk komponen jaringan seperti VPC dan security groupaws_cdk.aws_sns/aws_cdk.aws_sns_subscriptions– Untuk topik SNS dan subscriber-nyaModul-modul ini diimpor hanya saat diperlukan, menjaga proyek Anda tetap ringan dan modular.
Cara mengimpor dan menggunakan modul CDK
Untuk menggunakan layanan AWS tertentu, Anda mengimpor modulnya dan memanggil kelas construct-nya. Misalnya, untuk membuat bucket S3:
Contoh ini menggunakan construct L2
s3.Bucket, yang menyertakan default bawaan seperti opsi enkripsi dan versioning.Jika Anda perlu menggunakan layanan lain, cukup impor modulnya dengan cara yang sama:
Catatan: Dalam
requirements.txt, biasanya Anda hanya memerlukan:Kedua paket ini memberi Anda akses ke semua construct AWS CDK dan fungsionalitas kerangka intinya.
Membuat CDK Stack Pertama Anda
Setelah mempelajari cara kerja internal AWS CDK, Anda dapat menerapkan pengetahuan ini. Bagian berikut memandu Anda membangun stack CDK operasional menggunakan Python. Sebelum menerapkannya ke akun AWS Anda, Anda akan membuat struktur proyek melalui kode dan mengimplementasikan sumber daya AWS nyata, seperti bucket S3 dan fungsi Lambda.
Membuat kerangka proyek baru
Saat Anda menjalankan perintah
cdk initdengan flag--language python, ini menyiapkan struktur proyek lengkap yang terlihat seperti ini:Struktur folder proyek AWS CDK Python
File
app.pyadalah tempat App didefinisikan, dan filecdk_datacamp_stack.pyadalah tempat Anda menulis kode untuk Stack dan Construct Anda.Kiat: Anda dapat mengubah nama file atau kelas stack agar sesuai dengan tujuan app Anda, seperti
storage_stack.pyataumonitoring_stack.py.Menambahkan sumber daya AWS
Sekarang mari tambahkan beberapa sumber daya AWS ke stack CDK Anda. Anda akan menulis ini di dalam metode
__init__()dari kelasStackAnda di file cdk_datacamp_stack.py.Bucket S3
Fungsi Lambda
Menerapkan stack
Setelah Anda menambahkan sumber daya, saatnya menerapkannya ke AWS.
Di terminal Anda, aktifkan virtual environment dan jalankan:
Ini akan:
Anda akan diminta untuk menyetujui perubahan jika ini pertama kalinya Anda menerapkan stack.
Setelah deployment, Anda dapat: