Memanggil fungsi Lambda dari alarm - Amazon CloudWatch

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

Memanggil fungsi Lambda dari alarm

CloudWatch alarm menjamin pemanggilan fungsi Lambda asinkron untuk perubahan status tertentu, kecuali dalam kasus berikut:

  • Ketika fungsi tidak ada.

  • Kapan CloudWatch tidak diizinkan untuk menjalankan fungsi Lambda.

Jika tidak CloudWatch dapat mencapai layanan Lambda atau pesan ditolak karena alasan lain, CloudWatch coba lagi sampai pemanggilan berhasil. Lambda mengantri pesan dan menangani percobaan ulang eksekusi. Untuk informasi selengkapnya tentang model eksekusi ini, termasuk informasi tentang cara Lambda menangani kesalahan, lihat Pemanggilan asinkron di Panduan Pengembang. AWS Lambda

Anda dapat menjalankan fungsi Lambda di akun yang sama, atau di AWS akun lain.

Saat Anda menentukan sebuah alarm untuk menginvokasi sebuah fungsi Lambda sebagai tindakan alarm, Anda dapat memilih untuk menentukan nama fungsi, nama alias fungsi, atau versi tertentu dari sebuah fungsi.

Saat Anda menentukan fungsi Lambda sebagai tindakan alarm, Anda harus membuat kebijakan sumber daya agar fungsi tersebut memungkinkan prinsipal CloudWatch layanan menjalankan fungsi tersebut.

Salah satu cara untuk melakukannya adalah dengan menggunakan AWS CLI, seperti pada contoh berikut:

aws lambda add-permission \ --function-name my-function-name \ --statement-id AlarmAction \ --action 'lambda:InvokeFunction' \ --principal lambda.alarms.cloudwatch.amazonaws.com \ --source-account 111122223333 \ --source-arn arn:aws:cloudwatch:us-east-1:111122223333:alarm:alarm-name

Atau, Anda dapat membuat sebuah kebijakan yang mirip dengan salah satu contoh berikut dan kemudian menetapkannya ke fungsi tersebut.

Contoh berikut menentukan akun yang menjadi lokasi keberadaan alarm, sehingga hanya alarm-alarm yang ada di akun itu (111122223333) yang dapat menginvokasi fungsi tersebut.

JSON
{ "Version": "2012-10-17", "Id": "default", "Statement": [{ "Sid": "AlarmAction", "Effect": "Allow", "Principal": { "Service": "lambda.alarms.cloudwatch.amazonaws.com" }, "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:us-east-1:444455556666:function:function-name", "Condition": { "StringEquals": { "AWS:SourceAccount": "111122223333" } } }] }

Contoh berikut memiliki cakupan yang lebih sempit, yang memungkinkan hanya alarm yang ditentukan yang ada di akun yang ditentukan saja yang menginvokasi fungsi.

JSON
{ "Version": "2012-10-17", "Id": "default", "Statement": [ { "Sid": "AlarmAction", "Effect": "Allow", "Principal": { "Service": "lambda.alarms.cloudwatch.amazonaws.com" }, "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:us-east-1:444455556666:function:function-name", "Condition": { "StringEquals": { "AWS:SourceAccount": "111122223333", "AWS:SourceArn": "arn:aws:cloudwatch:us-east-1:111122223333:alarm:alarm-name" } } }] }

Kami tidak menyarankan Anda membuat sebuah kebijakan yang tidak menentukan akun sumber, karena kebijakan semacam itu akan rentan terhadap masalah deputi yang membingungkan.

Tambahkan metrik Lambda ke investigasi CloudWatch

Anda dapat menambahkan metrik Lambda ke investigasi aktif Anda. CloudWatch Saat menyelidiki masalah, metrik Lambda dapat memberikan wawasan berharga tentang kinerja dan perilaku fungsi. Misalnya, jika Anda menyelidiki masalah kinerja aplikasi, metrik Lambda seperti durasi, tingkat kesalahan, atau throttle dapat membantu mengidentifikasi akar penyebabnya.

Untuk menambahkan metrik Lambda ke investigasi: CloudWatch

  1. Buka AWS Lambda konsol di https://console.aws.amazon.com/lambda/.

  2. Di bagian Monitor, temukan metrik.

  3. Buka menu konteks untuk metrik, pilih Selidiki, Tambahkan ke investigasi. Kemudian, di panel Selidiki, pilih nama investigasi.

Objek acara dikirim dari CloudWatch ke Lambda

Saat Anda mengonfigurasi fungsi Lambda sebagai tindakan alarm, CloudWatch mengirimkan payload JSON ke fungsi Lambda saat memanggil fungsi tersebut. Muatan JSON ini berfungsi sebagai objek peristiwa untuk fungsi tersebut. Anda dapat mengekstrak data dari objek JSON ini dan menggunakannya dalam fungsi Anda. Berikut ini adalah contoh dari sebuah objek peristiwa dari sebuah alarm metrik.

{ 'source': 'aws.cloudwatch', 'alarmArn': 'arn:aws:cloudwatch:us-east-1:444455556666:alarm:lambda-demo-metric-alarm', 'accountId': '444455556666', 'time': '2023-08-04T12:36:15.490+0000', 'region': 'us-east-1', 'alarmData': { 'alarmName': 'lambda-demo-metric-alarm', 'state': { 'value': 'ALARM', 'reason': 'test', 'timestamp': '2023-08-04T12:36:15.490+0000' }, 'previousState': { 'value': 'INSUFFICIENT_DATA', 'reason': 'Insufficient Data: 5 datapoints were unknown.', 'reasonData': '{"version":"1.0","queryDate":"2023-08-04T12:31:29.591+0000","statistic":"Average","period":60,"recentDatapoints":[],"threshold":5.0,"evaluatedDatapoints":[{"timestamp":"2023-08-04T12:30:00.000+0000"},{"timestamp":"2023-08-04T12:29:00.000+0000"},{"timestamp":"2023-08-04T12:28:00.000+0000"},{"timestamp":"2023-08-04T12:27:00.000+0000"},{"timestamp":"2023-08-04T12:26:00.000+0000"}]}', 'timestamp': '2023-08-04T12:31:29.595+0000' }, 'configuration': { 'description': 'Metric Alarm to test Lambda actions', 'metrics': [ { 'id': '1234e046-06f0-a3da-9534-EXAMPLEe4c', 'metricStat': { 'metric': { 'namespace': 'AWS/Logs', 'name': 'CallCount', 'dimensions': { 'InstanceId': 'i-12345678' } }, 'period': 60, 'stat': 'Average', 'unit': 'Percent' }, 'returnData': True } ] } } }

Berikut ini adalah contoh dari sebuah objek peristiwa dari sebuah alarm gabungan.

{ 'source': 'aws.cloudwatch', 'alarmArn': 'arn:aws:cloudwatch:us-east-1:111122223333:alarm:SuppressionDemo.Main', 'accountId': '111122223333', 'time': '2023-08-04T12:56:46.138+0000', 'region': 'us-east-1', 'alarmData': { 'alarmName': 'CompositeDemo.Main', 'state': { 'value': 'ALARM', 'reason': 'arn:aws:cloudwatch:us-east-1:111122223333:alarm:CompositeDemo.FirstChild transitioned to ALARM at Friday 04 August, 2023 12:54:46 UTC', 'reasonData': '{"triggeringAlarms":[{"arn":"arn:aws:cloudwatch:us-east-1:111122223333:alarm:CompositeDemo.FirstChild","state":{"value":"ALARM","timestamp":"2023-08-04T12:54:46.138+0000"}}]}', 'timestamp': '2023-08-04T12:56:46.138+0000' }, 'previousState': { 'value': 'ALARM', 'reason': 'arn:aws:cloudwatch:us-east-1:111122223333:alarm:CompositeDemo.FirstChild transitioned to ALARM at Friday 04 August, 2023 12:54:46 UTC', 'reasonData': '{"triggeringAlarms":[{"arn":"arn:aws:cloudwatch:us-east-1:111122223333:alarm:CompositeDemo.FirstChild","state":{"value":"ALARM","timestamp":"2023-08-04T12:54:46.138+0000"}}]}', 'timestamp': '2023-08-04T12:54:46.138+0000', 'actionsSuppressedBy': 'WaitPeriod', 'actionsSuppressedReason': 'Actions suppressed by WaitPeriod' }, 'configuration': { 'alarmRule': 'ALARM(CompositeDemo.FirstChild) OR ALARM(CompositeDemo.SecondChild)', 'actionsSuppressor': 'CompositeDemo.ActionsSuppressor', 'actionsSuppressorWaitPeriod': 120, 'actionsSuppressorExtensionPeriod': 180 } } }