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

如何通过CloudWatch触发Step Function并将S3参数传递至Fargate

问题解决步骤

1. 修正Terraform的aws_cloudwatch_event_target配置

你当前的配置存在缩进错误,input_template属于input_transformer块的子参数,需要放到块内部,修正后的配置如下:

resource "aws_cloudwatch_event_target" "cw-target" {
  arn      = aws_sfn_state_machine.my-sfn.arn
  rule     = aws_cloudwatch_event_rule.cw-event-rule.name
  role_arn = aws_iam_role.my-iam.arn

  input_transformer {
    input_paths = {
      bucket = "$.detail.requestParameters.bucketName"
      # 如果需要传递S3对象key,取消下面的注释
      # key = "$.detail.requestParameters.key"
    }

    input_template = <<TEMPLATE
{
  "bucket": <bucket>,
  # "key": <key>
}
TEMPLATE
  }
}

说明:这里没有直接在输入里写死containerOverrides结构,是为了让Step Function输入更灵活,方便后续扩展其他参数。如果你希望直接在CloudWatch侧拼好Overrides结构也可以,只需要保证缩进正确即可。

2. Step Function 内部获取参数的方法

CloudWatch事件触发Step Function执行时,input_template渲染后的JSON会直接作为Step Function执行的输入参数,你可以在状态机定义中通过JSONPath直接引用对应字段:

  • 引用存储桶名称:$.bucket
  • 引用S3对象key(如果配置了):$.key

3. 调用Fargate时传递环境变量的状态机配置示例

在Step Function的ECS RunTask状态中,通过Parameters字段指定任务覆盖参数即可,完整的状态定义示例如下:

{
  "StartAt": "RunFargateTask",
  "States": {
    "RunFargateTask": {
      "Type": "Task",
      "Resource": "arn:aws:states:::ecs:runTask.sync",
      "Parameters": {
        "Cluster": "你的ECS集群ARN",
        "TaskDefinition": "你的Fargate任务定义ARN",
        "LaunchType": "FARGATE",
        "NetworkConfiguration": {
          "AwsvpcConfiguration": {
            "Subnets": ["你的子网ID列表"],
            "SecurityGroups": ["你的安全组ID列表"],
            "AssignPublicIp": "DISABLED"
          }
        },
        "Overrides": {
          "ContainerOverrides": [
            {
              "Name": "你的容器名称",
              "Environment": [
                {
                  "Name": "BUCKET",
                  "Value.$": "$.bucket"
                },
                {
                  "Name": "S3_KEY",
                  "Value.$": "$.key"
                }
              ]
            }
          ]
        }
      },
      "End": true
    }
  }
}

注意:所有引用输入参数的字段都需要添加.$后缀,否则Step Function会把路径当做普通字符串处理。

如果你之前已经在CloudWatch的input_template里拼好了完整的containerOverrides结构,也可以直接引用整个结构:

"ContainerOverrides.$": "$.containerOverrides"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 08:45:03