amazon-web-services - 每个星期一和每个月的 cron 表达式都不能正常工作
问题描述
我用 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
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
任何帮助都非常受欢迎!
解决方案
首先,节省代码的方法是直接使用 serverless 函数的 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 表达式看起来正确,我不确定问题出在哪里,但也许您可以尝试这个解决方案并且它有效。
推荐阅读
- angular - 如何在同一个班级有不同的计划
- linux - PAM auth 接口和 account 接口有什么区别
- react-native - 使用 react-native-maps 未显示谷歌地图/空白
- javascript - TensorFlowJS 异常 - 无法开始训练,因为另一个 fit() 调用正在进行中
- java - 无法使用 Firefox 以 HTML 格式加载小程序
- mysql - SQL 错误代码:无法打开引用的表“产品”?
- three.js - 为什么渲染器在 tf.toPixel(image, canvas) 之后无法正确渲染使用 Three.CanvasTexture 构建的模型
- windows - 如何通过UiPath构造基于动态ctrlid的选择器?
- angular - 如何在 Angular 中维护两个相同类型的表单?
- android - 无法解析“:app@debug/compileClasspath”的依赖关系:无法解析项目:PGSDKVR4.AggrePay-android