问题标签 [aws-state-machine]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
649 浏览

amazon-web-services - 运行我的状态机时,ECS 任务失败并出现 InsufficientFreeAddressesInSubnet 错误

我有一个状态机,它由一个 Map 任务组成,它启动了许多 Fargate 任务(30+)一个非常相似的任务定义。任务之间的唯一区别是ContainerOverrides块中的环境变量。

任务定义:

当我运行我的 State Machibe 任务时,总是失败StoppedReason

我不明白为什么会出现这个问题,我提供了 3 个子网 ID 供 ECS 选择。

0 投票
0 回答
106 浏览

amazon-web-services - 如何在 AWS SAM 状态机定义中使用多行参数?

我有一个非常长但重复的 json 格式的状态机定义,我正在尝试使用状态机块的DefinitionSubstitutions属性将一些常见块提取到 AWS SAM 模板中。例如,我有这样的Retry政策:

我想将重试块提取到 AWS SAM 模板中,如下所示:

所以上面变成了:

但是,当我运行时aws deploy出现错误:

我不明白我做错了什么。

0 投票
1 回答
762 浏览

amazon-web-services - 使用 vendia serverless-express 的 lambda 能否成为状态机中的一个步骤?

我有一个使用vendia serverless-express作为处理程序的 lambda 设置。从具有多个路由的单个 lambda 函数提供 REST API 一直运行良好。

我现在有一个新要求,其中相同的 lambda 需要成为阶跃函数状态机的一部分。但是 vendia 应用程序似乎不允许这样做,因为它总是抛出错误:“无法根据事件确定事件源”,因为它预计事件仅是 api gateway / alb。

因此,基于此,看起来我需要一个单独的 lambda 用于 step,这使我在多个 lambda 中有重复的代码。

lambda 是否可以处理来自 step 的输入并且仍然是 vendia express 应用程序?如果我正在尝试一些根本没有意义的事情,请告诉我。

0 投票
0 回答
26 浏览

aws-lambda - 如何使用 Api Gateway 可视化 Step Function 的输出?

我有一个状态机,当您将两个参数作为输入传递给它们时,它会调用一个函数“AddOne”并返回输入数字 +1

输入 { "val_1": 1, "val_2": 10 }

输出 "addOneResult": { "val_1_pls_1": 2, "val_2_pls_1": 11 }

我想可视化 Api Gateway 中的输出,但到目前为止我只收到以下输出

{

"executionArn": "-------------------------------------"

“开始日期”:1623164875.394

}

如何使 API 的输出成为 step-function 的初始结果?

0 投票
1 回答
513 浏览

amazon-web-services - Step 函数中 ECS 任务的输入和输出

之前曾使用 AWS step 函数处理 lambda 编排。这一直运作良好。设置每个 lambda 的 result_path 会将参数传递给后续 lambda。

但是,我现在需要运行一个 Fargate 任务,然后将来自该 Fargate 任务的参数传递给后续的 lambda。我创建了一个 python 脚本,作为容器定义中的入口点。显然,在 lambda 函数中,handler(event, context)它充当入口点,并通过定义一个return {"return_object": "hello_world"}很容易将一个长参数传递给状态机的下一个状态。

不过,就我而言,我有一个任务定义,其中包含从这个 Dockerfile 创建的容器定义:

因此,我能够调用状态机,它会按预期执行 my_script。但是如何从这个 python 脚本中获取输出并将其传递给状态机中的另一个状态呢?

我找到了一些关于如何传递输入的文档,但没有传递输出的例子。

0 投票
0 回答
120 浏览

amazon-s3 - 如何通过 EventBridge 将 S3 文件名传递给 ECS 任务(Fargate)的状态机

我有定期将文件上传到 S3 的作业。

我有一个 ECS 任务(Fargate),如果它知道文件名(和存储桶),它可以处理 S3 上的文件。

我有一个连接到该 ECS 任务的状态机,它触发了 Fargate 任务的执行。

我希望 EventBridge 运行任务,只要将新文件上传到 S3 存储桶,然后将文件名传递给状态机。(状态机已经知道是哪个存储桶,并将存储桶名称传递给 Fargate 任务。)

在 UI 中,我开始创建一个 EventBridge 规则,以便在任何时候将对象上传到该 S3 存储桶(通过监视 PutObject 请求)触发。然后我有这条规则告诉状态机一个文件已上传到 S3。

如果我运行它,所有这些“工作”或将工作,但我不知道如何将上传到 S3 的文件的文件名传递给状态机。

在 UI 中有一个配置输入部分,我可以在其中选择匹配事件、匹配事件的一部分、常量或输入转换器。

我选择哪个?如何提取文件名?然后我更愿意设置一个名为“FILENAME”的环境变量,并将值设置为 S3 上的文件名。如果这是不可能的,我对此表示怀疑,那么我会将 -filename=(the filename) 作为参数传递给 ECS 任务。但由于其他一切都是 ENV,因此更喜欢 ENV 路线。

我应该选择哪个,我可以复制/粘贴什么,以将文件名传递给状态机?

谢谢!!!!

0 投票
0 回答
41 浏览

amazon-web-services - 通过手动执行状态机覆盖环境值

我有一个 Fargate ECS 任务,它通过 AWS Step Function(状态机)被调用/管理。

我想使用不同的环境变量值手动执行该任务的运行。

所以我转到 AWS Step Function,选择状态机,然后单击“开始执行”。

然后在输入框中,我输入:

在 Cloudwatch 中,我看到了执行日志,它说 FILENAME 未指定。我确定读取环境变量的代码是正确的,并且我确定开始执行屏幕上的输入框提供了无效的输入(上面的代码片段)。

我应该在输入框中提供什么来覆盖环境变量的值?

0 投票
1 回答
32 浏览

aws-lambda - 状态机中的阶跃函数停止转换到下一个状态

我一直在使用状态机来生成 pdf。问题是它运行良好,但在 7 月 23 日它自动停止工作。我的第一步被成功调用,但没有将数据传递到下一步并超时。

  • 尝试增加超时它不起作用。
  • 尝试增加“StateTransition 节流令牌桶大小”的配额,它也没有用
  • 日志显示该步骤中的完整执行,但是当通过回调将数据发送到下一步时,lambda 会出现超时错误。

在下面附加我的 lambda 函数。

这是状态机定义,以前工作得很好,但现在不知何故崩溃了。

0 投票
0 回答
30 浏览

amazon-web-services - TaskScheduled 不包含来自 Step Function Input Transformer 中 TaskStateEntered 的数据

我正在使用 AWS Step Functions 手动启动 ECS 任务 (Fargate)。状态机定义了 3 个环境变量。

我试图在手动执行时定义第四个。(我也尝试过手动执行定义所有 4 个,以及其他类似的排列。)

当任务通过手动执行步进函数/状态机启动时,CloudWatch 中的 TaskStateEntered 会显示我输入的 containerOverrides 输入转换。

见下文:

但是,当它实际调度任务时,在下一步中,根据 TaskStateEntered,只定义了原来的 3 个环境变量。

我的问题是我似乎无法将环境变量数据从输入转换器传递到运行的容器。(即无论我尝试什么,我都无法将第四个环境变量正确传递给 ECS 任务。)

0 投票
1 回答
49 浏览

aws-lambda - 如何将机器输入和 Lambda 函数输出传递给映射状态

当前设置:

我目前有一个 Step Functions 状态机,它启动一个任务状态(它调用一个 Lambda 函数),然后是一个映射状态(它向 Batch 提交一个作业),定义如下

状态机定义

(注:地区和账户ID已被省略并替换为虚拟变量ACCOUNT_INFO

状态机输入

Lambda 输出(为简单起见缩短)

预期结果:

第二步 ( MapState) 需要来自机器输入 (sample_namesequencer) 的信息,以及 Lambda 函数在populate_efs_result.Payload( run_id) 中返回的信息,因此两者都需要包含在 Map 状态输入的事件对象中。然而,到目前为止,在我的尝试中,地图状态的输入要么是机器输入,要么是 Lambda 输出,而不是两者。

我已尝试更改 Map 状态定义中的InputPathItemsPath参数,还尝试在 Map 状态定义中包含以下内容,但这些方法均不起作用:Parameters: {"new_run_id.$": "$.populate_efs_result.Payload"}.