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 Storage
やContainer 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
も使えるようになっておくと、さらに便利そうです。
というわけで、引き続き他サービスについても勉強していきたいと思います。(= =)>