问题标签 [aws-step-functions]

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 投票
2 回答
4689 浏览

node.js - AWS Step Function:函数 .length() 在选择状态的变量字段中返回错误

我在 AWS Step Function 中有一个 Choice 状态,它将比较 Input 中数组的长度并决定进入下一个状态。

但是,length()获取数组长度的函数返回了错误:

{
"error": "States.Runtime",
"cause": "执行状态 'CheckItemsCountState' 时发生错误(在事件 id #18 处输入)。无效路径 '$.Metadata[2].Items.length( )':选择状态的条件路径引用了无效值。”

}

选择状态的定义如下:

该状态连接到返回 JSON 的其他状态。JSON如下:

所以我试图获取 in 的长度ItemsMetadata[2]在值大于 0 时进行比较。

我试图验证$.Metadata[2].Items.length()这个网站中的 JsonPath ,它返回 0。

我不确定我是否错过了什么。我在 AWS Step Function 的文档或在 jsonpath 中使用函数的示例中找不到任何信息。

我将不胜感激。谢谢!

0 投票
2 回答
657 浏览

amazon-web-services - 如何将 mapreduce 操作的结果返回给 AWS API 请求

我有一个程序可以执行数千个蒙特卡罗模拟来预测结果;我不能说他们真正预测的是什么,所以我将使用“圣诞老人无可争辩的存在”中的另一个例子,因为这些算法的内容与问题无关。我想知道大富翁板上每个方格的访问频率(以预测哪些是最好的房产)。为此,我模拟了数以千计的游戏并整理了结果。我当前的实现是一个独立的 C# 应用程序,但我想将它移动到云中,以便我可以将其作为服务提供 - 每个用户都可以通过提交他们每个骰子的面数来获得个性化的结果。

当前的实现也很慢 - 它非常具有并行性,因为每个模拟都是完全独立的,但我只有 8 个内核,因此在我的本地机器上完成大约 50000 个单独的模拟需要 20 分钟以上的时间。

计划是让 AWS lambda 函数每个运行一个(或多个)模拟,然后进行整理——基本上是 mapreduce。我考虑使用 AWS EMR(Elastic MapReduce),但这对于我想要的来说太大了,旋转实例以单独运行计算似乎比单独的整个计算花费更长的时间(这对于多小时离线分析,但我希望通过 Web 请求以低延迟响应)。

我认为理想的情况是:

Lambda 0 - 触发许多其他 lambda 函数,每个函数只进行一小部分计算。Lambda 1..N - 并行进行许多模拟(数字不是常数)。Lambda N+1 - 整理所有结果并返回答案。

这里有一个 lambda mapreduce 框架:

https://github.com/awslabs/lambda-refarch-mapreduce

但它似乎有一个主要缺点 - 每次映射阶段完成时,它都会将其结果写入 S3(我可以将其用作临时),然后通过事件触发新的 lambda。触发的 lambda 查看是否所有结果都已写入存储。如果不是,则结束,如果是,则执行还原步骤。这似乎是一个公平的解决方案,但我只是有点担心 a) 当两个结果一起出现时的竞争风险,两个 reducer 可以同时计算结果吗?并且 b) 似乎它正在触发很多 lambdas,所有这些 lambdas 都只是决定不运行(我知道它们运行起来很便宜,但是每次模拟将数字加倍到两个 - 计算并可能减少 - 显然会使成本加倍)。有没有办法在将 100 个文件写入文件夹而不是每个文件之后触发 S3 结果?

我研究了使用步进函数,但我不确定如何一步并行触发许多 lambda,并在状态机转换之前让它们全部返回。然而,步进函数对最终的皱纹很有用 - 我想将所有这些隐藏在 API 后面。

根据我的阅读,API 可以触发 lambda 并返回该 lambda 的结果,但我不希望调用的 lambda 成为返回结果的那个。相反,当您从 API 调用 step 函数时,API 调用会返回最后一个状态的结果。

简而言之,我想要:

API 请求 -> 并行计算结果 -> API 响应

中间的那一点我不清楚该怎么做,同时能够返回所有结果作为对原始请求的响应——无论是靠自己还是很容易。

我可以看到一些选项:

使用 AWS API 网关现在原生支持的 step 函数,并在一个状态下调用多个 lambda,等待它们全部返回,然后再进行转换。

使用 AWS EMR,但以某种方式保持预置实例始终处于活动状态以避免预置时间开销。这显然否定了 Lambda 的可扩展性,而且成本更高。

使用 mapreduce 框架或类似的框架,并找到一种方法来响应来自与 API 请求最初调用的不同 lambda 的传入请求。理想情况下,还可以减少此处涉及的 S3 事件的数量,但这不是优先事项。

立即响应来自第一个 lambda 的原始 API 请求,然后在计算完成后将更多数据推送给用户(它们应该只需要大约 30 秒的并行性,并且域是可以接受的等待时间响应,甚至是 HTTP 响应)。

我怀疑它会对解决方案产生任何影响,因为它只是中间位的扩展,而不是根本性的变化,但真正的计算是迭代的,所以是:

请求 -> Mapreduce -> Mapreduce -> ... -> 响应

只要我知道如何在请求中链接一组 lambda 函数,链接更多应该是相同的(我希望)。

谢谢你。

PS我无法创建它们,标签aws-emr也不aws-elastic-mapreduce存在。

0 投票
2 回答
623 浏览

amazon-web-services - 从 AWS Step Functions 控制台隐藏执行详细信息和步骤详细信息

我们计划使用 AWS Step Functions。我们已经完成了一些测试,我们看到 AWS 在 Step Functions 控制台的执行详细信息和步骤详细信息部分中记录了大量信息。我们计划在那里有一些我们不想被记录的 PII 数据。

有什么方法可以控制这些部分中记录的内容吗?或者我们可以告诉 AWS 不要在那里记录任何内容吗?

谢谢, 维琴斯

0 投票
1 回答
1077 浏览

amazon-web-services - 从 EC2 上运行的 Java 服务触发 Step Function

我已经在 AWS 控制台中设置了我的状态机(我将它用作异步工作流平台来触发一些 lambda)。无论如何,我想用运行在 EC2 实例上的 java 服务的一些输入来触发状态机。但我无论如何都找不到这样做。事实上,看起来唯一的触发机制是通过 cloudwatch?是对的吗?这似乎不对?

谢谢任何帮助都会有所帮助

0 投票
2 回答
4762 浏览

amazon-web-services - 当我在 AWS Step Functions 中停止执行时会发生什么?

我正在阅读 API 文档,其中有一个名为 StopExecution 的操作。

https://docs.aws.amazon.com/step-functions/latest/apireference/API_StopExecution.html

我想知道它有什么作用。是的,当然,它会停止执行,但是如果某个任务正在运行呢?它会像 SWF 那样发送信号来停止任务吗?或者只是撤销TaskToken(因此任务无法将结果发回)并让它继续运行?如果任务是 lambda 函数,也会发生同样的情况吗?

我正在考虑这个问题,因为我有一些长时间运行的任务,并且在任何地方都找不到这种行为记录。

我的猜测:它只是表示执行已停止并让任务继续运行。当任务调用 SendTaskSuccess 时,它只会收到类似 InvalidToken 的错误。

0 投票
1 回答
6570 浏览

amazon-web-services - AWS Step Functions 数据限制

我正在设计一个状态机,它将运行两个 lambda 函数,每个函数并行返回一个 Json 数组。此外,这些函数的结果随后将传递给另外两个 lambda 函数,这些函数将接受这些输入并添加到数据库中。我已经准备好所有功能并单独工作,但是当我执行状态机时,它说其中一个执行由于 DataLimitExceeded 而失败。我检查了文档,它说输入或输出结果的限制是 32.768 个字符。奇怪的是,成功的执行是 Json 对象返回的大约 50k 个字符,而失败的执行大约是 46k 个字符。所以,如果两者都超过限制,为什么其中一个失败而另一个没有!

非常感谢!

0 投票
2 回答
2078 浏览

amazon-web-services - 通过 API Gateway 调用 AWS Step 函数并等待执行结果

是否可以通过 API Gateway 端点调用 AWS Step 函数并监听响应(直到工作流完成并从结束步骤返回结果)?

目前,我能够从文档中发现步进函数本质上是异步的,并且最后有一个最终回调。我需要 API 调用响应从 step 函数流中获取最终结果而无需轮询。

0 投票
1 回答
3921 浏览

amazon-s3 - 带有从 Kinesis 触发的 Lambda 的 Amazon Step Function

所以我试图在 Amazon AWS 中创建一个简单的管道。我想使用触发状态机的第一个 lambda 的流生成的数据执行步进函数

我想做的是跟随。

输入数据由 AWS Kinesis 流式传输

此 Kinesis 流用作 lambda1 的触发器,该触发器执行并写入 S3 存储桶。

这将触发(使用阶跃函数)一个 lambda2,该 lambda2 将从给定存储桶中读取内容并将其写入另一个存储桶

现在我想使用 Amazon Step Function 实现一个状态机。我创建了非常简单的状态机

我想要的是,Kinesis 应该触发第一个 Lambda,一旦它执行,step 函数将执行 lambda 2。这似乎没有发生。即使我的 Lambda 1 从流中触发并写入 S3 存储桶,Step 函数也不会执行任何操作。我可以选择手动启动新的执行并将 JSON 作为输入传递,但这不是我正在寻找的工作流程

0 投票
3 回答
19039 浏览

python - 在 python 中从 Lambda 调用 AWS Step 函数

所以我试图调用我在 python 中使用 Lambda 编写的一个简单的步进函数。我为此目的使用 boto3

我创建了一个具有“AWSStepFunctionsFullAccess”策略的 IAM 角色

我将此角色分配给我的 Lambda,但是当我运行 lambda 时,我收到以下错误

dev-hassan-pipeline-lambda 是我的 Lambda 名称,dev-hassan-role1 是我的角色名称

有人可以在这里帮助我吗,我做错了什么,为什么我不能从 Lambda 调用 step 函数,因为我已经给了它所需的权限

0 投票
1 回答
305 浏览

amazon-web-services - 我们能否触发使用 AWS Step 函数构建的状态机的特定执行的特定活动?

使用 GetActivityTask API 可以访问已经运行的状态机的任何随机执行的活动。是否可以获得特定执行的特定活动?

假设我的状态机是 -

如果我有 executionId (Execution1) 和 ActivityARN name (A) ,我可以访问 A1 吗?如果不是,为什么 AWS 不允许这样做。

要求:我想创建类似的 API

它启动状态机的特定执行并在执行活动 A 后返回。幕后机器运行B

所以基本上想使用 AWS step 函数来管理我的应用程序的状态,如果在不正确的状态下调用 API 会抛出异常。