我没有在Amazon文档中找到哪个时区启动了ECS Fargate任务使用。你有什么建议吗?我想在任何地方都使用UTC。
最好的问候, Maciej。
答案 0 :(得分:1)
我希望任务默认为UTC,但这是我的猜测。在Fargate世界中,我们不需要担心任务启动的时区,因为基础计算或主机的时区不会受到docker的尊重。 Docker容器时区由主机配置独立工作。
要在容器中设置所需的时区,可以使用tzdata
在Dockerfile中设置时区并创建一个新映像。
RUN apt-get install -y tzdata
启动ECS任务时,将TZ
环境变量传递到任务定义中的容器。
答案 1 :(得分:1)
如果您使用预定的表达式或cron语法安排任务通过CloudWatch Scheduled Events运行,则它们总是在UTC时间启动。
从文档中
您可以创建规则,以自动计划的方式自动触发 使用cron或rate表达式的CloudWatch Events。所有预定活动 使用UTC时区,时间表的最低精度为1分钟。
例如,表达式cron(30 9 * * ? *)
将在世界标准时间9:30启动您的Fargate任务
费率表达式看起来像rate(1 minute)
或rate(1 hour)
使用以下命令在cloudwatch中创建规则:
SCHEDULE_EXPRESSION='cron(30 9 * * ? *)'
aws events put-rule \
--name events-rule-tasks-name\
--schedule-expression "${SCHEDULE_EXPRESSION}" \
--description "Run every day at 09:30 UTC" \
--state "ENABLED" \
;
为此规则创建一个目标,即定义时间与规则的费率/时间值匹配时该规则应调用的内容。设置TaskDefinitionArn
值以调用Fargate任务,并指定启动类型(FARGATE
)以及其他网络配置设置。
aws events put-targets \
--rule events-rule-tasks-${TASK_NAME} \
--targets '{"Arn":"arn:aws:ecs:'${AWS_REGION}':'${AWS_ACCOUNT_ID}':cluster/'${CLUSTER_NAME}'","EcsParameters":{"LaunchType":"FARGATE","NetworkConfiguration":'${NETWORK_CONFIGURATION}',"TaskCount": 1,"TaskDefinitionArn": "arn:aws:ecs:'${AWS_REGION}':'${AWS_ACCOUNT_ID}':task-definition/ecs-task-'${TASK_NAME}'"},"Id": "ecs-targets-'${TASK_NAME}'","RoleArn": "arn:aws:iam::'${AWS_ACCOUNT_ID}':role/ecsEventsRole"}' \
;