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がプリントされる、シンプルなものを用意しました
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では、
・ITの上流から下流まで一気通貫のワンストップソリューションをご提供。
・AIやクラウドのITインフラなど、先進的なIT技術のコンサルティングから要件定義 / 設計開発 / 実装、保守運用に至るまでの統合的な支援にコミット。
・少ないエンジニアで事業が成長する仕組みづくりの実現。
・エンジニアが喜ぶ、採用しやすい環境づくりの実現。
・高速なアジャイル開発環境の実現。
・自社プロダクトとしてPrismScalerを展開。
上記事業内容を進行しております。
※「開発者ブログ」では、エンジニアの入門編として有益な情報を無料公開しています。
ご相談やお問い合わせは「株式会社Definer」へ。