# Cloud RunでGoを動かしたい

5 min read
Table of Contents

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 サービスのデフォルト プロジェクトを設定するけど、なんで設定したかはまだわからない。

デプロイで連携する

次に既存のアプリを連携させる。

ソースコード ディレクトリで、次のコマンドを使用してソースからデプロイします。

Terminal window
gcloud run deploy

とのことだったので、実行した結果、

Terminal window
$ gcloud run deploy
bash: gcloud: command not found

エラーになったので再起動して実装してみる。

Terminal window
$ 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に接続するを行った。

無事にデプロイ

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

My avatar

Thanks for reading my blog post! Feel free to check out my other posts or contact me via the social links in the footer.


More Posts

Comments