Low-Code/No-Code Advent Calendar 2018
みなさんこんにちは。
本記事は、「Low-Code/No-Code Advent Calendar 2018」の18日目の記事です。
今回は、Amazon Web Services上のサービスである「Step Functions」について間単に触ってみたいと思います。
Step Functions とは
AWS Step Functions (分散アプリケーションとマイクロサービスの構築) | AWS
AWS の複数のサービス処理を、ビジュアルフローとして定義できる管理サービスです。1関数ごとの処理が比較的短めで、ともするとロジックの全体像が分かりにくくなりがちなサーバレスアプリケーションにおいて、
全体のロジックをわかりやすく管理できるメリットがあります。
主にシステムのバックエンド側の処理に用いられるもので、例えば
- バッチ処理の管理
- Webサービスの内部処理
- チャットボットの内部処理
などなど。様々な場面で利用できます。
Low Code?
Low-Code/No-Codeの文脈で言うと、Low Codeに分類されます。
下記のように、各処理の定義の設定は、状態を記述するASLという独自仕様の言語(JSONフォーマット)で記述します。
例えばNode-Redのような、ビジュアルなパーツを繋ぐような機能は、現時点ではありません。
また、パーツとなる各処理についても、実際の処理内容については、別途定義されたLambda FunctionなどをARN(リソースのID)で指定して呼び出す必要がありました。
AWS Step Functionsのアップデート
re:Invent 2018にて、Step Functionsが新たに8つのマネージドサービスと連携可能になることが発表されました。
- クラメソさんのブログ [神アップデート]Step Functionsが新たに8つのマネージドサービスと連携可能になりました! #reinvent
- Amazon 公式のブログ New – Compute, Database, Messaging, Analytics, and Machine Learning Integration for AWS Step Functions
何ができるようになったの?
何か新しいサービスができたわけではなく、特定のAWSサービスを、Lambda 無しで操作(一部)できるようになっただけです。
統合できるAWSサービスは、下記ドキュメントに記載があります。
AWS Step Functions 開発者ガイド - Step Functions でサポートされる AWS サービス統合
本記事執筆時点では、re:Invent発表時点と同様、下記のサービス(の一部操作)が対象です。なお、元々は1.のAWS Lambdaファンクションのみでした。
- AWS Lambda
- AWS Batch
- Amazon DynamoDB
- Amazon ECS/Fargate
- Amazon SNS
- Amazon SQS
- AWS Glue
- Amazon SageMaker
触ってみる
AWSのコンソールにサインインした状態であれば、サンプルを間単に試すことができます。下記の例では、東京リージョンで実行しています。
「今すぐ始める」ボタンから、新たにサンプルのプロジェクトを作成してみます。
サンプルプロジェクトからの作成を選び、「データレコードの転送」というプロジェクトを選択します。下のほうに今から作るプロジェクトの定義が表示されます。詳細は後で確認するので、「次へ」で進みます。
選択したサンプルを、実際の環境で使えるようにデプロイ(配備)します。サンプルで作られるリソースを確認すると、Lambda 関数のほかに、SQSのキューとDynamoDBのテーブルも作成されることがわかります。
今回、Lambda関数を介さなくても利用できるのは、この2つのリソースになります。
「リソースのデプロイ」を実行すると、CloudFormationが実行されて、実際のリソースが展開されます。数分待ちましょう。
数分待つと、Step Functionsのコンソールに、1つステートマシンが作成されているのが確認できます。
まず最初のステート「"Seed the DynamoDB Table"」ですが、こちらは、サンプルのためのテーブルを作る処理で、従来通りにLambda関数を呼び出しています。
指定しているARNの部分も、別途定義済みのLambda関数を呼び出す、標準的な形式のARNですね。
一方、DynamoDBから値を読む「"Read Next Message from DynamoDB"」とSQSキューにメッセージを送る「"Send Message to SQS"」の処理では、“MagicARN”形式と、付随するパラメーターの指定になっています。
実際に実行してみます。結果を見ると、「"Read Next Message from DynamoDB"」のステップで、DynamoDBから読み取ったデータがJSON形式で表示されています。
パラメーターの指定だけで、Lambda関数を介さなくても、DynamoDBやSQSとデータのやり取りができていることが確認できます。
まとめ
Low Code/No Codeの観点から見ると、だいぶCode寄りのサービスではありますが、
コードの記述量を減らし、アプリケーションの改修速度を向上させることができる、非常に素晴らしいアップデートだと感じました!
まだまだ統合サポートされているAPIやサービスの数は少ないですが、今後の拡充に期待したいところです。
チャットボットや、VUIサービスのバックエンドに使って、開発効率を上げていきたいと思います。