

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# チュートリアル: Step Functions と CLI Local AWS SAM を使用したワークフローのテスト
<a name="sfn-local-lambda"></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 と の両方 AWS Lambda を実行すると、コードをデプロイせずにステートマシンと Lambda 関数をテストできます AWS。

詳細については、以下の各トピックを参照してください。
+ [Step Functions Local を使用したステートマシンのテスト (非サポート)](sfn-local.md)
+ [セットアップ AWS SAM](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-quick-start.html)

## ステップ 1: をセットアップする AWS SAM
<a name="install-sam"></a>

AWS Serverless Application Model (AWS SAM) CLI Local では AWS Command Line Interface、、 AWS SAM、および Docker をインストールする必要があります。

1. [CLI AWS SAM をインストールします](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-cli-install.html)。
**注記**  
CLI AWS SAM をインストールする前に、 AWS CLI と Docker をインストールする必要があります。CLI AWS SAM をインストールするための[前提条件](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-cli-install.html)を参照してください。

1. [AWS SAM クイックスタート](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-quick-start.html)ドキュメントをひととおり確認してください。必ず、以下のステップに従います。

   1. [アプリケーションの初期化](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-quick-start.html#gs-ex1-setup-local-app)

   1.  [アプリケーションのローカルテスト](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-quick-start.html#gs-ex1-test-locally) 

   

   これにより、`sam-app` ディレクトリが作成され、Python ベースの Hello World Lambda 関数を含む環境が構築されます。

   

## ステップ 2: CLI Local AWS SAM をテストする
<a name="test-local-lambda"></a>

Hello World Lambda 関数をインストール AWS SAM して作成したので、関数をテストできます。`sam-app` ディレクトリで、次のコマンドを入力します。

```
sam local start-api
```

これにより、Lambda 関数のローカルインスタンスが起動されます。次のような出力が表示されます:

```
2019-01-31 16:40:27 Found credentials in shared credentials file: ~/.aws/credentials
2019-01-31 16:40:27 Mounting HelloWorldFunction at http://127.0.0.1:3000/hello [GET]
2019-01-31 16:40:27 You can now browse to the above endpoints to invoke your functions. You do not need to restart/reload SAM CLI while working on your functions changes will be reflected instantly/automatically. You only need to restart SAM CLI if you update your AWS SAM template
2019-01-31 16:40:27  * Running on http://127.0.0.1:3000/ (Press CTRL+C to quit)
```

ブラウザを開き、次のように入力します。

```
http://127.0.0.1:3000/hello
```

これにより、次のようなレスポンスが出力されます。

```
{"message": "hello world", "location": "72.21.198.66"}
```

**Ctrl\$1C** キーを押して、Lambda API を終了します。

## ステップ 3: CLI Local AWS SAM を起動する
<a name="start-local-lambda"></a>

関数が機能することをテストしたので、CLI Local AWS SAM を起動します。`sam-app` ディレクトリで、次のコマンドを入力します。

```
sam local start-lambda
```

これにより AWS SAM CLI Local が開始され、次の出力と同様に、使用するエンドポイントが提供されます。

```
2019-01-29 15:33:32 Found credentials in shared credentials file: ~/.aws/credentials
2019-01-29 15:33:32 Starting the Local Lambda Service. You can now invoke your Lambda Functions defined in your template through the endpoint.
2019-01-29 15:33:32  * Running on http://127.0.0.1:3001/ (Press CTRL+C to quit)
```

## ステップ 4: Step Functions Local のスタート
<a name="start-stepfunctions-local"></a>

### JAR ファイル
<a name="start-local-jar"></a>

Step Functions Local の `.jar` ファイルバージョンを使用している場合は、Lambda エンドポイントを指定して Step Functions をスタートします。`.jar` ファイルを展開したディレクトリで、次のコマンドを入力します。

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

Step Functions Local がスタートすると、環境に続いて、`~/.aws/credentials` ファイルで設定した認証情報がチェックされます。デフォルトでは、架空のユーザー ID を使用して起動し、`region us-east-1` としてリスト表示されます。

```
2019-01-29 15:38:06.324: Failed to load credentials from environment because Unable to load AWS credentials from environment variables (AWS_ACCESS_KEY_ID (or AWS_ACCESS_KEY) and AWS_SECRET_KEY (or AWS_SECRET_ACCESS_KEY))
2019-01-29 15:38:06.326: Loaded credentials from profile: default
2019-01-29 15:38:06.326: Starting server on port 8083 with account account-id, region us-east-1
```

### Docker
<a name="start-local-docker"></a>

Docker バージョンの Step Functions Local を使用している場合、次のコマンドを使用して Step Functions を起動します。

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

Docker バージョンの Step Functions のインストールについては、[Docker での Step Functions Local (ダウンロード可能バージョン) のセットアップ](sfn-local.md#sfn-local-docker) を参照してください。

**注記**  
または `.jar` ファイルから Step Functions を起動する場合は環境変数を設定することで、コマンドラインを通じて、エンドポイントを指定できます。Docker バージョンの場合は、エンドポイントと認証情報をテキストファイルに指定する必要があります。[Step Functions Local の設定オプションを指定する](sfn-local.md#sfn-local-config-options) を参照してください。

## ステップ 5: CLI AWS SAM ローカル関数を参照するステートマシンを作成する
<a name="create-local-statemachine"></a>

Step Functions Local が実行されたら、[ステップ 1: をセットアップする AWS SAM](#install-sam) で初期化した `HelloWorldFunction` を参照するステートマシンを作成します。

```
aws stepfunctions --endpoint http://localhost:8083 create-state-machine --definition "{\
  \"Comment\": \"A Hello World example of the Amazon States Language using an AWS Lambda Local function\",\
  \"StartAt\": \"HelloWorld\",\
  \"States\": {\
    \"HelloWorld\": {\
      \"Type\": \"Task\",\
      \"Resource\": \"arn:aws:lambda:region:account-id:function:HelloWorldFunction\",\
      \"End\": true\
    }\
  }\
}\" --name "HelloWorld" --role-arn "arn:aws:iam::012345678901:role/DummyRole"
```

これによりステートマシンが作成され、実行をスタートするために使用できる Amazon リソースネーム (ARN) が提供されます。

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

## ステップ 6: ローカルステートマシンの実行を開始する
<a name="run-local-statemachine"></a>

ステートマシンを作成したら、実行を開始します。次の **aws stepfunctions** コマンドを使用するときは、エンドポイントとステートマシンの ARN を参照する必要があります。

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

これにより、`HelloWorld` ステートマシンの `test` という実行が開始されます。

```
{
    "startDate": 1548810641.52, 
    "executionArn": "arn:aws:states:region:account-id:execution:HelloWorld:test"
}
```

Step Functions がローカルで実行されたので、 を使用して操作できます AWS CLI。例えば、この実行に関する情報を取得するには、以下のコマンドを使用します。

```
aws stepfunctions --endpoint http://localhost:8083 describe-execution --execution-arn arn:aws:states:region:account-id:execution:HelloWorld:test
```

実行のために `describe-execution` を呼び出すと、次のような出力により、完全な詳細が提供されます。

```
{
    "status": "SUCCEEDED", 
    "startDate": 1549056334.073, 
    "name": "test", 
    "executionArn": "arn:aws:states:region:account-id:execution:HelloWorld:test", 
    "stateMachineArn": "arn:aws:states:region:account-id:stateMachine:HelloWorld", 
    "stopDate": 1549056351.276, 
    "output": "{\"statusCode\": 200, \"body\": \"{\\\"message\\\": \\\"hello world\\\", \\\"location\\\": \\\"72.21.198.64\\\"}\"}", 
    "input": "{}"
}
```