DEVELOPER BLOG

開発者ブログ

HOME > 開発者ブログ > 【GCP入門】GoとCloudRunを活用して、サーバーレスを実装する - PrismScaler

【GCP入門】GoとCloudRunを活用して、サーバーレスを実装する - PrismScaler

1. はじめに

こんにちは!株式会社Definerの阪本です!
今回は、GoとCloudRunの活用についてご紹介したいと思います。

2. 目的・ユースケース

この記事では、Goをサーバレスで実行するという目的に向けて、Cloud Runという技術を活用します。
ITの現場で、Cloud Runを使ってGoコンテナを動かしたいときに、参考になる情報やプラクティスをまとめています。

3. Cloud Runとは

Google Cloud Runとは、任意の言語で記載可能な、サーバレスなコンテナ実行環境です。
ユーザーはコンテナイメージを用意するだけで、クラスタやサーバの管理をすることなくアプリケーションを実行できます。
 
コンテナを実行するホストは負荷に応じて自動的にスケールアウトし、リクエストがない際は0までスケールインします。
Cloud Runは複数のゾーンに冗長構成で作られるため、適切な負荷分散や冗長性が担保されます。
 
注意点として、Cloud Runで使用するコンテナには以下の要件があります
・コンテナイメージ内のファイルは、Linux 64 ビット用にコンパイルする必要がある
・送信先ポート(デフォルトは 8080 )で 全てのリクエストをリッスンする必要がある
・リクエストのタイムアウトまでに、レスポンスする必要がある
 

4. Goコンテナのセットアップ

まずは、Goのコンテナを作っていきます。
 
①Dockerfileの作成
以下Dockerfileのような、ミニマムのDockerfileを作成します。
FROM golang:latest as builder
ENV GOOS=linux
ENV CGO_ENABLED=0
ENV GOARCH=amd64
WORKDIR ${work directry}
COPY . .
RUN go build main.go

# runtime image
FROM alpine
COPY --from=builder ${work directry} /app

CMD /app/main 8080                
②Goのプログラム作成
Successがプリントされる、シンプルなものを用意しました
package main
import (
    "fmt"
    "os"
    "net/http"
    "strconv"
)
func handler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Suceess\n")
}
func main() {
    http.HandleFunc("/", handler)
    http.ListenAndServe(fmt.Sprintf(":%d", 8080), nil)
}                  

5. Cloud RunでGoを動かす

それでは、Cloud Runを使ってGoのコンテナを実行してみます。
 
①Container Registryの作成
Dockerイメージを格納するレポジトリを作ります。
GCPのContainer Registry画面に移動し、新規作成をクリックします。
任意の名前で、レポジトリを作成します。
 
②Container RegistryへのGoイメージのPush
以下コマンドで、イメージをビルド、Pushしました。
 
## コンテナのビルド
sudo docker build -t test .

## コンテナイメージへのタグづけ
sudo docker tag test gcr.io/${レポジトリ名}:latest

## GCRへのPush
sudo docker push gcr.io/${レポジトリ名}:latest                
 
③Cloud Runの起動
Google Cloudコンソールへアクセスし、「Cloud Run」→「サービスの作成」をクリックします。
「コンテナイメージURL」に、Google Container Registryのイメージを指定します。
 
サービス名やリージョンなどを入力していきます。
今回は自動スケーリングの「インスタンスの最大数」は1としました。
また認証は、「未認証の呼び出しを許可」とします。
 



 

②コンテナの起動確認
Cloud Runの詳細画面に移動し、URLをクリックするとSuccessが表示されました!

6. 引用・参考記事

7. 独自ソリューション「PrismScaler」について

・ PrismScalerは、開発・運用を要さずにたった3ステップで、AWSやAzure、GCPなどのマルチクラウド基盤構築を実現するWebサービスです。
・ クラウド基盤にまつわる「自動構築」「自動監視」「問題検知」「構成可視化」などの効率化を実現し、クラウドエンジニア、SRE/DevOpsエンジニアが行う泥臭く大変な作業を肩代わりするソリューションです。
・ クラウド基盤構築/クラウド移行や、クラウドの保守運用・コスト最適化など幅広い利用シーンを想定しており、IaaSやPaaSを適切に組み合わせた数百を超える高品質な汎用クラウド基盤を容易に実現できます。
 

8. お問合せ

本記事では、入門編として有益な情報を無料公開しています。ご相談やお問い合わせは「株式会社Definer」へ。

9. Definerに関して。

・ Definer Incは、ITの上流から下流まで一気通貫のワンストップソリューションをご提供しております。
・ AIやクラウドのITインフラなど、先進的なIT技術のコンサルティングから要件定義 / 設計開発 / 実装、保守運用に至るまでの統合的な支援にコミットしています。
・ DevOpsとCI/CDコンサルティングにより「少ないエンジニアで事業が成長する仕組みづくり」「エンジニアが喜ぶ、採用しやすい環境づくり」「高速なアジャイル開発環境」を実現しています。
・ また、自社プロダクトとしてPrismScalerを展開しております。PrismScalerは、AWS、Azure、GCPなどのマルチクラウド / ITインフラの高品質かつ迅速な、「自動構築」「自動監視」「問題検知」「構成可視化」を実現します。