Eventarc が GA になったので、試しに Firebase Console へのアクセスをトリガーに Cloud Run を実行してみる
待望の Eventarc が GA になりましね。さっそく Eventarc を試してみようと思います。せっかくなので、大好きな Firebase と絡めて、Firebase Management の監査ログを使ったサンプルを作ってみようと思います。
GetFirebaseProject した人の情報をとってみる
まず、Firebase Console にアクセスしたときに呼ばれる GetFirebaseProject の監査ログを出力してみようと思います。Firebase の監査ログですが、実は Google Cloud の Cloud Audit Logs の一部として書き出されるため、Google Cloud 側の設定が必要になります。Google Cloud のコンソールから IAM → 監査ログと進み、Firebase Management API を検索します。Admin Write 以外はチェックが外れているため、下記の図を参考に有効にします。これで FirebaseManagement の監査ログがすべて書き出されるようになります。
実際にどのようなログが流れてくるのか確認してみます。Cloud Loggingで確認することができるので、コンソールのロギングからログ エクスプローラーを表示します。Firebase のプロジェクトページを表示すると次のように GetFirebaseProject のログが流れてくるのがわかると思います。
Cloud Run で動かすアプリケーションの準備
次に、この情報をトリガーに Eventarc を利用して Cloud Run を実行してみようと思います。まずは Cloud Run のサービスを準備します。今回は Node.js で request の内容を、ただ表示するだけアプリをつくります。
# index.jsconst express = require('express');
const app = express();
const PORT = process.env.PORT || 8080;app.use(express.json());
app.post('/', (req, res) => {
if (!req.header('ce-subject')) {
return res
.status(400)
.send('Bad Request: missing required header: ce-subject');
}console.log(`Detected access: ${req.header('ce-subject')}`);
return res
.status(200)
.send(`Detected access: ${req.header('ce-subject')}`);
});app.listen(PORT, () =>
console.log(`nodejs-events-storage listening on port ${PORT}`)
);
package.json も準備しておきます。
# package.json{
"name": "eventarc-sample",
"version": "1.0.0",
"description": "Simple Eventarc sample",
"main": "index.js",
"engines": {
"node": ">= 12.0.0"
},
"scripts": {
"start": "node index.js"
},
"dependencies": {
"express": "^4.16.4"
}
}
できたら、Buildpacks をつかってビルドします (Buildpacks を使うとDockerfile なしで Build できるのでとてもラクです)。 build から Container Registry への登録までを完了させます。
$ pack build --publish gcr.io/$(gcloud config get-value project)/eventarc-sample --builder gcr.io/buildpacks/builder
Cloud Run の設定
Console から Cloud Run を表示し、サービスを作成します。トリガーがサポートされているリージョンを選び任意のサービス名をつけます。
つぎに先ほどビルドしたコンテナイメージを選択し、最後にトリガーを追加します。
これで、GetFirebaseProject がコールされると Cloud Run にリクエストが飛ぶようになりました。Firebase Console にアクセスして、Cloud Logging をみると実行されているのがわかると思います。
まとめ
本当に簡単な手順で Cloud Run のトリガー設定ができました。
今回は GetFirebaseProject をトリガーにしてみましたが、 Cloud Audit Log の他のログをトリガーにすることもできます。たとえば、 Cloud Storage にファイルが作られたイベントをトリガーにしたり、IAM で role が作られたイベントをトリガーにしたりと非常に多くのイベントソースを選択することができます。さらに、 Cloud Audit Log 以外にも Cloud Pub/Sub のトピックをイベントソースにすることも可能です。
Eventarc の登場により、Cloud Run の利用の幅がいままでよりもひろがったのではないでしょうか。本当に簡単に設定できるのでぜひお試しいただけるとうれしいです。