概要
- Google Cloud RunはAWS Fargateの様な物っぽい
- DockerImageベースのサービスがhttpsのURL付きで10秒ほどで立ち上がる
Cloud Runとは?
ある日の昼下がり、いつものようにGCPのコンソールを触っていると、Cloud Run
という見慣れないものが目に入りました。

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

なるほど、説明を見る限り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!
と表示するだけの物です。
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をクリックします。

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

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

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

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

Q&A・考察
独自ドメインは設定できるか
今回は試してませんが、Domain Mappingという項目があるので、簡単に設定できそうです。

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

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

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