ついに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を付け加えます。
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を使っていきたくなった。
参考文献