如何配置 CloudWatch 订阅筛选条件以调用 Lambda 函数?
上次更新日期:2023 年 2 月 16 日
我想配置 Amazon CloudWatch 订阅筛选条件以调用我的 AWS Lambda 函数。
简短描述
借助 Amazon CloudWatch Logs,您可以使用订阅筛选条件,将日志数据发送到您的 Lambda 函数。CloudWatch Logs 订阅筛选条件采用 base64 编码并使用 GZIP 格式压缩。
在创建 Lambda 函数之前,计算将生成的日志数据量。务必创建可以管理卷数量的函数。如果函数没有足够的卷,日志流将受限制。有关更多信息,请参阅 Lambda 配额。
注意:流式传输大量 CloudWatch Logs 数据可能会导致高额使用费。最佳实践是使用 AWS Budgets 来跟踪支出和使用情况。有关说明,请参阅如何使用 AWS Budgets 来跟踪我的支出和使用情况?
解决方法
创建 CloudWatch Logs 订阅筛选条件,将日志数据发送到您的 AWS Lambda 函数。
注意:如果您在运行 AWS 命令行界面(AWS CLI)命令时收到错误,请确保您运行的是最新版本的 AWS CLI。
1. 要提供 CloudWatch Logs 权限以调用您的 Lambda 函数,请运行 AWS CLI 命令 add-permission,如下所示:
aws lambda add-permission \
--function-name "helloworld" \
--statement-id "helloworld" \
--principal "logs.amazonaws.com" \
--action "lambda:InvokeFunction" \
--source-arn "arn:aws:logs:region:123456789123:log-group:YourLogGroup:*" \
--source-account "123456789012"
重要提示:将“helloworld”替换为您的 Lambda 函数名称,将“YourLogGroup”替换为您的日志组,将示例账户号替换为您的账户。
2. 使用 AWS CLI 命令 put-subscription-filter 创建订阅筛选条件,以发送包含关键字的日志事件。在以下示例中,关键字“ERROR”用于 Lambda 函数:
重要提示:将“YourLogGroup”替换为您的日志组,将示例账户号替换为您的账户。
aws logs put-subscription-filter \
--log-group-name YourLogGroup \
--filter-name demo \
--filter-pattern "ERROR" \
--destination-arn arn:aws:lambda:region:123456789123:function:helloworld
CloudWatch 日志组“YourLogGroup”在收到包含关键字“ERROR”的日志事件(如下所示)时调用 Lambda 函数:
{
"awslogs": {
"data": "H4sIAAAAAAAAAHWPwQqCQBCGX0Xm7EFtK+smZBEUgXoLCdMhFtKV3akI8d0bLYmibvPPN3wz00CJxmQnTO41whwWQRIctmEcB6sQbFC3CjW3XW8kxpOpP+OC22d1Wml1qZkQGtoMsScxaczKN3plG8zlaHIta5KqWsozoTYw3/djzwhpLwivWFGHGpAFe7DL68JlBUk+l7KSN7tCOEJ4M3/qOI49vMHj+zCKdlFqLaU2ZHV2a4Ct/an0/ivdX8oYc1UVX860fQDQiMdxRQEAAA=="
}
}