Gormを使用し、APIを作成した。 前回はAWSNestJsだったので、今回はGCPを使用してみることにした。

Cloud Run

今回はCloud Runを使用することにした。

そもそもCloud Runとは、

フロントエンド サービスやバックエンド サービス、バッチジョブの実行、ウェブサイトやアプリケーションのデプロイ、処理ワークロードのキューへの追加を行います。インフラストラクチャを管理する必要はありません。

毎月 200 万リクエストは無料です。

Amazon ECSAWS 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

というエラーがでた。

VSCodeGitbashで起こるエラーっぽいので、コマンドプロンプトで実行したところうまく通った。

このあと何回かデプロイを試したが何回もエラーで落ちる。

エラーとの戦い(データベースへの接続に失敗しました)

Googleが用意したサンプルコードだとデプロイが成功するのに自身のアプリはデプロイできない。

仕方ないので、コメントアウトをしつつ、デプロイを試していく。

すると

データベースへの接続に失敗しました: dial tcp 127.0.0.1:3306: connect: connection refused"
exit(1)

ここで落ちていることが判明した。

つまりデーターベースに接続できていない。

ちょっと原因不明点が多すぎて原因究明できなかったので、また同じことが起きた時は原因まで調査するようにする。

Cloud SQLに接続するようにする

ローカルのDBに接続できないのであれば、いずれ使用する予定だったCluod SQLであれば接続できるのでは?

という風に思い、GormでCloud SQLに接続するを行った。

無事にデプロイ

で、上記完了後に再デプロイした結果、無事にデプロイできました。