GCPのCloud Functions + Cloud Scheduler + Cloud Source Repositoriesで任意のPythonを定期実行させる仕組みをつくる
データ分析でPythonを使っているのですが、データを加工して〜みたいな処理を毎日やるタスクが地味にあったりするので自動化したいです。
最近はGCPも触っているので、GCPのサービスだけでそれを実現できないかなと考えました。いわゆるサーバレスな構成になっています。
試しにこの記事ではSlackに時報を打ってくれるbotを作成してみました。
構成
- Cloud Source Repositories: ソースコード置き場
- Cloud Functions: 実行する関数の定義
- Cloud Scheduler: 関数を定期的に実行するジョブの作成
お試し: Slack時報botの作成
リポジトリの作成
GUIで作成します。
プロジェクトを作成してリポジトリにpush
リポジトリをcloneします。
gcloud source repos clone sample --project=[YOUR_GCP_PROJECT]
プロジェクト構成は以下の通り。
sample ├ cloudfunctiontest │ ├ requirements.txt │ ├ util.py │ └ main.py └ README.md
それぞれ内容は以下の通りです。 ※ README.md は適当に書いておいてください
requirements.txt
は以下
slackweb
util.py
は以下
import slackweb from datetime import datetime, timedelta, timezone slack_webhook_url = 'YOUR_SLACK_WEBHOOK_URL' def slackpost(): JST = timezone(timedelta(hours=+9), 'JST') nowtime = datetime.now(JST).strftime("%Y年%m月%d日 %H時%M分") text = "【時報】現在時刻 " + nowtime + " をお知らせするよ。(cloud functions運用テスト用)" slack = slackweb.Slack(url=slack_webhook_url) slack.notify(text=text, channel='#YOUR_CHANNEL')
main.py
は以下
# -*- coding: utf-8 -*- from util import slackpost def main(request): slackpost()
ここまでの編集をコミットしたらpushします。
git add -A git commit -m 'fix' git push --all google
Cloud Functions の設定
作成できた関数はGUIや gcloud functions list
, gcloud functions describe [FUNCTION_NAME]
コマンドで確認できます。
Cloud Scheduler の設定
- 頻度は crontab と同じ書き方で書ける
- ターゲットはHTTP
- URLにfunctionのurlを記入
作成されたジョブはGUIや gcloud beta scheduler jobs list
コマンドで確認できます。
実際にこんな感じで時報を打ってくれています。(3分おきに設定したからちょっとうるさいw)
これで各種タスクの自動化がサーバレスで現代的な感じでできました!
エンジニアじゃなくてもいい感じに定期実行ジョブをサクサク作れて感動です。