通过 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 任务,您有两个选择:
- 使用指定的环境变量在你的步骤函数中创建一个新的任务定义,然后从这个任务定义开始一个新的 fargate 任务。
2.only 使用 1 个预先创建的任务定义,并在该任务定义中使用 env 文件。更多信息 here。基本上发生的事情是当任务启动时,任务将从 s3 获取文件并将该文件中的值用作环境变量。然后你的 step 函数只需要包含一个将文件上传到 s3 的步骤,然后使用现有的任务定义启动 fargate 任务。
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 任务,您有两个选择:
- 使用指定的环境变量在你的步骤函数中创建一个新的任务定义,然后从这个任务定义开始一个新的 fargate 任务。
2.only 使用 1 个预先创建的任务定义,并在该任务定义中使用 env 文件。更多信息 here。基本上发生的事情是当任务启动时,任务将从 s3 获取文件并将该文件中的值用作环境变量。然后你的 step 函数只需要包含一个将文件上传到 s3 的步骤,然后使用现有的任务定义启动 fargate 任务。