3分でできるAWS Stepfunction構築(超簡易var)

## 概要
注文の受付から処理までの簡単なワークフローをAWS Step Functionsで作成します。実際にコードをコピーして簡単に手を動かしてこんな感じなんだ！というイメージを掴んでもらえるようにしました。中身は非常に薄いですし、この記事の内容は実務レベルではありません。

## 構築内容
Lambdaを使った注文の受付から処理までのワークフロー

## 前提条件
- AWSアカウントを持っていること
- AWSマネジメントコンソールにアクセスできること

## 対象者
- 初めてStepfunctionを触る人

## ワークフローの流れ

1. 注文受付
2. 在庫確認
   - 在庫あり → 支払い処理へ
   - 在庫なし → 注文キャンセルへ
3. 支払い処理
   - 成功 → 注文完了へ
   - 失敗 → 注文キャンセルへ
4. 注文完了 or 注文キャンセル
## 手順
### Step1. Lambda関数の作成

AWSマネジメントコンソールから
起動経路 :「Lambda」>「関数の作成」>「一から作成」を選択し、以下の設定で3つの関数を作成
#### a. 在庫確認関数（check_inventory）
- 関数名: check_inventory
- ランタイム: Python 3.12
- 「関数の作成」をクリック
```python
def lambda_handler(event, context):
    # 在庫をランダムに確認する簡単なロジック
    import random
    has_stock = random.choice([True, False])
    return {"hasStock": has_stock}
```

#### b. 支払い処理関数（process_payment）
- 関数名: process_payment
- ランタイム: Python 3.12
- 「関数の作成」をクリック

```python
def lambda_handler(event, context):
    # 支払いをランダムに処理する簡単なロジック
    import random
    payment_successful = random.choice([True, False])
    return {"paymentSuccessful": payment_successful}
```

#### c. 注文完了関数（complete_order）
- 関数名: complete_order
- ランタイム: Python 3.12
- 「関数の作成」をクリック

```python
def lambda_handler(event, context):
    return {"message": "注文が完了しました。"}
```

### Step2. ステートマシンの作成
1. AWS Step Functions コンソールを開く
2. 「ステートマシンの作成」をクリック
3. 「コードでワークフローを記述する」を選択
4. 以下のJSONコードの作成
コードを貼り付けたら、以下の点に注意してください
   - regionを自分のリージョン（例：ap-northeast-1）に置き換えます
   - account-idを自分のAWSアカウントIDに置き換えます。
```json
{
  "Comment": "シンプルな注文処理システム",
  "StartAt": "在庫確認",
  "States": {
    "在庫確認": {
      "Type": "Task",
      "Resource": "arn:aws:lambda:region:account-id:function:check_inventory",
      "Next": "在庫チェック"
    },
    "在庫チェック": {
      "Type": "Choice",
      "Choices": [
        {
          "Variable": "$.hasStock",
          "BooleanEquals": true,
          "Next": "支払い処理"
        },
        {
          "Variable": "$.hasStock",
          "BooleanEquals": false,
          "Next": "注文キャンセル"
        }
      ]
    },
    "支払い処理": {
      "Type": "Task",
      "Resource": "arn:aws:lambda:region:account-id:function:process_payment",
      "Next": "支払いチェック"
    },
    "支払いチェック": {
      "Type": "Choice",
      "Choices": [
        {
          "Variable": "$.paymentSuccessful",
          "BooleanEquals": true,
          "Next": "注文完了"
        },
        {
          "Variable": "$.paymentSuccessful",
          "BooleanEquals": false,
          "Next": "注文キャンセル"
        }
      ]
    },
    "注文完了": {
      "Type": "Task",
      "Resource": "arn:aws:lambda:region:account-id:function:complete_order",
      "End": true
    },
    "注文キャンセル": {
      "Type": "Fail",
      "Cause": "注文がキャンセルされました。"
    }
  }
}
```
入力後の画像
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3812002/cd3e0168-636e-333c-bf70-1a151ebc3f65.png)
5. 「次へ」をクリック
6. ステートマシンの名前を入力（例：SimpleOrderWorkflow）
7. 実行ロールで「新しいロールを作成」を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3812002/a01c7f79-73ee-8075-2e7d-ce953ca508e9.png)
8. 「ステートマシンの作成」をクリック

### Step3. ステートマシンのテスト実行

1. ステートマシンの詳細ページに移動します
1. 作成したステートマシンの詳細ページで「実行の開始」をクリック
2. 実行名を入力
2. 入力は空のままでOK（{}）
4. 「実行の開始」をクリック
実行が開始され、ワークフローの視覚的表現が表示されます。各ステップが実行されるにつれて、対応する部分が緑色（成功）または赤色（失敗）に変わります
成功
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3812002/859ee34a-f920-ab25-26ab-433f80401c11.png)
失敗
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3812002/00d7d45e-ce8f-8e42-12e5-db0b53d74cfc.png)
5. 実行結果を確認し、ワークフローの動きを観察
複数回実行して、異なる結果（在庫あり/なし、支払い成功/失敗）を確認してください

## まとめ

この記事では
- 基本的なAWS Step Functionsのワークフロー作成
- Lambda関数との連携
- 条件分岐の使用
- 成功と失敗の状態の設定
これをベースに、より複雑なワークフローや実際のビジネスロジックを組み込んだステートマシンを作成できます