こんにちは。自由になりたいデータサイエンティストです。
Google Cloud Functionsをデプロイ前にシミュレーションできるFunctions Freameworkの紹介です。
さくっとコマンド
html関数
・Functions Framework起動
pip install functions-framework
# htmlのテスト
functions-framework --source=main.py --target=main_http --port=8080
# デバッグモードで起動
functions-framework --source=main.py --target=main_http --port=8080 --debug
・ターミナルの別タブでローカル8080番ポートにリクエストを飛ばす。
Pythonの場合は以下のイメージ
import requests
import json
url = 'http://localhost:8080'
headers = {'Content-Type': 'application/json'}
data = {'data_1': ['a', 'b', 'c'], 'data_2': 184}
res = requests.post(url, headers=headers, data=json.dumps(data))
もちろんcurlコマンドでもOKです。
Pub/Sub関数
Pub/Subはメッセージの処理がけっこうめんどくさいです。
処理の流れは以下です。
- Functions Frameworkを起動
- Pub/Subエミュレータを起動
- Pub/SubエミュレータからFuctions Frameworkにメッセージを送信
それぞれ別のターミナルで行う必要があります。
Functions Frameworkを起動
pip install functions-framework
# pubsubのテスト
functions-framework --source=main.py --target=main_pubsub --signature-type=event --port=8080
Pub/Subエミュレータを起動
export PUBSUB_PROJECT_ID=my-project
gcloud beta emulators pubsub start \
--project=$PUBSUB_PROJECT_ID \
--host-port=localhost:8085
Pub/SubエミュレータからFuctions Frameworkにメッセージを送信
export PUBSUB_PROJECT_ID=my-project
export TOPIC_ID=my-topic
export PUSH_SUBSCRIPTION_ID=my-subscription
$(gcloud beta emulators pubsub env-init)
# メッセージ送信用ツールをインストール
git clone https://github.com/googleapis/python-pubsub.git
cd python-pubsub/samples/snippets/
pip install -r requirements.txt
python publisher.py $PUBSUB_PROJECT_ID create $TOPIC_ID
python subscriber.py $PUBSUB_PROJECT_ID create-push $TOPIC_ID $PUSH_SUBSCRIPTION_ID http://localhost:8080
python publisher.py $PUBSUB_PROJECT_ID publish $TOPIC_ID
同じ関数を書き換えながら複数回テストする際は、最後の行だけを繰り返し実行すればOKです。
まとめ
Google Cloud Functionsをローカル環境でテストする、「Functions Framework」の使い方を紹介しました!
ローカル環境で開発→Functions Frameworkでテスト→Gitにpush→自動デプロイ
の流れで開発を行えると良さそうです。
コメント