CloudRunからはじめるGCP


ついにGCP(Google Cloud Platform)に入門することができました。今回はずっと使ってみたかったCloudRunに簡単なAPI Serverをデプロイするところまでやっていきたいと思います。著者のシェルはzshとなっております。

Cloud SDKをインストールする

以下のコマンドを実行するとシェルスクリプトが実行され、どのディレクトリにインストールするか聞かれますがEnterを押します。(ホームディレクトリの下にgoogle-cloud-sdkというフォルダができます)

curl https://sdk.cloud.google.com | zsh

勝手にpathを通してくれるのでzshrcを再度読み込みします。

$ source ~/.zshrc

GCPを操作することができるgcloudが使えることを確認します。

$ gcloud version

Cloud SDK をインストールしたら、gcloud init を実行して初期設定を行います。
Pick cloud project to useと聞かれるので現在のプロジェクトの番号を書き込みEnter

$ gcloud init

下記コマンドでdockerからgcloudにアクセスできるようにします。

$ gcloud auth configure-docker

GCRにコンテナイメージをPushする

Container Registry APIを有効にしてプライベートなDockerイメージを保存するAPIを使えるようにします。

コンテナイメージをビルドする。

docker-compose build

* コンテナイメージを生成するときにM1チップのMacbookだと64ビットLinux用にコンパイルしなければなりません。なので--platform=linux/x86_64を付け加えます。

dockerfile
FROM --platform=linux/x86_64 golang:latest AS builder

GCRにPushするためにローカルイメージにタグ付けをします。ホスト名をasia.gcr.ioとすることでasiaにイメージが保管されます。

$ docker tag ローカルイメージ名 ホスト名/プロジェクトID/イメージ名:latest

GCRにPushします。ここまで完了したらコンソール画面でPushできているか確認してください。

$ docker push ホスト名/プロジェクトID/イメージ名:latest

CloudRunにデプロイする

Cloud Run API を有効にします。

先ほどECRにPushしたコンテナイメージを選択する。

誰でもリクエストできるように「未認証の呼び出しを許可」

アプリケーションがlistenするポートを記入します。
コンテナ起動時にコマンド「/main」を実行するように設定します。

作成をクリックするとデプロイされURLが発行されたら完了です。

メリット

・デプロイ体験がとても良くSSL化までマルッとやってくれるのは最高
・AWSのAppRunnerやFargateは最小のインスタンス数は1であることに対してCloudRunは0でも可なのでリクエストがない場合は課金されない。ただしコールドスタートとなる。(個人開発にとても相性が良さそう)

デメリット

・ボリュームをマウントすることができない
・SSH接続できない(ハック的なことをすればできるとの声も)
・プライベートなネットワーク上に構築できない
ex)DBサーバーに接続する際にはインターネットから直接アクセスさせないようにCloud Run + VPC(サーバーレスVPCアクセスコネクタ + Cloud SQL)のような構成にする必要がある

使ってみての感想

AWSと比べてGCPはドキュメントが非常に分かりやすくてドキュメントだけで理解できた。トラブルシューティングも詳しく記載されていて良かった。GCPを使っていきたくなった。

参考文献