You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将完整AWS SES事件从EventBridge传递至ECS Fargate任务?

解决方案:无需映射字段传递完整SES事件到ECS Fargate任务

你遇到的INVALID_JSON错误,核心原因是ECS的containerOverrides要求环境变量的value必须是字符串类型,而你直接把完整的JSON事件对象赋值给了环境变量,导致嵌套JSON结构不符合API格式要求。

要不用逐个映射字段传递完整事件,只需要在EventBridge的InputTransformer里把整个事件序列化为JSON字符串即可,具体配置如下:

CloudFormation中EventBridge规则的InputTransformer配置示例

EventsRule:
  Type: AWS::Events::Rule
  Properties:
    EventPattern:
      source:
        - aws.ses
      # 配置你需要监听的SES事件类型,比如发送成功/失败等
    Targets:
      - Arn: !Sub arn:aws:ecs:${AWS::Region}:${AWS::AccountId}:cluster/你的ECS集群名称
        Id: ECSFargateTaskTarget
        RoleArn: !GetAtt ECSExecutionRole.Arn
        InputTransformer:
          InputTemplate: |
            {
              "containerOverrides": [
                {
                  "name": "你的容器名称",
                  "environment": [
                    {
                      "name": "SES_EVENT",
                      "value": "<ToString($.)>"
                    }
                  ]
                }
              ],
              "taskDefinitionArn": "你的ECS任务定义ARN"
            }

关键说明

  • ToString($.)是EventBridge内置函数,作用是把整个事件($代表根节点)序列化为JSON格式的字符串,这样环境变量SES_EVENT的值就是合法的字符串类型,不会触发JSON格式错误。
  • 无需配置InputPathsMap,直接通过内置函数完成转换即可。
  • 在ECS任务容器内,读取环境变量SES_EVENT后反序列化为JSON对象,就能获取完整的SES事件数据。

额外注意事项

  • 确保EventBridge规则关联的IAM角色(ECSExecutionRole)拥有ecs:RunTask权限,且能访问目标ECS集群和任务定义。
  • 如果事件内容过大(超过环境变量大小限制),可先将事件写入S3,再在ECS任务中读取S3对象,但SES事件通常不会触发该限制。

内容的提问来源于stack exchange,提问作者Alessandro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 20:04:54