Cloud Run を最速で触ってみる

chidakiyo
chidakiyo
Apr 10, 2019 · 8 min read
Image for post
Image for post

Cloud Run とは

早速、こちらのQuickStartやってみましょう

事前に必要なこと

  • プロジェクトのbillingを有効にする
  • Cloud Run APIを有効にする
  • CloudSDKのインストール済み/設定済みであること
  • componentsのupdateと、beta componentsのinstallが必要です。

コンポーネントをupdateする

gcloud components update

betaコンポーネントをinstallする

gcloud components install beta

Cloud Runのリージョンを設定する

gcloud config set run/region us-central1

ビルドとデプロイ

ディレクトリの作成

mkdir helloworld-go
cd helloworld-go

ソースコードの作成

package mainimport (
"fmt"
"log"
"net/http"
"os"
)
func handler(w http.ResponseWriter, r *http.Request) {
log.Print("Hello world received a request.")
target := os.Getenv("TARGET")
if target == "" {
target = "World"
}
fmt.Fprintf(w, "Hello %s!\n", target)
}
func main() {
log.Print("Hello world sample started.")
http.HandleFunc("/", handler) port := os.Getenv("PORT")
if port == "" {
port = "8080"
}
log.Fatal(http.ListenAndServe(fmt.Sprintf(":%s", port), nil))
}

環境変数で渡されたPORTでlistenするサーバを作成します。

こちらをGCRにアップロードしていきましょう

コンテナ化し、GCR(Google Container Repository)にアップロードする

以下の内容で Dockerfile を作成します

# Use the offical Golang image to create a build artifact.
# This is based on Debian and sets the GOPATH to /go.
# https://hub.docker.com/_/golang
FROM golang:1.12 as builder
# Copy local code to the container image.
WORKDIR /go/src/github.com/knative/docs/helloworld
COPY . .
# Build the command inside the container.
# (You may fetch or manage dependencies here,
# either manually or with a tool like "godep".)
RUN CGO_ENABLED=0 GOOS=linux go build -v -o helloworld
# Use a Docker multi-stage build to create a lean production image.
# https://docs.docker.com/develop/develop-images/multistage-build/#use-multi-stage-builds
FROM alpine
# Copy the binary to the production image from the builder stage.
COPY --from=builder /go/src/github.com/knative/docs/helloworld/helloworld /helloworld
# Run the web service on container startup.
CMD ["/helloworld"]

コンテナをBuildし、GCRにuploadする

gcloud builds submit --project ${PROJECT_ID} --tag gcr.io/${PROJECT_ID}/helloworld

成功するとGCRにuploadされます

Cloud Runにデプロイします

gcloud beta run deploy --project ${PROJECT_ID} --image gcr.io/${PROJECT_ID}/helloworld

サービス名を入力

リージョンの入力

アプリケーションへのアクセス

Image for post
Image for post

デプロイしたアプリケーションを確認する

Cloud Run のメニューを開く

Image for post
Image for post

サービスの詳細を確認する

Image for post
Image for post

Web UI上からデプロイしてみる

Create Service を押す

Image for post
Image for post

コンテナイメージは先程のコンテナを利用
サービス名は helloworld2
ロケーションは us-central1

認証のチェックボックスは 入力する

Image for post
Image for post

Optional:
詳細メニューから
- メモリ
- コンテナあたりの最大リクエスト数
- 環境変数
が入力できます。

Image for post
Image for post

値が入力できたら 作成 ボタンを押します。

今回ぐらいのコンテナサイズだと10秒もかからずデプロイが完了します(めちゃ早!!)

もちろん新しくデプロイしたコンテナも新たなURLが割り当てられ、そこにアクセスすることでHelloWorld!が表示されます。

おまけ : カスタムドメインの適用

Image for post
Image for post

1つのサービスに対して所有しているドメインをサブドメインで当てることができるようです。
pathベースでのルーティング(GAEのdispatch的な)をできるのかはおいおい調べようと思います。

感想

google-cloud-jp

Google Cloud Platform…

Thanks to tora470

chidakiyo

Written by

chidakiyo

Engineer

google-cloud-jp

Google Cloud Platform 製品などに関連するコミュニティが記載したテクニカル記事集。掲載された意見は著者のものであり、必ずしも Google のものを反映するものではありません。

chidakiyo

Written by

chidakiyo

Engineer

google-cloud-jp

Google Cloud Platform 製品などに関連するコミュニティが記載したテクニカル記事集。掲載された意見は著者のものであり、必ずしも Google のものを反映するものではありません。

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store