Google Cloud のサーバーレス オーケストレーション エンジン、Workflows のご紹介
![https://storage.googleapis.com/gweb-cloudblog-publish/images/Google_Cloud_App_Dev_4.max-2600x2600.jpg](https://storage.googleapis.com/gweb-cloudblog-publish/images/Google_Cloud_App_Dev_4.max-2600x2600.jpg)
Google Cloud Japan Team
※この投稿は米国時間 2020 年 12 月 5 日に、Google Cloud blog に投稿されたものの抄訳です。
e コマース トランザクションの処理、商品の生産、IT サービスの提供など、どのような業種でも企業ではさまざまなシステムにわたって作業の流れを管理する必要があります。このようなワークフローを手作業でまたは汎用ツールを使用して管理することもできますが、専用のサービスを利用すれば管理作業がはるかに簡単になります。
Google Cloud のポートフォリオには 2 つのワークフロー ツール、Cloud Composer と新しい Workflows があります。8 月に導入されたWorkflows は、Google Cloud の一部として実行されるフルマネージド ワークフロー オーケストレーション サービスです。これは完全にサーバーレスで、インフラストラクチャ管理は不要です。
この記事では、Workflows で可能なユースケースをいくつかご紹介し、その機能と効果的に使用するためのヒントについてご説明します。
サンプル ワークフロー
まず、請求書を生成する次のワークフローについて考えてみましょう。
![https://storage.googleapis.com/gweb-cloudblog-publish/images/image_1_sdF2Tdx.max-1400x1400.jpg](https://storage.googleapis.com/gweb-cloudblog-publish/images/image_1_sdF2Tdx.max-1400x1400.jpg)
![https://storage.googleapis.com/gweb-cloudblog-publish/images/image_1_sdF2Tdx.max-1400x1400.jpg](https://storage.googleapis.com/gweb-cloudblog-publish/images/image_1_sdF2Tdx.max-1400x1400.jpg)
これらの手順をオーケストレートする一般的な方法は、Cloud Functions、Cloud Run、パブリック SaaS の API(PDF を添付したメールを送信する SendGrid など)に基づいて API サービスを呼び出すことです。ただし、実際のシナリオは通常、上述の例よりもはるかに複雑で、すべてのワークフロー実行、エラー処理、決定点、条件付きジャンプの継続的な追跡、いくつものエントリ配列の反復処理、データ変換、その他多くの高度な機能が必要になります。
つまり、技術的には汎用ツールを使用してこのプロセスを管理できますが、それは理想的な方法とは言えません。たとえば、Cloud Functions のようなイベントベースのコンピューティング プラットフォームでこのフローを処理する場合に直面するいくつかの課題について考えてみましょう。まず、Cloud Functions の関数の最大実行時間は 9 分ですが、ワークフロー、特に人との対話を伴うワークフローでは数日間に及ぶ可能性があります。ワークフローを完了するのにさらに時間が必要な場合や、レスポンスのステータスのポーリング時にステップ間で一時停止する必要がある場合もあります。Cloud Functions の複数の関数を、たとえば Pub/Sub を使用して連結しても機能しますが、そのようなワークフローを開発または運用する簡単な方法はありません。まず、このモデルでは、ステップの失敗をワークフローの実行に関連付けるのがとても難しく、トラブルシューティングが非常に困難になります。また、すべてのワークフロー実行の状態を把握するにはカスタム開発されたトラッキング モデルが必要で、このアーキテクチャの複雑さはさらに増します。
これに対して、ワークフロー サービスは例外処理のサポートを提供し、実行と個々のステップの状態(成功と失敗など)を可視化します。各ステップの状態は個別に管理されるため、ワークフロー エンジンはエラーからシームレスに回復でき、ワークフローを使用するアプリケーションの信頼性が大幅に向上します。さらに、ワークフロー サービスには、一般的な API やクラウド サービスへの組み込みコネクタが付属していることが多く、簡単に既存の API インターフェースにプラグインできます。
Google Cloud のワークフロー サービス
Google Cloud の最初の汎用ワークフロー オーケストレーション ツールは Cloud Composer でした。
Apache Airflow をベースとした Cloud Composer は、ETL オーケストレーション、ビッグデータ処理、機械学習ワークフローなどのデータ エンジニアリング パイプラインに最適で、BigQuery や Dataflow などのデータ プロダクトとスムーズに統合します。たとえば、データ ウェアハウスやビッグデータ クラスタで一連のジョブを実行して、結果をストレージ バケットに保存する必要があるワークフローでは、Cloud Composer を選択するのが一般的です。
ただし、サーバーレスでイベントを処理または API を連結する場合、または集中的に負荷がかかるワークロードやレイテンシの影響を受けやすいワークロードがある場合は、Workflows をおすすめします。
Workflows は使用していないときにはゼロにスケールされ、アイドル状態では費用は発生しません。料金はワークフローのステップ数に基づくため、ワークフローが実行された場合にのみ課金されます。また、Workflows は実行時間に基づいて課金されないため、タスク間にワークフローが数時間一時停止した場合でも、これに対しては費用は発生しません。
Workflows は、非常に短い起動時間で「コールド スタート」の影響を受けずに、自動的にスケールアップします。また、ステップ間をすばやく遷移し、レイテンシの影響を受けやすいアプリケーションにも対応します。
Workflows のユースケース
Workflows がオーケストレートできるプロセスとフローの数は、実質的に無制限です。では、一般的なユースケースをいくつか見ていきましょう。
顧客トランザクションの処理
顧客の注文を処理し、品目が在庫切れの場合は外部サプライヤーからの在庫補充をトリガーする必要があるとします。注文処理中に、顧客の大量注文について営業担当に通知する必要もあります。営業担当はこのような通知を Slack を使用して受け取ると、迅速に対応できる可能性が高くなります。
サンプル ワークフローの図を次に示します。
![https://storage.googleapis.com/gweb-cloudblog-publish/images/image_2_LBi7g2Y.max-1600x1600.jpg](https://storage.googleapis.com/gweb-cloudblog-publish/images/image_2_LBi7g2Y.max-1600x1600.jpg)
![https://storage.googleapis.com/gweb-cloudblog-publish/images/image_2_LBi7g2Y.max-1600x1600.jpg](https://storage.googleapis.com/gweb-cloudblog-publish/images/image_2_LBi7g2Y.max-1600x1600.jpg)
上述のワークフローは、Google Cloud の Firestore に加え、Slack、SendGrid、在庫サプライヤーのカスタム API などの外部 API の呼び出しをオーケストレートしています。そしてステップ間でデータを渡し、他の API の出力に応じて条件付きでステップを実行する決定点を実装しています。
一度に 1 つのトランザクションを処理する各ワークフロー実行はログに記録されるため、必要に応じて追跡やトラブルシューティングを行えます。ワークフローは API によってスローされた必要な再試行や例外を処理するため、アプリケーション全体の信頼性が向上します。
アップロードされたファイルの処理
別のユースケースとして、ユーザーがアップロードしたファイルに、その内容に基づいてタグを付けるワークフローを考えてみましょう。ユーザーはテキスト ファイル、画像、動画をアップロードできるため、ワークフローはこれらのファイルの内容を分析するためにさまざまな API を使用する必要があります。
このシナリオでは、Cloud Storage トリガーによって Cloud Functions の関数がトリガーされます。次に、この関数は Workflows クライアント ライブラリを使用してワークフローを開始し、ファイルパスをワークフローに引数として渡します。
この例では、ワークフローがファイル拡張子に応じて使用する API を決定し、対応するタグを Firestore データベースに保存します。
![https://storage.googleapis.com/gweb-cloudblog-publish/images/image_3_4zhI67V.max-1600x1600.jpg](https://storage.googleapis.com/gweb-cloudblog-publish/images/image_3_4zhI67V.max-1600x1600.jpg)
![https://storage.googleapis.com/gweb-cloudblog-publish/images/image_3_4zhI67V.max-1600x1600.jpg](https://storage.googleapis.com/gweb-cloudblog-publish/images/image_3_4zhI67V.max-1600x1600.jpg)
Workflows の仕組み
これらのユースケースはすべて、Workflows を使用してすぐに実行できます。次に、Workflows のいくつかの主要な機能について詳しく見ていきましょう。
ステップ
Workflows は、「ステップ」として提供されるアクティビティのシーケンスを処理します。必要に応じて、時間関連の課金を発生させずに、ステップ間で一時停止するようにワークフローを構成することもできます。
![https://storage.googleapis.com/gweb-cloudblog-publish/images/image_4_VMSRx8k.max-1500x1500.jpg](https://storage.googleapis.com/gweb-cloudblog-publish/images/image_4_VMSRx8k.max-1500x1500.jpg)
![https://storage.googleapis.com/gweb-cloudblog-publish/images/image_4_VMSRx8k.max-1500x1500.jpg](https://storage.googleapis.com/gweb-cloudblog-publish/images/image_4_VMSRx8k.max-1500x1500.jpg)
特に、実質的にネットワークで到達可能な HTTP に従うどの API でも、ワークフロー ステップとしてオーケストレートできます。SaaS API やプライベート エンドポイントを含む、インターネットベースの任意の API を呼び出すことができ、Cloud Functions や Cloud Run でこのような呼び出しをラップする必要はありません。
認証
たとえば、Cloud Functions の関数を呼び出したり、Firestore からデータを読み取ったりするために Google Cloud API を呼び出す場合、Workflows は組み込みの IAM 認証を使用します。ワークフローに特定の Google Cloud API を使用するための IAM 権限が付与されている限り、認証プロトコルについて心配する必要はありません。
![https://storage.googleapis.com/gweb-cloudblog-publish/images/image_5_a0rN0DD.max-1500x1500.jpg](https://storage.googleapis.com/gweb-cloudblog-publish/images/image_5_a0rN0DD.max-1500x1500.jpg)
![https://storage.googleapis.com/gweb-cloudblog-publish/images/image_5_a0rN0DD.max-1500x1500.jpg](https://storage.googleapis.com/gweb-cloudblog-publish/images/image_5_a0rN0DD.max-1500x1500.jpg)
ワークフロー ステップ間の通信
実際のワークフローではほとんどの場合、ステップが相互に通信する必要があります。Workflows では、ステップが作業の結果を後続のステップに渡すために使用できる組み込み変数をサポートしています。
JSON の自動変換
API の統合では JSON が一般的に使用されるため、Workflows は API JSON レスポンスを辞書に自動的に変換して、次のステップがこの情報にアクセスしやすくします。
豊富な式言語
Workflows には、算術演算子と論理演算子、配列、辞書、その他多くの機能をサポートする豊富な式言語も付属しています。基本的なデータ操作をワークフローで直接実行する機能により、API 統合がさらに簡素化されます。Workflows はランタイム引数を受け入れるため、単一のワークフローを使用して、さまざまなイベントや入力データに対応できます。
![https://storage.googleapis.com/gweb-cloudblog-publish/images/image_6_1OUZuI5.max-1600x1600.jpg](https://storage.googleapis.com/gweb-cloudblog-publish/images/image_6_1OUZuI5.max-1600x1600.jpg)
![https://storage.googleapis.com/gweb-cloudblog-publish/images/image_6_1OUZuI5.max-1600x1600.jpg](https://storage.googleapis.com/gweb-cloudblog-publish/images/image_6_1OUZuI5.max-1600x1600.jpg)
決定点
変数と式を使用して、大多数のワークフローのもう 1 つの重要な要素、決定点を実装できます。Workflows はカスタム式を使用して、ワークフローの別の部分にジャンプするか、条件付きでステップを実行するかを決定できます。
条件付きステップ実行
ロジックのよく使用される部分をサブワークフローとしてコーディングしておき、通常のステップとして呼び出すことができます。これは多くのプログラミング言語でのルーチンのような働きをします。
![https://storage.googleapis.com/gweb-cloudblog-publish/images/image_7.max-1600x1600.jpg](https://storage.googleapis.com/gweb-cloudblog-publish/images/image_7.max-1600x1600.jpg)
![https://storage.googleapis.com/gweb-cloudblog-publish/images/image_7.max-1600x1600.jpg](https://storage.googleapis.com/gweb-cloudblog-publish/images/image_7.max-1600x1600.jpg)
場合によっては、ネットワークの問題や、特定の API がダウンしているなどの理由により、ワークフローの 1 つのステップが失敗することがあります。ただし、これによってワークフロー全体の実行がすぐに失敗しては困ります。
Workflows は、構成可能な再試行と例外処理の組み合わせによって、ワークフローが API 呼び出しによって返されたエラーに適切に対応できるようにし、この問題を回避します。
![https://storage.googleapis.com/gweb-cloudblog-publish/images/image_8.max-1600x1600.jpg](https://storage.googleapis.com/gweb-cloudblog-publish/images/image_8.max-1600x1600.jpg)
![https://storage.googleapis.com/gweb-cloudblog-publish/images/image_8.max-1600x1600.jpg](https://storage.googleapis.com/gweb-cloudblog-publish/images/image_8.max-1600x1600.jpg)
上述のすべての機能は、Workflows のソースコードの一部として構成できます。これらの構成の実際の例については、こちらをご覧ください。
今すぐ Workflows を使ってみる
Workflows は、Google Cloud のアプリケーション開発および管理ツールセットに新しく追加された強力なツールで、すべてのプロジェクトですぐに試せます。
Workflows のサイトをご覧になるか、Cloud Console にアクセスして最初のワークフローを構築してください。Workflows には無料枠があるので無料でお試しいただけます。Workflows に関する発表も間もなく予定されています。お見逃しなく。
オーケストレーションをお楽しみください!
-Workflows プロダクト マネージャー Filip Knapik