Eventarc が GA になったので、試しに Firebase Console へのアクセスをトリガーに Cloud Run を実行してみる

Gossy Tsukagoshi
google-cloud-jp
Published in
7 min readFeb 4, 2021
Eventarc (Google Cloud Blogより)

待望の 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 Audit Logs の変更

実際にどのようなログが流れてくるのか確認してみます。Cloud Loggingで確認することができるので、コンソールのロギングからログ エクスプローラーを表示します。Firebase のプロジェクトページを表示すると次のように GetFirebaseProject のログが流れてくるのがわかると思います。

Cloud Logging で確認

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 Logging で eventarc-sample が実行さていることの確認

まとめ

本当に簡単な手順で Cloud Run のトリガー設定ができました。

今回は GetFirebaseProject をトリガーにしてみましたが、 Cloud Audit Log の他のログをトリガーにすることもできます。たとえば、 Cloud Storage にファイルが作られたイベントをトリガーにしたり、IAM で role が作られたイベントをトリガーにしたりと非常に多くのイベントソースを選択することができます。さらに、 Cloud Audit Log 以外にも Cloud Pub/Sub のトピックをイベントソースにすることも可能です。

Eventarc の登場により、Cloud Run の利用の幅がいままでよりもひろがったのではないでしょうか。本当に簡単に設定できるのでぜひお試しいただけるとうれしいです。

参考

--

--

Gossy Tsukagoshi
google-cloud-jp

Application Modernization Specialist in Google Cloud. All views and opinions are my own.