こんにちは。iQeda [@iQeeeda] です。
毎日 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 を追加する
サービスアカウントの認証情報を新規作成する
認証情報を json ファイルで取得する
サービスアカウントが作成されると、それに紐づく Email も発行されます。
あとで使うので Email はコピペしておいてください。
この JSON ファイルは重要な情報なので大切に保管してください。
Google Analytics
Google Analytics にログインしてください。
GCP サービスアカウントの Email でユーザ追加する
View ID をコピペする
Slack
Incoming Webhook の URL をコピペする
下記リンクから Incoming Webhook の URL を作成・コピペをしてください。
Python プログラムを実装する
Python 実装は以下を参考にしてみてください。
ソースコードをそのまま使いたい人は、.env.example
を参考に .env
を作成して「View ID」「Incoming Webhook URL」の設定をすれば大丈夫です。
次に GCP サービスアカウント認証情報の JSON 中身を key_file.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 でちゃんと動きません。
Pipfile.lock
からrequirement.txt
を作成するpip install
して、プロジェクト内にライブラリ配置する- ソースコードはそのライブラリを参照できるようにする
- プロジェクトを zip ファイル保存する
…という作業をわざわざしないといけません。
最初から AWS Lambda を使う予定ならば pip install [package]
でよいと思います。
AWS Lambda
zip ファイルをアップロードする
ハンドラを設定する
上記 index.py
の lambda_handler(event, context)
を呼び出してほしいので、
ハンドラには index.lambda_handler
と登録します。
プログラムをテストする
このテストイベントはハンドラ lambda_handler(event, context)
の引数で受けとれます。
今回の実装はイベントで何かするわけじゃないので適当で OK です。
AWS CloudWatch と連携する
定期実行の設定を行います。
同時実行数を「1」に設定する
CloudWatch Events では、最低 1 回のLambda 関数実行を保証してくれているのですが、
1 回だけ実行するということは保証していません。
このままだと、たまに 2, 3 回関数が呼ばれて Slack が何度も通知されてしまいます。
ここで同時実行数を「1」にしておくと、抑制を少しだけ期待できます。
これでも複数回実行を抑制できない場合、実行履歴を DynamoDB でステータス管理したり、S3 に日付ファイルを生成する・それを確認するなどをして、重複起動を防いだほうがよいです。
これで毎日 Slack 通知が届くようになるはずです。
Python は環境構築が面倒ですし、このような bot を作るだけなら Lambda はピッタリですね!
お仕事ください!
僕が代表を務める 株式会社 EeeeG では Web 制作・システム開発・マーケティング相談を行っています。 なにかお困りごとがあれば、Twitter DM や Web サイトからお気軽にご相談ください。
カテゴリ「AWS」の最新記事