環境
- python 3.10.4
- Ubuntu 22.04LTS
- gcloud インストール済み
構造
関数は、main.py からスタートする決まりになっている。
また、ソース構造は下記の3パターン
依存関係が不要な場合
.
├── .env.yaml
└── main.py
依存関係がある場合。requirements.txtに依存関係を記述
.
├── .env.yaml
├── main.py
└── requirements.txt
ローカルに依存関係で利用するソースを含める場合
.
├── .env.yaml
├── main.py
└── mylocalpackage/
├── __init__.py
└── myscript.py
requirements.txtの内容例。
python3.10 の場合、下記に記述してある依存関係は
CloudFunctionsのデプロイ時に自動でインストールされる。
requirements.txt
click==8.0.3
cloudevents==1.2.0
deprecation==2.1.0
Flask==2.0.2
functions-framework==3.0.0
gunicorn==20.1.0
itsdangerous==2.0.1
Jinja2==3.0.3
MarkupSafe==2.0.1
packaging==21.3
pathtools==0.1.2
pyparsing==3.0.6
setuptools==60.3.1
watchdog==1.0.2
Werkzeug==2.0.2
ランタイム環境変数は、.env.yamlで指定。
デプロイ時に、gcloud functions deploy FUNCTION_NAME --env-vars-file .env.yaml と指定する
.env.yaml
FOO: bar
BAZ: boo
デプロイの時は、オプションも多いのでスクリプト作っておくと便利。 例えばこんな感じ
deploy.sh
#!/bin/bash
# オプションrun-service-accountは、--gen2 が指定されたときのみ設定される
gcloud functions deploy 関数名 \
--project=プロジェクト名 \
--region=asia-northeast1\
--runtime=python310 \
--entry-point=実行開始するPython関数名 \
--trigger-topic=Pub/Subのトピック名 \
--env-vars-file=.env.yaml \
--memory=256MB \
--service-account=サービスアカウント名 \
--run-service-account=サービスアカウント名 \
--timeout=180S
実行の時は以下のコマンド打つだけ
$ bash deploy.sh