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に接続するを行った。
無事にデプロイ
で、上記完了後に再デプロイした結果、無事にデプロイできました。