

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

# API Gateway を使用した Step Functions API の作成
<a name="tutorial-api-gateway"></a>

Amazon API Gateway を使用して、AWS Step FunctionsAPIsを API Gateway API のメソッドに関連付けることができます。HTTPS リクエストが API メソッドに送信されると、API Gateway は Step Functions API アクションを呼び出します。

このチュートリアルでは、1 つのリソースと `POST` メソッドを使用して `[StartExecution](https://docs.aws.amazon.com/step-functions/latest/apireference/API_StartExecution.html)` API アクションとやり取りする API を作成する方法を示します。AWS Identity and Access Management(IAM) コンソールを使用して、API Gateway のロールを作成します。次に、API Gateway コンソールを使用して API Gateway API を作成し、リソースとメソッドを作成して、メソッドを `StartExecution` API アクションにマッピングします。最後に、API をデプロイしてテストします。

**注記**  
`StartExecution` を呼び出して Amazon API Gateway は Step Functions 実行をスタートできますが、結果を取得するには `[DescribeExecution](https://docs.aws.amazon.com/step-functions/latest/apireference/API_DescribeExecution.html)` を呼び出す必要があります。

## ステップ 1: API Gateway 用にIAM ロールを作成する
<a name="api-gateway-step-1"></a>

API Gateway API を作成する前に、API Gateway 許可を与えて Step Functions API アクションを呼び出す必要があります。<a name="api-gateway-procedure-create-iam-role"></a>

**API Gateway の許可を設定するには**

1. [IAM コンソール](https://console.aws.amazon.com/iam/home)にサインインして、**[Roles]** (ロール)、**[Create role]** (ロールの作成) の順に選択します。

1. **[信頼されたエンティティを選択]** ページで、以下の操作を実行してください。

   1. **[信頼できるエンティティタイプ]** は、デフォルトの **AWS のサービス** の選択のままにします。

   1. **[ユースケース]** には、ドロップダウンリストから、**[API Gateway]** を選択します。

1. **[API Gateway]** を選択し、**[次へ]** をクリックします。

1. **[アクセス許可を追加]** ページで **[次へ]** を選択してください。

1. (オプション) **[名前、確認、および作成]** ページで、ロール名などの詳細を入力します。たとえば、**APIGatewayToStepFunctions** と入力します。

1. [**ロールの作成**] を選択してください。

   ロールのリストで、IAM ロールが表示されます。

1. 次の例に示すように、お客様のロールの名前を選択し、**[Role ARN]** (ロール ARN) をメモします。

   ```
   arn:aws:iam::123456789012:role/APIGatewayToStepFunctions
   ```<a name="api-gateway-attach-policy-to-role"></a>

**IAM ロールにポリシーをアタッチするには**

1. **[Roles]** (ロール) ページで、ロール (`APIGatewayToStepFunctions`) を検索して選択します。

1. **[アクセス許可]** タブで、**[アクセス許可の追加]** を選択してから、**[ポリシーのアタッチ]** を選択します。

1. **[ポリシーのアタッチ]** ページで `AWSStepFunctionsFullAccess` を検索し、ポリシーを選択して、次に **[アクセス許可の追加]** を選択します。

## ステップ 2: API Gateway で API を作成する
<a name="api-gateway-step-2"></a>

IAM ロールを作成した後、カスタムの API Gateway API を作成できます。

**API を作成するには**

1. [Amazon API Gateway コンソール](https://console.aws.amazon.com/apigateway/)を開き、**[API を作成]** を選択します。

1. **[API タイプを選択]** ページの **[REST API]** ペインで、**[ビルド]** を選択します。

1. **[REST API を作成]** ページで **[新規 API]** を選択して、**[API 名]** に ***[StartExecutionAPI]*** と入力します。

1. **[API エンドポイントタイプ]** は **[リージョン]** のままにし、**[API の作成]** を選択します。<a name="api-gateway-create-resource"></a>

**リソースを作成する方法**

1. ***[StartExecutionAPI]*** の **[リソース]** ページで、**[リソースの作成]** を選択します。

1. **[リソースの作成]** ページで、**[リソース名]** に **execution** と入力し、**[リソースを作成]** を選択します。<a name="api-gateway-create-method"></a>

**POST メソッドを作成するには**

1. **[/execution]** リソースを選択し、**[メソッドを作成]** を選択します。

1. **[メソッドタイプ]** で、`POST` を選択します。

1. **[統合タイプ]** で､**[AWS のサービス]** を選択します｡

1. **AWS リージョン** については、リストからリージョンを選択します。

1. **AWS のサービス** の場合、リストから **[Step Functions]** を選択します。

1. **[AWS サブドメイン]** は空白のままにします。

1. **[HTTP メソッド]** でリストから **[POST]** を選択します。
**注記**  
すべての Step Functions API アクションは HTTP `POST` メソッドを使用します。

1. **[アクションタイプ]** で、**[アクション名を使用]** を選択します。

1. **[アクション名]** に「**StartExecution**」と入力します。

1. 次の例に示すように、**[実行ロール]** の場合は、[前に作成した IAM ロールのロール ARN](#api-gateway-procedure-create-iam-role) を入力します。

   ```
   arn:aws:iam::123456789012:role/APIGatewayToStepFunctions
   ```

1. **[認証情報キャッシュ]** と **[デフォルトタイムアウト]** はデフォルトのままにし、**[保存]** を選択します。

API ゲートウェイおよび Step Functions 間の視覚的なマッピングは **[/execution - POST - メソッドの実行]** ページに表示されます。

## ステップ 3: API Gateway API のテストとデプロイ
<a name="api-gateway-step-3"></a>

API を作成したら、テストしてデプロイします。<a name="api-gateway-test-api"></a>

**API Gateway と Step Functions 間の通信をテストするには**

1. **[/execution - POST - メソッドの実行]** ページで、**[テスト]** を選択します。タブを表示するには、右矢印ボタンを選択する必要がある場合があります。

1. **[/execution - POST - メソッドのテスト]** タブで、次のリクエストパラメータを、既存のステートマシン (または [Lambda 関数を使用する新しいステートマシンを作成](tutorial-creating-lambda-state-machine.md)) の ARN を使用して **[リクエスト本文]** セクションにコピーし、**[テスト]** を選択します。

   ```
   {
      "input": "{}",
      "name": "MyExecution",
      "stateMachineArn": "arn:aws:states:region:123456789012:stateMachine:HelloWorld"
   }
   ```

   詳細については、*[AWS Step Functions API Reference]* (API リファレンス) の`StartExecution`[リクエストの構文](https://docs.aws.amazon.com/step-functions/latest/apireference/API_StartExecution.html#API_StartExecution_RequestSyntax)を参照してください。
**注記**  
ステートマシンの ARN を API Gateway 呼び出しの本文に含めない場合は、次の例に示すように、**[統合リクエスト]** タブでマッピングテンプレートを設定できます。  

   ```
   {
       "input": "$util.escapeJavaScript($input.json('$'))",
       "stateMachineArn": "$util.escapeJavaScript($stageVariables.arn)"
   }
   ```
このアプローチにより、開発ステージ (例えば、`dev`、`test`、`prod`) に基づいて異なるステートマシンの ARN を指定できます。マッピングテンプレートのステージ変数指定の詳細については、「*API Gateway デベロッパーガイド*」の「[https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-mapping-template-reference.html#stagevariables-template-reference](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-mapping-template-reference.html#stagevariables-template-reference)」を参照してください。

1. 実行がスタートされ、実行 ARN とそのエポック日が **[レスポンス本文]** の下に表示されます。

   ```
   {
      "executionArn": "arn:aws:states:region:123456789012:execution:HelloWorld:MyExecution",
      "startDate": 1486768956.878
   }
   ```
**注記**  
[AWS Step Functions コンソール](https://console.aws.amazon.com/states/)でステートマシンを選択することで、実行を確認できます。

**API をデプロイするには**

1. ***[StartExecutionAPI]*** の **[リソース]** ページで、**[API のデプロイ]** の順に選択します。

1. **[ステージ]** で **[新規ステージ]** を選択します。

1. [**Stage name (ステージ名)**] に **alpha** と入力します。

1. (オプション) **[説明]** に説明を入力します。

1. **[デプロイ]** をクリックします。

**デプロイをテストするには**

1. ***[StartExecutionAPI]*** の **[ステージ]** ページで、**[alpha]**、**[/]**、**[/execution]**、**[POST]** を展開し、**[POST]** メソッドを選択します。

1. **[メソッドの上書き]** で、コピーアイコンを選択して API の呼び出し URL をコピーします。完全な URL は、次の例のようになります。

   ```
   https://a1b2c3d4e5.execute-api.region.amazonaws.com/alpha/execution
   ```

1. コマンドラインから、ステートマシンの ARN を使用して `curl` コマンドを実行し、次の例に示すようにデプロイの URL を呼び出します。

   ```
   curl -X POST -d '{"input": "{}","name": "MyExecution","stateMachineArn": "arn:aws:states:region:123456789012:stateMachine:HelloWorld"}' https://a1b2c3d4e5.execute-api.region.amazonaws.com/alpha/execution
   ```

   次の例に示すように、実行 ARN とそのエポック日付が返されます。

   ```
   {"executionArn":"arn:aws:states:region:123456789012:execution:HelloWorld:MyExecution","startDate":1.486772644911E9}
   ```
**注記**  
「認証トークンが見つかりません」というエラーが表示された場合は、呼び出し URL が **/execution** で終わっていることを確認してください。