Go
Docker
gcp
kubernetes
Fargate

GCP版のFargate? Cloud Runを触ってみた


概要


  • Google Cloud RunはAWS Fargateの様な物っぽい

  • DockerImageベースのサービスがhttpsのURL付きで10秒ほどで立ち上がる


Cloud Runとは?

ある日の昼下がり、いつものようにGCPのコンソールを触っていると、Cloud Runという見慣れないものが目に入りました。

2019-04-07 13.15.34.png

以下はスタート画面?のスクショになります。

スクリーンショット 2019-04-05 17.54.02.png

なるほど、説明を見る限りAWSで言う所のFargateのようなものみたいですね。フルマネージドで使えるだけでなく、GKE上で実行することもできるみたいです。


試してみた

詳しい情報を求めてドキュメントのリンクをクリックしてみましたが、現段階だといずれも404になってしまいます。コンソールから得られる情報を頼りに、手探りで試すしかないようです。

19年4月9日追記

ドキュメント公開されたみたいです。

https://cloud.google.com/run/docs/?hl=ja


DockerImageの準備

とりあえず動かすDockerImageが必要なので、Goのシンプルなwebサーバーを作ってCloud Registryに上げます。


Goのコード

特に説明は不要かと思いますが、Hello Cloud Run!と表示するだけの物です。


main.go

package main

import (
"fmt"
"log"
"net/http"
)

func main() {
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello Cloud Run!")
})
log.Fatal(http.ListenAndServe(":8080", nil))
}



Dockerfile

Dockerfileを書く際の注意点として、PORTという環境変数を設定する必要があります。以下はコンソールに書いてある文言の引用です。


ステートレスであり、$PORT 上で HTTP リクエストをリッスンする必要があります。


FROM golang:1.11-alpine as goapp

ENV APP_ROOT /go/src/app
WORKDIR $APP_ROOT
ADD main.go $APP_ROOT

RUN go build main.go

FROM alpine:latest
COPY --from=goapp /go/src/app/main .
# この環境変数が必要
ENV PORT 8080
EXPOSE 8080
CMD ["./main"]


GCRにアップロード

準備ができたらCloud Registryにアップロードします(project-idの部分は適宜読み替えて下さい)。

gcloud builds submit --tag gcr.io/project-id/run_sample:v0.1 .


コンソールからサービスを立ち上げる


サービスの新規作成

上部ヘッダのCREATE SERVICEをクリックします。

スクリーンショット 2019-04-07 13.43.28.png


DockerImageの選択・サービス名の入力

先ほどGCRにアップロードしたDockerImageを選択し、任意のnサービス名を入力します。また、リージョンの選択もできるようですが、現在はus-central1だけみたいですね。

スクリーンショット 2019-04-07 16.00.10.png


外部公開するための設定

今回はサンプルとして外部公開してみたので、未認証の呼び出しを許可の項目にチェックを入れます。

スクリーンショット 2019-04-07 13.47.11.png


作成

後は作成ボタンを押すだけです。10秒ほど待つと、HTTPSのURLが発行されてサービスが公開されました。早い!

スクリーンショット 2019-04-07 13.50.49.png

URLにアクセスすると、ちゃんと期待通りのレスポンスが返ってきました。流石に東京リージョンじゃないので遅いですが・・・

スクリーンショット 2019-04-07 13.52.44.png


Q&A・考察


独自ドメインは設定できるか

今回は試してませんが、Domain Mappingという項目があるので、簡単に設定できそうです。

スクリーンショット 2019-04-07 13.55.17.png


内部的にはどうなってるのか

コンソールの詳細画面にはyamlが表示されており、GKEで実行可能なことからも内部的にはk8s(GKE)で動いてそうですね。

スクリーンショット 2019-04-07 13.58.26.png


料金は?

APIのページに記載がありました。CPUおよびメモリに対する秒課金に加えて、リクエスト回数に対する課金が課せられる感じですね。

https://console.cloud.google.com/marketplace/details/google/run.googleapis.com

スクリーンショット 2019-04-07 13.59.21.png


ドキュメントは?

https://cloud.google.com/run/docs/?hl=ja


まとめ

自分は普段GKEでサービスを運用していますが、そのほとんどはステートレスな物です(というか、そうなるように設計した)。今はまだ使えるリージョンが1つだけですが、東京リージョンが解放されたら一部のサービスの管理が楽になるのカモと感じました。