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.
Pertahankan sumber daya yang digunakan saat memfaktorkan ulang kode CDK
penting
Pemfaktoran ulang CDK sedang dalam rilis pratinjau dan dapat berubah.
Dengan refactoring AWS Cloud Development Kit (AWS CDK), Anda dapat memfaktorkan ulang kode CDK Anda, seperti mengganti nama konstruksi, memindahkan sumber daya antar tumpukan, dan mengatur ulang aplikasi Anda, sambil mempertahankan sumber daya yang Anda gunakan alih-alih menggantinya. Fitur ini membantu Anda mempertahankan praktik terbaik rekayasa perangkat lunak yang baik tanpa mengakibatkan penggantian sumber daya yang tidak disengaja.
Apa itu refactoring CDK dengan pelestarian sumber daya?
Saat Anda menerapkan aplikasi CDK, AWS CloudFormation mengidentifikasi sumber daya dengan ID logisnya. AWS CDK menghasilkan ID logis ini berdasarkan ID konstruk dan jalurnya di pohon konstruksi. Jika Anda mengubah ID konstruksi atau memindahkannya ke lokasi yang berbeda dalam kode Anda, AWS CloudFormation biasanya menafsirkan ini sebagai permintaan untuk membuat sumber daya baru dan menghapus yang lama. Untuk sumber daya stateful seperti database, bucket penyimpanan, atau antrian, penggantian ini dapat menyebabkan gangguan layanan atau kehilangan data.
Tip
Anda dapat secara proaktif mencegah perubahan ID logis saat Anda mengekstrak sumber daya ke konstruksi tingkat yang lebih tinggi. Dengan menggunakan Default sebagai ID konstruksi untuk sumber daya utama dalam konstruksi pembungkus, ID logis tetap tidak berubah. Untuk informasi selengkapnya, lihat heur istik komponen jalur ID logis.
Pemfaktoran ulang CDK mengatasi tantangan ini dengan:
-
Mendeteksi kapan sumber daya telah dipindahkan atau diganti namanya dalam kode Anda.
-
Menggunakan AWS CloudFormation kemampuan refactoring untuk melestarikan sumber daya fisik yang mendasarinya.
-
Memperbarui ID logis tanpa mengganti sumber daya yang sebenarnya.
-
Mempertahankan referensi antar sumber daya di seluruh tumpukan Anda.
Anda dapat melakukan refactoring CDK menggunakan cdk refactor perintah CDK CLI atau tindakan CDK Toolkit Library. refactor Panduan ini terutama membahas pendekatan CLI, tetapi prinsip-prinsip yang mendasarinya berlaku untuk kedua metode. Untuk informasi tentang penggunaan Pustaka Toolkit, lihat Mel akukan tindakan terprogram menggunakan Pustaka Perangkat CDK.
penting
Operasi refactoring harus dilakukan sendiri, terpisah dari tindakan lain, seperti menambahkan sumber daya baru, menghapus sumber daya, atau memodifikasi properti sumber daya.
Jika Anda perlu menambahkan, menghapus, atau memodifikasi sumber daya serta memfaktorkan ulang, Anda harus terlebih dahulu menerapkan perubahan tersebut secara terpisah, dan kemudian menggunakan refactoring untuk mengatur ulang sumber daya Anda.
Manfaat refactoring CDK
Refactoring CDK menawarkan manfaat berikut untuk AWS pengembang CDK:
-
Meningkatkan organisasi kode — Ganti nama konstruksi dan atur ulang struktur aplikasi CDK Anda tanpa penggantian sumber daya.
-
Buat komponen yang dapat digunakan kembali — Ekstrak kode duplikat ke dalam konstruksi L3 yang dapat digunakan kembali sambil mempertahankan sumber daya yang digunakan.
-
Tingkatkan pemisahan arsitektur — Pindahkan sumber daya antar tumpukan untuk mengisolasi berbagai bagian aplikasi Anda dengan lebih baik.
-
Mencegah penggantian sumber daya yang tidak disengaja — Hindari rekreasi sumber daya yang tidak diinginkan saat mengganti nama konstruksi.
-
Mengurangi perubahan pustaka pihak ketiga — Lindungi aplikasi Anda dari perubahan ID logis di pustaka konstruksi yang Anda andalkan.
-
Terapkan praktik terbaik rekayasa perangkat lunak — Refaktorkan kode Anda tanpa mengorbankan infrastruktur yang Anda gunakan.
Cara kerja perintah refactor CDK CLI CDK
penting
Anda harus memberikan --unstable=refactor opsi dengan semua perintah yang menggunakan fitur ini.
Pertama, Anda menerapkan aplikasi CDK awal Anda untuk menetapkan sumber daya dasar di AWS akun Anda. Setelah memfaktorkan ulang kode CDK Anda, seperti mengganti nama konstruksi atau memindahkan sumber daya antar tumpukan, gunakan cdk refactor perintah untuk memulai proses pemfaktoran ulang sumber daya yang digunakan.
Saat Anda menjalankan perintah refactor, CDK CLI mendeteksi perubahan lokal Anda dengan membandingkan kode Anda saat ini dengan status yang digunakan. Ini memverifikasi bahwa aplikasi CDK Anda berisi kumpulan sumber daya yang persis sama dengan status yang digunakan, hanya berbeda di lokasi mereka di pohon konstruksi. CDK CLI kemudian menghasilkan rencana refactor yang memetakan lokasi sumber daya lama ke lokasi baru mereka. CDK CLI menunjukkan kepada Anda perubahan yang diusulkan dan, setelah konfirmasi Anda, menggunakan AWS CloudFormation API refactoring untuk memperbarui ID logis sumber daya tanpa menggantinya.
Di balik layar, CDK CLI menentukan sumber daya mana yang telah dipindahkan dengan membandingkan properti dan dependensinya, mengidentifikasi sumber daya yang secara fungsional setara tetapi memiliki jalur yang berbeda di pohon konstruksi. Jika mendeteksi penambahan sumber daya, penghapusan, atau modifikasi, operasi refactoring akan ditolak dengan pesan kesalahan.
Contoh melestarikan sumber daya saat memfaktorkan ulang kode CDK
Dalam contoh ini, kami mempertahankan sumber daya yang dikerahkan sambil memfaktorkan ulang kode CDK kami menggunakan perintah CDK CLI. cdk refactor
Contoh aplikasi CDK kami terdiri dari tumpukan tunggal yang berisi bucket S3, CloudFront distribusi, dan fungsi Lambda. Pohon konstruksi disusun sebagai berikut:
App └─ MyStack ├─ Bucket ├─ Distribution └─ Function
Berikut ini adalah contoh kode aplikasi kami:
const app = new cdk.App(); const myStack = new cdk.Stack(app, 'MyStack'); const bucket = new s3.Bucket(myStack, 'Bucket'); const distribution = new cloudfront.Distribution(myStack, 'Distribution', { defaultBehavior: { origin: new origins.S3Origin(bucket) } }); const function = new lambda.Function(myStack, 'Function', { // function properties }); // Synthesize the app app.synth();
Sekarang, bayangkan Anda ingin memfaktorkan ulang kode ini menjadi:
-
Ganti nama bucket dari
Bucketyang lebih deskriptifWebsiteOrigin. -
Pindahkan bucket dan distribusi ke
WebStacktumpukan baru.
Setelah refactoring, pohon konstruksi akan terlihat seperti ini:
App ├─ WebStack │ ├─ WebsiteOrigin │ └─ Distribution └─ MyStack └─ Function
Dan kode yang difaktorkan ulang adalah:
// Refactored structure const app = new cdk.App(); // New WebStack with the bucket and distribution const webStack = new cdk.Stack(app, 'WebStack'); const bucket = new s3.Bucket(webStack, 'WebsiteOrigin'); const distribution = new cloudfront.Distribution(webStack, 'Distribution', { defaultBehavior: { origin: new origins.S3Origin(bucket) } }); // Original MyStack with just the function const myStack = new cdk.Stack(app, 'MyStack'); const function = new lambda.Function(myStack, 'Function', { // function properties }); // Synthesize the app app.synth();
Tanpa refactoring CDK, perubahan ini akan AWS CloudFormation menyebabkan pembuatan sumber daya baru dan menghapus yang lama, karena ID logis akan berubah:
-
MyStack/Bucket/Resourceakan menjadiWebStack/WebsiteOrigin/Resource. -
MyStack/Distribution/Resourceakan menjadiWebStack/Distribution/Resource.
Dengan refactoring CDK, CDK CLI mendeteksi perubahan jalur ini dan menggunakan kemampuan refactoring untuk melestarikan sumber daya AWS CloudFormation yang mendasarinya. Saat Anda menjalankancdk refactor, CLI menunjukkan kepada Anda perubahan yang akan dibuatnya:
$ cdk refactor The following resources were moved or renamed: ┌───────────────────────────────┬───────────────────────────────┬───────────────────────────────────┐ │ Resource Type │ Old Construct Path │ New Construct Path │ ├───────────────────────────────┼───────────────────────────────┼───────────────────────────────────┤ │ AWS::S3::Bucket │ MyStack/Bucket/Resource │ WebStack/WebsiteOrigin/Resource │ ├───────────────────────────────┼───────────────────────────────┼───────────────────────────────────┤ │ AWS::CloudFront::Distribution │ MyStack/Distribution/Resource │ WebStack/Distribution/Resource │ └───────────────────────────────┴───────────────────────────────┴───────────────────────────────────┘ Do you wish refactor these resources (y/n)?
Saat Anda mengonfirmasi dengan memasukkany, CDK CLI menunjukkan kemajuan operasi refactoring:
Refactoring... ✅ Stack refactor complete
Setelah mengonfirmasi, CDK CLI menjalankan operasi refactoring, mempertahankan kedua sumber daya sambil memperbarui ID logisnya agar sesuai dengan struktur kode baru Anda.
Pemetaan yang sama juga ditampilkan dalam output cdk diff perintah, diatur oleh tumpukan:
Stack MyStack Resources [-] AWS::S3::Bucket Bucket Bucket1234567 destroy (OR move to WebStack.WebsiteOrigin1234567 via refactoring) [-] AWS::CloudFront::Distribution Distribution Distribution1234567 destroy (OR move to WebStack.Distribution1234567) ... Stack WebStack Resources [+] AWS::S3::Bucket WebsiteOrigin WebsiteOrigin1234567 (OR move from MyStack.Bucket1234567) [+] AWS::CloudFront::Distribution Distribution Distribution1234567 (OR move from MyStack.Distribution1234567) ...
Memulai dengan refactoring CDK
Untuk memulai dengan refactoring, lengkapi prasyarat ini:
- Bootstrap lingkungan Anda dengan template terbaru
-
Fitur refactoring CDK memerlukan izin baru di tumpukan bootstrap. Untuk memastikan Anda memiliki izin yang diperlukan, bootstrap lingkungan Anda dengan template terbaru:
cdk bootstrapUntuk informasi selengkapnya tentang bootstrap, lihat Lingkungan bootstrap untuk AWS CDK.
- Instal versi CDK CLI terbaru
-
Pemfaktoran ulang CDK membutuhkan versi terbaru dari CDK CLI. Untuk memastikan Anda memiliki versi terbaru:
npm install -g aws-cdkUntuk petunjuk penginstalan terperinci, lihat Mem ulai dengan AWS CDK.
Gunakan file override untuk menyelesaikan ambiguitas dalam refactoring
CDK CLI secara otomatis menghitung semua pemetaan sumber daya berdasarkan membandingkan kode Anda dengan sumber daya yang digunakan. Dalam kebanyakan kasus, deteksi otomatis ini berfungsi dengan baik, tetapi ada situasi di mana CLI mungkin mengalami ambiguitas yang tidak dapat diselesaikan sendiri. Untuk memberikan panduan ke CDK CLI, gunakan file override.
- Buat file override untuk menyelesaikan ambiguitas
-
File override adalah file JSON yang menyediakan pemetaan ketika CDK CLI tidak dapat menentukan resolusi refactoring untuk sumber daya. File berisi pemetaan sumber daya yang diatur oleh lingkungan:
{ "environments": [ { "account": "123456789012", "region": "us-east-2", "resources": { "StackA.OldName": "StackB.NewName", "StackC.Foo": "StackC.Bar" } } ] }Dalam file ini:
-
environmentsArray berisi satu atau lebih entri lingkungan dengan akun dan wilayah. -
Dalam setiap lingkungan,
resourcesobjek berisi pemetaan. -
Kunci mewakili lokasi saat ini dalam format
<stack name>.<logical ID>. -
Nilai mewakili lokasi baru dalam format yang sama.
Untuk menggunakan file override dengan CDK CLI:
cdk refactor --override-file=overrides.json -
Tumpukan refactoring di berbagai lingkungan
Aplikasi CDK dapat berisi beberapa tumpukan yang digunakan ke lingkungan yang berbeda (AWS akun dan Wilayah). Saat melestarikan sumber daya selama refactoring dalam aplikasi tersebut, CDK CLI menangani lingkungan dengan cara tertentu:
-
Kelompok CLI menumpuk berdasarkan lingkungan dan melakukan refactoring secara terpisah di setiap lingkungan.
-
Anda dapat memindahkan sumber daya antar tumpukan selama refactoring, tetapi semua tumpukan yang terlibat dalam pemindahan harus berada di lingkungan yang sama.
-
Mencoba memindahkan sumber daya di seluruh lingkungan akan mengakibatkan kesalahan.
Perilaku ini memastikan bahwa sumber daya tetap berada dalam AWS akun dan Wilayah aslinya, yang diperlukan karena CloudFormation sumber daya tidak dapat dipindahkan secara fisik melintasi batas akun atau Wilayah.
Misalnya, jika aplikasi CDK Anda mendefinisikan tumpukan untuk lingkungan pengembangan dan produksi, operasi refactoring akan dilakukan secara independen di setiap lingkungan. Sumber daya dapat dipindahkan antar tumpukan dalam lingkungan pengembangan atau dalam lingkungan produksi, tetapi tidak dari pengembangan ke produksi atau sebaliknya.
Menangani sumber daya yang dirancang untuk diganti
Beberapa konstruksi CDK bergantung pada CloudFormation perilaku penggantian sumber daya sebagai bagian dari desain mereka. Misalnya, Version konstruksi API Gateway Deployment dan Lambda dirancang untuk membuat sumber daya baru ketika propertinya berubah.
Saat melakukan refactoring, jangan sertakan perubahan apa pun yang seharusnya menghasilkan penggantian sumber daya. Jika tidak, CDK CLI dapat mendeteksi dan melestarikan sumber daya ini. Ini berarti bahwa sumber daya yang dirancang untuk diganti harus ditangani secara terpisah dari operasi refactoring.
Untuk mengelola sumber daya yang dirancang untuk diganti dengan benar:
-
Pertama, gunakan aplikasi Anda untuk mengganti sumber daya ini sesuai kebutuhan.
-
Kemudian, lakukan operasi refactoring Anda secara terpisah untuk mengatur ulang kode Anda.
Pendekatan dua langkah ini memastikan bahwa sumber daya yang dirancang untuk diganti ditangani dengan benar, sambil tetap memungkinkan Anda mendapatkan manfaat dari refactoring CDK untuk sumber daya lain.
Pertimbangan umum dan batasan
Saat melestarikan sumber daya selama refactoring CDK, ingatlah pertimbangan ini:
-
Kendala lingkungan: Sumber daya hanya dapat dipindahkan antar tumpukan di lingkungan yang sama. Cross-environment gerakan tidak didukung.
-
Ambiguitas: Jika Anda memiliki beberapa sumber daya identik yang diganti namanya secara bersamaan, CDK CLI mungkin tidak dapat menentukan pemetaan yang benar secara otomatis. Dalam kasus ini, Anda harus menyediakan pemetaan eksplisit menggunakan file override.
-
Persyaratan bootstrap: Untuk melestarikan sumber daya selama refactoring, Anda perlu memperbarui tumpukan bootstrap Anda dengan versi terbaru yang menyertakan izin yang diperlukan.
-
Konstruksi tertentu dikecualikan: Beberapa konstruksi seperti API Gateway
Deploymentdan LambdaVersionbergantung pada penggantian sumber daya dan secara otomatis dikecualikan dari refactoring.
Refaktoring dengan pipeline CI/CD
Untuk menggunakan fitur refactoring di CI/CD pipeline, Anda harus dapat menjalankan CDK CLI sebagai bagian dari pipeline Anda. Berikut ini adalah beberapa pertimbangan penting untuk mengintegrasikan refactoring ke dalam alur kerja Anda CI/CD .
- Prasyarat untuk menggunakan refactoring di CI/CD
-
Anda harus dapat menggunakan CDK CLI di CI/CD lingkungan Anda untuk mendapatkan manfaat dari fitur ini.
- Mengintegrasikan refactoring ke alur kerja pipeline Anda
-
Jika Anda menggunakan CLI untuk penerapan di CI/CD pipeline Anda, skrip Anda biasanya terlihat seperti:
... cdk deploy <stack filter> ...Jika Anda ingin menyertakan refactoring sebagai bagian dari alur kerja, berikut ini adalah contoh dasar:
... cdk refactor <stack filter> cdk deploy <stack filter> ...Anda juga dapat memiliki refactoring sebagai langkah terpisah dalam pipeline Anda.
- Menangani kegagalan faktor ulang
-
Ketahuilah bahwa
cdk refactorakan gagal jika kode Anda menyertakan modifikasi sumber daya aktual di samping refactoring. Karena Anda memanggil refactor secara otomatis di pipeline Anda, Anda perlu menangani potensi kegagalan:# Allow refactoring to fail but continue the pipeline cdk refactor <stack filter> || true cdk deploy <stack filter>Atau, Anda mungkin ingin memastikan bahwa tidak ada penerapan yang terjadi sampai Anda menjalankan refactor yang berhasil:
# Only deploy if refactoring succeeds cdk refactor <stack filter> && cdk deploy <stack filter> - Praktik terbaik untuk CI/CD lingkungan
-
Untuk menggunakan refactoring secara efektif dalam pipeline: CI/CD
-
Pisahkan refactoring dari perubahan lain: Ingatlah bahwa operasi refactoring harus terpisah dari penambahan sumber daya, penghapusan, atau modifikasi. Dalam pipeline Anda, pertimbangkan untuk memiliki commit dan penerapan khusus untuk refactoring.
-
Gunakan file override dengan tepat: Memahami bahwa file override digunakan oleh CDK CLI hanya sebagai cadangan untuk menyelesaikan kasus ambiguitas.
-
Tidak perlu
--forcedalam pipeline: Di lingkungan non-interaktif seperti CI/CD pipeline, perintah refactor CDK secara otomatis berjalan tanpa meminta konfirmasi.--forceOpsi ini hanya diperlukan di lingkungan interaktif.
-
Sumber daya terkait
Untuk informasi tentang opsi dan argumen untuk cdk refactor perintah CDK CLI, lihat.
cdk refactor
Untuk memulai tindakan CDK Toolkit Library, lihat Melakukan refactor tindakan terprogram menggunakan Pustaka Perangkat CDK.