GCPでお手軽にイベントドリブンなアーキテクチャを構築してみた
投稿者:今井 雄大
初めに
こんにちは。CI部の今井といいます。
今回のブログでは GCS へファイルをアップロードしたというイベントから自動で Workflows というサービスを実行してみたいと思います。
GCS のイベントと Workflows の実行までの連携はサーバレスなサービスを使うことを条件とします。
イベントドリブンなアーキテクチャはいろいろな所で応用が利くと思いますので、ご参考になれば幸いです。
ちなみに、今回のブログはこちらの公式ドキュメントのクイックスタートを参考にしています。
サーバレスな連携サービス
GCP にはイベントをサブスクライブするサービスとして Eventarc があります。
Eventarc を利用することでマイクロサービスが疎結合されて分散されるイベントドリブンなアーキテクチャを構築することができるようになります。
Google の公式ドキュメントでは以下のように説明しています。
Eventarc を使用すると、基盤となるインフラストラクチャを実装、カスタマイズ、またはメンテナンスすることなく、イベント ドリブン アーキテクチャを構築できます。Eventarc は、分離されたマイクロサービス間の状態変更(イベント)を管理する標準化されたソリューションを提供します。トリガーされると、Eventarc は配信、セキュリティ、認可、オブザーバビリティ、エラー処理を行いながら、これらのイベントを Pub/Sub サブスクリプション経由でさまざまな宛先に転送します(このドキュメントのイベントの宛先を参照)。
Eventarc がトリガーにすることができるサービスは GCP のほとんどのサービスと Datadog が挙げられます。
今回は GCS にファイルが作成されたことをトリガーにしたいと思います。
GCS にファイルが作成されるというイベントはパイプラインを作成するときによくあることだと思いますので、応用しやすいと思います。
そして、Eventarc はトリガーを受信した後に、その情報を使って他の GCP サービスを実行することができます。
現在、実行することができるサービスはプレビューを含めて以下の 4 つがあり、本ブログではプレビューの Workflows を実行します。
- Cloud Functions
- Cloud Run
- GKE (Preview)
- Workflows (Preview)
今回のアーキテクチャのイメージは以下のようになります。
まずは、GCS のバケットと Workflows を作成していきます。
GCS のバケットと Workflows の作成
今回のためにサービスアカウントを一つ作成します。今回は「imai-eventarc-to-workflows」という名前で作成しました。
このサービスアカウントには Workflows 起動元とログ書き込みの権限を付与します。
ファイルをアップロードするための GCS のバケットと Workflows を作成します。
GCS のバケット名は適当なものを作ります。今回は「upload_imai」というものを作成しました。
次に、Workflows を作成します。
公式ドキュメントのクイックスタートを参考に以下の yaml 形式の Workflows を「imai-workflow-eventarc」としてデプロイします。
この時にサービスアカウントを指定する必要があるため、今回作成したサービスアカウントを指定します。
main:
params: [event]
steps:
- log_event:
call: sys.log
args:
text: ${event}
severity: INFO
- extract_bucket_object:
assign:
- bucket: ${event.data.bucket}
- object: ${event.data.name}
- return_bucket_object:
return:
bucket: ${bucket}
object: ${object}
Eventarc のトピック作成
イベントドリブンなアーキテクチャを構築するための要であるEventarcを設定します。
Eventarcの画面で新しいトピックを以下のように設定し作成します。
この時に、GCS の特定のバケットでファイルが作成もしくは上書き更新されることをトリガーにするために、イベントプロバイダはgoogle.cloud.storage.object.v1.finalizedとしました。
これで、今回作成したバケット「upload_imai」に何かファイルが作成もしくは上書き更新されるごとにWorkflowsが実行されるようになりました。
そして、Workflowsは実行されるとアップロードされたファイルのバケット名とファイル名を応答するので、実際に返答が来るかを確認します。
ファイルの作成から Workflows の実行まで
今回作成したバケットの upload_imai 内に「 dummy.txt 」というファイルをアップロードしました。
このファイルを15時17分にアップロードしたことをトリガーにWorkflowsが実行されたかを Workflows が実行されたかを確認します。
ちゃんとファイルがアップロードされた4秒後に Workflows が実行され、成功していました。
出力側にバケット名とファイル名が表示されていることから、 Workflows にも情報が正常に受け渡されていることが確認できました。
Eventarc のコストについて
Eventarc のコストについても記載します。
今回の Eventarc の使用料自体は無料です。
Eventarcの使用料は無料ですが、裏で動いている Pub/Sub は無料ではありません。
ただし、 Pub/Sub は無料枠というものがあるため使い方によっては無料です。
今回使用したファイル作成のトリガーは1か月に100万回までなら無料枠に収まるレベルだと思います。
ただし、Eventarc の呼び出し回数の想定以上の増加によるコスト増や GCS や Workflows の使用料は別途かかる可能性があります。
すべてのコストに関しては気を付けるようにしてください。
最後に
今回は Eventarc を利用してお手軽にイベントドリブンなアーキテクチャを構築しました。
誰でも簡単に作成できそうなレベルですので、利用してみてはどうでしょうか?
最後までご覧くださり、ありがとうございました。