aws-cloudformation - AWS Fargate 任务计划表达式规则首次运行时间

标签 aws-cloudformation aws-fargate

我编写了一个 CloudFormation 模板,用于每隔 X 小时通过 Fargate 任务部署一个容器。频率由堆栈用户通过参数决定,然后使用调度表达式规则进行调度。

我的问题是何时第一次调用计划表达式规则?假设我有规则每 6 小时运行一次容器。规则应该立即运行该任务,然后每 6 小时再次运行一次,还是先等待 6 小时,然后第一次运行该任务?

我无法确定原因,但如果我将相同的 CloudFormation 模板上传到 AWS,大约 50% 的时间任务会立即执行,大约 50% 的时间会等待 X 小时才能完成任务第一次运行。我认为这可能是我的模板中的一个奇怪的竞争条件,因此我将计划的表达式规则设置为依赖于其他所有内容,使其最后运行并确保它需要的所有内容都已构建,但这没有什么区别。

AWS docs状态速率表达式在您创建计划事件规则时启动,然后按其定义的计划运行。,但我不确定这是否意味着它在创建时开始运行或开始等待。我希望有人能帮助我弄清楚 AWS 的行为。

我的CloudFormation模板的相关部分供引用:

"Parameters": {
    "ExecutionFrequency": {
        "AllowedValues": [2, 4, 6,],
        "Description": "The number of hours to wait in between runs.",
        "Type": "Number"
    }
},
"Resources": {
    "ScheduleRule": {
        "Properties": {
            "Description": "Schedules the Fargate task to run every X hours.",
            "Name": "myRule"
            "ScheduleExpression": {
                "Fn::Join": ["", ["rate(", {"Ref": "ExecutionFrequency"}, " hours)"]]
            },
            "State": "ENABLED",
            "Targets": [
                {
                    "Arn": "myClusterArn",
                    "EcsParameters": {
                        "LaunchType": "FARGATE",
                        "NetworkConfiguration": {
                            "AwsVpcConfiguration": {
                                "AssignPublicIp": "ENABLED",
                                "SecurityGroups": "mySecurityGroup",
                                "Subnets": ["mySubnet"]
                            }
                        },
                        "PlatformVersion": "LATEST",
                        "TaskCount": 1,
                        "TaskDefinitionArn": "myTaskDef"
                    },
                    "Id": "myTaskDef",
                    "RoleArn": "myRoleArn"
                }
            ]
        },
        "Type": "AWS::Events::Rule"
    }
}

最佳答案

这不是确定的,但我认为该规则会在 x 小时后立即运行。

当您的容器未运行时,您应该检查 Cloudtrail 的启动任务或运行任务 Api 操作,以查看是否尝试运行它,但第一次实际失败但第二次成功 - 如果您也在创建,则可能会这样Cloudwatch 用于运行任务的 IAM 角色。

您尚未显示所有模板,但假设 Cloudwatch 用于运行任务的角色也在模板中,请尝试在模板外部创建该角色并从模板内引用它,看看这是否为您提供一致的行为.

可能存在竞争条件。无论您将模板部署到哪个区域,该角色始终在 us-east-1 区域(底层)中创建。我之前怀疑过竞争条件,我唯一能想到的是创建角色的异步调用已经完成,但角色本身还没有准备好,尽管在模板中使用了 DependsOn 属性,但我当然可以完全错误。

关于aws-cloudformation - AWS Fargate 任务计划表达式规则首次运行时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69136906/

相关文章:

amazon-web-services - AWS 示例模板 : S3_Website_With_CloudFront_Distribution. 模板在启动执行 Route 53 域名时失败

amazon-web-services - 暂时停止/停用 ECS Fargate 集群或服务

amazon-web-services - Fargate 中的 vCPU 的真正含义是什么?

aws-sdk - aws cdk ecs任务调度指定现有安全组

aws-cloudformation - boto3 cloudformation 参数验证失败

amazon-web-services - AWS Fargate 资源初始化错误 : unable to pull secrets or registry auth: pull command failed: : signal: killed

amazon-web-services - 如何使用 CLI/SDK 获取 Fargate 任务的 docker 镜像 ID?

amazon-web-services - 将 Django 应用程序从 heroku (celery/redis) 迁移到 aws fargate/lambda

amazon-web-services - 是否可以使用 !Sub 将一个环境变量与 AWS 的 SAM CLI 模板中的另一个环境变量连接起来?

amazon-s3 - 如何使用 AWS CDK(首选 typescript)向 API 网关的现有 AWS cloudfront 发行版添加行为?