标签: aws-step-functions

具有长时间运行任务的应用程序对 AWS Lambda 或 AWS Step Functions 的适用性

我在 AWS EC2 实例上有一个每天运行一次的应用程序。该应用程序从 Web 服务中获取一些文件,逐行解析文件,更新数据库,根据数据库中的更改更新 S3 文件,向客户发送通知电子邮件以及一些其他任务。

这是一系列必须按顺序发生的逻辑任务,尽管其中一些任务可以被视为可以并行执行的子任务。所有任务都是 Perl 脚本和 Java 程序的组合,单个 Perl 脚本充当依次执行每个任务的管理器。有些任务可能需要长达 45 分钟才能完成,整个过程总共可能需要长达 3 小时。

我想让整个过程成为无服务器的。我最初的想法是使用AWS Lambda,其中每个任务都将作为 Lambda 函数执行,直到我发现 Lambda 函数施加5 分钟的执行超时。看起来AWS Step Functions服务实际上更适合我的用例,但我的理解是该服务由 Lambda 支持,因此任务仍然有 5 分钟的执行限制。

(我还知道我必须将 Perl 脚本重写为 Lambda 支持的语言)。

我假设我可以通过将代码重构为较小的函数来解决执行时间限制,从而保证在 5 分钟内完成。但在我的特殊情况下,这似乎效率低下。

目前,数据库更新任务一次处理一个文件中的行。为了与 Lambda 配合使用,Lambda 函数只需处理文件中的一行(或极少量的行),以保证执行时间不超过 5 分钟。这将涉及在每次调用 Lambda 函数时打开和关闭与数据库的连接。此外,处理的每一行都应将一个条目写入文件,并存储在 S3 中。现在,我只是在内存中保留一个文件句柄,并在处理完所有行后将文件写入 S3,但使用 Lambda,我需要继续读取文件、更新文件并将其写回 S3。

我要问的是:

  • 我的用例是否不适合 AWS Lambda 和/或 AWS Step Functions?
  • 我是否误解了这些服务的运作方式?
  • 是否还有其他更适合我的使用案例的 AWS 服务?

经过进一步研究,我认为AWS Batch可能是一个好主意

amazon-web-services aws-lambda aws-step-functions

6
推荐指数
1
解决办法
4738
查看次数

如何循环遍历 json 输入 - aws 步骤函数/状态机

是否可以在 aws 步骤函数中创建循环并循环遍历 json 输入数组?

我有一个函数generateEmails可以创建包含n多个对象的数组:

{
  "emails": [
    {
      "to": [
        "willow1@aaa.co.uk"
      ]
    },
    {
      "to": [
        "willow2@aaa.co.uk"
      ]
    },    {
      "to": [
        "willow3@aaa.co.uk"
      ]
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

现在我想sendEmail为电子邮件数组中的每个对象调用下一个函数,如下所示:

{
  "email": {
    "to": [
      "willow@aaa.co.uk"
    ]
  }
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

步骤功能代码:

{
  "Comment": "A state machine that prepares and sends confirmation email ",
  "StartAt": "generateEmails",
  "States": {
    "generateEmails": {
      "Type": "Task",
      "Resource": "arn:aws:lambda::prepare-confirmation-email",
      "Next": "sendEmail"
    },
    "sendEmail": {
      "Type": "Task",
      "Resource": "arn:aws:lambda::function:template-service",
      "End" : true …
Run Code Online (Sandbox Code Playgroud)

json amazon-web-services aws-step-functions

6
推荐指数
1
解决办法
5167
查看次数

botocore.exceptions.ClientError:调用 CreateStateMachine 操作时发生错误 (AccessDeniedException)

当我尝试根据状态机定义创建状态机时,出现以下错误:

botocore.exceptions.ClientError: An error occurred (AccessDeniedException) when calling the CreateStateMachine operation: 'role' is not authorized to create managed-rule.
Run Code Online (Sandbox Code Playgroud)

创建代码:

state_machine = sfn_client.create_state_machine(
    name = 'state-machine',
    definition = state_machine_def,
    roleArn = SFN_ROLE,
)
Run Code Online (Sandbox Code Playgroud)

我使用的 IAM 角色包含此处所述的所有必要权限。它需要拥有创建什么样的托管规则的权限?

amazon-web-services boto3 aws-step-functions

6
推荐指数
3
解决办法
3万
查看次数

将 AWS 步骤函数任务和映射输出合并到一个数组中

我有一个输出以下内容的任务状态:

"batch": {
    "batch": "size",
    "currentTimestamp": 1596205376
  },
Run Code Online (Sandbox Code Playgroud)

映射状态输出输出一个数组:

"batch": [
    {
      "batch": "product-batch-0",
      "currentTimestamp": 1596205376
    },
    {
      "batch": "product-batch-1",
      "currentTimestamp": 1596205376
    }
]
Run Code Online (Sandbox Code Playgroud)

我想将它们组合起来,以便地图状态之后的状态的输入如下:

  "batch": [
    {
    "batch": "Size",
    "currentTimestamp": 1596205376
    },
    {
      "batch": "product-batch-22",
      "currentTimestamp": 1596205376
    },
    {
      "batch": "product-batch-8",
      "currentTimestamp": 1596205376
    }
]
Run Code Online (Sandbox Code Playgroud)

使用 aws 步骤函数中提供的输入/输出处理是否可以实现这一点?我希望将它们包含在一个数组中,以便稍后在状态机中的附加映射状态中一起处理它们。

amazon-web-services aws-lambda aws-step-functions

6
推荐指数
2
解决办法
1万
查看次数

Step Function 中的 AWS Batch 作业执行结果

我是 AWS Step Functions 和 AWS Batch 的新手。我正在尝试将 AWS Batch Job 与 Step Function 集成。AWS Batch Job 执行输出字符串值的简单 python 脚本(高级简化要求)。我需要让 python 脚本输出可用于步骤函数的下一个状态。我应该如何才能完成这个任务。AWS Batch 作业输出不包含 python 脚本的结果。相反,它包含所有与输入值相关的容器信息。

示例:AWS Batch Job 执行输出“Hello World”的 python 脚本。我需要“Hello World”可用于步骤函数的下一个状态,以执行与其关联的 lambda。

python amazon-web-services aws-step-functions aws-batch

6
推荐指数
1
解决办法
6978
查看次数

AWS StepFunction CDK 结果路径设置为 null

我无法找到一种方法来指定“null”到结果路径。

正如此处指出的: https: //docs.aws.amazon.com/step-functions/latest/dg/input-output-resultpath.html

我想在 CDK 中实现:“丢弃结果并保留原始输入”

我已阅读此讨论: https://github.com/aws/aws-cdk/issues/1805

但虽然已经关闭,但还没有最终答案。下面是代码片段:

const verifyDeviceJob = new tasks.LambdaInvoke(this, 'VerifyDeviceJobTask', {
      lambdaFunction: verifyConditionDeviceFn,
      inputPath: '$.detail',      
      resultPath: //HOW TO DECLARE IT TO NULL??
});
Run Code Online (Sandbox Code Playgroud)

aws-step-functions aws-cdk

6
推荐指数
1
解决办法
4151
查看次数

如何使用 Choice 来测试输入数组是否包含给定的过滤器?

给定一个Map状态,其输出是一个类似于以下内容的数组:

[
  {
    "ProcessState": {
      "Status": "SUCCESS"
    }
  },
  {
    "ProcessState": {
      "Status": "SUCCESS"
    }
  },
  {
    "ProcessState": {
      "Status": "FAILURE"
    }
  }
]
Run Code Online (Sandbox Code Playgroud)

我希望能够测试是否有一个 Status = 'FAILURE' 的元素。我尝试使用 a Choicewith a choice 如下:

{
  "Variable": "$..ProcessState[?(Status == FAILURE)]",
  "IsPresent": true,
  "Next": "Items Contained Failure"
}
Run Code Online (Sandbox Code Playgroud)

当尝试这个时我得到Value is not a Reference Path: Illegal '..' ...

我正在考虑尝试使用 aPass作为中间步骤,但我认为如果没有条目匹配,它就会失败,因为它找不到任何内容。

amazon-web-services aws-step-functions

6
推荐指数
1
解决办法
2846
查看次数

AWS 步骤函数 - 从失败的步骤函数活动中恢复,而不是开始新的执行

我创建了一个包含 4 个不同活动的步骤函数,这些活动依次运行,并且还集成为从 java 应用程序触发此步骤函数。流程看起来像这样。

开始 -> Activity1 -> Activity2 -> Activity3 -> Activity4 -> 停止

当某个活动(例如 Activity2)期间执行失败时,该执行将被标记为失败。

现在,是否可以从先前失败的活动(Activity2)中恢复此失败的执行,而不是开始新的执行?

我经历了可能的操作AWSStepFunctions,但似乎没有一个能解决这个要求。 https://docs.aws.amazon.com/step-functions/latest/apireference/API_Operations.html

java amazon-web-services aws-lambda aws-step-functions

6
推荐指数
1
解决办法
6940
查看次数

是否可以从 AWS JavaScript v3 SDK 调用 AWS Step Functions?

我早在 8 月份就在论坛上发布了这个问题,询问 V3 JavaScript API 何时会像 V2 SDK 中那样添加对 AWS Step Functions 的支持。我在该线程上没有听到任何消息。

是否有人拥有可供我从 V2 SDK 迁移的替代解决方案?

javascript amazon-web-services aws-step-functions

6
推荐指数
1
解决办法
2297
查看次数

从 SNS 触发 Step Function

我想在发布 SNS 消息时执行我的步骤函数并使用它。对此最好的解决方案是什么?

我知道一种选择是使用 Lambda,订阅 SNS 主题,然后从 Lambda 内部触发 SF...我想知道是否有任何(更简单的)解决方案无需此中间步骤。

amazon-web-services amazon-sns aws-lambda aws-step-functions

6
推荐指数
1
解决办法
9353
查看次数