Amazon web services 每个星期一和每个月,cron expression不';我不能正常工作
我已经用cloudformation创建了一个lambda和EventBridge堆栈,我有两个lambda,它们具有完全相同的cloudformation模板和不同的cron表达式,一个是Amazon web services 每个星期一和每个月,cron expression不';我不能正常工作,amazon-web-services,aws-lambda,cron,amazon-cloudformation,Amazon Web Services,Aws Lambda,Cron,Amazon Cloudformation,我已经用cloudformation创建了一个lambda和EventBridge堆栈,我有两个lambda,它们具有完全相同的cloudformation模板和不同的cron表达式,一个是cron(0 8 1*?*),每个月上午8:00,一个是cron(0 16?*2*),每个星期一下午4:00,但是我的lambda没有记录意味着它们没有被执行,这里是cloudformation template.yml: Transform: AWS::Serverless-2016-10-31 Para
cron(0 8 1*?*)
,每个月上午8:00,一个是cron(0 16?*2*)
,每个星期一下午4:00,但是我的lambda没有记录意味着它们没有被执行,这里是cloudformation template.yml:
Transform: AWS::Serverless-2016-10-31
Parameters:
ImageUri:
Type: String
LambdaName:
Type: String
RoleName:
Type: String
DatabaseHost:
Type: String
DatabaseUsername:
Type: String
DatabasePassword:
Type: String
DatabaseName:
Type: String
SQSQueueUrl:
Type: String
Resources:
LogGroup:
Type: AWS::Logs::LogGroup
Properties:
LogGroupName: !Join ['/', ['/aws/lambda', !Ref LambdaName]]
ScheduledRule:
Type: AWS::Events::Rule
Properties:
Description: "Montly Collision Cronjob"
ScheduleExpression: "cron(0 8 1 * ? *)"
State: "ENABLED"
Targets:
-
Arn:
Fn::GetAtt:
- LambdaFunction
- Arn
Id: !Join
- ''
- - "monthly-collision-cronjob"
- !Ref LambdaName
LambdaPermission:
Type: "AWS::Lambda::Permission"
Properties:
Action: "lambda:InvokeFunction"
FunctionName: !Join
- ''
- - !Sub "arn:aws:lambda:${AWS::Region}:${AWS::AccountId}:function:"
- !Ref LambdaName
Principal: "events.amazonaws.com"
SourceArn: !GetAtt ScheduledRule.Arn
LambdaRole:
Type: AWS::IAM::Role
Properties:
RoleName: !Ref RoleName
AssumeRolePolicyDocument:
Statement:
- Action:
- sts:AssumeRole
Effect: Allow
Principal:
Service:
- lambda.amazonaws.com
Version: 2012-10-17
ManagedPolicyArns:
- arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole # For cloudwatch logging
- arn:aws:iam::aws:policy/AmazonSQSFullAccess
LambdaFunction:
Type: AWS::Serverless::Function
Properties:
FunctionName: !Ref LambdaName
PackageType: Image
MemorySize: 256
Timeout: 45
ImageUri: !Ref ImageUri
Environment:
Variables:
DATABASE_HOST: !Ref DatabaseHost
DATABASE_USERNAME: !Ref DatabaseUsername
DATABASE_PASSWORD: !Ref DatabasePassword
DATABASE_NAME: !Ref DatabaseName
SQS_QUEUE_URL: !Ref SQSQueueUrl
Role: !GetAtt
- LambdaRole
- Arn
欢迎任何帮助 首先,保存代码的方法是直接使用无服务器函数的Event属性:
LambdaFunction:
Type: AWS::Serverless::Function
Properties:
FunctionName: !Ref LambdaName
PackageType: Image
MemorySize: 256
Timeout: 45
ImageUri: !Ref ImageUri
Environment:
Variables:
DATABASE_HOST: !Ref DatabaseHost
DATABASE_USERNAME: !Ref DatabaseUsername
DATABASE_PASSWORD: !Ref DatabasePassword
DATABASE_NAME: !Ref DatabaseName
SQS_QUEUE_URL: !Ref SQSQueueUrl
Role: !GetAtt
- LambdaRole
- Arn
Events:
EveryFirstOfTheMonth:
Type: Schedule
Properties:
Schedule: cron(0 8 1 * ? *)
您的cron表达式看起来不错,我不确定问题出在哪里,但也许您可以尝试此解决方案,它可以正常工作。首先,您可以直接使用无服务器函数的Event属性来保存代码:
LambdaFunction:
Type: AWS::Serverless::Function
Properties:
FunctionName: !Ref LambdaName
PackageType: Image
MemorySize: 256
Timeout: 45
ImageUri: !Ref ImageUri
Environment:
Variables:
DATABASE_HOST: !Ref DatabaseHost
DATABASE_USERNAME: !Ref DatabaseUsername
DATABASE_PASSWORD: !Ref DatabasePassword
DATABASE_NAME: !Ref DatabaseName
SQS_QUEUE_URL: !Ref SQSQueueUrl
Role: !GetAtt
- LambdaRole
- Arn
Events:
EveryFirstOfTheMonth:
Type: Schedule
Properties:
Schedule: cron(0 8 1 * ? *)
您的cron表达式看起来不错,我不确定问题出在哪里,但也许您可以试试这个解决方案,它可以工作。不记录意味着什么?您是否检查了cloudwatch日志或指标?你怎么知道他们不执行?如果他们执行,他们应该在cloudwatch中删除一个日志,我上周一检查了cloudwatch好几次,没有日志,但是当我手动运行它们时,我看到了日志。“不记录意味着”-这是什么意思?您是否检查了cloudwatch日志或指标?你怎么知道他们不执行?如果他们执行,他们应该在cloudwatch中删除一个日志,我上周一检查了cloudwatch好几次,没有日志,但是当我手动运行它们时,我看到了日志。谢谢,我尝试了一下,并让你知道。这个“事件”部分需要任何权限吗?我的意思是事件不应该有执行lambda的权限吗?不,它没有。这是隐式的。成功了吗?谢谢,我试了一下,让你知道了。这个“活动”部分需要许可吗?我的意思是事件不应该有执行lambda的权限吗?不,它没有。这是隐式的。它起作用了吗?