Membuat EventBridge koneksi Amazon lintas akun di suatu organisasi - AWS Prescriptive Guidance

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

Membuat EventBridge koneksi Amazon lintas akun di suatu organisasi

Sam Wilson dan Robert Stone, Amazon Web Services

Ringkasan

Sistem terdistribusi besar menggunakan Amazon EventBridge untuk mengkomunikasikan perubahan status antara berbagai akun Amazon Web Services (AWS) dalam suatu AWS Organizations organisasi. Namun, EventBridge umumnya hanya dapat menargetkan endpoint atau konsumen dalam hal yang sama Akun AWS. Pengecualian adalah bus acara di akun yang berbeda. Bus acara itu adalah target yang valid. Untuk mengkonsumsi acara dari bus acara di akun lain, acara harus didorong dari bus acara akun sumber ke bus acara akun tujuan. Untuk menghindari tantangan saat mengelola peristiwa kritis di seluruh aplikasi yang berbeda Akun AWS, gunakan pendekatan yang direkomendasikan yang disajikan dalam pola ini.

Pola ini menggambarkan bagaimana menerapkan arsitektur berbasis peristiwa dengan EventBridge yang melibatkan banyak Akun AWS dalam suatu organisasi. AWS Organizations Pola menggunakan AWS Cloud Development Kit (AWS CDK) Toolkit dan AWS CloudFormation.

EventBridge menawarkan bus acara tanpa server yang membantu Anda menerima, memfilter, mengubah, merutekan, dan mengirimkan acara. Komponen penting dari arsitektur berbasis peristiwa, EventBridge mendukung pemisahan antara produsen pesan dan konsumen pesan tersebut. Dalam satu akun, ini lurus ke depan. Struktur multi-akun memerlukan pertimbangan tambahan untuk acara di bus acara dalam satu akun untuk dikonsumsi di akun lain dalam organisasi yang sama.

Untuk informasi tentang pertimbangan khusus akun bagi produsen dan konsumen, lihat bagian Informasi tambahan.

Prasyarat dan batasan

Prasyarat

  • Sebuah AWS Organizations organisasi dengan setidaknya dua yang terkait Akun AWS

  • Peran AWS Identity and Access Management (IAM) di keduanya Akun AWS yang memungkinkan Anda menyediakan infrastruktur di keduanya Akun AWS dengan menggunakan AWS CloudFormation

  • Git diinstal secara lokal

  • AWS Command Line Interface (AWS CLI) dipasang secara lokal

  • AWS CDK diinstal secara lokal dan bootstrap di keduanya Akun AWS

Versi produk

Pola ini telah dibangun dan diuji dengan menggunakan alat dan versi berikut:

  • AWS CDK Toolkit 2.126.0

  • Node.js 18.19.0

  • npm 10.2.3

  • Python 3.12

Pola ini harus bekerja dengan versi AWS CDK v2 atau npm apa pun. Node.js versi 13.0.0 hingga 13.6.0 tidak kompatibel dengan. AWS CDK

Arsitektur

Arsitektur target

Diagram berikut menunjukkan alur kerja arsitektur untuk mendorong peristiwa dari satu akun dan menggunakannya di akun lain.

Proses tiga langkah untuk menghubungkan akun produsen Sumber dan akun konsumen Tujuan.

Alur kerja berisi langkah-langkah berikut:

  1. AWS Lambda Fungsi Produser di akun Sumber menempatkan acara di bus EventBridge acara akun.

  2. EventBridge Aturan lintas akun merutekan acara ke bus EventBridge acara di akun Tujuan.

  3. Bus EventBridge acara di akun Tujuan memiliki aturan Lambda target yang memanggil fungsi Lambda Konsumen.

Praktik terbaik adalah menggunakan Dead Letter Queue (DLQ) untuk menangani pemanggilan fungsi Lambda Konsumen yang gagal. Namun, DLQ dihilangkan dari solusi ini untuk kejelasan. Untuk mempelajari lebih lanjut tentang cara menerapkan DLQ dalam alur kerja Anda dan meningkatkan kemampuan alur kerja Anda untuk pulih dari kegagalan, lihat posting blog Menerapkan pola penanganan AWS Lambda kesalahan.

Otomatisasi dan skala

AWS CDK secara otomatis menyediakan arsitektur yang diperlukan. EventBridge dapat menskalakan hingga ribuan catatan per detik tergantung pada Wilayah AWS. Untuk informasi selengkapnya, lihat dokumentasi EventBridge kuota Amazon.

Alat

Layanan AWS

  • AWS Cloud Development Kit (AWS CDK)adalah kerangka pengembangan perangkat lunak yang membantu Anda menentukan dan menyediakan AWS Cloud infrastruktur dalam kode. Pola ini menggunakan AWS CDK Toolkit, kit pengembangan cloud baris perintah yang membantu Anda berinteraksi dengan AWS CDK aplikasi.

  • Amazon EventBridge adalah layanan bus acara tanpa server yang membantu Anda menghubungkan aplikasi Anda dengan data waktu nyata dari berbagai sumber. Misalnya, AWS Lambda fungsi, titik akhir pemanggilan HTTP menggunakan tujuan API, atau bus acara di tempat lain. Akun AWS

  • AWS Lambdaadalah 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 Organizationsadalah layanan manajemen akun yang membantu Anda mengkonsolidasikan beberapa Akun AWS ke dalam organisasi yang Anda buat dan kelola secara terpusat.

Alat lainnya

  • Node.js adalah lingkungan JavaScript runtime berbasis peristiwa yang dirancang untuk membangun aplikasi jaringan yang dapat diskalakan.

  • npm adalah registri perangkat lunak yang berjalan di lingkungan Node.js dan digunakan untuk berbagi atau meminjam paket dan mengelola penyebaran paket pribadi.

  • Python adalah bahasa pemrograman komputer tujuan umum.

Repositori kode

Kode untuk pola ini tersedia di repositori GitHub cross-account-eventbridge-in-organization.

Praktik terbaik

Untuk praktik terbaik saat bekerja sama EventBridge, lihat sumber daya berikut:

Epik

TugasDeskripsiKeterampilan yang dibutuhkan

Konfigurasikan kredenal lokal untuk akun Sumber dan akun Tujuan.

Tinjau Menyiapkan konfigurasi dan kredensil baru, dan gunakan metode otentikasi dan kredensi yang paling masuk akal bagi lingkungan Anda.

penting

Pastikan untuk mengonfigurasi AWS CLI untuk kedua akun Sumber dan otentikasi akun Tujuan.

Petunjuk ini mengasumsikan bahwa Anda telah mengonfigurasi dua profil AWS secara lokal: sourceAccount dandestinationAccount.

Pengembang aplikasi

Bootstrap keduanya Akun AWS.

Untuk mem-bootstrap akun, jalankan perintah berikut:

cdk bootstrap --profile sourceAccount cdk bootstrap --profile destinationAccount
Pengembang aplikasi

Kloning kode pola.

Untuk mengkloning repositori, jalankan perintah berikut:

git clone git@github.com:aws-samples/aws-cdk-examples.git

Kemudian, ubah direktori ke folder proyek yang baru dikloning:

cd aws-cdk-examples/python/cross-account-eventbridge-in-organization
Pengembang aplikasi
TugasDeskripsiKeterampilan yang dibutuhkan

Ubah cdk.json dengan detail akun AWS Organizations dan akun Anda.

Di folder root proyek, buat perubahan berikut kecdk.json:

  • organization_idID Organizations dari akun yang terlibat dalam penyebaran Anda

  • event_bus_name-CrossAccount, atau Anda dapat mengganti namanya

  • rules[].targets[].arn Akun AWS ID akun konsumsi (Akun tujuan)

Pengembang aplikasi

Menyebarkan ProducerStack sumber daya.

Jalankan perintah berikut dari direktori root proyek:

cdk deploy ProducerStack --profile sourceAccount

Saat diminta, terima peran IAM baru dan izin terkait keamanan lainnya yang dibuat melalui. AWS CloudFormation

Pengembang aplikasi

Verifikasi bahwa ProducerStack sumber daya digunakan.

Untuk memverifikasi sumber daya, lakukan hal berikut:

  1. Pada akun AWS Management Console for Source, pilih CloudFormation.

  2. Dari daftar tumpukan, pilih ProducerStack.

  3. Pada tab Stack Info, verifikasi bahwa status tumpukan adalahCREATE_COMPLETE. Secara opsional, pada tab Sumber Daya, tinjau sumber daya yang dikonfigurasi.

Pengembang aplikasi
TugasDeskripsiKeterampilan yang dibutuhkan

Menyebarkan ConsumerStack sumber daya.

Jalankan perintah berikut dari direktori root proyek:

cdk deploy ConsumerStack --profile destinationAccount

Saat diminta, terima peran IAM baru dan izin terkait keamanan lainnya yang dibuat melalui. AWS CloudFormation

Pengembang aplikasi

Verifikasi bahwa ConsumerStack sumber daya digunakan

  1. Di konsol untuk akun Tujuan, pilih CloudFormation.

  2. Dari daftar tumpukan, pilih ConsumerStack.

  3. Pada tab Stack Info, verifikasi bahwa status tumpukan adalahCREATE_COMPLETE. Secara opsional, pada tab Sumber Daya, tinjau sumber daya yang dikonfigurasi.

Pengembang aplikasi
TugasDeskripsiKeterampilan yang dibutuhkan

Memanggil fungsi Lambda Produser.

  1. Di konsol untuk akun Sumber, pilih Lambda.

  2. Dari daftar fungsi, pilih ProducerStack- ProducerLambda XXXX (XXXX mewakili urutan karakter yang dihasilkan secara otomatis oleh AWS CDK).

  3. Pilih tab Uji.

  4. Di bagian Test event, pilih Test.

    Konten area teks Event JSON dapat berupa JSON yang valid yang disediakan untuk fungsi Lambda sebagai payload. Dalam hal ini, JSON default yang disediakan sudah cukup.

  5. Verifikasi bahwa fungsi Eksekusi: pesan berhasil muncul di spanduk hijau di atas bagian Acara uji.

Pengembang aplikasi

Verifikasi bahwa acara telah diterima.

  1. Di konsol untuk akun Tujuan, pilih Lambda.

  2. Dari daftar fungsi, pilih ConsumerStack- ConsumerLambda XXXX (XXXX mewakili urutan karakter yang dihasilkan secara otomatis oleh AWS CDK).

  3. Pilih tab Pantau.

  4. Di bagian Monitor, pilih Lihat CloudWatch log.

  5. Di tab yang baru dibuka, pilih nama aliran log dari aliran log terbaru.

  6. Verifikasi bahwa pernyataan log seperti berikut ini muncul:

    [DEBUG]    2024-04-08T19:08:10.091Z    9c16844a-f9de-444d-b621-86afe64d4cc8    Event: {'version':'0', 'id':'0b9faa96-973f-8be2-ecf8-75e4f328b980', 'detail-type':'TestType', 'source':'Producer', 'account':'XXXXXXXXXXXX', 'time':'2024-04-08T19:08:09Z', 'region':'us-east-1', 'resources': [], 'detail': {'key1':'value1', 'key2':'value2', 'key3':'value3'}}

Pengembang aplikasi
TugasDeskripsiKeterampilan yang dibutuhkan

Hancurkan ConsumerStack sumber daya.

Jika Anda menggunakan pola ini sebagai pengujian, bersihkan sumber daya yang digunakan untuk menghindari biaya tambahan.

Jalankan perintah berikut dari direktori root proyek:

cdk destroy ConsumerStack --profile destinationAccount

Anda akan diminta untuk mengonfirmasi penghapusan tumpukan.

Pengembang aplikasi

Hancurkan ProducerStack sumber daya.

Jalankan perintah berikut dari direktori root proyek:

cdk destroy ProducerStack --profile sourceAccount

Anda akan diminta untuk mengonfirmasi penghapusan tumpukan.

Pengembang aplikasi

Pemecahan Masalah

IsuSolusi

Tidak ada acara yang diterima di akun Tujuan.

  1. Verifikasi bahwa ID Organizations yang diberikan sudah benar.

  2. Verifikasi bahwa akun Sumber adalah bagian dari organisasi yang disediakan.

  3. Verifikasi bahwa aturan bus acara di peta akun Sumber ke informasi yang benar di akun Tujuan.

Memanggil fungsi Lambda dari konsol mengembalikan kesalahan berikut:

User: arn:aws:iam::123456789012:user/XXXXX is not authorized to perform: lambda:Invoke

Hubungi Akun AWS administrator Anda untuk menerima izin lambda:Invoke tindakan yang sesuai pada fungsi ProducerStack-ProducerLambdaXXXX Lambda.

Sumber daya terkait

Referensi

Tutorial dan video

Informasi tambahan

Aturan produsen

Di akun Sumber, bus EventBridge acara dibuat untuk menerima pesan dari produsen (seperti yang ditunjukkan di bagian Arsitektur). Aturan dengan izin IAM yang menyertainya dibuat di bus acara ini. Aturan menargetkan bus EventBridge acara di akun Tujuan berdasarkan cdk.json struktur berikut:

"rules": [ { "id": "CrossAccount", "sources": ["Producer"], "detail_types": ["TestType"], "targets": [ { "id": "ConsumerEventBus", "arn": "arn:aws:events:us-east-2:012345678901:event-bus/CrossAccount" } ] } ]

Untuk setiap bus acara konsumsi, pola acara dan bus acara target harus disertakan.

Pola Acara

Pola acara memfilter peristiwa mana yang akan diterapkan aturan ini. Untuk tujuan contoh ini, sumber acara dan catatan detail_types mengidentifikasi peristiwa mana yang akan dikirimkan dari bus acara akun Sumber ke bus acara akun Tujuan.

Target bus acara

Aturan ini menargetkan bus acara yang ada di akun lain. Lengkap arn (Nama Sumber Daya Amazon) diperlukan untuk mengidentifikasi bus peristiwa target secara unik, dan itu id adalah ID logis yang digunakan oleh. AWS CloudFormation Bus acara target tidak perlu benar-benar ada pada saat pembuatan aturan target.

Pertimbangan khusus akun tujuan

Di akun Tujuan, bus EventBridge acara dibuat untuk menerima pesan dari bus acara akun Sumber. Untuk mengizinkan acara dipublikasikan dari akun Sumber, Anda harus membuat kebijakan berbasis sumber daya:

{ "Version": "2012-10-17", "Statement": [{ "Sid": "AllowOrgToPutEvents", "Effect": "Allow", "Principal": "*", "Action": "events:PutEvents", "Resource": "arn:aws:events:us-east-2:012345678901:event-bus/CrossAccount", "Condition": { "StringEquals": { "aws:PrincipalOrgID": "o-XXXXXXXXX" } } }] }

Sangat penting untuk memberikan events:PutEvents izin, yang memungkinkan akun lain di organisasi yang sama untuk mempublikasikan acara ke bus acara ini. Menyetel aws:PrincipalOrgId sebagai ID organisasi memberikan izin yang diperlukan.

Pola acara

Anda dapat memodifikasi pola acara yang disertakan untuk memenuhi kasus penggunaan Anda:

rule = events.Rule( self, self.id + 'Rule' + rule_definition['id'], event_bus=event_bus, event_pattern=events.EventPattern( source=rule_definition['sources'], detail_type=rule_definition['detail_types'], ) )

Untuk mengurangi pemrosesan yang tidak perlu, pola acara harus menentukan bahwa hanya peristiwa yang akan diproses oleh akun Tujuan yang ditransmisikan ke bus acara akun Tujuan.

Kebijakan berbasis sumber daya

Contoh ini menggunakan ID organisasi untuk mengontrol akun mana yang diizinkan untuk menempatkan peristiwa di bus acara akun Tujuan. Pertimbangkan untuk menggunakan kebijakan yang lebih ketat, seperti menentukan akun Sumber.

EventBridge kuota

Perlu diingat kuota berikut:

  • 300 aturan per bus acara adalah kuota default. Ini dapat diperluas jika perlu, tetapi harus sesuai dengan sebagian besar kasus penggunaan.

  • Lima target per aturan adalah maksimum yang diizinkan. Kami merekomendasikan bahwa arsitek aplikasi harus menggunakan aturan yang berbeda untuk setiap akun Destination untuk mendukung kontrol halus atas pola acara.