

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

# 使用 Step Functions Local 测试状态机（不支持）
<a name="sfn-local"></a>

**不支持 Step Functions Local**  
Step Functions Local 功能**并不**完备且**不受支持**。  
出于测试目的，您可以考虑使用能够模拟 Step Functions 的第三方解决方案。  
作为 Step Functions Local 的替代方案，您可以在部署到您的 Amazon 账户之前使用 TestState API 对状态机逻辑进行单元测试。有关更多信息，请参阅[使用 TestState API 测试状态机](https://docs.amazonaws.cn/step-functions/latest/dg/test-state-isolation.html)。

使用 Amazon Step Functions Local（Step Functions 的可下载版本），您可以使用在自己的开发环境中运行的 Step Functions 来测试应用程序。



在运行 Step Functions Local 时，您可以使用以下方法之一来调用服务集成：
+ 为 Amazon Lambda 和其他服务配置本地端点。
+ 直接从 Step Functi Amazon ons Local 调用服务。
+ 模拟服务集成的响应。

Amazon Step Functions Local 以 JAR 包或独立的 Docker 镜像的形式提供，可在微软 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 和 Amazon SAM CLI Local 进行测试](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)，或者输入以下 Docker 命令`pull`。

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

要在 Docker 上启动 Step Functions 的可下载版本，请运行以下 Docker `run`命令。

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

要与其他支持的服务进行交互，您需要先配置您的凭据和其他配置选项。 Amazon Lambda 有关更多信息，请参阅以下主题：
+ [为 Step Functions Local 设置配置选项](#sfn-local-config-options)
+ [Docker 的凭证和配置](#docker-credentials)

## 设置 Step Functions Local（可下载版本）- Java 版本
<a name="sfn-local-jar"></a>

的可下载版本以可执行 Amazon Step Functions 的 JAR 文件和 Docker 镜像的形式提供。Java 应用程序将在 Windows、Linux、macOS 和其他支持 Java 的平台上运行。除了 Java 之外，你还需要安装 Amazon Command Line Interface (Amazon CLI)。有关安装和配置的信息 Amazon CLI，请参阅《[Amazon Command Line Interface 用户指南》](https://docs.amazonaws.cn/cli/latest/userguide/)。

**在您的计算机上设置并运行 Step Functions**

1. 使用以下链接下载 Step Functions。    
[\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/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` 参数。例如，使用可以按如下方式指定 Step Functions 命令： Amazon CLI

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

**注意**  
默认情况下，Step Functions Local 使用本地测试账户和凭证， Amazon 区域设置为美国东部（弗吉尼亚州北部）。要将 Step Functi Amazon Lambda ons Local 与其他支持的服务或其他支持的服务一起使用，您必须配置您的凭据和区域。  
如果将快速工作流与 Step Functions Local 结合使用，则执行历史记录将存储在日志文件中。它未记录到 CloudWatch 日志中。日志文件路径将基于您在创建本地状态机时提供的 CloudWatch 日志日志组 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 文件启动 L Amazon Step Functions ocal 时，可以使用 Amazon Command Line Interface (Amazon CLI) 来设置配置选项，也可以将其包含在系统环境中。对于 Docker，您必须在启动 Step Functions Local 时引用的文件中指定这些选项。

### 配置选项
<a name="sfn-local-config-options-table"></a>

将 Step Functions Local 容器配置为使用 Lambda 端点和 Batch 端点等覆盖端点并调用该端点时，Step Functions Local 不会使用您指定的[凭证](#docker-credentials)。设置这些端点覆盖是可选的。


| Option | 命令行 | 环境 | 
| --- | --- | --- | 
| Account | -account, --aws-account | AWS\$1ACCOUNT\$1ID | 
| Region | -region, --aws-region | AWS\$1DEFAULT\$1区域 | 
| 等待时间比例 | -waitTimeScale, --wait-time-scale | WAIT\$1TIME\$1SCALE | 
| Lambda 端点 | -lambdaEndpoint, --lambda-endpoint | LAMBDA\$1ENDPOINT | 
| Batch 端点 | -batchEndpoint, --batch-endpoint | BATCH\$1ENDPOINT | 
| DynamoDB 端点 | -dynamo，--dynamodb 端点 DBEndpoint | 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`。有关更多信息，请分别参阅 Mac 版 Docker 文档和 Windows 版 Docker 文档：[Networking features in Docker Desktop for Mac](https://docs.docker.com/desktop/mac/networking/#use-cases-and-workaround) 和 [Networking features in Docker Desktop for Windows](https://docs.docker.com/desktop/windows/networking/)。

## 在计算机上运行 Step Functions Local
<a name="sfn-local-computer"></a>

使用 Step Functions 的本地版本配置、开发和测试计算机上的状态机。

### 在本地运行 HelloWorld 状态机
<a name="sfn-local-heloworld"></a>

使用 Amazon Command Line Interface (Amazon CLI) 在本地运行 Step Functions 后，就可以开始执行状态机了。

1.  Amazon 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 资源名称 (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 Amazon SAM 和 CLI 本地化
<a name="with-lambda-local"></a>

您可以将 Step Functions 的本地版本与 Amazon Lambda的本地版本结合使用。要对此进行配置，您必须安装和配置 Amazon SAM。

有关配置和运行的信息 Amazon SAM，请参阅以下内容：
+ [设置 Amazon SAM](https://docs.amazonaws.cn/serverless-application-model/latest/developerguide/serverless-quick-start.html)
+ [在本地启动 Amazon SAM CLI](https://docs.amazonaws.cn/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 的更多信息 Amazon Lambda，请参阅[教程：使用 Step Functions 和 Amazon SAM CLI Local 测试工作流程](sfn-local-lambda.md)。