

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用 Amazon States Language 定义 Step Functions 工作流程
<a name="concepts-amazon-states-language"></a>

Amazon States Language 是一种基于 JSON 的结构化语言，用于定义状态机（一个[状态](workflow-states.md)集合），可以执行工作（`Task` 状态），确定哪些状态转换为下一个状态（`Choice` 状态），在出错的情况下停止执行（`Fail` 状态）等等。

有关更多信息，请参阅 [Amazon States Language 规范](https://states-language.net/spec.html)和 [Statelint](https://github.com/awslabs/statelint)，后者是一个用于验证 Amazon 状态语言代码的工具。

要使用 Amazon States Language 在 [Step Functions 控制台](https://console.amazonaws.cn/states/home?region=us-east-1#/)上创建状态机，请参阅[入门](getting-started.md)。

**注意**  
如果您在 Step Functions 控制台之外定义状态机，例如在自己选择的编辑器中，则必须以 *.asl.json* 扩展名保存状态机定义。

## 亚马逊各州语言规范示例 (JSONata)
<a name="example-amazon-states-language-specification"></a>

```
{
  "Comment": "An example of the Amazon States Language using a choice state.",
  "QueryLanguage": "JSONata",
  "StartAt": "FirstState",
  "States": {
    "FirstState": {
      "Type": "Task",
      "Assign": {
        "foo" : "{% $states.input.foo_input %}" 
        },
      "Resource": "arn:aws:lambda:region:123456789012:function:FUNCTION_NAME",
      "Next": "ChoiceState"
    },
    "ChoiceState": {
      "Type": "Choice",
      "Default": "DefaultState",
      "Choices": [
        {
          "Next": "FirstMatchState",
          "Condition": "{% $foo = 1 %}"
        },
        {
          "Next": "SecondMatchState",
          "Condition": "{% $foo = 2 %}"
        }
      ]
    },
    "FirstMatchState": {
      "Type" : "Task",
      "Resource": "arn:aws:lambda:region:123456789012:function:OnFirstMatch",
      "Next": "NextState"
    },

    "SecondMatchState": {
      "Type" : "Task",
      "Resource": "arn:aws:lambda:region:123456789012:function:OnSecondMatch",
      "Next": "NextState"
    },

    "DefaultState": {
      "Type": "Fail",
      "Error": "DefaultStateError",
      "Cause": "No Matches!"
    },

    "NextState": {
      "Type": "Task",
      "Resource": "arn:aws:lambda:region:123456789012:function:FUNCTION_NAME",
      "End": true
    }
  }
}
```