AWS SQS触发步骤功能

Car*_*los 5 amazon-sqs amazon-web-services aws-cloudformation python-3.6 aws-step-functions

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

提前致谢。

小智 22

EventBridge Pipes(在 re:Invent 2022 上推出)允许您触发 Step Functions 状态机,而无需 Lambda 函数。

https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-pipes.html

您可以在这里找到一个示例:

https://github.com/aws-samples/aws-stepfunctions-examples/blob/main/sam/demo-trigger-stepfunctions-from-sqs/template.yaml

  • 对于任何寻求 CDK 实施的人;https://github.com/aws/aws-cdk-rfcs/issues/473 仍在进行中。 (3认同)

Mat*_*ope 10

首先要考虑的是:您是否真的需要使用SQS来启动Step Functions状态机?您可以改用API网关吗?还是可以将消息写入S3存储桶并使用CloudWatch事件启动状态机

如果必须使用SQS,则将需要具有lambda函数以充当代理。您将需要将队列设置为lambda触发器,并且需要编写一个lambda来解析SQS消息并对Step Functions StartExecution API进行适当的调用。

我在移动设备上,因此我现在无法输入yaml,但是如果需要,我可以稍后再尝试更新。目前,这里是如何从Lambda调用Step Functions状态机(包括示例yaml)的详细演练,这里是如何使用CloudFormation设置SQS来触发Lambda的演练。

  • 使用这种方法,如何处理步骤函数上的错误?因为,当在 lambda 函数中接收到消息时,该消息将从 SQS 中删除。如果 Step Function 出现错误,SQS 和 Lambda Function 都不会收到通知。我假设在大多数情况下,错误将出现在步骤函数上,而不是出现在调用它的 lambda 中 (4认同)
  • 在 Lambda 函数成功处理该消息(即启动 Step Function)之前,不会删除 SQS 消息。在 Step Function 中,您将使用与任何其他 Step Function 中相同的方法进行错误处理。https://docs.aws.amazon.com/step-functions/latest/dg/concepts-error-handling.html (2认同)
  • 如果您的步骤函数在相当快的时间内完成(<5 分钟),您可以使用快速步骤函数,如下所示:https://docs.aws.amazon.com/step-functions/latest/dg/sample-project-express -high-volume-sqs.html 通过这种方法,仅当步骤函数成功时,您的作业才会从队列中删除。如果步骤函数持续超过 30 秒,请确保增加 SQS VisibilityTimeout:https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-visibility-timeout.html 。这将帮助您避免一遍又一遍地触发相同的执行 (2认同)