

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

# Step Functions の使用を開始する方法について
<a name="getting-started"></a>

Step Functions サービスを使用すると、複雑なアプリケーションワークフローをオーケストレーションできます。まず、Workflow Studio を使用して、組み込みの **Hello World** ワークフローを作成して実行します。自動生成された [Amazon States Language](concepts-amazon-states-language.md) (ASL) 定義をコードで確認します。最後に、サービス統合をドラッグアンドドロップして、感情分析を行います。

このチュートリアルを完了すると、Workflow Studio で **[デザイン]** モードと **[コード]** モードの両方を使用して、ワークフローを作成、設定、実行、更新する方法を習得できます。

所要時間の目安: **20〜30 分**

## 構築する内容
<a name="what-you-will-build"></a>

最初のステートマシンは *Flow ステート*から始まります。Flow ステートは、ワークフローの指示と制御に使用します。ワークフローの実行方法を理解できたら、**アクション**を追加して、Amazon Comprehend サービスを **Task ステート**と統合します。

次の図では、完成したステートマシンの全体像を示しています。Hello World ステートマシンを初めて作成するときは、実行に追加のリソースは必要ありません。Step Functions コンソールで、すべてのステートと IAM ロールがワンクリックで作成されます。後でサービス統合を追加するときに、カスタムアクセス許可ポリシーを関連付けたロールを作成する必要があります。

![\[Hello World ワークフローのビジュアル表現。\]](http://docs.aws.amazon.com/ja_jp/step-functions/latest/dg/images/hello-world-arch.png)


## ステップ 1 – ステートマシンを作成する
<a name="step-1-create-your-state-machine"></a>

 Step Functions では、*ワークフロー*のことを**ステートマシン**と呼びます。ここでは両方の用語を同じ意味で使用します。ワークフローには、ステートマシンで**アクションを実行**したり**フローを制御**したりする*ステート*が含まれます。

1. **Step Functions コンソール**に移動します。

1. Step Functions コンソールで、左上のナビゲーションまたはパンくずリストから **[Step Functions]** を選択したら、**[開始方法]** を選択します。  
![\[Hello World ワークフローの開始方法を示すスクリーンショット\]](http://docs.aws.amazon.com/ja_jp/step-functions/latest/dg/images/get-started-hello-world.png)

1. オプションから **[Hello World を実行]** を選択します。  
![\[Hello World ワークフローの選択方法を示すスクリーンショット\]](http://docs.aws.amazon.com/ja_jp/step-functions/latest/dg/images/create-hello-world.png)

**ヒント**  
コンソール内の短いウォークスルーを一通り実行して、UI に慣れておくことをお勧めします。

### Workflow Studio の概要
<a name="overview-of-workflow-studio"></a>

 Step Functions の Workflow Studio を使用すると、ステートをキャンバスにドラッグアンドドロップしてワークフローを視覚的に構築できます。

 ステートの追加と編集、ステップの設定、結果の変換、エラー処理の設定が可能です。次のスクリーンショットは、ステートマシンを構築するために使用するインターフェイスの 4 つの重要な領域を示しています。

![\[Workflow Studio インターフェイスの 4 つの重要な領域のスクリーンショット\]](http://docs.aws.amazon.com/ja_jp/step-functions/latest/dg/images/wfs-panel-overview.png)


**モード** – Workflow Studio には 3 つのオペレーションモードがあり、デフォルトはビジュアルデザインモードです。
+ **デザイン** – ワークフローにステートをドラッグアンドドロップできる、ビジュアル編集モードです。
+ **コード** – Amazon States Language (ASL) コードの編集に特化したモードです。ASL コードを直接編集し、ビジュアルデザインに反映された変更を確認できます。
+ **設定** – ステートマシンの名前とタイプ (Standard または Express)、ワークフロー実行時に割り当てられるロール、ログ記録、トレース、バージョニング、暗号化、タグなどの設定オプションです。

 **ステートブラウザ**には、次の 3 つのタブがあります。
+ **アクション** - ワークフローにdrag-and-dropできる AWSAPIs のリスト。各アクションは Task ワークフローステートを表します。
+ **フロー** – ワークフローのステップの順序を制御する Flow ステートです。
+ **パターン** – Amazon S3 バケット内のデータを繰り返し処理するなど、すぐに使える再利用可能な構成要素です。

 **キャンバスとワークフローグラフ**は、ステートをドラッグアンドドロップしたり、ステートの順序を変更したり、構成・テストするステートを選択したりする場所です。

 **Inspector パネル**は、キャンバスで選択したステートのプロパティを表示・編集する場所です。*[定義]* トグルをオンにすると、現在選択されているステートのコードを表示できます。

### ステートマシンの概要
<a name="overview-of-the-state-machine"></a>

 Hello World ワークフローは、処理を実行せずに入力をそのまま出力に*渡す* **Pass ステート**から始まります。Pass ステートは、静的な JSON を出力したり、次のステートに渡す前に JSON 入力を変換したりするのに使用できます。Pass ステートは、ステートマシンの構築時やデバッグ時に便利です。

 次の **Choice ステート**は、`IsHelloWorldExample` のデータに基づいてワークフローの次のブランチを選択します。最初のルールに一致すると、ワークフローは **Wait ステート**で一時停止し、次に **Parallel ステート**で 2 つのタスクを実行したら、チェックポイントを経てワークフローの正常終了に進みます。一致しない場合、ワークフローはデフォルトで **Fail ステート**に進み、ステートマシンを停止します。

 Wait ステートは、次の処理までに遅延を挟みたいときに便利です。例えば、注文入力後にワークフローを 30 秒間待機させることで、顧客が配送先住所の誤りに気付き修正する時間を確保できます。

 Parallel ステートでは、データに対して複数のプロセスを同時に実行できます。例えば、注文伝票の印刷、在庫の更新、日次売上レポートの更新を同時に行うことができます。

![\[Hello World ワークフローの開始を示す画像\]](http://docs.aws.amazon.com/ja_jp/step-functions/latest/dg/images/workflow-1-hello-world.png)


### ワークフローコード (ASL) を表示する
<a name="view-the-code"></a>

 最初のステートマシンは実際には非常に詳細です。コードを確認してさらに理解を深めましょう。

 ステートマシンは、JSON ベースで宣言的に記述するオープンソース仕様である [Amazon States Language (ASL)](https://states-language.net/) を使用して定義されます。

**ステートマシン定義全体を表示するには **

1. **[\$1 \$1 コード]** ボタンを選択して、ASL コードを表示します。

1. 左側にコード、右側にステートマシングラフを表示して比較します。

1. キャンバスでステートをいくつか選択して確認します。例えば、**Choice ステート**を選択します。

![\[コードビューの画像\]](http://docs.aws.amazon.com/ja_jp/step-functions/latest/dg/images/hello-code-view.png)


 ステートの定義がコードビューで強調表示されているのがわかります。

**Inspector でコードを表示するには **

1. **[デザイン]** モードに戻ります。

1. 右側の **Inspector パネル**を展開します。

1. キャンバス上のワークフローグラフから **Choice ステート** を選択します。

1. **Inspector** パネルで、**[定義]** トグルを選択します。

 他のステートも選択してみます。選択した各ステートの ASL コードがスクロールされ、強調表示されるのがわかります。

### ステートマシンを (実際に) 作成する
<a name="actually-create-the-state-machine"></a>

**警告: 今すぐステートマシンに名前を付けてください。**  
ステートマシンは作成後に**名前を変更することはできません**。ステートマシンを保存する**前に**名前を選択してください。

 ここまでは、ステートマシンのドラフトで作業してきました。リソースはまだ作成されていません。

 **ステートマシンを名前変更して作成するには** 

1. **[設定モード]** を選択します。

1. ステートマシン名として、「`MyFirstStateMachine`」と入力します。

1. アクセス許可として、デフォルトの *[新規ロールの作成]* を受け入れます。

1. **[作成]** ボタンを選択して、ステートマシンを**実際に**作成します。

 ステートマシンと新しい IAM ロールが作成されたという通知が表示されます。

 ステートマシンを開始するオプションが自動的に表示されます。これは次のステップで行います。

![\[Hello World ワークフローの開始を示す画像\]](http://docs.aws.amazon.com/ja_jp/step-functions/latest/dg/images/workflow-created.png)


**ワークフローの作成が完了しました。**  
Step Functions によってワークフローと IAM ロールが作成されました。これで、ステートマシンを開始する準備ができました。

## ステップ 2 – ステートマシンを開始する
<a name="step-2-start-your-state-machine"></a>

 ステートマシンを作成したら、ワークフローの実行を開始できます。

 ワークフローでは、**入力**をオプションとして指定でき、ステート内で使用したり、統合サービスに送信したり、次のステートに渡したりできます。

**Hello World** ステートマシンは自己完結型であり、入力は必要ありません。

![\[開始手順を示す画像\]](http://docs.aws.amazon.com/ja_jp/step-functions/latest/dg/images/start_283486381.jpg)


 **ステートマシンを開始するには**

1. 実行の名前として「`hello001`」と入力します。

1. 入力フィールドは*空白*のままにします。

1. **[実行を開始]** ボタンを選択します。

![\[ワークフローの開始を示す画像。\]](http://docs.aws.amazon.com/ja_jp/step-functions/latest/dg/images/hello001.png)


### 実行の詳細を確認する
<a name="review-the-execution-details"></a>

 開始直後に、最初の 2 つのステートが**成功**したのがわかります。

 しばらくすると、残りのステート遷移が実行されて、ワークフローが完了します。

 **Choice ステート** (*Is Hello World Example?*) がどのようにして **Wait for X Seconds** ステートに分岐したか確認してみましょう。

1. ヒント: ステートマシンの最初のステップに、分岐の判断に必要なデータが含まれています。

1. **グラフビュー**では、実行中の進行状況を確認し、各ステートの詳細を確認できます。

1. 最初の **Pass ステート** (*Set Variables and State Output*) を選択し、**[入力/出力]** タブを確認します。

 **ステートの入力**は空白ですが、**ステートの出力**には、`IsHelloWorldExample` の値を `true` に設定する JSON が含まれているのがわかります。

![\[Execution 001\]](http://docs.aws.amazon.com/ja_jp/step-functions/latest/dg/images/hello001-graph-view.png)


 **グラフビュー**から**テーブルビュー**に切り替えて、名前、タイプ、ステータス別のステートのリストを表示します。

![\[Execution 001 のテーブルビュー\]](http://docs.aws.amazon.com/ja_jp/step-functions/latest/dg/images/hello001-table.png)


**ヒント**  
前のスクリーンショットの **[所要時間]** と **[タイムライン]** のフィールドに注目してください。どのステートに時間がかかっているかが一目でわかります。

 この実行の詳細ページには、さらに 2 つのビュー (**イベントビュー**と**ステートビュー**) があります。

 **イベントビュー**は、ステート間のフローを詳細に確認できるビューです。

 **[イベントビュー]** テーブル内の最初の **PassStateEntered** イベントと **PassStateExited** イベントを展開すると、ステートが入力を取らず、`CheckpointCount` という変数に 0 を割り当て、先ほどの出力を生成しているのがわかります。

![\[Execution 001 のイベントビュー\]](http://docs.aws.amazon.com/ja_jp/step-functions/latest/dg/images/hello001-event-view.png)


 最後に、**ステートビュー**があります。これは**テーブルビュー**に似ています。**[ステートビュー]** テーブルでは、各**ステート**を個別に展開して、その入力と出力だけを確認できます。

![\[Execution 001 のステートビュー\]](http://docs.aws.amazon.com/ja_jp/step-functions/latest/dg/images/hello001-state-view.png)


**お疲れ様でした。これで、初めての Step Functions ステートマシンを実行できました。**  
 Pass ステートを使用して**静的データ**をワークフローに追加するのは、特にトラブルシューティングでよく使用されるパターンです。  
 次のステップでは、ステートマシンの入力を*動的*に設定できるようにワークフローを更新します。

## ステップ 3 – 外部入力を処理する
<a name="step-3-process-external-input"></a>

 ワークフロー内で `IsHelloWorldExample` の値を定数値に設定するのは現実的ではありません。ステートマシンは、変化する入力データに応答することが想定されます。

 このステップでは、外部 JSON データをワークフローへの入力として使用する方法を示します。

![\[外部入力を処理する\]](http://docs.aws.amazon.com/ja_jp/step-functions/latest/dg/images/process-external-input.png)


### ハードコーディングされた入力を削除する
<a name="remove-the-hardcoded-input"></a>

 まず、最初の Pass ステートの**出力**にあるハードコーディングされた値を置き換えます。

1. ページ右上の **[ステートマシンの編集]** ボタンを選択して、Hello World ステートマシンを編集します。

1. **[Start]** の直後にある最初の **Pass ステート** (*Set Variables and State Output*) を選択したら、**[出力]** タブを開きます。

1. **出力**を次の JSON に置き換えます。

   ```
   {
     "IsHelloWorldExample": "{% $states.input.hello_world %}",
     "ExecutionWaitTimeInSeconds":  "{% $states.input.wait %}"
   }
   ```

1. ステートマシンを保存します。

 更新されたステートの出力は、JSONata 式を使用して、予約済みの **[\$1states](transforming-data.md#transforming-reserved-variable-states)** 変数から入力データをプルします。これらの値は出力として次のステートに渡され、そのまま次のステートの入力になります。

### 入力データを使用して更新されたワークフローを実行する
<a name="run-the-updated-workflow-with-input-data"></a>

 次に、ワークフローを実行し、外部入力データを JSON として指定します。

1. **[実行]** ボタンを選択してワークフローを実行します。

1. **[名前]** には、ランダムに生成された ID を使用します。

1. 入力フィールドには、次の JSON を使用します。

   ```
   {
       "wait" : 20,
       "hello_world": true
   }
   ```

1. **[実行を開始]** ボタンを選択します。

 ステートマシンの実行ははるかに長く (20 秒間) 待機しますが、最終的に指定した入力を使用して成功します。

 グラフビューで、最初の Pass ステートの **[入力/出力]** を確認します。指定した入力がどのように出力に変換されたかに注目してください。また、実行の詳細ページの上部にある **[実行の入力と出力]** も確認します。どちらの場所にも、実行の開始に使用した入力が表示されます。

**ヒント**  
*hello\$1world* を **false** に設定して新しい実行を開始したら、どうなるでしょう。試してみましょう \$1

### ワークフロー実行を確認する
<a name="review-workflow-executions"></a>

 ワークフローを複数回実行したので、それぞれの実行の詳細を確認してみましょう。

 **実行の詳細を確認するには**

1. ナビゲーションパンくずリストまたは左側のメニューから **[ステートマシン]** を選択します。

1. ステートマシンを選択します。

 **[実行]** タブに、次のスクリーンショットのような実行のリストが表示されます。

![\[Hello ワークフロー実行のサンプルリストを示すスクリーンショット。\]](http://docs.aws.amazon.com/ja_jp/step-functions/latest/dg/images/hello-executions.png)


 最後に一点: ワークフロー実行の名前は一意である必要があり、再利用することは**できません**。このチュートリアルでは短い名前 (`hello001`) を提案しましたが、本番ワークロードでは常に一意になるような命名規則を使用することをお勧めします。

**ヒント**  
 **おめでとうございます。**ワークフローを更新して、実行ごとに変化する*外部入力*を処理できるようになりました。

## ステップ 4 – サービスを統合する
<a name="step-4-integrate-a-service"></a>

 Step Functions ステートマシンは、[AWSSDK integrations](https://docs.aws.amazon.com/step-functions/latest/dg/supported-services-awssdk.html) を使用して 220 を超えるAWSサービスを呼び出すことができます。 AWSサービスは、ステートマシンに 10,000 を超える潜在的な API アクションを提供します。

 このステップでは、**感情分析**用に Amazon Comprehend タスクを統合して、ステートマシンの入力を処理します。

 サービス統合では、3 つの*サービス統合パターン*のいずれかを使用します。

1. **リクエストレスポンス** (デフォルト) – HTTP レスポンスを待ってから、*直ちに*次のステートに進みます。

1. **ジョブを実行** (*.sync*) – ジョブの完了を待ってから、次のステップに進みます。

1. **コールバックを待機** (*.waitForTaskToken*) – 外部プロセスからタスクトークンが返されるまで、ワークフローを一時停止します。

![\[サービス統合を示すスクリーンショット。\]](http://docs.aws.amazon.com/ja_jp/step-functions/latest/dg/images/AdobeStock_513621530_integration_1000.jpg)


 最初の統合では、**リクエストレスポンス** (デフォルト) 統合パターンを使用します。

### 統合の仕組み
<a name="how-do-integrations-work"></a>

 *Task ステート*は、ステートマシンが実行する 1 単位の処理を表します。ステートマシンのすべての作業は、タスクにより処理されます。

 タスクは通常、入力を他のサービスの API アクションに渡して、それぞれの処理を実行させます。タスクの実行方法は、`Credentials`、`Retry`、`Catch`、`TimeoutSeconds` など複数のフィールドで指定できます。「[Task ワークフロー状態](state-task.md)」で、タスクの詳細を確認できます。

 AWSSDK 統合を使用するには、呼び出す**サービス名**と **API** を指定します。一部の統合にはパラメータも必要です。

 Amazon States Language を使用して、タスク状態の**リソース**フィールドに AWSAPI アクションを指定できます。オプションで、サービス名にサービス統合タイプを追加することもできます。

 API アクションを指定するには、次のリソース名テンプレートを使用します。

```
arn:aws:states:::aws-sdk:serviceName:apiAction.[serviceIntegrationPattern]
```

**パラメータ名の大文字と小文字の区別**  
API アクションは *camelCase* (先頭が小文字) になりますが、*ParameterNames* は Pascal case (先頭が大文字) になることに注意してください。

 **リソース名の例**
+ `arn:aws:states:::aws-sdk:ec2:describeInstances` は Amazon EC2 describeInstances API の呼び出し結果を返します。
+ `arn:aws:states:::aws-sdk:s3:listBuckets` は Amazon S3 listBuckets API の呼び出し結果を返します。
+ `arn:aws:states:::aws-sdk:sfn:startExecution` はネストされた Step Functions ステートマシンの実行を開始し、そのワークフローの結果を返します。

 Step Functions が `Task` ステートを使用して別のサービスを呼び出す場合、デフォルトのパターンは[リクエストレスポンス](https://docs.aws.amazon.com/step-functions/latest/dg/connect-to-resource.html#connect-default)です。**リクエストレスポンス**統合パターンでは、Step Functions はサービスを呼び出し、レスポンスを受け取ると、***直ちに***次のステートに進みます。

![\[感情分析の統合\]](http://docs.aws.amazon.com/ja_jp/step-functions/latest/dg/images/integrate_sentiment_592194331.png)


### ステップ 4.1 – 感情分析ステートを追加する
<a name="step-1-add-sentiment-analysis-state"></a>

1. **MyFirstStateMachine** ステートマシンを**編集**します。

1. **ステートブラウザ**の **[アクション]** パネルから `DetectSentiment` を検索します。

1. **Comprehend DetectSentiment** を **Choice ステート**の**デフォルト**ブランチにドラッグアンドドロップします。

1. **Fail** ステートを選択して削除します。

1. **ステートブラウザ**の **[フロー]** タブから、**DetectSentiment** の後に **Success** ステートをドラッグします。

### ステップ 4.2 – Sentiment Analysis ステートを設定する
<a name="step-2-configure-the-sentiment-analysis-state"></a>

1. **Comprehend** ステップを選択して、Inspector パネルで設定します。

1. **[Arguments と Output]** タブを選択し、**Arguments** を次の JSON に置き換えます。

   ```
   {
      "LanguageCode": "en",
      "Text": "{% %}"
   }
   ```

1. パーセント記号の**間** `{% %}` にカーソルを置き、「`$`」と入力します。

1. エディタの**オートコンプリート**を使用して、`states` を選択します。

    次に「`.`」と入力し、[`context`] を選択します。

    次に「`.`」と入力し、[`Execution`] を選択します。

    次に「`.`」と入力し、[`Input`] を選択します。

    最後に「`.feedback_comment`」と入力し、**Context オブジェクト**から初期入力を取得します。

 これらのオートコンプリートオプションを選択すると、ステートの **Arguments** は次のような JSON になります。

```
{
    "LanguageCode": "en",
    "Text": "{% $states.context.Execution.Input.feedback_comment %}"
}
```

**エディタのオートコンプリートの使用**  
エディタのオートコンプリートを使用すると、オプションを調べることができます。  
オートコンプリートでは、変数、Context オブジェクトを含む予約済みの **[\$1states](transforming-data.md#transforming-reserved-variable-states)** 変数、使用可能な関数とその定義が一覧表示されます。

### ステップ 4.3 – アイデンティティポリシーを設定する
<a name="step-3-configure-an-identity-policy"></a>

 ワークフローを実行する前に、ステートマシンから外部サービスへの API コールを許可するための**ロール**と**ポリシー**を作成する必要があります。

 **Step Functions 用の IAM ロールを作成するには** 

1. 新しいタブで IAM コンソールに移動し、**[ロール]** を選択します。

1. [**Create a new role (新規ロールの作成)**] を選択します。

1. **[信頼されたエンティティタイプ]** で、*[AWS サービス]* を選択します。

1. **[ユースケース]** で *[Step Functions]* を選択します。

1. **[アクセス許可の追加]** で **[次へ]** を選択し、デフォルトのポリシーを受け入れます。ロールの作成後に Comprehend に関するポリシーを追加します。

1. **[名前]** に「*HelloWorldWorkflowRole*」と入力します。

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

 **Amazon Comprehend に関するポリシーを **HelloWorldWorkflowRole** に追加するには** 

1. **HelloWorldWorkflowRole** ロールを選択して編集します。

1. **[アクセス許可の追加]** を選択してから、**[インラインポリシーの作成]** を選択します。

1. サービスとして **[Comprehend]** を選択します。

1. **[読み取り]** で **[DetectSentiment]** を選択してから、**[次へ]** を選択します。

1. **[ポリシー名]** に「*DetectSentimentPolicy*」と入力し、**[ポリシーを作成]** を選択します。

ポリシーを確認すると、すべてのリソースで**アクション** `"comprehend:DetectSentiment"` の実行が許可されているのがわかります。

 **IAM ロールを Step Functions ステートマシンにアタッチするには** 

1. ステートマシンの編集に戻り、**[設定]** タブを選択します。

1. **[実行ロール]** ドロップダウンから *[HelloWorldWorkflowRole]* を選択します。

1. ステートマシンを保存します。

### ステップ 4.4 – ステートマシンを実行する
<a name="step-4-run-your-state-machine"></a>

 次の JSON を入力として、ステートマシンの実行を開始します。

```
{
    "hello_world": false,
    "wait": 42,
    "feedback_comment" : "This getting started with Step Functions workshop is a challenge!"
}
```

#### アクセス許可エラーのトラブルシューティング...
<a name="policy-section"></a>

 正しいポリシーがない場合、次のような**アクセス許可エラー**が表示されます。

```
User: arn:aws:sts::account-id:assumed-role/StepFunctions-MyStateMachine-role is not authorized
to perform: comprehend:DetectSentiment because no identity-based policy allows the comprehend:DetectSentiment
action (Service: Comprehend, Status Code: 400, Request ID: a1b2c3d4-5678-90ab-cdef-EXAMPLE11111)
```

 前のエラーメッセージは、ステートマシンが外部サービスの使用を認可されていないことを示しています。1 つ前のステップに戻り、アイデンティティポリシーが設定されていることを確認します。

 **復習**

 より複雑なワークフローに進む前に、これまで理解したことを次のタスクで復習しましょう。
+  **DetectSentiment** ステップを確認します。さまざまなビューで入力/出力を確認し、感情分析の結果を表示します。
+ テーブルビューで DetectSentiment ステートの [**所要時間**] を見つけます。
+ **[JSON 入力]** のコメントを変更し、ステートマシンを再実行します。

感情分析結果の詳細については、「[Amazon Comprehend – 感情](https://docs.aws.amazon.com/comprehend/latest/dg/how-sentiment.html)」を参照してください。

 リクエストレスポンス統合では、レスポンスがリクエストの*受信確認*を示すだけと考えることができます。ただし、感情分析など一部の統合では、その受信確認がタスクの*完了*を表します。

 重要なのは、`Task` ステートがリクエストレスポンス統合で基盤となるジョブを**待機しない**という点です。レスポンスを待機するには、*[ジョブを実行 (.sync)]* サービス統合パターンを調べる必要があります。

**お疲れ様でした。**  
 最初のステートマシンを作成し、**リクエストレスポンス**パターンを使用して感情分析タスクを統合しました。

**フィードバックをお待ちしております。**  
この入門チュートリアルの役立った点や改善すべき点がございましたら、このページのフィードバックオプションを使用してお知らせください。

## リソースをクリーンアップする
<a name="clean-up-resources"></a>

 以下の手順に従って、作成したリソースをクリーンアップします。

1. AWSコンソールの [Step Functions](https://console.aws.amazon.com/states/home) ページに移動します。

1. 左側のナビゲーションペインから **[ステートマシン]** を選択します。

1. **MyFirstStateMachine** を選択します。

1. IAM ロールを削除するには

   1 – **IAM ロール**のリンクをたどり、新しいタブで IAM ロールのページに移動します。関連するカスタムロールを削除します。

   2 – IAM ロールで、*MyFirstStateMachine* を含む自動生成されたロールを検索します。自動生成されたロールを削除します。

1. Step Functions コンソールのタブに戻り、**[アクション]** ドロップダウンを選択してから、**[削除]** を選択してステートマシンを削除します。

これで、ステートマシンと関連ロールが正常に削除されました。