見出し画像

Cloud Run で社内向けシステムを構築しようとしている話

こんにちは、まちいろの工藤です。

弊社では hacomono というフィットネスジムなどのリアル店舗向け予約・決済システムを開発しているのですが、このプロダクトの社内向けシステムを構築するにあたって、Cloud Run が使えないか調査してみました。

Cloud Run とは

Cloud Run とは、GCP (Google Cloud Platform) で提供されているコンテナを利用したサーバーレス実行環境です。例えば AWS Lambda では、利用可能な言語・バージョンにて開発をする必要がありますが、Cloud Run であればコンテナさえ用意すればフルマネージドなサーバーレス環境を構築することができます。

コンテナを用意すれば OK ということで、これまでの開発・テスト手法をそのまま流用してサーバーレスを実現できるということになります。

Cloud Run にデプロイしてみる

それでは実際に Cloud Run にデプロイしてみます。

まずはデプロイするコンテナの準備を行います。ここでは Go + echo のサンプルコード + Dockerfile を用意し、gcloud コマンドでコンテナをビルド・登録します。

Go + echo はとりあえず公式サンプルのもので。

package main

import (
	"net/http"
	
	"github.com/labstack/echo/v4"
)

func main() {
	e := echo.New()
	e.GET("/", func(c echo.Context) error {
		return c.String(http.StatusOK, "Hello, World!")
	})
	e.Logger.Fatal(e.Start(":3000"))
}

Dockerfile は多少改変していますが、以下のような内容で。

# Download mod
FROM golang:1.14.0 as mod_env

ENV GO111MODULE on
RUN apt-get update
WORKDIR /go/src/github.com/machiiro/xxxx
COPY go.mod go.sum ./
RUN go mod download

# Build
FROM mod_env as build_env

COPY . .
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o main main.go

# Settings
FROM alpine:latest as run_env

RUN apk --update add tzdata
RUN apk update && apk add --no-cache ca-certificates && apk add mailcap

ENV HACOMONO_METRICS_ENV=production

COPY --from=build_env /go/src/github.com/machiiro/xxxx/main /main

EXPOSE 3000

CMD ["/main"]

gcloud コマンドでコンテナイメージを登録します。成功すると、Container Registry にイメージが登録されます。

gcloud builds submit --tag gcr.io/machiiro/xxxx

次に Cloud Run にコンテナをデプロイします。

gcloud beta run deploy xxxx --image gcr.io/machiiro/xxxx --region asia-northeast1 --platform managed

成功すると Cloud Run の一覧画面に表示されます。あとは実際にブラウザで API エンドポイントにアクセスして、レスポンスが返ってくれば成功です。

サービス – Cloud Run – hacomono – Google Cloud Platform

Cloud SQL に接続する

実際のシステムでは何らかのデータベースが必要となります。Cloud Run では、コンテナから Cloud SQL への接続が簡単にできるようサポートされています。

まず Cloud Run の接続設定画面で セットアップ済みの Cloud SQL を選択します。

新しいサービス アカウントの作成 – Cloud Run – hacomono – Google Cloud Platform

あとは echo アプリの方で unix ソケットでDB に接続するよう設定を行えば完了です。unix ソケットのパスについてはドキュメントにも書いてありますが、以下のような内容になります。

DB ユーザー:DB パスワード@unix(/cloudsql/プロジェクト名:asia-northeast1:Cloud SQL 名)/データベース名?parseTime=true

その他検討したこと

・フロントエンドのデプロイ先をどうするか
こちらも Cloud Run にしても良いのですが、弊社で良く採用している Netlify + Nuxt.js の構成で行こうかなと思っています。

・マイグレーション方法をどうするか
gcloud コマンドを使って Cloud SQL に直接 SQL を流せるので、それで独自のマイグレーションを実装する方向で行こうかなと思っています。

最後に

実際に体験してみたところ、Cloud Run を利用することでアプリの開発に集中することができそうです。社内システムの場合は時間課金ではなく従量課金となるサーバーレスもコスト面で優位です。

まずは小さいところから利用してみて、今後プロダクションでの利用も検討していきたいと思います。

この記事が気に入ったらサポートをしてみませんか?