

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

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

Amazon States Language 是一種以 JSON 為基礎的結構化語言，用於定義您的狀態機器、 [狀態](workflow-states.md)集合，可執行 (`Task` 狀態）、判斷要轉換為下一個 (`Choice` 狀態）、停止執行並顯示錯誤 (`Fail` 狀態） 等。

如需詳細資訊，請參閱 [Amazon 狀態語言規格](https://states-language.net/spec.html)和 [Statelint](https://github.com/awslabs/statelint)，這是一種驗證 Amazon 狀態語言程式碼的工具。

若要使用 Amazon States Language 在 [Step Functions 主控台](https://console.aws.amazon.com/states/home?region=us-east-1#/)上建立狀態機器，請參閱[入門](getting-started.md)。

**注意**  
如果您在 Step Functions 主控台之外定義狀態機器，例如在您選擇的編輯器中，您必須使用副檔名 *.asl.json* 儲存狀態機器定義。

## Amazon States Language Specification (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
    }
  }
}
```