Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 当我将多个cloudwatch日志组流式传输到一个lambda时,如何增加策略限制?_Amazon Web Services_Aws Lambda_Amazon Cloudwatch - Fatal编程技术网

Amazon web services 当我将多个cloudwatch日志组流式传输到一个lambda时,如何增加策略限制?

Amazon web services 当我将多个cloudwatch日志组流式传输到一个lambda时,如何增加策略限制?,amazon-web-services,aws-lambda,amazon-cloudwatch,Amazon Web Services,Aws Lambda,Amazon Cloudwatch,我已经设置了一个lambda函数,由许多cloudwatch日志组触发。为此,我在日志组aws lambda add permission上添加了invoke函数权限,并将订阅添加为lambda作为目标aws logs put subscription filter。我需要将数百个日志组流式传输到一个lambda,这使得lambda触发器策略非常大 此流中有两个命令aws lambda add permission和aws logs put subscription filter。我需要为每个日

我已经设置了一个lambda函数,由许多cloudwatch日志组触发。为此,我在日志组
aws lambda add permission
上添加了invoke函数权限,并将订阅添加为lambda作为目标
aws logs put subscription filter
。我需要将数百个日志组流式传输到一个lambda,这使得lambda触发器策略非常大

此流中有两个命令
aws lambda add permission
aws logs put subscription filter
。我需要为每个日志组运行这两个命令。我添加了46个cloudwath日志组作为lambda的触发器,但添加第47个日志组时出现了一个错误

我得到的错误是以下命令:

aws lambda add-permission --function-name $AGGREGATOR_NAME \
    --statement-id add-permission-$lambdaName --action lambda:InvokeFunction \
    --principal logs.ap-southeast-2.amazonaws.com \
    --source-arn $logArn
有没有办法避开这个问题? 这是将数百个日志组流式传输到一个lambda的正确方法吗

我尝试在命令中使用
通配符
,但出现验证错误

aws lambda add-permission --function-name $AGGREGATOR_NAME --statement-id $ID --action lambda:InvokeFunction --principal logs.ap-southeast-2.amazonaws.com --source-arn "arn:aws:logs:*:*:log-group:/aws/lambda/hello*:*"

An error occurred (ValidationException) when calling the AddPermission operation: 1 validation error detected: Value 'arn:aws:logs:*:*:log-group:/aws/lambda/hello*:*' at 'sourceArn' failed to satisfy constraint: Member must satisfy regular expression pattern: arn:(aws[a-zA-Z0-9-]*):([a-zA-Z0-9\-])+:([a-z]{2}((-gov)|(-iso(b?)))?-[a-z]+-\d{1})?:(\d{12})?:(.*)

解决这个问题的一种方法是在
--source arn
中使用通配符。通过这样做,您不需要为每个CloudWatch日志组使用一个基于lambda资源的策略。当然,最简单的方法是允许所有日志组执行
lambda:InvokeFunction
。在这种情况下,您只需要

aws lambda add-permission --function-name $AGGREGATOR_NAME \
    --statement-id add-permission-$lambdaName --action lambda:InvokeFunction \
    --principal logs.ap-southeast-2.amazonaws.com

请注意,
--源arn
已被删除。

该错误似乎不是由
aws logs put subscription filter
api调用导致的。它是由aws lambda添加权限引起的吗?是的,你是对的,错误是由添加权限引起的。我更新了我的问题我想使用通配符限制日志组,但出现验证错误。我已经在我的网站上发布了qusetion@JoeyYiZhao您必须指定地区和帐号。例如,
arn:aws:logs:us-east-1:123456789012:loggroup:/aws/lambda/hello*:*
aws lambda add-permission --function-name $AGGREGATOR_NAME \
    --statement-id add-permission-$lambdaName --action lambda:InvokeFunction \
    --principal logs.ap-southeast-2.amazonaws.com