如何从触发的 Fargate 任务访问 CloudWatch Event 数据?

2024-04-17

我阅读了有关如何进行的文档将文件上传到 Amazon S3 存储桶时运行 Amazon ECS 任务 https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/CloudWatch-Events-tutorial-ECS.html。但是,本文档没有解释如何从触发事件中获取存储桶/键值withinFargate 任务代码本身。那怎么办呢?


我不确定您是否还需要这个问题的答案。但我做了类似于 Steven1978 提到的事情,但仅使用 CloudFormation。

您正在寻找的配置是输入变压器。检查此示例以了解事件规则的 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_OBJECT_KEY) 作为容器内的环境变量。

事实上,信息不是很清楚,但这里有一些我最终让它发挥作用的来源:

容器覆盖;https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_ContainerOverride.html 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 https://docs.aws.amazon.com/eventbridge/latest/APIReference/API_InputTransformer.html#API_InputTransformer_Contents

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从触发的 Fargate 任务访问 CloudWatch Event 数据? 的相关文章

随机推荐