我可以从 S3 中的特定文件上传触发 ECS/Fargate 任务吗?
Can I trigger an ECS/Fargate task from a specific file upload in S3?
我知道我可以在上传文件时触发任务(根据 https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/CloudWatch-Events-tutorial-ECS.html)但是,我如何在上传特定 文件时触发任务?
Amazon 似乎没有预料到人们有多个工作看着同一个存储桶中的不同文件:(
S3 不会为特定对象生成事件,而是为存储桶内发生的事件生成事件。下图是 bucket 可以发送的事件的 S3 控制台。
请注意,您可以使用前缀 and/or 后缀来接近您想要的内容,但单个对象无法生成事件。不过,一个不错的选择是可以过滤对象名称的 Lambda,如果它符合您的要求,运行 ECS 任务。
您可以使用 CloudTrail Data Events 中的 CloudWatch Events 完成此操作。
前往 CloudTrail,为您的帐户创建一个 Trail。
- 对于 Apply trail to all regions,选择 No。
- 管理事件,Read/Write 事件,select none。
- 在数据事件下,select S3。输入您的 S3 存储桶名称和文件夹名称(前缀)以记录数据事件,并 select 写入(不要设置读取)。
- 在存储位置下,创建一个新存储桶或提供一个用于存储日志文件的存储桶。
- Select 创建
接下来,创建一个 CloudWatch 事件规则,在 CloudTrail 数据事件发生时以您的 ECS 任务为目标。
前往 CloudWatch 并 Create a new Event rule。
- 对于事件源select事件模式
- 将显示 "Build event pattern to match events by service" 的下拉列表更改为 select "Custom Event Pattern"
- 在下面输入事件模式:
{
"source": [
"aws.s3"
],
"detail-type": [
"AWS API Call via CloudTrail"
],
"detail": {
"eventSource": [
"s3.amazonaws.com"
],
"eventName": [
"PutObject"
],
"requestParameters": {
"bucketName": [
"your-bucket-name" // this is the bucket where your events are happening
],
"key": [
"your-object-key" // this is the object key you want to trigger starting your ECS task, note that it's an array.
]
}
}
}
- 根据您的使用情况自定义上面的
bucketName
和 key
。
- 对于您的目标,select ECS 任务,根据需要配置任务。
- Select
Configure details
,为规则命名并将状态设置为Enabled
,然后单击Create rule
。
现在您的规则已启用,当您将具有指定键的对象上传到指定存储桶时,CloudWatch Events 将触发您指定的 ECS 任务。
您的评论中似乎有通配符。要从 hephalump 添加到事件模式,您还可以为键指定一个前缀,它将匹配具有该前缀的任何键,而不仅仅是特定键:
{
"source": [
"aws.s3"
],
"detail-type": [
"AWS API Call via CloudTrail"
],
"detail": {
"eventSource": [
"s3.amazonaws.com"
],
"eventName": [
"PutObject"
],
"requestParameters": {
"bucketName": [
"your-bucket-name" // this is the bucket where your events are happening
],
"key": [
{"prefix": "path/to/key"}
]
}
}
}
我知道我可以在上传文件时触发任务(根据 https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/CloudWatch-Events-tutorial-ECS.html)但是,我如何在上传特定 文件时触发任务?
Amazon 似乎没有预料到人们有多个工作看着同一个存储桶中的不同文件:(
S3 不会为特定对象生成事件,而是为存储桶内发生的事件生成事件。下图是 bucket 可以发送的事件的 S3 控制台。
请注意,您可以使用前缀 and/or 后缀来接近您想要的内容,但单个对象无法生成事件。不过,一个不错的选择是可以过滤对象名称的 Lambda,如果它符合您的要求,运行 ECS 任务。
您可以使用 CloudTrail Data Events 中的 CloudWatch Events 完成此操作。
前往 CloudTrail,为您的帐户创建一个 Trail。
- 对于 Apply trail to all regions,选择 No。
- 管理事件,Read/Write 事件,select none。
- 在数据事件下,select S3。输入您的 S3 存储桶名称和文件夹名称(前缀)以记录数据事件,并 select 写入(不要设置读取)。
- 在存储位置下,创建一个新存储桶或提供一个用于存储日志文件的存储桶。
- Select 创建
接下来,创建一个 CloudWatch 事件规则,在 CloudTrail 数据事件发生时以您的 ECS 任务为目标。
前往 CloudWatch 并 Create a new Event rule。
- 对于事件源select事件模式
- 将显示 "Build event pattern to match events by service" 的下拉列表更改为 select "Custom Event Pattern"
- 在下面输入事件模式:
{
"source": [
"aws.s3"
],
"detail-type": [
"AWS API Call via CloudTrail"
],
"detail": {
"eventSource": [
"s3.amazonaws.com"
],
"eventName": [
"PutObject"
],
"requestParameters": {
"bucketName": [
"your-bucket-name" // this is the bucket where your events are happening
],
"key": [
"your-object-key" // this is the object key you want to trigger starting your ECS task, note that it's an array.
]
}
}
}
- 根据您的使用情况自定义上面的
bucketName
和key
。 - 对于您的目标,select ECS 任务,根据需要配置任务。
- Select
Configure details
,为规则命名并将状态设置为Enabled
,然后单击Create rule
。
现在您的规则已启用,当您将具有指定键的对象上传到指定存储桶时,CloudWatch Events 将触发您指定的 ECS 任务。
您的评论中似乎有通配符。要从 hephalump 添加到事件模式,您还可以为键指定一个前缀,它将匹配具有该前缀的任何键,而不仅仅是特定键:
{
"source": [
"aws.s3"
],
"detail-type": [
"AWS API Call via CloudTrail"
],
"detail": {
"eventSource": [
"s3.amazonaws.com"
],
"eventName": [
"PutObject"
],
"requestParameters": {
"bucketName": [
"your-bucket-name" // this is the bucket where your events are happening
],
"key": [
{"prefix": "path/to/key"}
]
}
}
}