从S3事件中触发ECS任务

时间:2018-10-10 13:36:19

标签: amazon-s3 amazon-cloudwatch amazon-ecs

我想在文件进入S3存储桶中时触发ECS任务。我尝试在S3事件上使用Cloudwatch规则,但似乎需要在特定位置的特定文件或在整个存储桶中到达文件时触发,没有通配符/前缀/后缀来控制这两个极端之间的问题。

我也尝试过触发SNS主题,但似乎无法正确地使用语法来解决我的特定主题。这是我到目前为止的内容:

{
 "source": [
   "aws.sns"
 ],
 "detail-type": [
   "AWS API Call via CloudTrail"
 ],
 "detail": {
   "eventSource": [
     "sns.amazonaws.com"
   ],
   "EventSubscriptionARN": [
     "arn:aws:sns:us-east-1:123456789123:WCIS_ECS_Test:xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx"
   ],
   "TopicARN": [
     "arn:aws:sns:us-east-1:123456789123:My_Topic"
   ],
   "eventName": [
     "Publish"
   ]
 }

}

如果任何人都可以帮忙解决它的语法问题,那还是很棒的;或者,如果我应该看看另一种模式,那么这个建议也很棒。

2 个答案:

答案 0 :(得分:0)

您可以尝试使用S3触发器(首选)或SNS触发器或SQS触发器的选项来执行lambda函数。在lambda函数中,您可以使用AWS Python SDK-Boto3根据您的S3文件元数据运行ECS任务。

链接- https://docs.aws.amazon.com/lambda/latest/dg/with-s3.html https://docs.aws.amazon.com/sns/latest/dg/sns-lambda.html https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/ecs.html

示例代码-

import boto3
client = boto3.client('ecs')
response = client.run_task(
    cluster='myCluster',
    taskDefinition='myECSService',
    count=1,
    launchType='EC2'
)

答案 1 :(得分:0)

您可以在此链接上尝试教程: https://aws.amazon.com/blogs/compute/better-together-amazon-ecs-and-aws-lambda/

它基本上回答了您的问题,即如何处理特定的文件 使用Lambda和队列将其上传到您的S3存储桶中,并导入到ECS环境中。

该教程可能有点陈旧,因为它是2015年编写的,但是仍然有效,您可以使用一些优化方法,例如避免使用shell脚本并用Python SDK替换它,和/或使用lambda步骤功能来调用SQS和ECS服务。 您也可以使用FIFO SQS队列以不丢失任何消息。

希望这会有所帮助!