👻

速攻でCloud RunにGoのAPIサーバーを立てる

2023/08/03に公開

なぜやろうと思ったのか

Unityでとある機能を実装したかった時にWebアプリ側の実装を待つ必要がありました。
とりあえずUnityサイドだけで実装を試してみたかったのでこちらの選択をしました。

実装方法

大まかな流れ

  1. GoでAPIサーバーの実装
  2. Dockerfile作成
  3. GCPのCLIをインストールし初期設定をすます
  4. GCPのプロジェクト作成
  5. Docker Imageのプッシュ
  6. GCP設定画面からイメージをデプロイボタンをポチる

GoでAPIサーバーを作る

package main

import (
	"net/http"
)

func helloHandler(w http.ResponseWriter, r *http.Request) {
	if r.Method == http.MethodGet {
		w.Write([]byte("Hello, World!"))
	} else {
		http.Error(w, "Invalid request method", http.StatusMethodNotAllowed)
	}
}

func main() {
	http.HandleFunc("/hello", helloHandler)

	// Start the server on port 8080
	http.ListenAndServe(":8080", nil)
}

デプロイされたAPIサーバーにGETメソッドを送ったら"Hello, World!"を返すサーバーを作成。

Dockerfileを作成

FROM golang:latest

LABEL maintainer="Your Name <your.email@example.com>"

WORKDIR /app

COPY go.mod ./

RUN go mod download

COPY . .

RUN go build -o main .


EXPOSE 8080

CMD ["./main"]

GCPのCLIをインストールし初期設定をすます

公式ページ
https://cloud.google.com/sdk/docs/install?hl=ja

公式ページに沿って設定していくと簡単に自分のGCPアカウントと紐づけできます!
途中でログインする必要がありますが自動でブラウザが開いて指定のアカウントでログインするとか…

GCPでプロジェクトを作成する

プロジェクトを作成する
img.png

プロジェクトIDは必要になるので控えておく。

検索欄で調べてコンテナレジストリとCloud Runを有効化しておく。
img_1.png

img_2.png

Docker Imageのビルド、プッシュ

docker build -t gcr.io/testgcpid/hello-app .     

docker push gcr.io/testgcpid/hello-app

testgcpidは先ほど控えておいたIDになります!

hello-appは自由に指定できてアプリの表示名になります!

GCP設定画面からイメージをデプロイボタンをポチる

コンテナレジストリを開きCloud Runにデプロイするボタンを押す
img_3.png

初回だとサービスアカウントを作ってと出るかも。。。

押したらアプリの初期設定画面が出る
リージョンを指定
img_4.png

認証の指定
img_5.png

作成でデプロイが開始し数秒後にデプロイが完了します!

試す方法

Cloud Runのページを開きURLを確認する
img_6.png

指定のURLにcurlコマンドでリクエストを送るとメッセージが返ってきたら成功!

curl -X GET http://localhost:8080/hello
Flamers Tech Blog

Discussion