AWS ECS Fargate任务时区

时间:2019-04-20 16:12:58

标签: amazon-web-services amazon-ecs aws-fargate

我没有在Amazon文档中找到哪个时区启动了ECS Fargate任务使用。你有什么建议吗?我想在任何地方都使用UTC。

最好的问候, Maciej。

2 个答案:

答案 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"}' \
  ;