準備
- OSはUbuntu 20.04 (64-bit)
- GCPにテスト用のプロジェクト作っておく
- gcloudコマンドが使える状態にする
- チュートリアル用コードをクローンしておく。
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
ローカルで確認
ディレクトリ移動する。
cd python-docs-samples/run/system-package
dockerイメージをビルドする。
docker build --tag graphviz:python .
コンテナを起動する。
docker run --rm -p 9090:8080 -e PORT=8080 graphviz:python
以下URLにアクセスし、画像が表示されることを確認する。(空白が入ってるがそのままでOK)
https://localhost:9090/diagram.png?dot=digraph Run { rankdir=LR Code -> Build -> Deploy -> Run }
GCP上で確認
# プロジェクト
export GOOGLE_CLOUD_PROJECT=<PROJECT_ID>
# GCRにコンテナを上げる
gcloud builds submit --tag gcr.io/${GOOGLE_CLOUD_PROJECT}/graphviz
# Cloud Runにデプロイする
gcloud beta run deploy graphviz --image gcr.io/${GOOGLE_CLOUD_PROJECT}/graphviz
デプロイ時にどのGCPプロダクトを利用するか選択可能だが、今回はCloud Run full managedを選択する。
ログに公開されるURLが表示されるのでそれを元に以下のようなURLにアクセスし、ローカルで試したときと同様の画像が表示されることを確認する。
https://<SERVICE_DOMAIN>/diagram.png?dot=digraph Run { rankdir=LR Code -> Build -> Deploy -> Run }
またGCPコンソールのCloud Run管理画面からデプロイされているエンドポイントを確認できる。
後片付け
このままだとデプロイしたアプリが動き続けてお金がかかってしまうので、削除しておく。
Cloud Run管理画面からエンドポイントの削除が可能なので消しておく。
またGCR(Google Container Registory)上にリポジトリがあるのもストレージとして課金が発生してしまう可能性があるので、気になる場合はそっちも消しておく。
所感
もっと複雑な環境向けかと勘違いしていたがチュートリアルではDockerfileと単一スクリプトのみの小規模なアプリでも簡単に実行、リリースが出来て便利だと感じた。
Dockerfileで自由に環境設定が可能なのでアプリを置く環境を細かめに修正したい場合や、
GCP以外でも利用する、つまりマルチクラウドを想定している場合はCloud Runで良さそうと思った。
ただGAEに慣れてるならGAE 2ndでも大体済みそうな気もしている。