Try T.M Engineer Blog

多摩市で生息するエンジニアが「アウトプットする事は大事だ」と思って初めたブログ

Cloud Runについて調べてみた話

AWSだけでなく、GCPについても知識を深めていこうと思い、最近流行りのCloud Runについて調べたことを書いていきます。

Cloud Runとは?

GCPが提供しているサーバレスプラットフォームは以下3つあるが、その内の1つ。

  • Cloud Functions
  • App Engine
  • Cloud Run <- コレ!

中でもCloud Run自分で作成したDockerコンテナをサーバーレス環境で実行できるという特徴を持つ。

GCPが提供しているサーバレスプラットフォームの選び方(使い分け)

GCPのドキュメントに書いてあったので、こちらを転機。
https://cloud.google.com/serverless-options/?hl=ja

Dockerコンテナを動かすという特徴から、好きな言語とライブラリを使って開発したい場合に選ばれることが多い。
それだけでなく、規模や開発容易性からも選ばれることが多そう。。。

料金

https://cloud.google.com/run/pricing?hl=ja

上記に書いていますが、イマイチピンときません。私はお金にうるs(ry
簡単に式にすると、以下になる模様。

  • (呼び出し回数 * Requestの時間) * スペック(CPU/メモリ)

以下の料金シミュレーションをしてみると、(デフォルトスペックなら)1 Request(10秒)を100万回実行しても0円なので、結構リーズナブルなんではないかと・・・ (多分、無料枠分で結構遊べるので、個人開発や個人サイトで運用する分なら、ほぼ無料だと思われる)

https://cloud.google.com/products/calculator?hl=ja

使い方

以下ご参照。
https://cloud.google.com/run/docs/quickstarts/build-and-deploy?hl=ja

試しに実施してみましたが、使用するのはCloud Runだけかと思いきや、他にも以下サービスも使いました。

  • Cloud Build ・・・ コンテナのビルドはココで行う。
  • Container Registry ・・・ コンテナのビルド後のイメージをココで管理する。(イメージファイルはCloud Storageに格納)
  • Cloud Storage ・・・ コンテナのビルド前、ビルド後のイメージファイルはココに格納される。
  • Cloud IAM ・・・ Cloud Runの実行権限等の管理はココ。

Cloud Runへのデプロイまでに、以下ステップを踏む模様。

  • Step.1: Cloud Storageにビルド前ファイルを配置
  • Step.2: Cloud Storageに配置したビルド前ファイルを使用して、Cloud Buildでビルド
  • Step.3: Cloud BuildでビルドしたイメージはContainer Registry管理。ビルド後のイメージファイルはCloud Storageに配置
  • Step.4: Container Registry(ビルドしたイメージ)からCloud Runで起動。権限周りはCloud IAMを使用

Cloud Runへデプロイは直接ではなく、Container Registryから行う流れですね。
このあたりはAWSも同じですね。

上記で記載した料金についても、上記4つサービスすべてに料金(従量課金)が掛かってくるので注意!
とはいえ、無料枠もあるので微々たるものだと思います。
1回しかデプロイしないのであればCloud StorageContainer Registryにあるビルド前ファイルとイメージファイルは削除して良いかもしれません。
(デプロイすればするほどCloud Storageに履歴ファイルが溜まっていくので、このあたりも定期的な削除が必要です)

認証・公開制限

Cloud Runでは、今のところCloud IAMを利用した認証・公開制限しかできません。
つまり、IP制限Basicを利用した制限コンテナ内で行うかCloud Endpoints等の他サービスを利用する必要があり、工夫が必要です。

CDN配信

Firebase Hostingと連携すれば、GCPサービス内で完結できます。

https://firebase.google.com/docs/hosting/cloud-run?hl=ja

まとめ

Cloud Runを使用するにあたり、Cloud Runだけでなく他サービスの理解も必要だと感じました。
とくにCloud IAMの理解は必須。Cloud Endpointsも使えるようになっておくと、さらに便利そうです。
というわけで、引き続き他サービスについても勉強していきたいと思います。(= =)>