如何从触发的Fargate任务访问CloudWatch事件数据



我阅读了关于当文件上传到Amazon S3 Bucket时如何运行Amazon ECS任务的文档。然而,本文档没有解释如何从Fargate任务代码本身内的中的触发事件中获取bucket/键值。如何做到这一点?

我不确定您是否还需要这个答案。但我做了一些与Steven1978提到的类似的事情,但只是使用CloudFormation。

您要查找的配置是InputTransformer。请检查此示例以获取事件规则的YAML CloudFormation模板:

rEventRuleForFileUpload:
Type: AWS::Events::Rule
Properties:
Description: "EventRule"
State: "ENABLED"
EventPattern:
source:
- "aws.s3"
detail-type:
- 'AWS API Call via CloudTrail'
detail:
eventSource:
- s3.amazonaws.com
eventName:
- "PutObject"
- "CompleteMultipartUpload"
requestParameters:
bucketName: "{YOUR_BUCKET_NAME}"
Targets:
- Id: '{YOUR_ECS_CLUSTER_ID}'
Arn: !Sub "arn:aws:ecs:${AWS::Region}:${AWS::AccountId}:cluster/${NAME_OF_YOUR_CLUSTER_RESOURCE}"
RoleArn: !GetAtt {YOUR_ROLE}.Arn
EcsParameters:
TaskCount: 1
TaskDefinitionArn: !Ref {YOUR_TASK_DEFINITION}
LaunchType: FARGATE
{... WHATEVER CONFIG YOU MIGHT HAVE...}
InputTransformer:
InputPathsMap:
s3_bucket: "$.detail.requestParameters.bucketName"
s3_key: "$.detail.requestParameters.key"
InputTemplate: '{ "containerOverrides": [ { "name": "{THE_NAME_OF_YOUR_CONTAINER_DEFINITION}", "environment": [ { "name": "EVENT_BUCKET", "value": <s3_bucket> }, { "name": "EVENT_OBJECT_KEY", "value": <s3_key> }] } ] }'

使用这种方法,您将能够获得s3存储桶名称(EVENT_bucket(和s3对象键(EVENT_OJECT_key(作为容器中的环境变量。

事实上,信息不是很清楚,但以下是我用来最终使其工作的一些来源:

容器覆盖;https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_ContainerOverride.html

输入变压器:https://docs.aws.amazon.com/eventbridge/latest/APIReference/API_InputTransformer.html#API_InputTransformer_Contents

最新更新