Cloud Functionsをデプロイ前にシミュレーションする【Functions Framework】

GCP GCP

こんにちは。自由になりたいデータサイエンティストです。

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はメッセージの処理がけっこうめんどくさいです。

処理の流れは以下です。

  1. Functions Frameworkを起動
  2. Pub/Subエミュレータを起動
  3. 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自動デプロイ

の流れで開発を行えると良さそうです。

コメント

タイトルとURLをコピーしました