{
  "$type": "site.standard.document",
  "canonicalUrl": "https://blog.nove-b.dev//posts/api-by-go-on-gcp",
  "description": "GolangでAPIを作成したのでCloud Runで動かしてみる",
  "path": "/posts/api-by-go-on-gcp",
  "publishedAt": "2024-05-31T00:00:00.000Z",
  "site": "at://did:plc:2atly2y5kfyjcj5zap6pv4wd/site.standard.publication/3mmxeqr2tcb2k",
  "tags": [
    "golang",
    "Cloud SQL",
    "Gorm"
  ],
  "textContent": "Gormを使用し、APIを作成した。前回はAWSとNestJsだったので、今回はGCPを使用してみることにした。\n\nCloud Run\n\n今回はCloud Runを使用することにした。\n\nそもそもCloud Runとは、\n\n> フロントエンド サービスやバックエンド サービス、バッチジョブの実行、ウェブサイトやアプリケーションのデプロイ、処理ワークロードのキューへの追加を行います。インフラストラクチャを管理する必要はありません。\n>\n> 毎月 200 万リクエストは無料です。\n\nAmazon ECSとAWS App Runnerと比較されることが多いらしい。\n\nAmazon ECSとApp RunnerとCloud runの比較\n\n特筆すべきは無料枠があることな気がする。\n\nデプロイ\n\nそんなCloud Runにデプロイしていく。\n\nクイックスタート: Cloud Run に Go サービスをデプロイする\n\n公式が丁寧なのでこれに沿っていく。\n\nちなみに前提は下記の通りになる。\n\n- Goで既にAPIを作成している\n- フレームワークは未使用\n- Goのバージョンはgo 1.21.4\n- ローカルでサーバーを立ち上げる時はnet/httpを使用した。\n\nアカウント作成\n\nまずはアカウントを作成する必要がある。\n\nアカウントを作成する\n\n作成後、\nプロジェクト セレクタ\nページで、Google Cloud プロジェクトを作成する。\n\nプロジェクト名を作成するだけで作成が完了する。\n\n次に課金が有効になっていることを確認する必要がある。\n\n課金が有効になっているか確認する\n\n課金が有効になっていない場合は、\n\n> 「このプロジェクトには請求先アカウントがありません」\n\nというポップアップが表示されるらしい。\n\nGoogle Cloud CLI をインストール\n\nここで問題がないようであれば、Google Cloud CLI をインストールする。\n\n以下、Windowsでの方法になる。\n\n参考;インストール手順\n\nGoogle Cloud CLI インストーラをダウンロード。\n\nインストール後は画面の指示に従い、進めていく。\n\n全部、Next☞でやったけど問題なさそうだった。\n\nインストールが完了するとログインを求められ、\n\n> これで gcloud CLI での認証が完了しました。\n\n問題なければ上記のページに飛ばされる。\n\n同時にターミナル ウィンドウが開いて gcloud init コマンドが実行される。\n\nで、Cloud Run\nサービスのデフォルト プロジェクトを設定するけど、なんで設定したかはまだわからない。\n\nデプロイで連携する\n\n次に既存のアプリを連携させる。\n\n> ソースコード ディレクトリで、次のコマンドを使用してソースからデプロイします。\n>\n> \n\nとのことだったので、実行した結果、\n\nエラーになったので再起動して実装してみる。\n\nというエラーがでた。\n\nVSCodeのGitbashで起こるエラーっぽいので、コマンドプロンプトで実行したところうまく通った。\n\nこのあと何回かデプロイを試したが何回もエラーで落ちる。\n\nエラーとの戦い(データベースへの接続に失敗しました)\n\nGoogleが用意したサンプルコードだとデプロイが成功するのに自身のアプリはデプロイできない。\n\n仕方ないので、コメントアウトをしつつ、デプロイを試していく。\n\nすると\n\nここで落ちていることが判明した。\n\nつまりデーターベースに接続できていない。\n\nちょっと原因不明点が多すぎて原因究明できなかったので、また同じことが起きた時は原因まで調査するようにする。\n\nCloud SQLに接続するようにする\n\nローカルのDBに接続できないのであれば、いずれ使用する予定だったCluod SQLであれば接続できるのでは?\n\nという風に思い、GormでCloud SQLに接続するを行った。\n\n無事にデプロイ\n\nで、上記完了後に再デプロイした結果、無事にデプロイできました。",
  "title": "Cloud RunでGoを動かしたい"
}