通过 Cloudwatch 触发 AWS Step Function 并传递一些变量

Trigger AWS Step Function via Cloudwatch and pass some variables

S3 存储桶中的一个文件触发云监视事件(我能够通过 $.detail.xxxx

捕获 url 和密钥

下面的代码

然后我如何将它们传递给步进函数,然后从步进函数将它们作为环境变量传递给 fargate 实例 尝试使用 terraform 的“aws_cloudwatch_event_target”但是,我找不到启动和传递输入到步进函数

的好例子

这是我目前拥有的全部功能

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"
    }
}
    input_template = <<TEMPLATE
        {
          "containerOverrides": [
             {
                "environment": [
                   { "name": "BUCKET", "value": <bucket> },
                 ]
             }
            ]
        }
  TEMPLATE
  }

在通过控制台的 cloudwatch 事件上我可以看到

{"bucket":"$.detail.requestParameters.bucketName"}

    {
          "containerOverrides": [
             {
            "environment": [
               { "name": "BUCKET", "value": <bucket> },
             ]
             }
            ]
    }

只需要知道如何在 step 函数中获取此信息,然后在调用 fargate 时将其作为 ENV var 发送

要在 AWS eventbridge 中使用输入转换器,请勾选 this guide

您可以使用 InputPath(正如您已经完成的那样)和 input template,根据您的喜好将事件的有效负载转换为阶跃函数,您可以在其中使用定义在您InputPath 以定义新的有效负载。这个新的有效负载将用作阶跃函数的输入。

以下是输入路径和模板的更多示例:https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-transform-target-input.html

编辑: 如果您想使用这些环境变量启动 fargate 任务,最好的选择是确实使用环境覆盖在每个任务上指定新的环境变量。

旧编辑: 如果您想使用这些环境变量启动 fargate 任务,您有两个选择:

  1. 使用指定的环境变量在你的步骤函数中创建一个新的任务定义,然后从这个任务定义开始一个新的 fargate 任务。

2.only 使用 1 个预先创建的任务定义,并在该任务定义中使用 env 文件。更多信息 here。基本上发生的事情是当任务启动时,任务将从 s3 获取文件并将该文件中的值用作环境变量。然后你的 step 函数只需要包含一个将文件上传到 s3 的步骤,然后使用现有的任务定义启动 fargate 任务。