GoogleCloudPlatform
(以下GCP)にはCloudFunctions
とCloudRun
という2つのサーバレスサービスがあります。簡単にいうとこの2つは動作環境が違います。CloudFunctionsは開発者のコードを固定されたOS環境で動かすためのものであるのに対し、CloudRunは開発者が持ち込んだDockerコンテナを動かします。どちらを利用するべきか考える順番はCloudFunctions→CloudRunです。双方の違いは「自由と簡単」のトレードオフです。
今回CloudRunを初めて使ってみましたので記事にしてみました。
CloudRunでサービスを作るには、Dockerのコンテナイメージを用意しなくてはいけません。その際以下の様な作法?があります。
CloudRunで動くコンテナは動作時に決まる$PORT環境変数で待ち受ける- Volume, Networkなどは利用できない
その他権限系など無理とかいろいろありそうですが、とりあえず簡単なアプリを作ってみます。
Sinaraアプリを作成
SinatraでさっくりHellow, World!と返すアプリを作成します。
ソースは以下に置きました
| |
ポイントは、CloudRunが実行時に$PORT環境変数で指定するポートでリクエストを待ち受ける。
簡単ですね、Dockerfile は以下のようになっています。
FROM ruby:2.7
RUN gem install sinatra
WORKDIR /code
COPY . /code
RUN bundle install
CMD ["bundle", "exec", "ruby", "./app.rb"]
CloudRunサービスの作成
CloudRunで動かすのは非常に簡単です。サービスの作成からリージョンを選ぶ。

これをdocker build .してDockerリポジトリにpushしますが、GCPの外のDockerリポジトリ(hub.docker.com)とかは使えないので、今回はgithubをCloudRegistryにリンクしてGCP上でビルドして対応しました。
Githubをリポジトリプロバイダに選んで

ビルドするブランチを設定

あとは、未認証で動くように設定で完了

サービスに表示されるURLにアクセスすることでアプリを実行することができます。

実行した感じ

簡単ですね。