【自動化】Google Analyticsの集計→Slack通知

  • このエントリーをはてなブックマークに追加
  • Pocket

こんにちは。タクマ™ [@suwaru_blog] です。

毎日 Google Analytics で「PV・Session・User」など確認するのは面倒です。
こういう単純作業は Google Analytics Reporting API で自動化するのがいいですよ。

今回は AWS の「Lambda」と「CloudWatch」を使って、
Google Analytics のメトリクスを毎日 Slack チャンネル通知するようにしてみます。

この記事で AWS Lambda の使い方がわかる!

ローカルでは Python 3.8.5 でプログラムを書いていますが、
Lambda は「サーバレス」なので、それを環境構築なしで動かせるので非常に便利です。

サーバレスってはじめてなんだけど

…な人でもわかるように画像たっぷりで解説しているので、
結構いいチュートリアルになると思います。では早速はじめましょう!

GCP

こちらに ( Google Cloud Platform ) アクセスしてください。

プロジェクトを新規作成する

プロジェクト選択
プロジェクトを新規作成
任意のプロジェクト名を付けます

ライブラリに Google Analytics Reporting API を追加する

左サイドバーから「ライブラリ」を選択
※ 下の Google Analytics API は古いバージョンなので注意
Google Analytics Reporting API を有効にする

サービスアカウントの認証情報を新規作成する

左サイドバーから「認証情報」を選択
サービスアカウントの認証情報を新規作成
サービスアカウント名を設定する
適切なロールを設定する
そのまま進んで OK です

認証情報を json ファイルで取得する

サービスアカウントが作成されると、それに紐づく Email も発行されます。
あとで使うので Email はコピペしておいてください。

サービスアカウントをクリックしてください
新しいキーを発行してください
json で発行してください

この JSON ファイルは重要な情報なので大切に保管してください。

Google Analytics

Google Analytics にログインしてください。

GCP サービスアカウントの Email でユーザ追加する

左下の歯車マークから「View User Management」
ユーザ追加
先ほどの GCP サービスアカウントの Email で追加

View ID をコピペする

左下の歯車マークから「View Settings」
View ID をコピペする

Slack

Incoming Webhook の URL をコピペする

下記リンクから Incoming Webhook の URL を作成・コピペをしてください。

Python プログラムを実装する

Python 実装は以下を参考にしてみてください。

コードをそのまま使いたい人は「View ID」「Incoming Webhook URL」の設定をしてください。

そして GCP サービスアカウント認証情報の JSON 中身を以下に貼り付けてください。

以下コマンドで Google Analytics のメトリクスが表示できたら OK です。

python index.py

ライブラリ

実装では以下 Python ライブラリを使っています。
自分でやってみたい人は参考にしてみてください。

pip install google-api-python-client
pip install oauth2client

プロジェクトを zip ファイルにする

作成したプロジェクト全体を zip ファイル保存してください。
この zip ファイルを AWS Lambda にアップロードしていきます。

【重要】pipenv と AWS Lambda は相性が悪い件

pipenv install [package] するとパッケージは仮想環境の中にインストールされます。
※ 具体的な場所は pipenv --venv でわかります。

素のプロジェクトにはライブラリが入っていないので、
そのまま zip ファイル化しても Lambda でちゃんと動きません。

  1. Pipfile.lock から requirement.txt を作成する
  2. pip install して、プロジェクト内にライブラリ配置する
  3. ソースコードはそのライブラリを参照できるようにする
  4. プロジェクトを zip ファイル保存する

…という作業をわざわざしないといけません。
最初から AWS Lambda を使う予定ならば pip install [package] でよいと思います。

AWS Lambda

zip ファイルをアップロードする

関数の作成
「一から作成」して適切な関数名を設定する
「アクション」から zip ファイルをアップロード

ハンドラを設定する

基本設定「編集」
index.py の lambda_handler 関数を呼び出す

上記 index.pylambda_handler(event, context) を呼び出してほしいので、
ハンドラには index.lambda_handler と登録します。

プログラムをテストする

「テスト」を選択する
テストイベントを設定します

このテストイベントはハンドラ lambda_handler(event, context) の引数で受けとれます。
今回の実装はイベントで何かするわけじゃないので適当で OK です。

もう一度「テスト」実行

AWS CloudWatch と連携する

定期実行の設定を行います。

[デザイナ]ータブからトリガーを追加する
rate(1 day) で「毎日実行」の設定

同時実行数を「1」に設定する

CloudWatch Events では、最低 1 回のLambda 関数実行を保証してくれているのですが、
1 回だけ実行するということは保証していません。

このままだと、たまに 2, 3 回関数が呼ばれて Slack が何度も通知されてしまいます。
ここで同時実行数を「1」にしておくと、抑制を少しだけ期待できます。

同時実行数を編集
1 に設定する

これでも複数回実行を抑制できない場合、実行履歴を DynamoDB でステータス管理したり、S3 に日付ファイルを生成する・それを確認するなどをして、重複起動を防いだほうがよいです。

これで毎日 Slack 通知が届くようになるはずです。
Python は環境構築が面倒ですし、このような bot を作るだけなら Lambda はピッタリですね!

お仕事ください!

僕が代表を務める 株式会社 EeeeG では Web 制作・システム開発・マーケティング相談を行っています。
なにかお困りごとがあれば、Twitter DM や Web サイトからお気軽にご相談ください。

コメントを残す

*