AWS SQS 触发 Step Functions

Posted

技术标签:

【中文标题】AWS SQS 触发 Step Functions【英文标题】:AWS SQS trigger Step Functions 【发布时间】:2019-04-24 15:01:57 【问题描述】:

快速提问:是否可以在发送 SQS 消息后触发 Step Function 的执行?如果可以,您将如何将其指定到 cloudformation yaml 文件中?

提前致谢。

【问题讨论】:

嘿,答案对你有用吗?如果是这样,您应该接受它,以便其他 SO 用户知道它解决了问题。如果您不得不调整一些事情或者您使用了不同的解决方案,请发表评论或添加您自己的答案以与他人分享这些知识。 【参考方案1】:

首先要考虑的是:您真的需要使用 SQS 来启动 Step Functions 状态机吗?你可以use API gateway 代替吗?或者您可以将消息写入 S3 存储桶和use the CloudWatch events to start a state machine?

如果您必须使用 SQS,那么您将需要一个 lambda 函数来充当代理。您将需要set up the queue as a lambda trigger,并且您需要编写一个可以解析 SQS 消息并对 Step Functions StartExecution API 进行适当调用的 lambda。

我在手机上,所以我现在不能输入 yaml,但如果你需要它,我可以稍后尝试更新。目前,这里是如何invoke a Step Functions state machine from Lambda(包括示例yaml)的详细演练,这里是如何use CloudFormation to set up SQS to trigger a Lambda 的演练。

【讨论】:

这是最好的方法。非常感谢。 使用这种方法,如何处理阶跃函数的错误?因为,当在 lambda 函数中接收到消息时,该消息将从 SQS 中删除。如果 Step Function 出现错误,则不会通知 SQS 和 Lambda Function。我假设在大多数情况下,错误将出现在 step 函数中,而不是在调用它的 lambda 中 直到消息被 Lambda 函数成功处理(即 Step Function 启动)后,SQS 消息才会被删除。在您的 Step Function 中,您将使用与任何其他 Step Function 相同的方法进行错误处理。 docs.aws.amazon.com/step-functions/latest/dg/… 如果 Step 函数长时间运行(比如 30-90 分钟)并且集成应该是同步的,是否有不同的方法。即 SQS 消息必须在 SFN 完成后才能删除。 Wish SQS 在没有 lambda 的情况下提供与 SFN 的直接同步集成,因为 lambda 无法运行超过 15 分钟。 @NaveenKumar 在长步函数完成后删除消息听起来像是一种反模式,因为 SQS 是一种排队机制,而不是状态跟踪器。我想你可能想问一个新问题,当你这样做时要小心 XY 问题。

以上是关于AWS SQS 触发 Step Functions的主要内容,如果未能解决你的问题,请参考以下文章

用于管理状态数据的AWS服务-dynamodb / step函数/ sqs?

AWS Step Function Redshift 身份验证

如何从外部 SQS 队列活动触发 AWS Lambda 函数

当消息存在于 SQS 队列中时触发 AWS 中的 Lambda 函数

AWS SAM 模板 - 定义由 API Gateway 触发的 SQS 队列

在 SQS 消息触发的 Lambda 上跟踪 AWS API Gateway request_id