

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

# を使用して Step Functions ステートマシンを作成する AWS SAM
<a name="tutorial-state-machine-using-sam"></a>

このガイドでは、 AWS Step Functions ステートマシンを含むサンプル AWS SAM アプリケーションをダウンロード、構築、デプロイします。このアプリケーションは、事前定義されたスケジュールで実行されるモック株式取引ワークフローを作成します (スケジュールは手数料の発生を避けるためにデフォルトで無効になっています)。

以下の図は、このアプリケーションのコンポーネントを示しています。

![\[このチュートリアルのワークフローを示す図。\]](http://docs.aws.amazon.com/ja_jp/step-functions/latest/dg/images/sam-starter-template-docs.png)


以下は、サンプルアプリケーションを作成するために実行するコマンドのプレビューです。各コマンドの詳細については、このページの後半のセクションを参照してください。

```
# Step 1 - Download a sample application. For this tutorial you
#   will follow the prompts to select an AWS Quick Start Template
#   called 'Multi-step workflow'
sam init

# Step 2 - Build your application
cd project-directory
sam build

# Step 3 - Deploy your application
sam deploy --guided
```

## 前提条件
<a name="tutorial-state-machine-using-sam-prerequisites"></a>

このガイドでは、OS [AWS SAM 用の CLI のインストール](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-cli-install.html)の手順を完了していることを前提としています。また、以下を完了していることを前提としています。

1.  AWS アカウントを作成しました。

1. IAM 許可を設定する

1. Homebrew のインストール。注: Homebrew は、Linux と macOS の唯一の前提条件です。

1. CLI AWS SAM をインストールしました。注: バージョン 0.52.0 以降を使用していることを確認してください。コマンド `sam --version` を実行すると、使用しているバージョンをチェックできます。

## ステップ 1: サンプル AWS SAM アプリケーションをダウンロードする
<a name="tutorial-state-machine-using-sam-initialize"></a>

**実行するコマンド:**

```
sam init
```

画面の指示に従って、次の項目を選択します。

1. **テンプレート:** AWS クイックスタートテンプレート

1. **[Language:]** (言語:) Python、Ruby、NodeJS、Go、Java、または .NET

1. **[Project name:]** (プロジェクト名:) (任意の名前 - デフォルトは `sam-app`)

1. **クイックスタートアプリケーション:** マルチステップワークフロー

**実行 AWS SAM 内容:**

このコマンドにより、プロジェクト名プロンプトとして指定した名前のディレクトリが作成されます (デフォルトは `sam-app`)。ディレクトリの特定の内容は、選択した言語によって異なります。

Python ランタイムの 1 つを選択したときのディレクトリの内容は次のとおりです。

```
├── README.md
├── functions
│   ├── __init__.py
│   ├── stock_buyer
│   │   ├── __init__.py
│   │   ├── app.py
│   │   └── requirements.txt
│   ├── stock_checker
│   │   ├── __init__.py
│   │   ├── app.py
│   │   └── requirements.txt
│   └── stock_seller
│       ├── __init__.py
│       ├── app.py
│       └── requirements.txt
├── statemachine
│   └── stock_trader.asl.json
├── template.yaml
└── tests
    └── unit
        ├── __init__.py
        ├── test_buyer.py
        ├── test_checker.py
        └── test_seller.py
```

表示できる 2 つの特に興味深いファイルがあります:
+ `template.yaml`: アプリケーションの AWS リソースを定義する AWS SAM テンプレートが含まれます。
+ `statemachine/stockTrader.asl.json`: アプリケーションのステートマシン定義が含まれます。この定義は、[Amazon States Language を使用して Step Functions ワークフローを定義する](concepts-amazon-states-language.md) で記述されています。

`template.yaml` ファイル内に次のエントリが表示されます。このエントリは、ステートマシン定義ファイルを指しています。



```
    Properties:
      DefinitionUri: statemachine/stock_trader.asl.json
```

ステートマシン定義を AWS SAM テンプレートに埋め込むのではなく、別のファイルとして保持すると便利です。例えば、ステートマシン定義の変更を追跡する場合は、定義をテンプレートに含めない方が簡単です。Workflow Studio を使用してステートマシン定義の作成と管理を行い、その定義をテンプレートにマージせずにコンソールから Amazon States Language 仕様ファイルに直接エクスポートできます。

サンプルアプリケーションの詳細については、プロジェクトディレクトリの `README.md` ファイルを参照してください。

## ステップ 2: アプリケーションを構築する
<a name="tutorial-state-machine-using-sam-build"></a>

**実行するコマンド:**

まず、プロジェクトディレクトリ (サンプルアプリケーションの `template.yaml` ファイルが置かれているディレクトリ。デフォルトは `sam-app` です) に変更してから、次のコマンドを実行します。

```
sam build
```

**出力例:**

```
  
 Build Succeeded

 Built Artifacts  : .aws-sam/build
 Built Template   : .aws-sam/build/template.yaml

 Commands you can use next
 =========================
 [*] Invoke Function: sam local invoke
 [*] Deploy: sam deploy --guided
```

**実行 AWS SAM 内容:**

 AWS SAM CLI には、依存関係を構築するための多数の Lambda ランタイムの抽象化が付属しており、すべてのビルドアーティファクトをステージングフォルダにコピーして、すべてをパッケージ化してデプロイする準備が整います。`sam build` コマンドは、アプリケーションが持つすべての依存関係を構築し、`.aws-sam/build` のフォルダにビルドアーティファクトをコピーします。

## ステップ 3: アプリケーションを AWS クラウドにデプロイする
<a name="tutorial-state-machine-using-sam-deploy"></a>

**実行するコマンド:**

```
sam deploy --guided
```

画面に表示されるプロンプトに従ってください。`Enter` で応答するだけで、インタラクティブな形式で提供されるデフォルトのオプションを受け入れることができます。

**実行 AWS SAM 内容:**

このコマンドは、アプリケーションを AWS クラウドにデプロイします。`sam build` コマンドを使用して構築したデプロイアーティファクトを取得し、パッケージ化して AWS SAM CLI によって作成された Amazon S3 バケットにアップロードし、 を使用してアプリケーションをデプロイします CloudFormation。デプロイコマンドの出力では、 CloudFormation スタックに加えられた変更を確認できます。

Step Functions ステートマシンの例が、次のこれらのステップに従って、正常にデプロイされたことを確認できます。

1. にサインイン AWS マネジメントコンソール し、[https://console.aws.amazon.com/states/](https://console.aws.amazon.com/states/) で Step Functions コンソールを開きます。

1. 左側のナビゲーションで、**[State machines]** (ステートマシン) を選択します。

1. リストから新しいステートマシンを見つけて選択します。これは、StockTradingStateMachine-*<unique-hash>* という名前になります。

1. **[Definition]** (定義) タブを選択します。

これで、ステートマシンのビジュアル表現が表示されます。ビジュアル表現が、プロジェクトディレクトリの `statemachine/stockTrader.asl.json` ファイルにあるステートマシン定義と一致していることを確認できます。

## トラブルシューティング
<a name="tutorial-state-machine-using-sam-troubleshooting"></a>

### SAM CLI エラー: "no such option: --guided"
<a name="tutorial-state-machine-using-sam-troubleshooting-guided"></a>

`sam deploy` の実行時に、以下のエラーが表示されます。

```
 
Error: no such option: --guided
```

つまり、 `--guided`パラメータをサポートしていない古いバージョンの AWS SAM CLI を使用しているということです。これを修正するには、CLI AWS SAM のバージョンを 0.33.0 以降に更新するか、 `sam deploy` コマンドから `--guided`パラメータを省略します。

### SAM CLI エラー: 「管理対象リソースを作成できませんでした: 認証情報を見つけることができません」
<a name="tutorial-state-machine-using-sam-troubleshooting-credentials"></a>

`sam deploy` の実行時に、以下のエラーが表示されます。

```
 
Error: Failed to create managed resources: Unable to locate credentials
```

つまり、CLI AWS SAM が AWS サービスコールを実行できるように AWS 認証情報を設定していないということです。これを修正するには、 AWS 認証情報を設定する必要があります。詳細については、[AWS 「 デベロッパーガイド」の「認証情報のセットアップ](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-getting-started-set-up-credentials.html)」を参照してください。 *AWS Serverless Application Model *

## クリーンアップ
<a name="tutorial-state-machine-using-sam-cleanup"></a>

このチュートリアルを実行して作成した AWS リソースが不要になった場合は、デプロイした CloudFormation スタックを削除することでリソースを削除できます。

を使用してこのチュートリアルで作成した CloudFormation スタックを削除するには AWS マネジメントコンソール、次の手順に従います。

1. にサインイン AWS マネジメントコンソール し、[https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/) で CloudFormation コンソールを開きます。

1. 左のナビゲーションペインで **[Stacks]** (スタック) をクリックします。

1. スタックのリストで、**[sam-app]** (または作成したスタックの名前) を選択します。

1. **[Delete]** (削除) を選択します。

完了すると、スタックのステータスが **DELETE\$1COMPLETE** に変わります。

または、次の AWS CLI コマンドを実行して CloudFormation スタックを削除することもできます。

```
aws cloudformation delete-stack --stack-name sam-app --region region
```

### 削除されたスタックを確認する
<a name="tutorial-state-machine-using-sam-cleanup-verify"></a>

 CloudFormation スタックを削除するどちらの方法でも、[https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/) に移動し、左側のナビゲーションペインで**スタック**を選択し、検索テキストボックスの右側にあるドロップダウンで**削除**を選択します。削除されたスタックのリストに、スタック名 **[sam-app]** (または作成したスタックの名前) が表示されます。