AWS Step Functions 可以托管它们执行的代码吗?

问题描述 投票:0回答:1

我可以创建一个 AWS Step Function,它不仅可以定义它所执行的步骤,还可以定义它在每个步骤中执行的代码吗?或者我是否需要有一个由步骤函数调用的单独资源来执行我的代码,例如 AWS Lambda?

amazon-web-services aws-step-functions
1个回答
0
投票

一般来说,您不能直接在步骤函数的状态中托管代码。

如果您希望在某个状态中执行某些逻辑,通常会使用任务状态,并包含(在资源字段中)对该状态应执行的操作的引用。该操作可以是一个活动(它是一个工作线程(进程或线程),由您实现和托管,执行特定任务)、lambda 函数、其他支持的 AWS 服务或 HTTPS API。

任务状态(“Type”:“Task”)表示状态机执行的单个工作单元。任务通过使用活动或 AWS Lambda 函数、与其他支持的 AWS 服务集成或调用 HTTPS API(例如 Stripe)来执行工作。

(来源)

也就是说,如果您的逻辑涉及将状态输入相对简单地转换为某些输出(例如字符串操作、过滤输入属性、引入额外的硬编码或计算属性等...),您可以使用 Pass状态,并在状态定义中包含将输入转换为输出的逻辑。

例如(取自此处):

您可以转换输入:

{
  "georefOf": "Home"
}

输出:

{
  "georefOf": "Home",
  "coords": {
    "x-datum": 0.381018,
    "y-datum": 622.2269926397355
  }
}

使用以下状态定义:

"No-op": {
  "Type": "Pass",
  "Result": {
    "x-datum": 0.381018,
    "y-datum": 622.2269926397355
  },
  "ResultPath": "$.coords",
  "End": true
}

此外,步骤函数使用的 Amazon States Language 包含可用于转换输入的 JSONPath 内部函数。

例如,这样使用

States.Format

{
  "Parameters": {
    "foo.$": "States.Format('Your name is {}, we are in the year {}', $.name, 2020)"
  }
}

您可以转换输入:

{
  "name": "Foo",
  "zebra": "stripe"
}

进入输出:

{
  "foo": "Your name is Foo, we are in the year 2020"
}

您可以在此处找到支持的功能列表(示例取自那里)。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.