Z.W*_*Wei 6 amazon-web-services amazon-ecs amazon-cloudwatch
我们可以设置事件规则来触发ECS任务,但我没有看到触发事件是否传递给正在运行的ECS任务以及任务中如何获取该事件的内容。如果 Lambda 被触发,我们可以从event变量中获取它,例如在 Python 中:
def lambda_handler(event, context):
...
Run Code Online (Sandbox Code Playgroud)
但在 ECS 中我不知道如何做类似的事情。转到 cloudtrail 日志存储桶听起来不是一个好方法,因为新日志/事件的显示大约有 5 分钟的延迟,这需要 ECS 等待并需要额外的逻辑来与 S3 通信并查找和读取日志。当触发事件频繁时,这听起来很难处理。
处理此问题的一种方法是在云监视规则中设置两个目标。
所以 SQS 将包含类似的信息
{
"version": "0",
"id": "89d1a02d-5ec7-412e-82f5-13505f849b41",
"detail-type": "Scheduled Event",
"source": "aws.events",
"account": "123456789012",
"time": "2016-12-30T18:44:49Z",
"region": "us-east-1",
"resources": [
"arn:aws:events:us-east-1:123456789012:rule/SampleRule"
],
"detail": {}
}
Run Code Online (Sandbox Code Playgroud)
例如在 Docker 入口点
#!/bin/sh
echo "Starting container"
echo "Process SQS event"
node process_schdule_event.sj
#or if you need process at run time
schdule_event=$(aws sqs receive-message --queue-url https://sqs.us-west-2.amazonaws.com/123456789/demo --attribute-names All --message-attribute-names All --max-number-of-messages 1)
echo "Schdule Event: ${schdule_event}"
# one process done, start the main process of the container
exec "$@"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3080 次 |
| 最近记录: |