Pertahankan sumber daya yang digunakan saat memfaktorkan ulang kode CDK - AWS Cloud Development Kit (AWS CDK) v2

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

Refactoring CDK dalam rilis pratinjau dan dapat berubah sewaktu-waktu.

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?

Ketika Anda menyebarkan aplikasi CDK, AWS CloudFormation mengidentifikasi sumber daya dengan logisnya. IDs AWS CDK menghasilkan logika ini IDs berdasarkan ID konstruksi 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.

Refactoring 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 logis IDs tanpa mengganti sumber daya yang sebenarnya.

  • Mempertahankan referensi antar sumber daya di 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 Perpustakaan Toolkit, lihat Melakukan tindakan terprogram menggunakan CDK Toolkit Library.

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 refactor, 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 pengembang CDK: AWS

  • Tingkatkan 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 bagian yang berbeda dari 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 dalam pustaka konstruksi yang Anda andalkan.

  • Terapkan praktik terbaik rekayasa perangkat lunak — Refactor kode Anda tanpa mengorbankan infrastruktur yang Anda gunakan.

Cara kerja perintah CDK cdk refactor CLI

penting

Anda harus memberikan --unstable=refactor opsi dengan semua perintah yang menggunakan fitur ini.

Pertama, Anda menerapkan aplikasi CDK awal Anda untuk membuat sumber daya dasar di akun Anda. AWS Setelah memfaktorkan ulang kode CDK Anda, seperti mengganti nama konstruksi atau memindahkan sumber daya antar tumpukan, gunakan cdk refactor perintah untuk memulai proses refactoring sumber daya yang Anda gunakan.

Saat Anda menjalankan perintah refactor, CDK CLI mendeteksi perubahan lokal Anda dengan membandingkan kode Anda saat ini dengan status yang diterapkan. Ini memverifikasi bahwa aplikasi CDK Anda berisi kumpulan sumber daya yang persis sama dengan status yang diterapkan, 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, AWS CloudFormation menggunakan API refactoring untuk memperbarui IDs logika sumber daya tanpa menggantinya.

Di belakang layar, CDK CLI menentukan sumber daya mana yang telah dipindahkan dengan membandingkan properti dan dependensinya, mengidentifikasi sumber daya yang setara secara fungsional tetapi memiliki jalur yang berbeda di pohon konstruksi. Jika mendeteksi penambahan, penghapusan, atau modifikasi sumber daya apa pun, operasi refactoring akan ditolak dengan pesan kesalahan.

Contoh melestarikan sumber daya saat memfaktorkan ulang kode CDK

Dalam contoh ini, kami mempertahankan sumber daya yang digunakan saat 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:

  1. Ganti nama bucket dari Bucket yang lebih deskriptifWebsiteOrigin.

  2. Pindahkan bucket dan distribusi ke WebStack tumpukan 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 logika akan berubah: IDs

  • MyStack/Bucket/Resourceakan menjadiWebStack/WebsiteOrigin/Resource.

  • MyStack/Distribution/Resourceakan menjadiWebStack/Distribution/Resource.

Dengan refactoring CDK, CDK CLI mendeteksi perubahan jalur ini dan menggunakan AWS CloudFormation kemampuan refactoring untuk melestarikan sumber daya 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 IDs logisnya agar sesuai dengan struktur kode baru Anda.

Pemetaan yang sama juga ditampilkan dalam output cdk diff perintah, yang 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 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 bootstrap

Untuk informasi selengkapnya tentang bootstrap, lihat Lingkungan Bootstrapping untuk AWS CDK.

Instal versi CDK CLI terbaru

Refactoring CDK memerlukan versi terbaru dari CDK CLI. Untuk memastikan Anda memiliki versi terbaru:

npm install -g aws-cdk

Untuk petunjuk penginstalan terperinci, lihat Memulai 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 menghadapi ambiguitas yang tidak dapat diselesaikan sendiri. Untuk memberikan panduan ke CDK CLI, gunakan file override.

Buat file override untuk mengatasi 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, resources objek 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 disebarkan ke lingkungan yang berbeda (AWS akun dan Wilayah). Saat melestarikan sumber daya selama refactoring dalam aplikasi tersebut, CDK CLI menangani lingkungan dengan cara tertentu:

  • CLI mengelompokkan tumpukan 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 menghasilkan kesalahan.

Perilaku ini memastikan bahwa sumber daya tetap berada dalam AWS akun asli dan Wilayah mereka, 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 antara tumpukan dalam lingkungan pengembangan atau dalam lingkungan produksi, tetapi tidak dari pengembangan ke produksi atau sebaliknya.

Penanganan sumber daya yang dirancang untuk diganti

Beberapa konstruksi CDK mengandalkan CloudFormation perilaku penggantian sumber daya sebagai bagian dari desainnya. Misalnya, Version konstruksi API Gateway Deployment dan Lambda dirancang untuk membuat sumber daya baru saat propertinya berubah.

Saat refactoring, jangan sertakan perubahan apa pun yang akan 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 dengan benar yang dirancang untuk diganti:

  1. Pertama, gunakan aplikasi Anda untuk mengganti sumber daya ini sesuai kebutuhan.

  2. 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 untuk mendapatkan manfaat dari refactoring CDK untuk sumber daya lain.

Pertimbangan dan keterbatasan umum

Saat melestarikan sumber daya selama refactoring CDK, ingatlah pertimbangan ini:

  • Kendala lingkungan: Sumber daya hanya dapat dipindahkan antar tumpukan di lingkungan yang sama. Pergerakan lintas lingkungan 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 memberikan 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 Deployment dan Lambda Version mengandalkan penggantian sumber daya dan secara otomatis dikecualikan dari refactoring.

Refactoring dengan jaringan pipa 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 dalam CI/CD

Anda harus dapat menggunakan CDK CLI di lingkungan CI/CD Anda untuk mendapatkan manfaat dari fitur ini.

Mengintegrasikan refactoring ke dalam 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 refactor

Ketahuilah bahwa cdk refactor akan gagal jika kode Anda menyertakan modifikasi sumber daya aktual bersama refactoring. Karena Anda memanggil refactor secara otomatis di pipeline, 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 hingga 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 jaringan pipa: CI/CD

  • Memisahkan refactoring dari perubahan lain: Ingat bahwa operasi refactoring harus terpisah dari penambahan sumber daya, penghapusan, atau modifikasi. Dalam pipeline Anda, pertimbangkan untuk memiliki komitmen dan penerapan khusus untuk refactoring.

  • Gunakan file override dengan tepat: Pahami bahwa file override digunakan oleh CDK CLI hanya sebagai fallback untuk menyelesaikan kasus ambiguitas.

  • Tidak perlu --force di 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 perintah CDK cdk refactor CLI, lihat. cdk refactor

Untuk memulai tindakan CDK Toolkit Library, lihat Melakukan refactor tindakan terprogram menggunakan CDK Toolkit Library.