Gorm
を使用し、API
を作成した。
前回はAWS
とNestJs
だったので、今回はGCP
を使用してみることにした。
Cloud Run
今回はCloud Run
を使用することにした。
そもそもCloud Run
とは、
フロントエンド サービスやバックエンド サービス、バッチジョブの実行、ウェブサイトやアプリケーションのデプロイ、処理ワークロードのキューへの追加を行います。インフラストラクチャを管理する必要はありません。
毎月 200 万リクエストは無料です。
Amazon ECS
とAWS App Runner
と比較されることが多いらしい。
Amazon ECSとApp RunnerとCloud runの比較
特筆すべきは無料枠があることな気がする。
デプロイ
そんなCloud Run
にデプロイしていく。
クイックスタート: Cloud Run に Go サービスをデプロイする
公式が丁寧なのでこれに沿っていく。
ちなみに前提は下記の通りになる。
Go
で既にAPI
を作成している- フレームワークは未使用
Go
のバージョンはgo 1.21.4
- ローカルでサーバーを立ち上げる時は
net/http
を使用した。
アカウント作成
まずはアカウントを作成する必要がある。
作成後、 プロジェクト セレクタ ページで、Google Cloud
プロジェクトを作成する。
プロジェクト名を作成するだけで作成が完了する。
次に課金が有効になっていることを確認する必要がある。
課金が有効になっていない場合は、
「このプロジェクトには請求先アカウントがありません」
というポップアップが表示されるらしい。
Google Cloud CLI をインストール
ここで問題がないようであれば、Google Cloud CLI
をインストールする。
以下、Windows
での方法になる。
参考;インストール手順
Google Cloud CLI インストーラをダウンロード。
インストール後は画面の指示に従い、進めていく。
全部、Next☞
でやったけど問題なさそうだった。
インストールが完了するとログインを求められ、
これで gcloud CLI での認証が完了しました。
問題なければ上記のページに飛ばされる。
同時にターミナル ウィンドウが開いて gcloud init
コマンドが実行される。
gcloud config set project PROJECT_ID
で、Cloud Run
サービスのデフォルト プロジェクトを設定するけど、なんで設定したかはまだわからない。
デプロイで連携する
次に既存のアプリを連携させる。
ソースコード ディレクトリで、次のコマンドを使用してソースからデプロイします。
gcloud run deploy
とのことだったので、実行した結果、
$ gcloud run deploy
bash: gcloud: command not found
エラーになったので再起動して実装してみる。
$ gcloud run deploy
/c/Users/username/AppData/Local/Google/Cloud SDK/google-cloud-sdk/bin/gcloud: line 203: /c/Users/username/AppData/Local/Microsoft/WindowsApps/python3: Permission denied
/c/Users/username/AppData/Local/Google/Cloud SDK/google-cloud-sdk/bin/gcloud: line 203: /c/Users/username/AppData/Local/Microsoft/WindowsApps/python3: Permission denied
というエラーがでた。
VSCode
のGitbash
で起こるエラーっぽいので、コマンドプロンプトで実行したところうまく通った。
このあと何回かデプロイを試したが何回もエラーで落ちる。
エラーとの戦い(データベースへの接続に失敗しました)
Google
が用意したサンプルコードだとデプロイが成功するのに自身のアプリはデプロイできない。
仕方ないので、コメントアウトをしつつ、デプロイを試していく。
すると
データベースへの接続に失敗しました: dial tcp 127.0.0.1:3306: connect: connection refused"
exit(1)
ここで落ちていることが判明した。
つまりデーターベースに接続できていない。
ちょっと原因不明点が多すぎて原因究明できなかったので、また同じことが起きた時は原因まで調査するようにする。
Cloud SQLに接続するようにする
ローカルのDB
に接続できないのであれば、いずれ使用する予定だったCluod SQL
であれば接続できるのでは?
という風に思い、GormでCloud SQLに接続するを行った。
無事にデプロイ
で、上記完了後に再デプロイした結果、無事にデプロイできました。