我已经设置了一个简单的Lambda函数,用java jar文件打印出一行文本。我可以使用“测试”按钮运行测试。我还设置了5分钟的CloudWatch计划触发器,计划表达式:速率(5分钟)。触发器已启用。我可以查看触发器并在“编辑”中确认触发器已分配给我的函数,并且它将使用静态JSON作为输入。出于某种原因,我的功能似乎没有被我的5分钟触发器触发 - 我期望看到触发器的一些日志,但是根本没有任何东西。我正在使用这个记录器:com.amazonaws.services.lambda.runtime.LambdaLogger。我想知道是否还有其他设置我不知道需要设置以使触发器工作。谢谢你的时间。
计时器用于将λ转换为http到ElasticSearch服务。我们的ElasticSearch服务变得没有响应,我们不得不重新创建它。在我们重新创建ElasticSearch服务之后,计时器开始工作......虽然计时器工作,但在控制台中,我开始看到计时器的欺骗。在我关掉定时器后,它又创建了另一个副本。看起来像一个有缺陷的UI。我正在使用Chrome。
答案 0 :(得分:3)
我过去遇到过这个问题,可能还有另一种方法可以解决这个问题,但我是如何做到的,因为我为创建的规则(CloudWatch触发器)指定了一个角色arn能够调用lambda函数。我使用的政策文件是:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"lambda:InvokeFunction"
],
"Resource": "*"
}
]
}
我无法通过控制台/ Web界面弄清楚如何做到这一点。但你可以通过AWS Command Line Interface - Rule - Put Rule来做到这一点。所以你需要:
答案 1 :(得分:0)
如果你正在做的情况是通过java sdk,那么将lambda作为目标放到CW之后就是解决方案。
AddPermissionRequest addPermissionRequest = new AddPermissionRequest(); addPermissionRequest.setStatementId( “12345ff”); //识别您的许可的独特方式 addPermissionRequest.withSourceArn(ruleArn); addPermissionRequest.setAction( “拉姆达:InvokeFunction”); addPermissionRequest.setPrincipal( “events.amazonaws.com”); addPermissionRequest.setFunctionName(“你的lambda名字在这里”);
AWSLambdaAsyncClient lambdaClient = new AWSLambdaAsyncClient();
lambdaClient.withRegion(Regions.US_EAST_1); //specify whichever region your lambda is hosted in
答案 2 :(得分:0)
//*Build client*
AmazonCloudWatchEvents cwe =
AmazonCloudWatchEventsClientBuilder.defaultClient();
//*Add rules*
PutRuleRequest rulerequest = new PutRuleRequest()
.withName(name).withRoleArn(your-role-arn)
.withScheduleExpression(yourExpiryByRateorCron)
.withState(RuleState.ENABLED);
PutRuleResult ruleresponse = cwe.putRule(rulerequest);
//*Add targets*
Target target = new Target()
.withArn(lambda-arn)
.withId(id).withInput(input);
PutTargetsRequest targetrequest = new PutTargetsRequest()
.withTargets(target)
.withRule(rule-name);
cwe.putTargets(targetrequest);
AWSLambda al = AWSLambdaAsyncClientBuilder.defaultClient();
// *Add Permissions*
AddPermissionRequest apr = new AddPermissionRequest()
.withFunctionName("function:yourfunctionname")
.withAction("lambda:InvokeFunction")
.withPrincipal("events.amazonaws.com")
.withStatementId(id)
.withSourceArn(arn);
al.addPermission(apr);