Amazon web services 无服务器-无法使用cloudwatch事件触发aws lambda
当前我的serverless.yml文件如下所示:Amazon web services 无服务器-无法使用cloudwatch事件触发aws lambda,amazon-web-services,serverless-framework,serverless,Amazon Web Services,Serverless Framework,Serverless,当前我的serverless.yml文件如下所示: service: bbb provider: name: aws runtime: go1.x stage: dev package: exclude: - ./** include: - ./bin/** functions: ccc: handler: bin/executable name: my1minutelambda role: 'Fn::G
service: bbb
provider:
name: aws
runtime: go1.x
stage: dev
package:
exclude:
- ./**
include:
- ./bin/**
functions:
ccc:
handler: bin/executable
name: my1minutelambda
role:
'Fn::GetAtt':
- mylambdaexecutionrole
- Arn
resources:
Resources:
mylambdaexecutionrole:
Type: AWS::IAM::Role
Properties:
RoleName: my-basiclambdaexec-role
Description: This is my basiclambdaexecution role
AssumeRolePolicyDocument:
Version: "2012-10-17"
Statement:
-
Effect: Allow
Principal:
Service:
- "lambda.amazonaws.com"
Action:
- "sts:AssumeRole"
ManagedPolicyArns:
- "arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
myminschedulerevent:
Type: AWS::Events::Rule
Properties:
Description: This is my 1 minute rate scheduler.
Name: my-1-min-trigger-event-scheduler
ScheduleExpression: rate(1 hour)
Targets:
-
Arn: "arn:aws:lambda:us-east-1:111111111111:function:my1minutelambda" #update your a/c Id
Id: "TargetFunctionV1"
用于部署的命令:sls deploy
部署完成后,我可以在aws管理控制台上看到所有资源都已创建
但是我无法看到我的lambda函数的cloudwatch触发器扩展
请参见下面的屏幕截图:
我尝试使用
serverless
框架复制该问题
为此,我在模板末尾添加了以下内容:
EventsPermission:
Type: AWS::Lambda::Permission
Properties:
FunctionName: dsfgsdfg # <-- REPLACE this with your function name my1minutelambda
Action: lambda:InvokeFunction
Principal: events.amazonaws.com
SourceArn: !GetAtt myminschedulrevent.Arn
events任务:
类型:AWS::Lambda::权限
特性:
FunctionName:dsfgsdfg#如果您只想让Lambda函数按计划执行,那么无服务器框架已经包含了一个专门用于此目的的事件类型:
functions:
crawl:
handler: crawl
events:
- schedule: rate(2 hours)
- schedule: cron(0 12 * * ? *)
它将为您设置一切,而无需添加额外的云信息。您可以在这里找到文档:但是它能工作吗?Lambda console有时不显示触发器,即使它们可以工作。您是否为cloudwatch事件定义了aws权限:类型:aws::Lambda::permission
,以调用serverless.yaml文件中的Lambda@Marcin-我点击“监控”->“在CloudWatch中查看日志”。但是我没有看到lambda函数的任何“日志流”。@salazarin:我已经附加了serverless.yml文件。我想,我还没有定义任何这样的许可。您能帮我更新serverless.yml文件或丢失的yml部分吗?我对aws非常陌生。通过您的更改,我可以看到“EventBridge(CloudWatch事件)”链接。但是,CloudWatch日志没有显示lambda函数的日志流。@Jatin您将规则设置为每小时触发一次。可能要等一个小时,或者你修改了它?我修改为1min@Marcin--我删除了我的cloudformation堆栈并重新部署。在sls部署之前,我还从“AWS::Lambda::Permission”中删除了“SourceAccount”。现在,lambda工作正常。日志流使用打印语句进行更新。您好,Gareth,感谢您的快速解决方案。但是,我特别尝试我自己的方式来完成我的任务。您的解决方案会起作用,但我更感兴趣的是使用cloudformation语法提供资源信息。您可能会发现使用SAM更有用,因为SAM是AWS在无服务器框架上的尝试,但只使用云形成。这样,您就避免了无服务器框架所做的可能会阻碍您的工作的额外工作。
functions:
crawl:
handler: crawl
events:
- schedule: rate(2 hours)
- schedule: cron(0 12 * * ? *)