5ヶ月ほど前にwebアプリケーションを作成した際、本番環境としてGCPのAppEngineを選択したのだが、なかなかに苦労したので今更ではあるがそれらを可視化しようということで記事を作成しようと思う。
##GCPの使用用途について
Laravelの学習に際して、その本番環境として友人の勧めにより使用することを決めた。
今まではレンタルサーバーを使うことが多かったので、クラウドを扱う練習という意味でもあった。
使ったサービス
- App Engine
- Cloud SQL
- デプロイする成果物の作成 ModelSeeker
- Udemyでの学習 最速で学ぶ - Google Cloud Platform(GCP)入門完全攻略コース
- GCPの利用設定とデプロイ app.yamlの作成やgoogle cloud SDKの設定からデプロイ、データベースの設定等を行った。 この記事ではここの部分において学んだことや苦労したことなどを述べていきたい。
こちらの講座ではComputeEngineを使ってVMインスタンスを作成したり、ロードバランサーを使い、それらに対するアクセスの負荷を分散する演習などをハンズオン形式で学習することができた。AppEngineを利用するよりも難しい内容だったが、GCPってこんなことができたりするんだ、ということが少しわかるようになった。
app.yamlの設定
まず変な拡張子だなと思った。
スペースの数を間違えるだけでエラーが出ちゃうという神経質さにこっちまで神経質になった。
オートスケーリングの設定もできるみたいだけど、正直その辺はよくわからなかったから設定してない。
gcloudignoreの設定
いざデプロイ!と思いコマンドラインでgcloud app deployと叩いてみたところ、待てど待てど処理が完了しなかった。よくみるとデプロイ中のファイルが3万個くらいあった、、、。AppEngineでの上限ファイル数は1万らしく、大してファイルが多いわけでもないのになぜこんな数になるんだと思って調べてみると、gcloudignoreでデプロイ対象を適切に指定しなければならなかったらしい。
え?どうやってmigrateするの?問題
ローカル環境ではmigrationファイルをもとにartisan migrateコマンドでデータベースを構築してくれて簡単で便利だったのだが、本番環境ではここがどうしてもうまく行かなかった。ローカル環境のテーブルとクラウドを同期する方法を色々試してみてうまく行かなかったので、phpMyAdminから構築済みのデータベースを手動でローカル環境にダウンロードして、storageにアップロード、SQLにインポートという形をとった。
でもこれ、データベースの構成に修正を加えたくなった時、どうすればいいのだろうか...?
Cloud SQLの設定
上で無事に構築済みのデータベースをGCP上にアップロードできたのだが、サイトにアクセスしてもうまくデータベースに接続できておらず、エラーを吐き続けていた。app.yamlの設定もうまくできてたし、何でだろうと思っていた。
というのも本来、CloudSQLのインスタンス>作成したデータベース>テーブル みたいな順番の構成になっていないといけなかったのに、このインスタンスの中にローカルで構築した複数のテーブルをそれぞれぶちこんでいたのが原因みたいだった。
こんなの当たり前すぎて誰も記事にしていなかった。見当違いなことをしすぎてローカル環境でもエラーを吐くようになって、半泣きになりながら解決手段を模索したのは今となってはいい思い出だ。基本的にはこう言ったエラーは日を跨ぐとまた訳が分からなくなってしまうので、その日のうちに何とかするのだが流石に次の日に持ち越すことを決意した。その日は布団の中でテキストエディタの黒い画面とエラー画面が頭の中を巡り続けて、朝まで眠れなかったからダブルでしんどかった。
学んだこと
こんな感じで慣れない技術や新しいことを取り入れる時って特に神経をすり減らすし、分からないことだらけで嫌になることもあるけど、うまくいった時の達成感はそれ以上のものだし、なんかすごい成長した気分になる。
最初はわからないっていうのは当たり前のことだしそんな簡単に行ったら面白くない。それにビビらずに、ちょっと自分を過信してやってみることが大事なんだな、と抽象的な言葉ばかり並べて申し訳ないが、そういったことを感じた。
あ、あと間違えてSQLの容量設定を100GBにしてしまい、毎月3000円くらいお金がかかっているのだが、勉強代ということで(笑)
拙い文章でしたがここまで読んでいただき感謝しています。何か気になる点やご指摘等ございましたら教えていただけるとありがたいです。