[Day.12] Laravel on Cloud Run created by Terraform Modules
以下の12日目のエントリです。
- Laravel Advent Calendar 2021 [1]
- Google Cloud Platform Advent Calendar 2021 [2]
- Terraform Advent Calendar 2021 [3]
「GCP上でLaravelプロダクトを」という案件がありまして、先月下調べしました。
自身としては久々の GCP であり、いかに今風に作れるか、を目指して Cloud Run を選択してみました。そして、インフラの再構築も容易にやれるといいよね、と思って省エネ目指してできるだけ terraform-google-modules で構築を進めようとしています[4]。その途中経過のお話です。
Laravel on Cloud Run まで
時間の都合(...)で書くのを思いっきり手抜きしてしまうのですが、↓の「まだ検証段階」のところをクリックして展開すると経過がまとまってます。
かいつまんで段階を列挙すると、
- Vue.js のビルド
-
appBase/run
ディレクトリで以下手順により実現可能だと思います- make local
- make up
- docker-compose exec node make npmipack
-
-
Artifact Registry へ image を push
- (ローカルで動作確認して)
appBase
ディレクトリで appBase/Makefile[5] の- make build (docker build ...)
- make tag (docker tag ...)
- make push (docker push ...)
- (ローカルで動作確認して)
- (初回だけ) push した image を 「Cloud Run にデプロイ」
- 2回目以降は image を push したら自動でデプロイが走り、成功したら更新される感じ
- プライベートIP での Cloud SQL (for PosqtgreSQL)・Memorystore for Redis への接続は サーバーレス VPC アクセス コネクタ 経由になるので API を有効にして[6] Cloud Run の管理画面で設定
という流れでできたようです。
ソースコードはこちら(12/12 18:00 時点で↑の通りに期待動作するかは未確認。。)
AWS Fargate と比較になる点
(個人の感想です)
- 複数コンテナを突っ込めないので nginx -> laravel というよくある感じの構成にはできなさそうです。自分は php-fpm でビルトインサーバーを ENTRYPOINT から起動する、というやり方にしてます。apache 単体という手もあると思います。Heroku で Laravel 動かすのと似たような感じ、でした。
- image の push 方法が AWS ECR とちょっと違う感じがあった記憶です。そんなに大差はないようには思います。
備考
約1週間で、料金実績が以下です。僕はこれを確認した直後に両方止めて destroy しました。だいぶスペック弱めたのに。
- Cloud SQL for PostgreSQL : ¥1,500
- Memorystore for Redis : ¥2,000
以後、DBは sqlite、Redisは file に変更。 Cloud Run は叩かれない限り無料(っぽい)ですが、これだと毎回DB作り直されますです。(それがソースコードリポジトリの「sqlite」ブランチ)
(Infrastructure) created by Terraform Modules
これから、という感じなのですが、以下を使っていく予定です。
Network
Cloud NAT
GCLB
bastion host (これから精査。Cloud SQL や Redis を見に行くとか用にする想定。Cloud Run で ECS Exec みたいなことしたい・・・)
container-vm (これから精査。↑のとどっちかを選択、もしくは GCE 用の module を自作するか。要は GCE を置かざるを得ない、と考えてます。。)
さいごに
明日13日目の予定は以下になっています。それぞれお楽しみに。
- Laravel :「細かすぎて伝わらないLaravel選手権8(Laravel8)」by @okdyy75 さん
- Google Cloud Platform :「Cloud Tasksについて」by que9さん
- Terraform :「Terraform Workspaceを2年以上運用しての振り返り」by ksugahara08さん
-
11日目は @katsugdgd さんの wikiによるとバージョン4(2013年5月)ではコードがゼロベースから書き直されたらしい。何があったんだろうね。 でした。 ↩︎
-
11日目は @sano3071 さんの Cloud Workflows から外部の JSON データを読み込んでセットする方法 でした。 ↩︎
-
11日目は @c6tower さんの 【Terraform】list, map, objectの結合を整理したい でした。 ↩︎
-
2021/12/12 時点で Cloud Run の module がまだないようなので、おそらくここは自作になりそう。探せばあるかな・・・ ↩︎
-
GCP_PROJECT
は設定が必要 ↩︎ -
1つ1つ API を有効にするのが面倒なので、GCPのAPIを全部有効化するワンライナー - Qiita (by shiozaki さん) の手法を使いたい・・・ ↩︎
Discussion