首页 文章

AWS Cloudwatch事件putTargets未添加Lambda事件源

提问于
浏览
8

我正在通过aws sdk调用aws cloudWatchEvent putRule和PutTarget api来创建cloudWatch规则并将目标附加到它 . 我的目标是一个lambda函数,规则被创建,目标被附加到规则但是当规则根据其计划触发时,目标lambda函数不会触发 . 所以我进一步观察并发现没有添加lambda函数下的事件源,这使得它不会触发 . 如果我通过AWS控制台创建规则和目标,则会创建事件源并且一切正常但不是API .

4 回答

  • 8

    我在这里遇到了同样的问题,我通过@Anvita Shukla解雇了这个问题 .

    当我这样做时,这很好用:

    • 创建lambda(这是我在网页中创建的)

    并使用SDK

    • 创建规则对象

    • 创建目标对象

    • 提出规则请求

    • 提出目标请求

    • 获取规则请求的响应对象以检索规则ARN

    • 创建权限对象(有@Anvita Shukla说)并设置规则ARN

    • 由lambda客户端对象添加权限

    在aws lambda页面中,我可以看到我的lambdas与关联的触发器事件 . 在aws cloudwatch events页面中,我可以看到创建的规则 . 我用java语言写了这个 . 如果你想我可以分享代码 .

  • 0

    据我所知,目前无法通过SDK实现此功能,只能通过控制台或使用CLI将CloudWatch事件源添加到lambdas . 如果我错了,我很想知道什么是可能的,但这里的文档似乎同意 . http://docs.aws.amazon.com/lambda/latest/dg/with-scheduled-events.html

  • 2

    可以通过aws sdk添加事件源 . 我遇到了同样的问题,请参阅下面的代码作为使用java的解决方案 .

    AddPermissionRequest addPermissionRequest = new AddPermissionRequest();
                    addPermissionRequest.setStatementId("12345ff");  //any unique string would go
                    addPermissionRequest.withSourceArn(ruleArn);
                    addPermissionRequest.setAction("lambda:InvokeFunction");
                    addPermissionRequest.setPrincipal("events.amazonaws.com");
                    addPermissionRequest.setFunctionName("name of your lambda function");
    
                    AWSLambdaAsyncClient lambdaClient = new AWSLambdaAsyncClient();
                    lambdaClient.withRegion(Regions.US_EAST_1); //region of your lambda's location
    
    lambdaClient.addPermission(addPermissionRequest);
    
  • 0

    添加目标后,您需要调用lambda add-permission .

    那是(通过boto3对我来说):

    • 创建lambda

    • 创建规则

    • 创建目标

    • 用lambda arn调用lambda add-permission

    boto3 documentationcli doc .

相关问题