Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Tutorial: Menggunakan AWS Lambda dengan Amazon Simple Notification Service
Dalam tutorial ini, Anda menggunakan fungsi Lambda dalam satu Akun AWS untuk berlangganan topik Amazon Simple Notification Service (Amazon SNS) secara terpisah. Akun AWS Saat memublikasikan pesan ke topik Amazon SNS, fungsi Lambda akan membaca konten pesan dan mengeluarkannya ke Amazon Logs. CloudWatch Untuk menyelesaikan tutorial ini, Anda menggunakan AWS Command Line Interface (AWS CLI).
![Topik Amazon SNS yang terhubung ke fungsi Lambda yang terhubung ke grup log Log CloudWatch](images/services-sns-tutorial/sns_tut_resources.png)
Untuk menyelesaikan tutorial ini, Anda melakukan langkah-langkah berikut:
-
Di akun A, buat topik Amazon SNS.
-
Di akun B, buat fungsi Lambda yang akan membaca pesan dari topik.
-
Di akun B, buat langganan ke topik.
-
Publikasikan pesan ke topik Amazon SNS di akun A dan konfirmasikan bahwa fungsi Lambda di akun B mengeluarkannya ke Log. CloudWatch
Dengan menyelesaikan langkah-langkah ini, Anda akan belajar cara mengonfigurasi topik Amazon SNS untuk menjalankan fungsi Lambda. Anda juga akan belajar cara membuat kebijakan AWS Identity and Access Management (IAM) yang memberikan izin untuk sumber daya di sumber lain Akun AWS untuk memanggil Lambda.
Dalam tutorial, Anda menggunakan dua terpisah Akun AWS. AWS CLI Perintah mengilustrasikan ini dengan menggunakan dua profil bernama yang disebut accountA
danaccountB
, masing-masing dikonfigurasi untuk digunakan dengan yang berbeda Akun AWS. Untuk mempelajari cara mengonfigurasi penggunaan profil yang berbeda, lihat Pengaturan file konfigurasi dan kredensi di Panduan AWS Command Line Interface Pengguna untuk Versi 2. AWS CLI Pastikan untuk mengonfigurasi default yang sama Wilayah AWS untuk kedua profil.
Jika AWS CLI profil yang Anda buat untuk keduanya Akun AWS menggunakan nama yang berbeda, atau jika Anda menggunakan profil default dan satu profil bernama, ubah AWS CLI perintah dalam langkah-langkah berikut sesuai kebutuhan.
Prasyarat
Jika Anda tidak memiliki Akun AWS, selesaikan langkah-langkah berikut untuk membuatnya.
Untuk mendaftar untuk Akun AWS
Buka https://portal.aws.amazon.com/billing/pendaftaran.
Ikuti petunjuk online.
Bagian dari prosedur pendaftaran melibatkan tindakan menerima panggilan telepon dan memasukkan kode verifikasi di keypad telepon.
Saat Anda mendaftar untuk sebuah Akun AWS, sebuah Pengguna root akun AWSdibuat. Pengguna root memiliki akses ke semua Layanan AWS dan sumber daya di akun. Sebagai praktik keamanan terbaik, tetapkan akses administratif ke pengguna, dan gunakan hanya pengguna root untuk melakukan tugas yang memerlukan akses pengguna root.
AWS mengirimi Anda email konfirmasi setelah proses pendaftaran selesai. Kapan saja, Anda dapat melihat aktivitas akun Anda saat ini dan mengelola akun Anda dengan masuk https://aws.amazon.com.rproxy.goskope.comke/
Setelah Anda mendaftar Akun AWS, amankan Pengguna root akun AWS, aktifkan AWS IAM Identity Center, dan buat pengguna administratif sehingga Anda tidak menggunakan pengguna root untuk tugas sehari-hari.
Amankan Anda Pengguna root akun AWS
-
Masuk ke AWS Management Console
sebagai pemilik akun dengan memilih pengguna Root dan memasukkan alamat Akun AWS email Anda. Di laman berikutnya, masukkan kata sandi. Untuk bantuan masuk dengan menggunakan pengguna root, lihat Masuk sebagai pengguna root di AWS Sign-In Panduan Pengguna.
-
Mengaktifkan autentikasi multi-faktor (MFA) untuk pengguna root Anda.
Untuk petunjuk, lihat Mengaktifkan perangkat MFA virtual untuk pengguna Akun AWS root (konsol) Anda di Panduan Pengguna IAM.
Buat pengguna dengan akses administratif
-
Aktifkan Pusat Identitas IAM.
Untuk mendapatkan petunjuk, silakan lihat Mengaktifkan AWS IAM Identity Center di Panduan Pengguna AWS IAM Identity Center .
-
Di Pusat Identitas IAM, berikan akses administratif ke pengguna.
Untuk tutorial tentang menggunakan Direktori Pusat Identitas IAM sebagai sumber identitas Anda, lihat Mengkonfigurasi akses pengguna dengan default Direktori Pusat Identitas IAM di Panduan AWS IAM Identity Center Pengguna.
Masuk sebagai pengguna dengan akses administratif
-
Untuk masuk dengan pengguna Pusat Identitas IAM, gunakan URL masuk yang dikirim ke alamat email saat Anda membuat pengguna Pusat Identitas IAM.
Untuk bantuan masuk menggunakan pengguna Pusat Identitas IAM, lihat Masuk ke portal AWS akses di Panduan AWS Sign-In Pengguna.
Tetapkan akses ke pengguna tambahan
-
Di Pusat Identitas IAM, buat set izin yang mengikuti praktik terbaik menerapkan izin hak istimewa paling sedikit.
Untuk petunjuknya, lihat Membuat set izin di Panduan AWS IAM Identity Center Pengguna.
-
Tetapkan pengguna ke grup, lalu tetapkan akses masuk tunggal ke grup.
Untuk petunjuk, lihat Menambahkan grup di Panduan AWS IAM Identity Center Pengguna.
Jika Anda belum menginstal AWS Command Line Interface, ikuti langkah-langkah di Menginstal atau memperbarui versi terbaru AWS CLI untuk menginstalnya.
Tutorial ini membutuhkan terminal baris perintah atau shell untuk menjalankan perintah. Di Linux dan macOS, gunakan shell dan manajer paket pilihan Anda.
catatan
Di Windows, beberapa perintah Bash CLI yang biasa Anda gunakan dengan Lambda (zip
seperti) tidak didukung oleh terminal bawaan sistem operasi. Untuk mendapatkan versi terintegrasi Windows dari Ubuntu dan Bash, instal Windows Subsystem untuk
Buat topik Amazon SNS (akun A)
![Langkah pertama: Buat topik Amazon SNS](images/services-sns-tutorial/sns_tut_steps_1.png)
Untuk membuat topik
-
Di akun A, buat topik standar Amazon SNS menggunakan perintah berikut AWS CLI .
aws sns create-topic --name sns-topic-for-lambda --profile accountA
Anda akan melihat output seperti yang berikut ini.
{ "TopicArn": "arn:aws:sns:us-west-2:123456789012:sns-topic-for-lambda" }
Catat Nama Sumber Daya Amazon (ARN) topik Anda. Anda akan membutuhkannya nanti dalam tutorial ketika Anda menambahkan izin ke fungsi Lambda Anda untuk berlangganan topik.
Buat peran eksekusi fungsi (akun B)
![Langkah selanjutnya: Buat peran eksekusi](images/services-sns-tutorial/sns_tut_steps_2.png)
Peran eksekusi adalah peran IAM yang memberikan izin fungsi Lambda untuk mengakses dan sumber daya. Layanan AWS Sebelum membuat fungsi di akun B, Anda membuat peran yang memberikan izin dasar fungsi untuk menulis CloudWatch log ke Log. Kami akan menambahkan izin untuk membaca dari topik Amazon SNS Anda di langkah selanjutnya.
Untuk membuat peran eksekusi
-
Di akun B buka halaman peran
di konsol IAM. -
Pilih Buat peran.
-
Untuk jenis entitas Tepercaya, pilih AWS layanan.
-
Untuk kasus penggunaan, pilih Lambda.
-
Pilih Berikutnya.
-
Tambahkan kebijakan izin dasar ke peran dengan melakukan hal berikut:
-
Di kotak pencarian Kebijakan izin, masukkan
AWSLambdaBasicExecutionRole
. -
Pilih Berikutnya.
-
-
Selesaikan pembuatan peran dengan melakukan hal berikut:
-
Di bawah Rincian peran, masukkan
lambda-sns-role
nama Peran. -
Pilih Buat peran.
-
Buat fungsi Lambda (akun B)
![Langkah selanjutnya: Buat fungsi](images/services-sns-tutorial/sns_tut_steps_3.png)
Buat fungsi Lambda yang memproses pesan Amazon SNS Anda. Kode fungsi mencatat isi pesan dari setiap catatan ke Amazon CloudWatch Logs.
Tutorial ini menggunakan runtime Node.js 18.x, tetapi kami juga menyediakan kode contoh dalam bahasa runtime lainnya. Anda dapat memilih tab di kotak berikut untuk melihat kode runtime yang Anda minati. JavaScript Kode yang akan Anda gunakan dalam langkah ini adalah pada contoh pertama yang ditunjukkan di JavaScripttab.
Untuk membuat fungsi
-
Buat direktori untuk proyek, dan kemudian beralih ke direktori itu.
mkdir sns-tutorial cd sns-tutorial
-
Salin JavaScript kode sampel ke file baru bernama
index.js
. -
Buat paket penyebaran menggunakan
zip
perintah berikut.zip function.zip index.js
-
Jalankan AWS CLI perintah berikut untuk membuat fungsi Lambda Anda di akun B.
aws lambda create-function --function-name Function-With-SNS \ --zip-file fileb://function.zip --handler index.handler --runtime nodejs18.x \ --role arn:aws:iam::
<AccountB_ID>
:role/lambda-sns-role \ --timeout 60 --profile accountBAnda akan melihat output seperti yang berikut ini.
{ "FunctionName": "Function-With-SNS", "FunctionArn": "arn:aws:lambda:us-west-2:123456789012:function:Function-With-SNS", "Runtime": "nodejs18.x", "Role": "arn:aws:iam::123456789012:role/lambda_basic_role", "Handler": "index.handler", ... "RuntimeVersionConfig": { "RuntimeVersionArn": "arn:aws:lambda:us-west-2::runtime:7d5f06b69c951da8a48b926ce280a9daf2e8bb1a74fc4a2672580c787d608206" } }
-
Rekam Nama Sumber Daya Amazon (ARN) dari fungsi Anda. Anda akan membutuhkannya nanti di tutorial saat Anda menambahkan izin untuk mengizinkan Amazon SNS menjalankan fungsi Anda.
Tambahkan izin ke fungsi (akun B)
![Langkah selanjutnya: Tambahkan izin untuk berfungsi](images/services-sns-tutorial/sns_tut_steps_4.png)
Agar Amazon SNS dapat menjalankan fungsi Anda, Anda harus memberinya izin dalam pernyataan tentang kebijakan berbasis sumber daya. Anda menambahkan pernyataan ini menggunakan AWS CLI add-permission
perintah.
Untuk memberikan izin Amazon SNS untuk menjalankan fungsi Anda
-
Di akun B, jalankan AWS CLI perintah berikut menggunakan ARN untuk topik Amazon SNS yang Anda rekam sebelumnya.
aws lambda add-permission --function-name Function-With-SNS \ --source-arn arn:aws:sns:
us-east-1:<AccountA_ID>
:sns-topic-for-lambda \ --statement-id function-with-sns --action "lambda:InvokeFunction" \ --principal sns.amazonaws.com --profile accountBAnda akan melihat output seperti yang berikut ini.
{ "Statement": "{\"Condition\":{\"ArnLike\":{\"AWS:SourceArn\": \"arn:aws:sns:us-east-1:<AccountA_ID>:sns-topic-for-lambda\"}}, \"Action\":[\"lambda:InvokeFunction\"], \"Resource\":\"arn:aws:lambda:us-east-1:<AccountB_ID>:function:Function-With-SNS\", \"Effect\":\"Allow\",\"Principal\":{\"Service\":\"sns.amazonaws.com\"}, \"Sid\":\"function-with-sns\"}" }
catatan
Jika akun dengan topik Amazon SNS di-host dalam opt-in Wilayah AWS, Anda harus menentukan wilayah di prinsipal. Misalnya, jika Anda bekerja dengan topik Amazon SNS di wilayah Asia Pasifik (Hong Kong), Anda harus menentukan sns.ap-east-1.amazonaws.com
bukan sns.amazonaws.com
untuk prinsipal.
Berikan izin lintas akun untuk langganan Amazon SNS (akun A)
![Langkah selanjutnya: Berikan izin lintas akun](images/services-sns-tutorial/sns_tut_steps_5.png)
Agar fungsi Lambda Anda di akun B berlangganan topik Amazon SNS yang Anda buat di akun A, Anda harus memberikan izin kepada akun B untuk berlangganan topik Anda. Anda memberikan izin ini menggunakan AWS CLI add-permission
perintah.
Untuk memberikan izin kepada akun B untuk berlangganan topik
-
Di akun A, jalankan AWS CLI perintah berikut. Gunakan ARN untuk topik Amazon SNS yang Anda rekam sebelumnya.
aws sns add-permission --label lambda-access --aws-account-id
<AccountB_ID>
\ --topic-arn arn:aws:sns:us-east-1:<AccountA_ID>
:sns-topic-for-lambda \ --action-name Subscribe ListSubscriptionsByTopic --profile accountA
Buat langganan (akun B)
![Langkah selanjutnya: Buat langganan](images/services-sns-tutorial/sns_tut_steps_6.png)
Di akun B, Anda sekarang berlangganan fungsi Lambda Anda ke topik Amazon SNS yang Anda buat di awal tutorial di akun A. Saat pesan dikirim ke topik ini (sns-topic-for-lambda
), Amazon SNS akan memanggil fungsi Lambda Anda di akun B. Function-With-SNS
Untuk membuat langganan
-
Di akun B, jalankan AWS CLI perintah berikut. Gunakan wilayah default tempat Anda membuat topik dan ARNs untuk topik dan fungsi Lambda Anda.
aws sns subscribe --protocol lambda \ --region
us-east-1
\ --topic-arn arn:aws:sns:us-east-1:<AccountA_ID>
:sns-topic-for-lambda \ --notification-endpoint arn:aws:lambda:us-east-1:<AccountB_ID>
:function:Function-With-SNS \ --profile accountBAnda akan melihat output seperti yang berikut ini.
{ "SubscriptionArn": "arn:aws:sns:us-east-1:<AccountA_ID>:sns-topic-for-lambda:5d906xxxx-7c8x-45dx-a9dx-0484e31c98xx" }
Publikasikan pesan ke topik (akun A dan akun B)
![Langkah selanjutnya: Publikasikan pesan](images/services-sns-tutorial/sns_tut_steps_7.png)
Sekarang fungsi Lambda Anda di akun B berlangganan topik Amazon SNS Anda di akun A, saatnya untuk menguji penyiapan Anda dengan menerbitkan pesan ke topik Anda. Untuk mengonfirmasi bahwa Amazon SNS telah memanggil fungsi Lambda Anda, Anda menggunakan CloudWatch Log untuk melihat output fungsi Anda.
Untuk memublikasikan pesan ke topik Anda dan melihat output fungsi Anda
-
Masukkan
Hello World
ke dalam file teks dan simpan sebagaimessage.txt
. -
Dari direktori yang sama tempat Anda menyimpan file teks Anda, jalankan AWS CLI perintah berikut di akun A. Gunakan ARN untuk topik Anda sendiri.
aws sns publish --message file://message.txt --subject Test \ --topic-arn arn:aws:sns:
us-east-1:<AccountA_ID>
:sns-topic-for-lambda \ --profile accountAIni akan mengembalikan ID pesan dengan pengidentifikasi unik, yang menunjukkan bahwa Amazon SNS telah menerima pesan tersebut. Amazon SNS kemudian mencoba mengirimkan pesan ke pelanggan topik. Untuk mengonfirmasi bahwa Amazon SNS telah memanggil fungsi Lambda Anda, gunakan CloudWatch Log untuk melihat output fungsi Anda:
-
Di akun B, buka halaman Grup log
di CloudWatch konsol Amazon. -
Pilih grup log untuk fungsi Anda (
/aws/lambda/Function-With-SNS
). -
Pilih aliran log terbaru.
-
Jika fungsi Anda dipanggil dengan benar, Anda akan melihat output yang mirip dengan berikut yang menunjukkan konten pesan yang Anda terbitkan ke topik Anda.
2023-07-31T21:42:51.250Z c1cba6b8-ade9-4380-aa32-d1a225da0e48 INFO Processed message Hello World 2023-07-31T21:42:51.250Z c1cba6b8-ade9-4380-aa32-d1a225da0e48 INFO done
Bersihkan sumber daya Anda
Sekarang Anda dapat menghapus sumber daya yang Anda buat untuk tutorial ini, kecuali Anda ingin mempertahankannya. Dengan menghapus AWS sumber daya yang tidak lagi Anda gunakan, Anda mencegah tagihan yang tidak perlu ke Anda Akun AWS.
Di Akun A, bersihkan topik Amazon SNS Anda.
Untuk menghapus topik Amazon SNS
-
Buka halaman Topik
di konsol Amazon SNS. -
Pilih topik yang Anda buat.
-
Pilih Hapus.
-
Masukkan
delete me
di bidang input teks. -
Pilih Hapus.
Di Akun B, bersihkan peran eksekusi, fungsi Lambda, dan langganan Amazon SNS.
Untuk menghapus peran eksekusi
-
Buka halaman Peran
dari konsol IAM. -
Pilih peran eksekusi yang Anda buat.
-
Pilih Hapus.
-
Masukkan nama peran di bidang input teks dan pilih Hapus.
Untuk menghapus fungsi Lambda
-
Buka halaman Fungsi
di konsol Lambda. -
Pilih fungsi yang Anda buat.
-
Pilih Tindakan, Hapus.
-
Ketik
confirm
kolom input teks dan pilih Hapus.
Untuk menghapus langganan Amazon SNS
-
Buka halaman Langganan
di konsol Amazon SNS. -
Pilih langganan yang Anda buat.
-
Pilih Delete, Delete.