【问题标题】:How to create CloudWatch logs trigger for AWS Lambda using aws ruby SDK?如何使用 aws ruby​​ SDK 为 AWS Lambda 创建 CloudWatch 日志触发器?
【发布时间】:2017-08-31 22:34:21
【问题描述】:

我知道应该有一种方法可以使用 aws ruby​​ sdk 为 AWS Lambda 创建触发器(就像可以使用 AWS 管理控制台一样)。

*更新,我找到了一种创建触发器的方法。我正在使用以下代码来做到这一点:

@cloudwatchlogs = Aws::CloudWatchLogs::Client.new(region: region, credentials: Aws::Credentials.new(aws_access_key_id, aws_secret_access_key))
@cloudwatchlogs.put_subscription_filter({
   log_group_name: "RDSOSMetrics",
   filter_name: "RDS metrics filter",
   filter_pattern: "RDS metrics filter pattern",
   destination_arn: function_arn
})

我在尝试这样做时遇到以下错误:

*** Aws::CloudWatchLogs::Errors::InvalidParameterException Exception: Could not execute the lambda function. Make sure you have given CloudWatch Logs permission to execute your function

只是为了测试它,我有角色 X,它附加到 Lambda 函数,并且该角色添加了 AWSLambdaFullAccess 策略,但我仍然收到此错误。

我还缺少什么

谢谢, 巴基尔

【问题讨论】:

  • 您能否说明您要添加哪种“CloudWatch 触发器”?这有点模棱两可;您可以根据通过 cloudwatch 警报发布的消息添加 cloudwatch 事件(计划)触发器、cloudwatch 日志触发器或 SNS 触发器。该细节将改变答案的范围。
  • 更新了我的回复。一般来说,在我的情况下,我需要用于 lambda 函数的 cloudwatch 日志触发器

标签: ruby amazon-web-services aws-sdk


【解决方案1】:

可以通过以下方式添加 CloudWatch Logs 权限:

client.add_permission({
    action: "lambda:InvokeFunction",
    function_name: function_arn,
    principal: "logs." + region + ".amazonaws.com",
    source_account: account_id,
    source_arn: "arn:aws:logs:" + region + ":" + account_id + ":log-group:" + log_group_name + ":*",
    statement_id: unique_identifier,
})

地点:

  • function_arn 是类似于arn:aws:lambda:eu-west-1:111111111111:function:yourFunctionName 的函数标识符
  • region 是您的服务区域的名称,类似于eu-west-1
  • account_id 是您的帐户 ID,类似于 111111111111
  • log_group_name 是您将从类似于/aws/lambda/logGroupName 流式传输的日志的名称
  • unique_identifier 在策略声明中使用的一些随机字符串。例如。 ID-1

应该按以下顺序执行:

  • 创建 Lambda 函数和日志组
  • 添加权限
  • 放置订阅过滤器

更多信息:


注意source_arn末尾的星号:

arn:aws:logs:eu-west-1:111111111111:log-group:logGroup:*
arn:aws:logs:eu-west-1:111111111111:log-group:logGroup

它是日志流的arn,而不是日志组的arn。 我花了一些时间来调试这个(直到我发现aws lambda get-policy 的错误)

【讨论】:

  • 注意:客户端是 CloudWatch 客户端,而不是 Lambda 客户端。
猜你喜欢
  • 2019-04-16
  • 2018-02-26
  • 2016-11-27
  • 1970-01-01
  • 2018-02-16
  • 2021-11-17
  • 2017-11-01
  • 1970-01-01
  • 2016-03-22
相关资源
最近更新 更多