我知道应该有一种方法可以使用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
只是为了测试它,我有一个附加到Lambda函数的角色X,并且该角色添加了AWSLambdaFullAccess策略,但我仍然收到此错误。
我还缺少其他任何东西
谢谢, 巴克尔
答案 0 :(得分:4)
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,
})
其中:
arn:aws:lambda:eu-west-1:111111111111:function:yourFunctionName
eu-west-1
111111111111
/aws/lambda/logGroupName
ID-1
应按以下顺序执行:
更多信息:
注意 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
的错误)