Luncurkan CodeBuild proyek di seluruh akun AWS menggunakan Step Functions dan fungsi proxy Lambda - AWS Prescriptive Guidance

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Luncurkan CodeBuild proyek di seluruh akun AWS menggunakan Step Functions dan fungsi proxy Lambda

Richard Milner-Watts dan Amit Anjarlekar, Amazon Web Services

Ringkasan

Pola ini menunjukkan cara meluncurkan proyek AWS secara asinkron CodeBuild di beberapa akun AWS dengan menggunakan AWS Step Functions dan fungsi proxy AWS Lambda. Anda dapat menggunakan contoh mesin status Step Functions pola untuk menguji keberhasilan CodeBuild proyek Anda.

CodeBuild membantu Anda menjalankan tugas operasional menggunakan AWS Command Line Interface (AWS CLI) dari lingkungan runtime yang dikelola sepenuhnya. Anda dapat mengubah perilaku CodeBuild proyek Anda saat runtime dengan mengganti variabel lingkungan. Selain itu, Anda dapat menggunakan CodeBuild untuk mengelola alur kerja. Untuk informasi selengkapnya, lihat Alat Service Catalog di situs web AWS Workshop dan Menjadwalkan pekerjaan di Amazon RDS for PostgreSQL CodeBuild menggunakan AWS EventBridge dan Amazon di Blog AWS Database.

Prasyarat dan batasan

Prasyarat

  • Dua akun AWS aktif: akun sumber untuk menjalankan fungsi proxy Lambda dengan Step Functions dan akun target untuk membangun proyek sampel jarak jauh CodeBuild

Batasan

  • Pola ini tidak dapat digunakan untuk menyalin artefak antar akun.

Arsitektur

Diagram berikut menunjukkan arsitektur yang dibangun pola ini.

Diagram arsitektur peluncuran CodeBuild proyek di beberapa akun AWS

Diagram menunjukkan alur kerja berikut:

  1. Mesin status Step Functions mem-parsing peta input yang disediakan dan memanggil fungsi proxy Lambda (codebuild-proxy-lambda) untuk setiap akun, Wilayah, dan proyek yang Anda tentukan.

  2. Fungsi proxy Lambda menggunakan AWS Security Token Service (AWS STS) untuk mengambil peran proxy IAM (codebuild-proxy-role), yang dikaitkan dengan kebijakan IAM (codebuild-proxy-policy) di akun target.

  3. Menggunakan peran yang diasumsikan, fungsi Lambda meluncurkan CodeBuild proyek dan mengembalikan ID pekerjaan. CodeBuild Step Functions menyatakan mesin melakukan loop dan polling CodeBuild pekerjaan hingga menerima status sukses atau gagal.

Logika mesin negara ditunjukkan pada gambar berikut.

Alur kerja mesin status Step Functions

Tumpukan teknologi

  • AWS CloudFormation

  • CodeBuild

  • IAM

  • Lambda

  • Step Functions

  • X-Ray

Alat

  • AWS CloudFormation membantu Anda menyiapkan sumber daya AWS, menyediakannya dengan cepat dan konsisten, serta mengelolanya sepanjang siklus hidupnya di seluruh akun dan Wilayah AWS.

  • AWS CloudFormation Designer menyediakan editor JSON dan YAMAL terintegrasi yang membantu Anda melihat dan mengedit CloudFormation templat.

  • AWS CodeBuild adalah layanan build terkelola penuh yang membantu Anda mengkompilasi kode sumber, menjalankan pengujian unit, dan menghasilkan artefak yang siap digunakan.

  • AWS Identity and Access Management (IAM) membantu Anda mengelola akses ke sumber daya AWS dengan aman dengan mengontrol siapa yang diautentikasi dan diberi wewenang untuk menggunakannya.

  • AWS Lambda adalah layanan komputasi yang membantu Anda menjalankan kode tanpa perlu menyediakan atau mengelola server. Ini menjalankan kode Anda hanya bila diperlukan dan skala secara otomatis, jadi Anda hanya membayar untuk waktu komputasi yang Anda gunakan.

  • AWS Step Functions adalah layanan orkestrasi tanpa server yang membantu Anda menggabungkan fungsi AWS Lambda dan layanan AWS lainnya untuk membangun aplikasi yang penting bagi bisnis.

  • AWS X-Ray membantu Anda mengumpulkan data tentang permintaan yang disajikan aplikasi Anda, dan menyediakan alat yang dapat Anda gunakan untuk melihat, memfilter, dan mendapatkan wawasan tentang data tersebut guna mengidentifikasi masalah dan peluang pengoptimalan.

Kode

Kode sampel untuk pola ini tersedia di repositori GitHub Cross Account CodeBuild Proxy. Pola ini menggunakan AWS Lambda Powertools for Python library untuk menyediakan fungsionalitas logging dan tracing. Untuk informasi selengkapnya tentang pustaka ini dan utilitasnya, lihat Powertools for AWS Lambda (Python).

Praktik terbaik

  1. Sesuaikan nilai waktu tunggu di mesin status Fungsi Langkah untuk meminimalkan permintaan polling untuk status pekerjaan. Gunakan waktu eksekusi yang diharapkan untuk CodeBuild proyek.

  2. Sesuaikan MaxConcurrency properti peta di Step Functions untuk mengontrol berapa banyak CodeBuild proyek yang dapat dijalankan secara paralel.

  3. Jika diperlukan, tinjau kode sampel untuk kesiapan produksi. Pertimbangkan data apa yang mungkin dicatat oleh solusi dan apakah CloudWatch enkripsi Amazon default sudah cukup.

Epik

TugasDeskripsiKeterampilan yang dibutuhkan

Rekam akun AWS IDs.

Akun AWS IDs diperlukan untuk mengatur akses di seluruh akun.

Catat ID akun AWS untuk akun sumber dan target Anda. Untuk informasi selengkapnya, lihat Menemukan ID akun AWS Anda di dokumentasi IAM.

AWS DevOps

Unduh CloudFormation templat AWS.

  1. Unduh CloudFormation template sample_target_codebuild_template.yaml AWS dari GitHub repositori untuk pola ini.

  2. Unduh CloudFormation template codebuild_lambda_proxy_template.yaml AWS dari GitHub repositori untuk pola ini.

catatan

Dalam CloudFormation templat AWS, <SourceAccountId> adalah ID akun AWS untuk akun sumber, dan <TargetAccountId> merupakan ID akun AWS untuk akun target.

AWS DevOps

Buat dan terapkan CloudFormation tumpukan AWS.

  1. Masuk ke AWS Management Console untuk akun sumber Anda, buka CloudFormation konsol AWS, lalu pilih Stacks.

  2. Pilih Buat tumpukan kemudian pilih Dengan sumber daya baru (standar).

  3. Untuk Sumber templat, pilih Unggah file templat.

  4. Untuk Unggah file templat, pilih file, lalu pilih codebuild_lambda_proxy_template.yaml file yang Anda unduh. Pilih Berikutnya.

  5. Untuk nama Stack, masukkan nama untuk tumpukan (misalnya,codebuild-lambda-proxy).

  6. catatan

    Ganti crossAccountTargetRoleArn parameter dengan Anda <TargetAccountId> (misalnya,<arn:aws:iam::123456789012:role/proxy-lambda-codebuild-role>). : Anda tidak diharuskan memperbarui nilai default untuk targetCodeBuildProjectparameter.

  7. Pilih Berikutnya, terima opsi pembuatan tumpukan default, lalu pilih Berikutnya.

  8. Pilih kotak centang Saya mengakui bahwa AWS CloudFormation mungkin membuat sumber daya IAM dengan nama khusus, lalu pilih Buat tumpukan.

catatan

Anda harus membuat CloudFormation tumpukan AWS untuk fungsi Lambda proxy sebelum membuat sumber daya apa pun di akun target. Saat Anda membuat kebijakan kepercayaan di akun target, peran IAM diterjemahkan dari nama peran ke pengenal internal. Inilah sebabnya mengapa peran IAM harus sudah ada.

AWS DevOps

Konfirmasikan pembuatan fungsi proxy dan mesin status.

  1. Tunggu hingga AWS CloudFormation stack mencapai status CREATE_COMPLETE. Ini akan memakan waktu kurang dari satu menit.

  2. Buka konsol AWS Lambda, pilih Fungsi, lalu temukan fungsinya. lambda-proxy-ProxyLambda-<GUID>

  3. Buka konsol AWS Step Functions, pilih state machine, lalu temukan sample-crossaccount-codebuild-state-machine state machine.

AWS DevOps
TugasDeskripsiKeterampilan yang dibutuhkan

Buat dan terapkan CloudFormation tumpukan AWS.

  1. Masuk ke AWS Management Console untuk akun target Anda, buka CloudFormation konsol AWS, lalu pilih Stacks.

  2. Pilih Buat Tumpukan dan kemudian pilih Dengan sumber daya baru (standar).

  3. Untuk Sumber templat, pilih Unggah file templat.

  4. Untuk Unggah file templat, pilih Pilih file, lalu pilih sample_target_codebuild_template.yaml file. Pilih Berikutnya.

  5. Untuk nama Stack, masukkan nama untuk tumpukan (misalnya:sample-codebuild-stack).

  6. Ganti crossAccountSourceRoleArn parameter dengan Anda <SourceAccountId> (misalnya,<arn:aws:iam::123456789012:role/codebuild-proxy-lambda-role>).

  7. Pilih Berikutnya, terima opsi pembuatan tumpukan default, lalu pilih Berikutnya.

  8. Pilih kotak centang Saya mengakui bahwa AWS CloudFormation mungkin membuat sumber daya IAM dengan nama khusus, lalu pilih Buat tumpukan.

AWS DevOps

Verifikasi pembuatan CodeBuild proyek sampel.

  1. Tunggu hingga AWS CloudFormation stack mencapai status CREATE_COMPLETE. Ini akan memakan waktu kurang dari satu menit.

  2. Buka CodeBuild konsol AWS lalu temukan sample-codebuild-project proyeknya.

AWS DevOps
TugasDeskripsiKeterampilan yang dibutuhkan

Luncurkan mesin negara.

  1. Masuk ke AWS Management Console untuk akun sumber Anda, buka konsol AWS Step Functions, lalu pilih State machine.

  2. Pilih mesin sample-crossaccount-codebuild-state-machine status dan kemudian pilih Mulai eksekusi.

  3. Di editor Input, masukkan JSON berikut, dan ganti <TargetAccountID> dengan ID akun AWS dari akun yang berisi CodeBuild proyek.

    { "crossAccountTargetRoleArns": [ { "arn": "arn:aws:iam::<TargetAccountID>:role/proxy-lambda-codebuild-role", "region": "eu-west-1", "codeBuildProject": "sample-codebuild-project", "SampleValue1": "Value1", "SampleValue2": "Value2" } ] }
    catatan

    Pasangan kunci-nilai dilewatkan sebagai variabel lingkungan dari fungsi di akun sumber ke CodeBuild proyek di akun target.

  4. Pilih Mulai Eksekusi.

  5. Pada tab Detail pada halaman mesin status, periksa apakah Status Eksekusi diatur ke Berhasil. Ini mengonfirmasi bahwa mesin status Anda sedang berjalan. Catatan: Diperlukan waktu sekitar 30 detik agar mesin status mencapai status Berhasil.

  6. Untuk melihat output dan masukan langkah di mesin status, perluas langkah itu di bagian Riwayat peristiwa eksekusi. Misalnya, perluas langkah Lambda - CodeBuild Proxy — Mulai. Outputnya mencakup detail tentang variabel lingkungan yang diganti, muatan asli, dan ID pekerjaan. CodeBuild

AWS DevOps

Validasi variabel lingkungan.

  1. Masuk ke AWS Management Console untuk akun target Anda.

  2. Buka CodeBuild konsol AWS, perluas Build, lalu pilih Build projects.

  3. Pilih sample-codebuild-project proyek, lalu pilih Lihat detail.

  4. Pada tab Build history, pilih build terbaru proyek, lalu pilih Lihat log.

  5. Dalam keluaran log, verifikasi bahwa variabel lingkungan yang dicetak ke STDOUT cocok dengan variabel lingkungan dari mesin status sampel Step Functions.

AWS DevOps

Pemecahan Masalah

IsuSolusi

Eksekusi Step Functions memakan waktu lebih lama dari yang diharapkan.

Sesuaikan MaxConcurrency properti peta di mesin status Step Function untuk mengontrol berapa banyak CodeBuild proyek yang dapat berjalan secara paralel.

Pelaksanaan CodeBuild pekerjaan memakan waktu lebih lama dari yang diharapkan.

  1. Sesuaikan nilai waktu tunggu di mesin status Step Functions untuk meminimalkan permintaan polling untuk status pekerjaan. Gunakan waktu eksekusi yang diharapkan untuk CodeBuild proyek.

  2. Pertimbangkan CodeBuild apakah alat yang tepat untuk digunakan. Misalnya, waktu yang diperlukan untuk menginisialisasi CodeBuild pekerjaan bisa jauh lebih lama daripada AWS Lambda. Jika throughput tinggi dan waktu penyelesaian yang cepat merupakan persyaratan, pertimbangkan untuk memigrasikan logika bisnis ke AWS Lambda dan menggunakan arsitektur fan-out.