2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

クリスマステートマシンツリー、実装してみた

Last updated at Posted at 2022-12-23

今週末はクリスマスですね

クリスマスといえば、クリスマスツリーですね。
外は寒いですが、イルミネーションに囲まれたクリスマスツリーを見に行くの楽しいですよね。
東京ミッドタウンのクリスマスツリーとか大きくてとても綺麗ですよね。

家でもクリスマスツリーを立てたりしますよね。
一人暮らしだと、わざわざツリー立てるのも片付けるのも面倒だと思ってしまいます。
でもお家でもクリスマスツリー楽しみたいなー...

そんなあなたに。
とっておきの方法があります。

そう、AWSアカウントさえあれば。
しかも無料で。

Step Functionsでクリスマスツリーを立てよう

Step FunctionsはAWSが提供するサーバーレスのワークフローサービスです。
AWSサービスを組み合わせて、ユーザーが定義した「ステートマシン」を使って複雑なワークフローを構築できます。
ETL(データの抽出、変換、ロード)処理の自動化や、機械学習用データを準備するパイプライン、マイクロサービスのオーケストレーションなどに活用できます。

今回はこのサービスを使ってクリスマスツリー、もとい、「クリスマステートマシンツリー」を立てちゃいました。

ピンとこないですか?

百聞は一見にしかずと言いますし、早速お披露目いたします!

クリスマステートマシンツリー🎄

stepfunctions_graph.png

どうでしょう。
意外とツリーしてませんか?

飾り方

  1. AWSアカウントのマネジメントコンソールからStep Functionsをページを開く or AWSアカウントにログインした状態で下のリンクにアクセス
    https://ap-northeast-1.console.aws.amazon.com/states/home
  2. ページ上部の「ステートマシンの作成」ボタンをクリック
    image.png
  3. 作成ページに移動したら、「コードでワークフローを記述」を選択。「タイプ」は標準のままでok。
    image.png
  4. 「定義」のコードを以下に置き換える(コピペして使ってください)
クリスマステートマシンツリー定義
{
  "Comment": "A description of my state machine",
  "StartAt": "🌟",
  "States": {
    "🌟": {
      "Type": "Parallel",
      "End": true,
      "Branches": [
        {
          "StartAt": "🦌",
          "States": {
            "🦌": {
              "Type": "Pass",
              "Next": "🎅🏻"
            },
            "🎅🏻": {
              "Type": "Parallel",
              "End": true,
              "Branches": [
                {
                  "StartAt": "🕯",
                  "States": {
                    "🕯": {
                      "Type": "Pass",
                      "Next": "🤶🏻"
                    },
                    "🤶🏻": {
                      "Type": "Parallel",
                      "End": true,
                      "Branches": [
                        {
                          "StartAt": "🎅🏽",
                          "States": {
                            "🎅🏽": {
                              "Type": "Pass",
                              "End": true
                            }
                          }
                        },
                        {
                          "StartAt": "🧑🏽‍🎄",
                          "States": {
                            "🧑🏽‍🎄": {
                              "Type": "Pass",
                              "End": true
                            }
                          }
                        }
                      ]
                    }
                  }
                },
                {
                  "StartAt": "🧦",
                  "States": {
                    "🧦": {
                      "Type": "Pass",
                      "Next": "🎅🏼"
                    },
                    "🎅🏼": {
                      "Type": "Parallel",
                      "End": true,
                      "Branches": [
                        {
                          "StartAt": "🤶🏽",
                          "States": {
                            "🤶🏽": {
                              "Type": "Pass",
                              "End": true
                            }
                          }
                        },
                        {
                          "StartAt": "🎅🏾",
                          "States": {
                            "🎅🏾": {
                              "Type": "Pass",
                              "End": true
                            }
                          }
                        }
                      ]
                    }
                  }
                }
              ]
            }
          }
        },
        {
          "StartAt": "🛷",
          "States": {
            "🛷": {
              "Type": "Pass",
              "Next": "🧑🏻‍🎄"
            },
            "🧑🏻‍🎄": {
              "Type": "Parallel",
              "End": true,
              "Branches": [
                {
                  "StartAt": "⛄",
                  "States": {
                    "⛄": {
                      "Type": "Pass",
                      "Next": "🧑🏼‍🎄"
                    },
                    "🧑🏼‍🎄": {
                      "Type": "Parallel",
                      "End": true,
                      "Branches": [
                        {
                          "StartAt": "🧑🏾‍🎄",
                          "States": {
                            "🧑🏾‍🎄": {
                              "Type": "Pass",
                              "End": true
                            }
                          }
                        },
                        {
                          "StartAt": "🤶🏾",
                          "States": {
                            "🤶🏾": {
                              "Type": "Pass",
                              "End": true
                            }
                          }
                        }
                      ]
                    }
                  }
                },
                {
                  "StartAt": "🔔",
                  "States": {
                    "🔔": {
                      "Type": "Pass",
                      "Next": "🤶🏼"
                    },
                    "🤶🏼": {
                      "Type": "Parallel",
                      "End": true,
                      "Branches": [
                        {
                          "StartAt": "🎁",
                          "States": {
                            "🎁": {
                              "Type": "Pass",
                              "End": true
                            }
                          }
                        },
                        {
                          "StartAt": "🇨🇽",
                          "States": {
                            "🇨🇽": {
                              "Type": "Pass",
                              "End": true
                            }
                          }
                        }
                      ]
                    }
                  }
                }
              ]
            }
          }
        }
      ]
    }
  }
}

5. コードを編集し終えたら、ページ下部の「次へ」をクリック
image.png
6. 詳細を指定するページで名前をつけます。なんでもいいです。
image.png
7. 実行ロールは「新しいロールの作成」のままでいいです。他の設定は不要です。
image.png
8. ページ下部の「ステートマシンの作成」をクリック
image.png
9. 作成されたクリスマステートマシンツリーのページが開かれます。
10. クリスマステートマシンツリーのページで「実行の開始」をクリック
image.png
11. 「入力」に適当にJSONを入れてください。なんでもいいです。実行の「名前」もなんでもいいです。
image.png
12. 「実行の開始」をクリック
image.png
13. 0.3秒程度でクリスマステートマシンツリーが完成します!(実行詳細画面のグラフ)
image.png

ステートマシンは処理が成功すると各ステート(状態)が緑色で示されるので、それをモミの木の色として利用しています。
また、各ステートの名前をemojiにすることで、ツリーのオーナメントを飾ることができました。
ステートのタイプとしてはParallelとPassの2種類を組み合わせていて、中身の処理としては何もせず、ただステートを上から順番に実行していくものになります。

オーナメントやツリーの構造はお好みでカスタマイズください。
Step Functionsの提供するワークフロースタジオを使えば、GUI操作でステートマシンを編集できます。

Step Functions使ってますか?

ここ数年のアップデートが著しいStep Functions。
サーバーレスサービスの利用が進むにつれて、ますます存在感の高まるサービスになることは間違いないと思います。

弊社でもこの1, 2年で活用シーンが増えてきました。
いくつかStep Functions関連の記事も投稿しています。

私もStep Functionsでの開発を行なってきているので、来年はQiitaでStep Functionsの知見を発信できたら幸いです。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?