

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

# 使用 建立 Step Functions 狀態機器 AWS SAM
<a name="tutorial-state-machine-using-sam"></a>

在本指南中，您可以下載、建置和部署包含 AWS Step Functions 狀態機器的範例 AWS SAM 應用程式。這個應用程式會建立一個模擬股票交易工作流程，並依預先定義的排程執行 (請注意，排程預設為停用以避免產生費用)。

下圖顯示此應用程式的組件：

![\[顯示本教學課程工作流程的圖表。\]](http://docs.aws.amazon.com/zh_tw/step-functions/latest/dg/images/sam-starter-template-docs.png)


以下是您要建立範例應用程式所執行的命令預覽。如需當中各個命令的詳細資訊，請參閱此頁面稍後的章節

```
# Step 1 - Download a sample application. For this tutorial you
#   will follow the prompts to select an AWS Quick Start Template
#   called 'Multi-step workflow'
sam init

# Step 2 - Build your application
cd project-directory
sam build

# Step 3 - Deploy your application
sam deploy --guided
```

## 先決條件
<a name="tutorial-state-machine-using-sam-prerequisites"></a>

本指南假設您已完成安裝作業系統的 [AWS SAM CLI](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-cli-install.html) 中的步驟。它假設您已完成以下操作：

1. 已建立 AWS 帳戶。

1. 設定的 IAM 許可。

1. 已安裝 Homebrew。注意：Homebrew 只是 Linux 和 macOS 的先決條件。

1. 已安裝 AWS SAM CLI。注意：請確認您擁有 0.52.0 版或更高版本。您可以透過執行命令 `sam --version` 檢查您所擁有的版本。

## 步驟 1：下載範例 AWS SAM 應用程式
<a name="tutorial-state-machine-using-sam-initialize"></a>

**要執行的命令：**

```
sam init
```

依照螢幕上的提示選取下列項目：

1. **Template：** AWS Quick Start 範本

1. **語言：**Python、Ruby、NodeJS、Go、Java 或 .NET

1. **專案名稱：**(您選擇的名稱 - 預設為 `sam-app`)

1. **快速入門應用程式：**多步驟工作流程

**正在 AWS SAM 執行的動作：**

此命令會使用您為「專案名稱」提示所提供的名稱來建立目錄 (預設為 `sam-app`)。目錄的特定內容將取決於您選擇的語言。

以下是當您選擇其中一個 Python 執行時間時的目錄內容：

```
├── README.md
├── functions
│   ├── __init__.py
│   ├── stock_buyer
│   │   ├── __init__.py
│   │   ├── app.py
│   │   └── requirements.txt
│   ├── stock_checker
│   │   ├── __init__.py
│   │   ├── app.py
│   │   └── requirements.txt
│   └── stock_seller
│       ├── __init__.py
│       ├── app.py
│       └── requirements.txt
├── statemachine
│   └── stock_trader.asl.json
├── template.yaml
└── tests
    └── unit
        ├── __init__.py
        ├── test_buyer.py
        ├── test_checker.py
        └── test_seller.py
```

您可以查看兩個特別有趣的檔案：
+ `template.yaml`：包含定義應用程式 AWS 資源的 AWS SAM 範本。
+ `statemachine/stockTrader.asl.json`：包含應用程式的狀態機器定義，這是以 [使用 Amazon States Language 定義 Step Functions 工作流程](concepts-amazon-states-language.md) 撰寫。

您可以在 `template.yaml` 檔案中看到下列項目，這是指向狀態機器定義檔：



```
    Properties:
      DefinitionUri: statemachine/stock_trader.asl.json
```

將狀態機器定義保留為個別檔案，而不是內嵌在 AWS SAM 範本中，可能會有所幫助。例如，如果您未在範本中包含定義，追蹤狀態機器定義的變更會比較容易。您可以使用 Workflow Studio 來建立和維護狀態機器定義，並將定義直接從主控台匯出至 Amazon States Language 規格檔案，而不將其合併至範本。

如需範例應用程式的詳細資訊，請參閱專案目錄中的 `README.md` 檔案。

## 步驟 2：建置您的應用程式
<a name="tutorial-state-machine-using-sam-build"></a>

**要執行的命令：**

首先變更至專案目錄 (也就是範例應用程式的 `template.yaml` 檔案所在的目錄；依預設為 `sam-app`)，然後執行下列命令：

```
sam build
```

**輸出範例：**

```
  
 Build Succeeded

 Built Artifacts  : .aws-sam/build
 Built Template   : .aws-sam/build/template.yaml

 Commands you can use next
 =========================
 [*] Invoke Function: sam local invoke
 [*] Deploy: sam deploy --guided
```

**正在 AWS SAM 執行的動作：**

CLI AWS SAM 隨附許多 Lambda 執行時間的抽象概念，以建置您的相依性，並將所有建置成品複製到預備資料夾中，以便一切準備好封裝和部署。`sam build` 命令會建置應用程式所具有的任何相依性，並將建置成品複製到 `.aws-sam/build` 下的資料夾。

## 步驟 3：將您的應用程式部署到 AWS 雲端
<a name="tutorial-state-machine-using-sam-deploy"></a>

**要執行的命令：**

```
sam deploy --guided
```

依照螢幕上的提示操作。您可以直接以 `Enter` 回應以接受互動體驗中提供的預設選項。

**正在 AWS SAM 執行的動作：**

此命令會將您的應用程式部署到 AWS 雲端。它採用您使用 `sam build`命令建置的部署成品、封裝並將它們上傳至 CLI 建立的 Amazon S3 AWS SAM 儲存貯體，並使用 部署應用程式 CloudFormation。在部署命令的輸出中，您可以看到對 CloudFormation 堆疊進行的變更。

您可以依照下列步驟，確認 Step Functions 狀態機器已成功部署範例：

1. 登入 AWS 管理主控台 並開啟 Step Functions 主控台，網址為 https：//[https://console.aws.amazon.com/states/](https://console.aws.amazon.com/states/)。

1. 在左側導覽中，選擇 **State machines (狀態機器)**。

1. 在清單中尋找並選擇您的新狀態機器。它將命名為 StockTradingStateMachine-*<unique-hash>*。

1. 選擇 **Definition (定義)** 索引標籤。

您現在應該可以看到狀態機器的視覺表示。您可以驗證視覺表示是否與專案目錄的 `statemachine/stockTrader.asl.json` 檔案中找到的狀態機器定義相符。

## 疑難排解
<a name="tutorial-state-machine-using-sam-troubleshooting"></a>

### SAM CLI 錯誤：「沒有此類選項：--guided」
<a name="tutorial-state-machine-using-sam-troubleshooting-guided"></a>

執行 `sam deploy` 時，您會看到下列錯誤：

```
 
Error: no such option: --guided
```

這表示您使用的是不支援 `--guided` 參數的舊版 AWS SAM CLI。若要修正此問題，您可以將 CLI AWS SAM 版本更新為 0.33.0 或更新版本，或從 `sam deploy`命令中省略 `--guided` 參數。

### SAM CLI 錯誤:「無法建立受管資源：找不到登入資料」
<a name="tutorial-state-machine-using-sam-troubleshooting-credentials"></a>

執行 `sam deploy` 時，您會看到下列錯誤：

```
 
Error: Failed to create managed resources: Unable to locate credentials
```

這表示您尚未設定 AWS 登入資料，讓 CLI AWS SAM 進行 AWS 服務呼叫。若要修正此問題，您必須設定 AWS 登入資料。如需詳細資訊，請參閱《 *AWS Serverless Application Model 開發人員指南*》中的[設定 AWS 登入](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-getting-started-set-up-credentials.html)資料。

## 清除
<a name="tutorial-state-machine-using-sam-cleanup"></a>

如果您不再需要透過執行本教學課程建立 AWS 的資源，可以透過刪除您部署的 CloudFormation 堆疊來移除這些資源。

若要使用 刪除使用此教學課程建立的 CloudFormation 堆疊 AWS 管理主控台，請遵循下列步驟：

1. 登入 AWS 管理主控台 ，並在 https：//[https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/) 開啟 CloudFormation 主控台。

1. 在左側導覽窗格中，選擇 **Stacks (堆疊)**。

1. 在堆疊清單中，選擇 **sam-app** (或您建立的堆疊名稱)。

1. 選擇 **刪除**。

完成後，堆疊的狀態將變更為 **DELETE\$1COMPLETE**。

或者，您也可以執行下列 AWS CLI 命令來刪除 CloudFormation 堆疊：

```
aws cloudformation delete-stack --stack-name sam-app --region region
```

### 驗證已刪除的堆疊
<a name="tutorial-state-machine-using-sam-cleanup-verify"></a>

對於刪除 CloudFormation 堆疊的這兩種方法，您可以前往 [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/)****：//。 ****您應該在刪除的堆疊清單中看到堆疊名稱 **sam-app** (或您所建立的堆疊名稱)。