编辑:刚刚找到这个https://github.com/serverless-operations/serverless-step-functions/issues/209基本上就是这个例子,但我不想对 ARN 进行硬编码,而是想使用输入变量(如果有意义的话)。
这是上下文:
使用 Serverless 的错误目标,错误负载会发送到 SQS,SQS 会触发 lambda,启动状态机来执行重试。
例如,如果 Lambda A 失败,该故障将发送到 SQS -> Lambda B,这会触发状态机重试 Lambda A。
我在 Serverless.yml 中定义我的状态机,如下所示(这是我迄今为止一直在尝试的):
stepFunctions:
stateMachines:
MyStateMachine:
name: RetryLambdaMachine
definition:
Comment: Example to test retries
StartAt: StepOne
States:
StepOne:
Type: Task
Resource: arn:aws:states:::lambda:invoke
Parameters:
- FunctionName.$: $$.lambdaArn
#### ^^ This is where I need Lambda A to be referenced ####
Retry:
- ErrorEquals:
- States.ALL
MaxAttempts: 2
Catch:
- ErrorEquals: ["States.ALL"]
Next: CatchAllFallback
End: true
CatchAllFallback:
Type: Task
Resource: …Run Code Online (Sandbox Code Playgroud) 我按照这篇文章逐步了解如何在 AWS 控制台中设置 cloudwatch 规则以触发 StepFunction 状态机,链接: https: //blog.shikisoft.com/3-ways-to-schedule- aws-lambda-and-step-functions-state-machines/
步骤之一,在控制台中,它可以创建一个新角色,以授予 cloudwatch 事件触发状态机的权限,由于某种原因,我在尝试此步骤时遇到权限问题,有人可以尝试此过程并复制这个新角色的权限/策略为我?这样我就可以在 Terraform 定义中使用它。希望这是有道理的,谢谢。
state-machine amazon-cloudwatch terraform aws-step-functions amazon-cloudwatch-events
在Standard Workflow我们可以愉快地调用另一个Standard workflow使用
{
"Type": "Task",
"Resource": "arn:aws:states:::states:startExecution.sync:2",
"Parameters": {
"StateMachineArn": "${NestedStateMachineArn}",
...
}
...
Run Code Online (Sandbox Code Playgroud)
当我们尝试做同样的事情时,Express workflow我们当然会得到Express state machine does not support '.sync' service integration. 这是由aws预期的行为所表明的。
是否有另一种方法可以Express workflow从另一个执行Express workflow并以某种方式获取执行结果/输出?我可以想到最后的手段 - 使用Lambda函数来执行嵌套工作流同步并等待响应,也就是说,这会增加函数不必要地等待的成本StateMachine。
我试图环顾四周,但在任何地方都找不到这个记录。
我正在尝试使用 AWS Step Functions 将 Item 放入 DynamoDB 中。
我设法使用简单的字符串字段 (S) 保存 Item,但其中一个字段应该存储整个 JSON 负载。所以应该是地图(M)。
但我的有效负载还包括嵌套地图。
JSON 示例:
{
"firstMap": {
"field": "something",
},
"secondMap": {
"nestedMap": {
"field": "something",
},
"anotherNestedMap": [
{
"field": "something",
"oneMoreNestedMap": {
"andOneMore": {
"field": "something",
},
"arrayComesHere": [
{
"andAgainNestedMap": {
"field": "something",
},
"andAgain": [
{
"field": "something",
"alsoNestedArray": [
{
"field": "something"
}
]
}
]
}
]
},
"letItBeFinalOne": [
{
"field": "something"
}
]
}
]
...
Run Code Online (Sandbox Code Playgroud)
我想做的就是说,嘿 Step …
使用现有的 Step Functions 定义 JSON 文件,如何直接在 CDK 中使用它来创建 Step Function?
我们一直在考虑使用 AWS Step Functions 进行审批工作流程,该工作流程可以通过回调运行任务并等待人工操作和其他耗时的操作。Step Functions 的文档显示,最大执行时间有硬性配额,即 1 年。这似乎是合理的限制。
但是,我们无法找到有关 Step Functions 更新后待执行执行情况的任何信息。有什么方法可以将现有执行升级到工作流定义的新版本吗?对于运行时间较长的执行,很可能会遇到需要更新修复工作流的需求,因此很自然地为那些尚未完成的执行更新执行计划。
AWS Step Functions 支持吗?如果没有,推荐的模式(以及一些信息的来源)如何处理长时间运行的执行?
谢谢
安装程序
我有一台AWS状态机.我有一个可能返回结果的Lambda,或者可能抛出异常.该步骤定义了一个catch块,并根据异常的类型,遵循不同的执行路径.
问题
但是,我想存储失败的Lambda 输入,以便以后可以重新应用它.
失败的Lambda的输出是例外.
我试过的
添加OutputPath和ResultPath时,如果它是异常,则不适用.
我真的不想总是抛出自定义异常并附加json输入,然后解析异常消息.
我尝试过使用Parallel,将输入发送到我的Lambda和Pass.结果是一个带有Lambda输出(成功输出或异常)和原始输入的数组.但是,现在我需要添加一个Choice来检查是否有异常,然后继续成功输出,或者用原始输入分支.我似乎无法在Choice中定义JsonPath来检查数组的第一个元素中是否存在"Error".
我正在尝试删除不再需要的过时步骤函数,但是它已经停留在“删除”阶段几个星期了。然而,从控制台它说有 0 个正在运行的执行。如果当前没有正在运行的执行,如何删除状态机?
我正在修改我的第一步功能,作为一个新手,我正在努力使这项工作正常进行。AWS 上的文档很有帮助,但缺少我试图理解的示例。我在这里的网站上发现了几个类似的问题,但他们也没有真正回答我的问题。
我有一个非常简单的测试 Step Function。我有一个小的 Lambda 函数,它从 DynamoDB 中的请求中踢出带有“计数”的单行 JSON:
def lambda_handler(event, context):
"""lambda_handler
Keyword arguments:
event -- dict -- A dict of parameters to be validated.
context --
Return:
json object with the hubID from DynamoDB of the new hub.
Exceptions:
None
"""
# Prep the Boto3 resources needed
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('TransitHubs')
# By default we assume there are no new hubs
newhub = { 'Count' : 0 }
# Query the DynamoDB to see if …Run Code Online (Sandbox Code Playgroud) 我正在尝试在 Step Function 中使用 AWS Lambda 函数。Lambda 函数在单独测试并转义 json 输入时正常工作。但是,当输入通过 step 函数传递给 lambda 函数时,我收到了 JsonReaderException 错误。我究竟做错了什么?社区会知道解决此问题的方法吗?
拉姆达函数:
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Runtime.Serialization.Formatters.Binary;
using Amazon.Lambda.Core;
using Newtonsoft.Json.Linq;
// Assembly attribute to enable the Lambda function's JSON input to be converted into a .NET class.
[assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.Json.JsonSerializer))]
namespace AWSLambda1
{
public class Function
{
public void PostsBasedOnOddOrEven(string input, ILambdaContext context)
{
var details = JObject.Parse(input);
var postId = (int) details["id"];
var oddOrEvenResult = …Run Code Online (Sandbox Code Playgroud)