

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 從警示調用 Lambda 函式
<a name="alarms-and-actions-Lambda"></a>

CloudWatch 警示保證 Lambda 函式針對特定狀態變更進行非同步調用，但下列情況除外：
+ 當函式不存在時。
+ CloudWatch 未獲授權，無法調用 Lambda 函式。

若 CloudWatch 無法連線至 Lambda 服務，或訊息因其他原因遭拒，CloudWatch 將持續重試直至調用成功。Lambda 會將訊息排入佇列，並處理執行重試。如需此執行模型的詳細資訊，包括有關 Lambda 如何處理錯誤的資訊，請參閱《 AWS Lambda 開發人員指南》中的[非同步調用](https://docs.aws.amazon.com/lambda/latest/dg/invocation-async.html)。

您可以在相同帳戶或其他帳戶中叫用 Lambda 函數 AWS 。

當您指定警示來調用 Lambda 函數作為警示動作時，您可以選擇指定函數名稱、函數別名或函數的特定版本。

在將 Lambda 函數指定為警示動作時，必須為函數建立資源政策，以允許 CloudWatch 服務主體調用函數。

其中一種方法是使用 AWS CLI，如下列範例所示：

```
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
```

或者，您可以建立類似下列其中一個範例的政策，然後將其指派給函數。

下列範例會指定警示所在的帳戶，因此只有該帳戶 (111122223333) 中的警示才能調用函數。

------
#### [ 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"
            }
        }
    }]
}
```

------

下列範例的範圍較窄，只允許指定帳戶中的指定警示調用函數。

------
#### [ 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"
        }
      }
    }]
}
```

------

不建議建立不指定來源帳戶的政策，因為這類政策容易出現混淆的代理問題。

## 將 Lambda 指標新增至 CloudWatch 調查
<a name="Lambda-metrics-investigation"></a>

可以將 Lambda 指標新增至作用中的 CloudWatch 調查。調查問題時，Lambda 指標可以提供有關函式效能和行為的寶貴洞見。例如，如果您正在調查應用程式效能問題，持續時間、錯誤率或限流等 Lambda 指標可能有助於識別根本原因。

若要將 Lambda 指標新增至 CloudWatch 調查：

1. 在 https：//[https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/) 開啟 AWS Lambda 主控台。

1. 在**監視器**區段中，尋找指標。

1. 開啟指標的內容選單，選擇**調查**、**新增至調查**。然後，在**調查**窗格中，選取調查的名稱。

## 從 CloudWatch 傳送至 Lambda 的事件物件
<a name="Lambda-action-payload"></a>

當您將 Lambda 函數設定為警示動作時，CloudWatch 會在調用 Lambda 函數時將 JSON 承載傳遞至該函數。此 JSON 承載用作函數的事件物件。您可以從此 JSON 物件中提取資料並在函數中使用它。以下是來自指標警示的事件物件範例。

```
{
  '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
        }
      ]
    }
  }
}
```

以下是來自複合警示的事件物件範例。

```
{
  '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
    }
  }
}
```