

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

# 使用 Step Functions Local 測試狀態機器 （不支援）
<a name="sfn-local"></a>

**不支援 Step Functions Local**  
Step Functions Local **不提供**功能同位，且**不受支援**。  
您可以考慮將模擬 Step Functions 的第三方解決方案用於測試目的。  
作為 Step Functions Local 的替代方案，您可以使用 TestState API 在部署到 AWS 您的帳戶之前，先單元測試您的狀態機器邏輯。如需詳細資訊，請參閱[使用 TestState API 測試狀態機器](https://docs.aws.amazon.com/step-functions/latest/dg/test-state-isolation.html)。

使用 AWS Step Functions Local 可下載版本的 Step Functions，您可以使用在您自己的開發環境中執行的 Step Functions 來測試應用程式。



執行 Step Functions Local 時，您可以使用下列其中一種方法來叫用服務整合：
+ 設定 AWS Lambda 和其他 服務的本機端點。
+ 從 Step Functions Local 直接呼叫 AWS 服務。
+ 模擬來自服務整合的回應。

AWS Step Functions Local 以 JAR 套件或獨立 Docker 映像的形式提供，可在 Microsoft Windows、Linux、macOS 和其他支援 Java 或 Docker 的平台上執行。

**警告**  
您應該只使用 Step Functions Local 進行測試，絕不處理敏感資訊。

**Topics**
+ [設定 Step Functions Local 和 Docker](#sfn-local-docker)
+ [設定 Step Functions Local - Java 版本](#sfn-local-jar)
+ [設定 Step Functions Local 選項](#sfn-local-config-options)
+ [執行 Step Functions Local](#sfn-local-computer)
+ [教學課程：使用 Step Functions 和 CLI Local AWS SAM 進行測試](sfn-local-lambda.md)
+ [使用模擬服務整合進行測試](sfn-local-test-sm-exec.md)

## 在 Docker 中設定 Step Functions Local （可下載版本）
<a name="sfn-local-docker"></a>

Step Functions Local Docker 映像可讓您使用具有所有必要相依性的 Docker 映像，快速開始使用 Step Functions Local。Docker 映像可讓您在容器化組建中包含 Step Functions Local，並做為持續整合測試的一部分。

若要取得 Step Functions Local 的 Docker 映像，請參閱 [https://hub.docker.com/r/amazon/aws-stepfunctions-local](https://hub.docker.com/r/amazon/aws-stepfunctions-local)：//`pull`。

```
docker pull amazon/aws-stepfunctions-local
```

若要在 Docker 上啟動可下載版本的 Step Functions，請執行下列 Docker `run`命令

```
docker run -p 8083:8083 amazon/aws-stepfunctions-local
```

若要與 AWS Lambda 或其他支援的 服務互動，您必須先設定登入資料和其他組態選項。如需詳細資訊，請參閱下列主題：
+ [設定 Step Functions Local 的組態選項](#sfn-local-config-options)
+ [Docker 的登入資料和組態](#docker-credentials)

## 設定 Step Functions Local （可下載版本） - Java 版本
<a name="sfn-local-jar"></a>

的可下載版本 AWS Step Functions 會以可執行 JAR 檔案和 Docker 映像的形式提供。Java 應用程式可在 Windows、Linux、macOS 和其他支援 Java 的平台上執行。除了 Java 之外，您需要安裝 AWS Command Line Interface (AWS CLI)。如需安裝和設定 的詳細資訊 AWS CLI，請參閱 [AWS Command Line Interface 使用者指南](https://docs.aws.amazon.com/cli/latest/userguide/)。

**在電腦上設定和執行 Step Functions**

1. 使用以下連結下載 Step Functions。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/step-functions/latest/dg/sfn-local.html)

1. 解壓縮 `.zip` 檔案。

1. 測試下載及檢視版本資訊。

   ```
   $ java -jar StepFunctionsLocal.jar -v
   Step Function Local
   Version: 2.0.0
   Build: 2024-05-18
   ```

1. (選用) 檢視可用命令的清單。

   ```
   $ java -jar StepFunctionsLocal.jar -h
   ```

1. 若要在電腦上啟動 Step Functions，請開啟命令提示字元，導覽至您解壓縮 的目錄`StepFunctionsLocal.jar`，然後輸入下列命令。

   ```
   java -jar StepFunctionsLocal.jar
   ```

1. 若要存取在本機執行的 Step Functions，請使用 `--endpoint-url` 參數。例如，使用 AWS CLI，您可以指定 Step Functions 命令，如下所示：

   ```
   aws stepfunctions --endpoint-url http://localhost:8083 command
   ```

**注意**  
根據預設，Step Functions Local 會使用本機測試帳戶和登入資料，並將區域 AWS 設定為美國東部 （維吉尼亞北部）。若要搭配 AWS Lambda或其他支援的 服務使用 Step Functions Local，您必須設定您的登入資料和區域。  
如果您搭配 Step Functions Local 使用 Express 工作流程，則執行歷史記錄會存放在日誌檔案中。它不會記錄到 CloudWatch Logs。日誌檔案路徑將以您建立本機狀態機器時提供的 CloudWatch Logs 日誌群組 ARN 為基礎。日誌檔案將儲存在`/aws/states/log-group-name/${execution_arn}.log`相對於您執行 Step Functions Local 的位置。例如，如果執行 ARN 是：  

```
arn:aws:states:region:account-id:express:test:example-ExpressLogGroup-wJalrXUtnFEMI
```
日誌檔案將是：  

```
aws/states/log-group-name/arn:aws:states:region:account-id:express:test:example-ExpressLogGroup-wJalrXUtnFEMI.log
```

## 設定 Step Functions Local 的組態選項
<a name="sfn-local-config-options"></a>

當您使用 JAR 檔案啟動 AWS Step Functions Local 時，您可以使用 AWS Command Line Interface (AWS CLI) 設定組態選項，或將其包含在系統環境中。對於 Docker，您必須在啟動 Step Functions Local 時參考的檔案中指定這些選項。

### 組態選項
<a name="sfn-local-config-options-table"></a>

當您將 Step Functions Local 容器設定為使用 Lambda 端點和 Batch Endpoint 等覆寫端點，並呼叫該端點時，Step Functions Local 不會使用您指定的[登入](#docker-credentials)資料。設定這些端點覆寫是選用的。


| 選項 | 命令列 | Environment | 
| --- | --- | --- | 
| 帳戶 | -account、--aws-account | AWS\$1ACCOUNT\$1ID | 
| 區域 | -region、--aws-region | AWS\$1DEFAULT\$1REGION | 
| 等待時間調整 | -waitTimeScale、--wait-time-scale | WAIT\$1TIME\$1SCALE | 
| Lambda 端點 | -lambdaEndpoint、--lambda-endpoint | LAMBDA\$1ENDPOINT | 
| 批次端點 | -batchEndpoint、--batch-endpoint | BATCH\$1ENDPOINT | 
| DynamoDB 端點 | -dynamoDBEndpoint、--dynamodb-endpoint | DYNAMODB\$1ENDPOINT | 
| ECS 端點  | -ecsEndpoint、--ecs-endpoint | ECS\$1ENDPOINT | 
| Glue 端點 | -glueEndpoint、--glue-endpoint | GLUE\$1ENDPOINT | 
| SageMaker 端點 | -sageMakerEndpoint、--sagemaker-endpoint | SAGE\$1MAKER\$1ENDPOINT | 
| SQS 端點 | -sqsEndpoint、--sqs-endpoint | SQS\$1ENDPOINT | 
| SNS 端點 | -snsEndpoint、--sns-endpoint | SNS\$1ENDPOINT | 
| Step Functions 端點 | -stepFunctionsEndpoint、--step-functions-endpoint | STEP\$1FUNCTIONS\$1ENDPOINT | 

### Docker 的登入資料和組態
<a name="docker-credentials"></a>

若要為 Docker 設定 Step Functions Local，請建立下列檔案：`aws-stepfunctions-local-credentials.txt`。

此檔案包含您的登入資料和其他組態選項。建立 `aws-stepfunctions-local-credentials.txt` 檔案時，可使用下列項目做為範本。

```
AWS_DEFAULT_REGION=AWS_REGION_OF_YOUR_AWS_RESOURCES
AWS_ACCESS_KEY_ID=YOUR_AWS_ACCESS_KEY
AWS_SECRET_ACCESS_KEY=YOUR_AWS_SECRET_KEY
WAIT_TIME_SCALE=VALUE
LAMBDA_ENDPOINT=VALUE
BATCH_ENDPOINT=VALUE
DYNAMODB_ENDPOINT=VALUE
ECS_ENDPOINT=VALUE
GLUE_ENDPOINT=VALUE
SAGE_MAKER_ENDPOINT=VALUE
SQS_ENDPOINT=VALUE
SNS_ENDPOINT=VALUE
STEP_FUNCTIONS_ENDPOINT=VALUE
```

在 中設定登入資料和組態選項後`aws-stepfunctions-local-credentials.txt`，請使用下列命令啟動 Step Functions。

```
docker run -p 8083:8083 --env-file aws-stepfunctions-local-credentials.txt amazon/aws-stepfunctions-local
```

**注意**  
 建議使用特殊 DNS 名稱 `host.docker.internal`，這會解析為主機使用的內部 IP 地址，例如 `http://host.docker.internal:8000`。如需詳細資訊，請參閱 Docker Desktop for Mac [中的適用於 Mac 和 Windows 網路功能的 Docker](https://docs.docker.com/desktop/mac/networking/#use-cases-and-workaround) 文件，以及 [Docker Desktop for Windows 中的網路功能](https://docs.docker.com/desktop/windows/networking/)。

## 在電腦上本機執行 Step Functions
<a name="sfn-local-computer"></a>

使用 Step Functions 的本機版本，在電腦上設定、開發和測試狀態機器。

### 在本機執行 HelloWorld 狀態機器
<a name="sfn-local-heloworld"></a>

使用 AWS Command Line Interface (AWS CLI) 在本機執行 Step Functions 之後，您可以啟動狀態機器執行。

1.  AWS CLI 透過逸出狀態機器定義，從 建立狀態機器。

   ```
   aws stepfunctions --endpoint-url http://localhost:8083 create-state-machine --definition "{\
     \"Comment\": \"A Hello World example of the Amazon States Language using a Pass state\",\
     \"StartAt\": \"HelloWorld\",\
     \"States\": {\
       \"HelloWorld\": {\
         \"Type\": \"Pass\",\
         \"End\": true\
       }\
     }}" --name "HelloWorld" --role-arn "arn:aws:iam::012345678901:role/DummyRole"
   ```
**注意**  
`role-arn` 不會用於 Step Functions Local，但您必須將其包含在適當的語法中。您可以使用上一個範例的 Amazon Resource Name (ARN)。

   如果您成功建立狀態機器，Step Functions 會回應建立日期和狀態機器 ARN。

   ```
   {
       "creationDate": 1548454198.202, 
       "stateMachineArn": "arn:aws:states:region:account-id:stateMachine:HelloWorld"
   }
   ```

1. 使用您建立的狀態機器 ARN 開始執行。

   ```
   aws stepfunctions --endpoint-url http://localhost:8083 start-execution --state-machine-arn arn:aws:states:region:account-id:stateMachine:HelloWorld
   ```

### Step Functions Local 與 AWS SAM CLI Local
<a name="with-lambda-local"></a>

您可以使用 Step Functions 的本機版本搭配本機版本 AWS Lambda。如要進行設定，您必須安裝和設定 AWS SAM。

如需設定和執行的資訊 AWS SAM，請參閱下列內容：
+ [設定 AWS SAM](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-quick-start.html)
+ [啟動 AWS SAM CLI Local](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-cli-command-reference-sam-local-start-lambda.html)

當 Lambda 在本機系統上執行時，您可以啟動 Step Functions Local。從您解壓縮 Step Functions 本機 JAR 檔案的目錄中，啟動 Step Functions Local，並使用 `--lambda-endpoint` 參數來設定本機 Lambda 端點。

```
java -jar StepFunctionsLocal.jar --lambda-endpoint http://127.0.0.1:3001 command
```

如需使用 執行 Step Functions Local 的詳細資訊 AWS Lambda，請參閱 [教學課程：使用 Step Functions 和 CLI Local AWS SAM 測試工作流程](sfn-local-lambda.md)。