Amazon Web Services(AWS)は先頃、"Webベースのアプリケーション構築と、短時間動作する多数のマイクロサービスのオーケストレーションを容易にする"ために、同期(synchronous)ExpressワークフローをサポートするAWS Step Functionsを発表した。これにより、最大実行時間が5分に制限され、費用対効果とパフォーマンスに優れたワークフロータイプであるExpressワークフローを、Amazon API Gatewayから、あるいはAPIを通じて直接、同期的に起動することが可能になる。
AWS Step Functionsは、"AWS Lambda関数と複数のAWSサービスを連ねて、ビジネスクリティカルなアプリケーションを構成"可能にする、サーバレスのワークフローオーケストレーションエンジンである。Step Functionsは2つのワークフロータイプを提供する。Standardワークフローは、最長1年間、正確に1回のみの起動が保証された実行を可能にするもので、長期間実行する可能性があり、かつ監査可能なワークフローを対象とする。対照的にExpressワークフローは、最長5分間、少なくとも1回(at-least-once)実行のセマンティクスにより、非常に高い実行頻度を比較的安価に運用可能にするもので、"高いイベント率のワークロードに最適"である。
これまでのStep Functions APIは非同期ワークフロー実行のみを提供していたため、マイクロサービスが即時応答を必要とする場合には、ポーリングロジックを独自のコードで実装する必要があった。そのようなアーキテクチャを単純化するため、今回、Expressワークフローで同期実行も可能になった。これによってクライアントは、"他のサービスをポーリングする必要なく、レスポンスを受け取る"ことができる。これは"多数のマイクロサービスのオーケストレーションとHTTPS経由で通信する高速計算タスク"に適するもので、Amazon API Gatewayの新しいHTTP APIである、StepFunctions-StartSyncExecutionサービスインテグレーションを通じでサポートされる。
新サービスを紹介するブログ記事では、AWS Developer AdvocateのBenjamin Smith氏が、同期Expressワークフローを使っていくつかのAWSサービスをオーケストレーションし、顧客対応型のメッセージで応答することでWebフォーム送信の感情を分析する、という例を詳しく説明している。
イメージ: 感情スコアリングを備えた同期型Webフォーム送信(AWS blog postより)
この例は、通常のHTTP POST要求(1)が、任意のステップとサービスのインテグレーションを備えた、比較的複雑なStep Functionsワークフロー(2~5)をAPI Gateway HTTP API(6)経由で同期的に起動した後、返されたワークフローの結果をHTTP POST応答を通じて即時返送する、という処理を示している(7)。
AWS Step Functionsのサービスインテグレーションも合わせてローンチされた。前述したStep FunctionsワークフローをコールするためのAmazon API Gaetwayサービスインテグレーションと混同しないために説明すると、これはStep Functionsが、AWS LambdaやAmazon Elastic Container Serviceといった他のサービス上で動作している"ビジネスロジックの'フロントドア'として"機能する、HTTPやREST APIをオーケストレーションできるようになった、という意味である。Benjamin Smith氏によるもうひとつの紹介ブログ記事で詳説されているように、サポートされているインテグレーションパパターンは、'Request Response'と'Wait for Callback' (以前の記事)の2つである。
オプションとして用意されている、リソースないしIAMポリシを経由してAPI GatewayリソースへのStep Functionsワークフローコールを認証および承認する機能は、AWSコミュニティによって肯定的に受け取られている。この件についてBen Kahoe氏は、"完全マネージドな認証が最高の認証"だ、と要約している。一方でYan Cui氏は、AWS外からエンドポイントをコールできないことについての不満をツイートしている。
Step FunctionにAPI Gatewayと統合される方向性が加わったことは素晴らしいのですが、"任意のHTTPエンドポイント"ではなくAPI Gatewayに限定されている理由が理解できません。[...] 私が何か見落としているのでしょうか?
さらにStep FunctionはAmazon Elastic Kubernetes Services (EKS)と統合され、KubernetesジョブおよびEKSクラスタオペレーションとのオーケストレーションも可能になった。これはつまり、"短命なAmazon EKSクラスタをインスタンス化してジョブを実行するサーバレスワークフロー"の生成が可能になるということだ。同じように、新たにサポートされたAWS Glue DataBrewジョブと、すでにリリースされているAWS Athenaインテグレーションを併用することにより、DataBrewジョブとAthenaクエリをベースとした"エンドツーエンドのETLパイプライン"のオーケストレーションが可能になる。
関連するニュースとして、AWS Step Functionsのサポートする状態ペイロードが256キロバイトに拡張されるとともに、ワークフローの基盤になるコンポーネントのマップとタイムラインをAWS X-Rayとのインテグレーション経由で見ることや、AWS Lambdaコンソール内で関連するワークフローを可視化することが可能になる。今年初め、Amazon State Language(ASL)が大幅に拡張され、'choice'ステートのアップデート、コンテキストオブジェクトへのグローバルアクセス、動的タイムアウト、結果セレクション(result selection)、組み込み関数などが追加された。これらはいずれも、Lambdaコールと状態遷移の必要数を低減することにより、ワークフローの簡略化とコスト削減を可能にする。
MicrosoftのAzure Logic Appsサービスも同様に、インバウンドHTTPS要求に対して同期的に応答する機能を最大4分(サービスのバージョンや環境に依存する)のタイムアウトで提供している。
AWS Step Functionsのドキュメントとしては、サービスインテグレーションの説明を含む開発者ガイド、Amazon States Language(ASL)、APIリファレンスなどが用意されている。AWS CLIのStep Functionsコマンドは別のドキュメントがある。サポートはAWS Step Functionsフォーラム経由で提供される。同期Expressワークフローは、通常の従量制のStep Functions料金のみで実行が可能である。