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にアクセスすることでアプリを実行することができます。
実行した感じ
簡単ですね。