検索
連載

AWS Step Functionsの、分散アプリ構築・運用手法としてのユニークさAWS re:Invent 2016(1/2 ページ)

米Amazon Web Services(AWS)が「AWS re:Invent 2016」で発表した「AWS Step Functions」は、ユニークなサービスだ。分散アプリケーションの開発・運用を新たな形で実現するツールと表現できる。

Share
Tweet
LINE
Hatena

 米Amazon Web Services(AWS)は2016年11月末に開催した「AWS re:Invent 2016」で多数の新サービスおよび新機能を発表したが、その中に分散アプリケーションの開発・運用を新たな形で実現するユニークなサービス、「AWS Step Functions」がある。

 その可能性は2通りに説明できる。1つは、AWSが2014年に発表したサーバレスコンピューティングサービスである「AWS Lambda」のLambdaファンクションを複数組み合わせて、複雑な分散アプリケーションをシンプルに構築できる点。もう1つは、Lambdaを使う・使わないにかかわらず、あらゆるアプリケーションを組み合わせて、メンテナンスのしやすいコンポジット・アプリケーションを構築するためにも使える点だ。

 このサービスの開発には、SGML、XML、JSONへの貢献で知られるTim Bray(ティム・ブレイ)氏が関わっている。同氏はOpen Textの共同創業者であり、その後米サン・マイクロシステムズ、米グーグルなどで活動。2014年12月にAWSへ移籍し、シニアプリンシパルエンジニアとして働いている。re:Invent 2016ではAWS Step Functionsを紹介する講演を行った。本記事では、同講演に基づき、これを補完しながら、AWS Step Functionsを分かりやすく紹介する。

 なお、re:Invent 2016における発表の多くは米国およびアイルランドでのみ提供開始、あるいはプレビュー提供開始となっているが、Step Functionsは東京リージョンでも即時提供開始された。

複数のLambdaファンクションを迅速に組み合わせて高度な処理を実現

 AWS Step Functionsでは、アプリケーションを複数のタスクのワークフローとして構成し、実行できる。これは「アプリケーションのステートを管理するサービス」ともいえる。

 Step Functionsは特に、上記のタスクとしてLambdaファンクションを利用することを想定している。Bray氏も、基本的にはLambdaファンクションへの適用という観点で説明していた(ただし、後述するが、APIを通じてAWS上の仮想インスタンスやオンプレミスのアプリケーションを組み込むこともできる)。Lambdaファンクションの実行フロー(シーケンシャル、並列、分岐)を決めて実行、同時に返ってきた値などを次のLambdaファンクションに渡すなどができ、Lambdaファンクションを使って複雑なアプリケーションが構築しやすくなる。

 AWSは、Step Functionsに似たサービスとして「Amazon Simple Workflow Service(SWF)」を提供してきた。Bray氏によると、Step FunctionsではSWFを大幅に活用しているという。だが、Step Functionsに関するFAQページでは、AWSがSWFを提供し続けるとしているものの、よほど複雑なシーケンスを構築したいのでない限り、新しいアプリケーションにはStep Functionsを使うべきだと説明している。理由は、SWFによるアプリケーションワークフロー構築にはプログラム開発が必要で、手間が掛かるからだ。

 一方、Step FunctionsではJSON形式の言語でステート管理が行え、一連のアプリケーションプロセスの構築が迅速にできるとともに、メンテナンスが容易になる。これにより、「ファンクションをシーケンシャルに実行したい」「ファンクションを並列に実行したい」「データに基づいて、ファンクションを選択したい」「ファンクションをリトライできるようにしたい」「実行/エラー検知/完成のサイクルを回したい」「数時間実行し続けなければならないファンクションがある」といったニーズに応えられるとBray氏はいう。

 現状、複数のLambdaファンクションから成るアプリケーションを構築するには、次の方法が使われているとBray氏は説明した(カッコ内はBray氏のコメント)。

  1. メソッド呼び出しでLambdaファンクション同士を結び付ける(「マイクロサービス的でない」)
  2. Lambda APIでLambdaファンクションから他のLambdaファンクションを呼び出す(「非同期呼び出しではエラーハンドリングやリトライ処理が面倒」)
  3. Lambdaファンクションのステート管理にデータベースを使う(「コードを書くのが面倒、Lambdaファンクションのスケーリングにデータベースが追い付けない場合がある」)
  4. Amazon Simple Queue Service(SQS)のようなメッセージキューサービスを使う(「サーバレス的だが、これもキューのメンテナンスやエラー対応の面倒さがある」)

 そこで柔軟なスケーリングができ、ステートを確実に管理でき、エラーやタイムアウトの処理を組み込んでおり、構築と運用が楽で、実行結果の確認やデバッグのしやすいステート管理サービスとして開発したのがStep Functionsなのだという。

Copyright © ITmedia, Inc. All Rights Reserved.

       | 次のページへ
[an error occurred while processing this directive]
ページトップに戻る