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 in Python
Python adalah bahasa klien yang sepenuhnya didukung untuk AWS Cloud Development Kit (AWS CDK) dan dianggap stabil. Bekerja dengan AWS CDK in Python menggunakan alat yang sudah dikenal, termasuk implementasi Python standar (CPython), lingkungan virtual dengan, virtualenv
dan penginstal paket Python. pip
Modul yang terdiri dari AWS Construct Library didistribusikan melalui pypi.org.snake_case
Anda dapat menggunakan editor apa pun atauIDE. Banyak AWS CDK pengembang menggunakan Visual Studio Code
Topik
Memulai dengan Python
Untuk bekerja dengan AWS CDK, Anda harus memiliki AWS akun dan kredensional dan telah menginstal Node.js dan Toolkit. AWS CDK Lihat Memulai dengan AWS CDK.
AWS CDK Aplikasi Python membutuhkan Python 3.6 atau yang lebih baru. Jika Anda belum menginstalnya, unduh versi yang kompatibelyum
,apt
, dll.). Pengguna Mac mungkin tertarik dengan Homebrew
catatan
Pengakhiran bahasa pihak ketiga: versi bahasa hanya didukung hingga EOL (End Of Life) dibagikan oleh vendor atau komunitas dan dapat berubah sewaktu-waktu dengan pemberitahuan sebelumnya.
Penginstal paket Python,pip
, dan manajer lingkungan virtualvirtualenv
, juga diperlukan. Instalasi Windows dari versi Python yang kompatibel termasuk alat-alat ini. Di Linux, pip
dan virtualenv
dapat disediakan sebagai paket terpisah di manajer paket Anda. Atau, Anda dapat menginstalnya dengan perintah berikut:
python -m ensurepip --upgrade python -m pip install --upgrade pip python -m pip install --upgrade virtualenv
Jika Anda mengalami kesalahan izin, jalankan perintah di atas dengan --user
bendera sehingga modul diinstal di direktori pengguna Anda, atau gunakan sudo
untuk mendapatkan izin untuk menginstal modul di seluruh sistem.
catatan
Hal ini umum untuk distro Linux untuk menggunakan nama executable untuk python3
Python 3.x, dan telah merujuk python
ke instalasi Python 2.x. Beberapa distro memiliki paket opsional yang dapat Anda instal yang membuat python
perintah mengacu pada Python 3. Jika gagal, Anda dapat menyesuaikan perintah yang digunakan untuk menjalankan aplikasi Anda dengan mengedit cdk.json
di direktori utama proyek.
catatan
Di Windows, Anda mungkin ingin memanggil Python (pipdan) menggunakan executable, py peluncur >Python untuk
Jika mengetik python di baris perintah menghasilkan pesan tentang menginstal Python dari Windows Store, bahkan setelah menginstal versi Windows Python, buka panel pengaturan Alias Eksekusi Aplikasi Windows dan matikan dua entri Penginstal Aplikasi untuk Python.
Membuat proyek
Anda membuat AWS CDK proyek baru dengan memanggil cdk init
dalam direktori kosong. Gunakan --language
opsi dan tentukanpython
:
mkdir my-project cd my-project cdk init app --language python
cdk init
menggunakan nama folder proyek untuk memberi nama berbagai elemen proyek, termasuk kelas, subfolder, dan file. Tanda hubung dalam nama folder diubah menjadi garis bawah. Namun, nama tersebut harus mengikuti bentuk pengenal Python; misalnya, seharusnya tidak dimulai dengan angka atau berisi spasi.
Untuk bekerja dengan proyek baru, aktifkan lingkungan virtualnya. Ini memungkinkan dependensi proyek diinstal secara lokal di folder proyek, bukan secara global.
source .venv/bin/activate
catatan
Anda mungkin mengenali ini sebagai perintah Mac/Linux untuk mengaktifkan lingkungan virtual. Templat Python menyertakan file batch, source.bat
, yang memungkinkan perintah yang sama untuk digunakan pada Windows. Perintah Windows tradisional juga berfungsi. .\venv\Scripts\activate
Jika Anda menginisialisasi AWS CDK proyek Anda menggunakan CDK Toolkit v1.70.0 atau yang lebih lama, lingkungan virtual Anda ada di direktori, bukan. .env
.venv
penting
Aktifkan lingkungan virtual proyek setiap kali Anda mulai mengerjakannya. Jika tidak, Anda tidak akan memiliki akses ke modul yang diinstal di sana, dan modul yang Anda instal akan masuk ke direktori modul global Python (atau akan menghasilkan kesalahan izin).
Setelah mengaktifkan lingkungan virtual Anda untuk pertama kalinya, instal dependensi standar aplikasi:
python -m pip install -r requirements.txt
Mengelola AWS modul Construct Library
Gunakan penginstal paket Python,pip, untuk menginstal dan memperbarui modul AWS Construct Library untuk digunakan oleh aplikasi Anda, serta paket lain yang Anda butuhkan. pipjuga menginstal dependensi untuk modul-modul tersebut secara otomatis. Jika sistem Anda tidak mengenali pip sebagai perintah mandiri, panggil pip sebagai modul Python, seperti ini:
python -m pip
PIP-COMMAND
Sebagian besar AWS CDK konstruksi ada diaws-cdk-lib
. Modul eksperimental berada dalam modul terpisah bernama likeaws-cdk.
. Nama layanan menyertakan awalan aws. Jika Anda tidak yakin dengan nama modul, cari di PyPISERVICE-NAME
.alpha
python -m pip install aws-cdk.aws-codestar-alpha
Beberapa konstruksi layanan berada di lebih dari satu namespace. Misalnya, selain ituaws-cdk.aws-route53
, ada tiga ruang nama Amazon Route 53 tambahan, bernama aws-route53-targets
aws-route53-patterns
, dan. aws-route53resolver
catatan
Edisi Python dari CDK API Referensi juga menunjukkan nama paket.
Nama-nama yang digunakan untuk mengimpor modul AWS Construct Library ke dalam kode Python Anda terlihat seperti berikut ini.
import aws_cdk.aws_s3 as s3 import aws_cdk.aws_lambda as lambda_
Kami merekomendasikan praktik berikut saat mengimpor AWS CDK kelas dan modul AWS Construct Library dalam aplikasi Anda. Mengikuti panduan ini akan membantu membuat kode Anda konsisten dengan AWS CDK aplikasi lain serta lebih mudah dipahami.
-
Umumnya, impor kelas individu dari tingkat atas
aws_cdk
.from aws_cdk import App, Construct
-
Jika Anda membutuhkan banyak kelas dari
aws_cdk
, Anda dapat menggunakan alias namespacecdk
alih-alih mengimpor kelas individual. Hindari melakukan keduanya.import aws_cdk as cdk
-
Umumnya, impor AWS Construct Libraries menggunakan alias namespace pendek.
import aws_cdk.aws_s3 as s3
Setelah menginstal modul, perbarui requirements.txt
file proyek Anda, yang mencantumkan dependensi proyek Anda. Yang terbaik adalah melakukan ini secara manual daripada menggunakanpip freeze
. pip
freeze
menangkap versi saat ini dari semua modul yang diinstal di lingkungan virtual Python Anda, yang dapat berguna saat menggabungkan proyek untuk dijalankan di tempat lain.
Namun, biasanya, Anda hanya requirements.txt
boleh mencantumkan dependensi tingkat atas (modul yang bergantung langsung pada aplikasi Anda) dan bukan dependensi pustaka tersebut. Strategi ini membuat memperbarui dependensi Anda lebih sederhana.
Anda dapat mengedit requirements.txt
untuk mengizinkan peningkatan; cukup ganti nomor versi ==
sebelumnya dengan ~=
untuk memungkinkan peningkatan ke versi kompatibel yang lebih tinggi, atau hapus persyaratan versi sepenuhnya untuk menentukan versi modul terbaru yang tersedia.
Dengan requirements.txt
diedit dengan tepat untuk memungkinkan peningkatan, keluarkan perintah ini untuk memutakhirkan modul yang diinstal proyek Anda kapan saja:
pip install --upgrade -r requirements.txt
Mengelola dependensi di Python
Dengan Python, Anda menentukan dependensi dengan memasukkannya ke dalam aplikasi atau requirements.txt
setup.py
untuk membangun perpustakaan. Dependensi kemudian dikelola dengan alat. PIP PIPdipanggil dengan salah satu cara berikut:
pip
command
options
python -m pipcommand
options
python -m pipPemanggilan bekerja pada sebagian besar sistem; pip mengharuskan yang PIP dapat dieksekusi berada di jalur sistem. Jika pip tidak berhasil, coba ganti denganpython -m pip.
cdk init --language pythonPerintah menciptakan lingkungan virtual untuk proyek baru Anda. Ini memungkinkan setiap proyek memiliki versi dependensi sendiri, dan juga file dasarrequirements.txt
. Anda harus mengaktifkan lingkungan virtual ini dengan menjalankan source .venv/bin/activate setiap kali Anda mulai bekerja dengan proyek. Di Windows, jalankan .\venv\Scripts\activate sebagai gantinya
CDKaplikasi
Berikut ini adalah contoh requirements.txt
file. Karena PIP tidak memiliki fitur penguncian ketergantungan, kami menyarankan Anda menggunakan operator == untuk menentukan versi yang tepat untuk semua dependensi, seperti yang ditunjukkan di sini.
aws-cdk-lib==2.14.0 aws-cdk.aws-appsync-alpha==2.10.0a0
Menginstal modul dengan pip install tidak secara otomatis menambahkannyarequirements.txt
. Anda harus melakukannya sendiri. Jika Anda ingin meningkatkan ke versi dependensi yang lebih baru, edit nomor versinya direquirements.txt
.
Untuk menginstal atau memperbarui dependensi proyek Anda setelah membuat atau mengeditrequirements.txt
, jalankan yang berikut:
python -m pip install -r requirements.txt
Tip
pip freezePerintah mengeluarkan versi semua dependensi yang diinstal dalam format yang dapat ditulis ke file teks. Ini dapat digunakan sebagai file persyaratan denganpip install -r
. File ini nyaman untuk menyematkan semua dependensi (termasuk yang transitif) ke versi persis yang Anda uji. Untuk menghindari masalah saat memutakhirkan paket nanti, gunakan file terpisah untuk ini, seperti freeze.txt
(notrequirements.txt
). Kemudian, buat ulang saat Anda memutakhirkan dependensi proyek Anda.
Perpustakaan konstruksi pihak ketiga
Di pustaka, dependensi ditentukan dalamsetup.py
, sehingga dependensi transitif diunduh secara otomatis ketika paket dikonsumsi oleh aplikasi. Jika tidak, setiap aplikasi yang ingin menggunakan paket Anda perlu menyalin dependensi Anda ke dalamnya. requirements.txt
Contoh setup.py
ditampilkan di sini.
from setuptools import setup setup( name='my-package', version='0.0.1', install_requires=[ 'aws-cdk-lib==2.14.0', ], ... )
Untuk mengerjakan paket untuk pengembangan, buat atau aktifkan lingkungan virtual, lalu jalankan perintah berikut.
python -m pip install -e .
Meskipun PIP secara otomatis menginstal dependensi transitif, hanya ada satu salinan yang diinstal dari satu paket. Versi yang ditentukan tertinggi di pohon ketergantungan dipilih; aplikasi selalu memiliki kata terakhir dalam versi paket apa yang diinstal.
AWS CDK idiom dalam Python
Konflik bahasa
Dalam Python, lambda
adalah kata kunci bahasa, sehingga Anda tidak dapat menggunakannya sebagai nama untuk modul pustaka AWS Lambda konstruksi atau fungsi Lambda. Konvensi Python untuk konflik tersebut adalah dengan menggunakan garis bawah, seperti padalambda_
, dalam nama variabel.
Menurut konvensi, argumen kedua untuk AWS CDK konstruksi diberi namaid
. Saat menulis tumpukan dan konstruksi Anda sendiri, memanggil parameter id
“bayangan” fungsi bawaan Pythonid()
, yang mengembalikan pengenal unik objek. Fungsi ini tidak sering digunakan, tetapi jika Anda membutuhkannya dalam konstruksi Anda, ganti nama argumen, misalnya. construct_id
Argumen dan properti
Semua kelas AWS Construct Library dipakai menggunakan tiga argumen: ruang lingkup di mana konstruksi sedang didefinisikan (induknya di pohon konstruksi), id, dan props, bundel pasangan kunci/nilai yang digunakan konstruksi untuk mengkonfigurasi sumber daya yang dibuatnya. Kelas dan metode lain juga menggunakan pola “bundel atribut” untuk argumen.
scope dan id harus selalu diteruskan sebagai argumen posisi, bukan argumen kata kunci, karena namanya berubah jika konstruksi menerima properti bernama scope atau id.
Dalam Python, props dinyatakan sebagai argumen kata kunci. Jika argumen berisi struktur data bersarang, ini diekspresikan menggunakan kelas yang mengambil argumen kata kunci sendiri di instantiation. Pola yang sama diterapkan pada panggilan metode lain yang mengambil argumen terstruktur.
Misalnya, dalam add_lifecycle_rule
metode bucket Amazon S3, transitions
properti adalah daftar instance. Transition
bucket.add_lifecycle_rule( transitions=[ Transition( storage_class=StorageClass.GLACIER, transition_after=Duration.days(10) ) ] )
Saat memperluas kelas atau mengganti metode, Anda mungkin ingin menerima argumen tambahan untuk tujuan Anda sendiri yang tidak dipahami oleh kelas induk. Dalam hal ini Anda harus menerima argumen yang tidak Anda pedulikan menggunakan **kwargs
idiom, dan menggunakan argumen khusus kata kunci untuk menerima argumen yang Anda minati. Saat memanggil konstruktor induk atau metode yang diganti, berikan hanya argumen yang diharapkannya (seringkali hanya). **kwargs
Melewati argumen bahwa kelas induk atau metode tidak mengharapkan hasil kesalahan.
class MyConstruct(Construct): def __init__(self, id, *, MyProperty=42, **kwargs): super().__init__(self, id, **kwargs) # ...
Rilis future AWS CDK dapat secara kebetulan menambahkan properti baru dengan nama yang Anda gunakan untuk properti Anda sendiri. Ini tidak akan menyebabkan masalah teknis apa pun bagi pengguna konstruksi atau metode Anda (karena properti Anda tidak melewati “rantai”, kelas induk atau metode yang diganti hanya akan menggunakan nilai default) tetapi dapat menyebabkan kebingungan. Anda dapat menghindari masalah potensial ini dengan memberi nama properti Anda sehingga mereka jelas milik konstruksi Anda. Jika ada banyak properti baru, bundel mereka ke dalam kelas yang diberi nama tepat dan meneruskannya sebagai argumen kata kunci tunggal.
Nilai yang hilang
AWS CDK Penggunaan None
untuk mewakili nilai yang hilang atau tidak terdefinisi. Saat bekerja dengan**kwargs
, gunakan get()
metode kamus untuk memberikan nilai default jika properti tidak disediakan. Hindari penggunaankwargs[...]
, karena ini menimbulkan nilai KeyError
yang hilang.
encrypted = kwargs.get("encrypted") # None if no property "encrypted" exists encrypted = kwargs.get("encrypted", False) # specify default of False if property is missing
Beberapa AWS CDK metode (seperti tryGetContext()
untuk mendapatkan nilai konteks runtime) mungkin kembaliNone
, yang perlu Anda periksa secara eksplisit.
Menggunakan antarmuka
Python tidak memiliki fitur antarmuka seperti beberapa bahasa lain, meskipun memang memiliki kelas dasar abstrak
Untuk menunjukkan bahwa kelas mengimplementasikan antarmuka tertentu, Anda dapat menggunakan @jsii.implements
dekorator:
from aws_cdk import IAspect, IConstruct import jsii @jsii.implements(IAspect) class MyAspect(): def visit(self, node: IConstruct) -> None: print("Visited", node.node.path)
Jenis jebakan
Python menggunakan pengetikan dinamis, di mana semua variabel dapat merujuk ke nilai dari jenis apa pun. Parameter dan nilai pengembalian dapat dianotasi dengan tipe, tetapi ini adalah “petunjuk” dan tidak diberlakukan. Ini berarti bahwa dengan Python, mudah untuk meneruskan jenis nilai yang salah ke konstruksi. AWS CDK Alih-alih mendapatkan kesalahan tipe selama pembuatan, seperti yang Anda lakukan dari bahasa yang diketik secara statis, Anda mungkin mendapatkan kesalahan runtime ketika lapisan JSII (yang menerjemahkan antara Python dan TypeScript inti) tidak dapat menangani tipe yang AWS CDK tidak terduga.
Menurut pengalaman kami, kesalahan tipe yang dilakukan programmer Python cenderung masuk dalam kategori ini.
-
Melewati satu nilai di mana konstruksi mengharapkan wadah (daftar Python atau kamus) atau sebaliknya.
-
Melewati nilai tipe yang terkait dengan konstruksi layer 1 (
CfnXxxxxx
) ke konstruksi L2 atau L3, atau sebaliknya.
Modul AWS CDK Python memang menyertakan anotasi tipe, sehingga Anda dapat menggunakan alat yang mendukungnya untuk membantu tipe. Jika Anda tidak menggunakan sebuah IDE yang mendukung ini, misalnya PyCharm