

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

# 建立使用 Lambda 的 Step Functions 狀態機器
<a name="tutorial-creating-lambda-state-machine"></a>

在本教學課程中，您將使用 建立單一步驟工作流程 AWS Step Functions 來叫用 AWS Lambda 函數。

**注意**  
Step Functions 是以*狀態機器*和*任務*為基礎。在 Step Functions 中，狀態機器稱為*工作流程*，這是一系列的事件驅動步驟。工作流程中的每個步驟都稱為 *狀態*。例如，[任務狀態](state-task.md)代表另一個 AWS 服務執行的工作單位，例如呼叫另一個 AWS 服務 或 API。執行任務之工作流程的執行個體在 Step Functions 中稱為*執行*。  
如需詳細資訊，請參閱：  
[什麼是 Step Functions？](welcome.md)
[將 服務與 Step Functions 整合](integrate-services.md)

Lambda 非常適合 `Task` 狀態，因為 Lambda 函數是*無伺服器*且易於寫入。您可以在 AWS 管理主控台 或您偏好的編輯器中撰寫程式碼。 會 AWS 處理為您的函數提供運算環境並執行它的詳細資訊。

## 步驟 1：建立 Lambda 函式
<a name="create-lambda-function"></a>

您的 Lambda 函數會接收事件資料並傳回問候語訊息。

**重要**  
確保您的 Lambda 函數與 AWS 區域 狀態機器位於相同的 AWS 帳戶下。

1. 開啟 [Lambda 主控台](https://console.aws.amazon.com/lambda/home)，然後選擇**建立函數**。

1. 在 **Create function (建立函數)** 頁面上，選擇 **Author from scratch (從頭開始撰寫)**。

1. 針對**函數名稱**，請輸入 `HelloFunction`。

1. 保留所有其他選項的預設選擇，然後選擇**建立函數**。

1. 建立 Lambda 函數後，複製頁面右上角顯示的函數 Amazon Resource Name (ARN)。以下是範例 ARN：

   ```
   arn:aws:lambda:region:123456789012:function:HelloFunction
   ```

1. 將 Lambda 函數的下列程式碼複製到 ***HelloFunction*** 頁面的**程式碼來源**區段。

   ```
   export const handler = async(event, context, callback) => {
       callback(null, "Hello from " + event.who + "!");
   };
   ```

   此程式碼會使用輸入資料的 `who` 欄位來組合問候語，該欄位由傳送到您函數的 `event` 物件提供。稍後您會在[開始新的執行](#start-lambda-function)時，為此函數新增輸入資料。`callback` 方法會傳回函數中的組合問候語。

1. 選擇**部署**。

## 步驟 2：測試 Lambda 函數
<a name="test-lambda-function"></a>

測試您的 Lambda 函數以查看運作中的函數。

1. 選擇**測試**。

1. **事件名稱**輸入 `HelloEvent`。

1. 將**事件 JSON** 資料取代為下列項目。

   ```
   {
       "who": "AWS Step Functions"
   }
   ```

   `"who"` 項目對應至 Lambda 函數中的 `event.who` 欄位，以完成問候語。您將在執行狀態機器時輸入相同的輸入資料。

1. 選擇**儲存**，然後選擇**測試**。

1. 若要檢閱測試結果，在 **Execution result** (執行結果) 下，展開 **Details** (詳細資訊)。

## 步驟 3：建立狀態機器
<a name="create-state-machine-step"></a>

使用 Step Functions 主控台建立狀態機器，以叫用您在[步驟 1 中建立的 Lambda ](#create-lambda-function)函數。

1. 開啟 [Step Functions 主控台](https://console.aws.amazon.com/states/home)，從功能表中選擇**狀態機器**，然後選擇**建立狀態機器**。
**重要**  
請確定您的狀態機器與您先前建立的 Lambda 函數位於相同的 AWS 帳戶和區域。

1. 選擇**從空白建立**。

1. 為您的狀態機器命名，然後選擇**繼續**在 Workflow Studio 中編輯您的狀態機器。

1. 在左側[的狀態瀏覽器](workflow-studio.md#workflow-studio-components-states)中，請確定您已選擇**動作**索引標籤。然後，將**AWS Lambda 調用** API 拖放至標示為**「拖曳第一個」狀態的空白狀態**。

1. 在右側的[檢查器](workflow-studio.md#workflow-studio-components-formdefinition)面板中，設定 Lambda 函數：

   1. 在 **API 參數**區段中，選擇[您稍早在函數名稱下拉式清單中建立的 Lambda](#create-lambda-function) **函數**。

   1. 在**承載**下拉式清單中保留預設選擇。

1. （選用） 選擇**定義**以檢視狀態機器的 [Amazon States Language](concepts-amazon-states-language.md)(ASL) 定義，此定義會根據您在**動作**索引標籤和**檢查程式**面板中的選擇自動產生。

1. 為您的狀態機器指定名稱。若要這樣做，請選擇 **MyStateMachine** 預設狀態機器名稱旁的編輯圖示。然後，在**狀態機器組態**中，在**狀態機器名稱方塊中指定名稱**。

   例如，輸入名稱 **LambdaStateMachine**。
**注意**  
狀態機器、執行和活動任務的名稱長度不得超過 80 個字元。這些名稱對於您的帳戶和 AWS 區域必須是唯一的，且不得包含下列任何項目：  
空格
萬用字元 (`? *`)
括號字元 (`< > { } [ ]`)
特殊字元 (`" # % \ ^ | ~ ` $ & , ; : /`)
控制字元 (`\\u0000` - `\\u001f`或 `\\u007f` - `\\u009f`)。
Step Functions 接受包含非 ASCII 字元的狀態機器、執行、活動和標籤名稱。由於這類字元會阻止 Amazon CloudWatch 記錄資料，因此我們建議您僅使用 ASCII 字元，以便您可以追蹤 Step Functions 指標。

1. （選用） 在**狀態機器組態**中，指定其他工作流程設定，例如狀態機器類型及其執行角色。

   在此教學課程中，請將所有預設選擇保留在**狀態機器設定**中。

1. 選擇**建立**。

1. 在**確認角色建立**對話方塊中，選擇**確認**以繼續。

   您也可以選擇**檢視角色設定**以返回**狀態機器組態**。
**注意**  
如果您刪除 Step Functions 建立的 IAM 角色，Step Functions 稍後無法重新建立該角色。同樣地，如果您修改角色 （例如，從 IAM 政策中的主體移除 Step Functions)，Step Functions 稍後無法還原其原始設定。

## 步驟 4：執行狀態機器
<a name="start-lambda-function"></a>

建立狀態機器之後，您可以執行它。

1. 在**狀態機器**頁面上，選擇 **LambdaStateMachine**。

1. 選擇 **Start execution (開始執行)**。

   隨即顯示**開始執行**對話方塊。

1. （選用） 輸入自訂執行名稱以覆寫產生的預設值。
**非 ASCII 名稱和記錄**  
Step Functions 接受包含非 ASCII 字元的狀態機器、執行、活動和標籤名稱。由於這類字元會阻止 Amazon CloudWatch 記錄資料，因此我們建議您僅使用 ASCII 字元，以便您可以追蹤 Step Functions 指標。

1. 在**輸入**區域中，將範例執行資料取代為下列項目。

   ```
   {
       "who" : "AWS Step Functions"
   }
   ```

    `"who"` 是 Lambda 函數用來取得要問候之人員名稱的金鑰名稱。

1. 選擇 **Start Execution (開始執行)**。

   狀態機器的執行開始，並顯示顯示執行中執行的新頁面。

1. Step Functions 主控台會將您導向至標題為執行 ID 的頁面。此頁面稱為*執行詳細資訊*頁面。在此頁面上，您可以在執行進行時或完成後檢閱執行結果。

   若要檢閱執行結果，請在**圖形檢視**中選擇個別狀態，然後選擇[步驟詳細資訊](concepts-view-execution-details.md#exec-details-intf-step-details)窗格上的個別索引標籤，分別檢視每個狀態的詳細資訊，包括輸入、輸出和定義。如需您可以在執行詳細資訊頁面上檢視之*執行資訊的詳細資訊*，請參閱 [執行詳細資訊概觀](concepts-view-execution-details.md#exec-details-interface-overview)。

**注意**  
您也可以在從狀態機器叫用 Lambda 時傳遞承載。如需透過在 `Parameters` 欄位中傳遞承載叫用 Lambda 的詳細資訊和範例，請參閱 [使用 Step AWS LambdaFunctions 叫用 函數](connect-lambda.md)。