Google Cloud で運用しているサービスの Cloud Storage 費用が10月の料金改定から爆増していた。
料金改定のタイミングで Cloud Storage のマルチリージョンからマルチリージョン内のリージョンへの転送費用が無料じゃなくなっていた。
Docker イメージの転送費用によるものであれば、Container Registry から Artifact Registry へ移行することでこの費用は無にできる。
無料条件がなくなった
Google Cloud 内の下り(外向き)ネットワーク費用を見る。
Internet Archive に残っている過去の料金表(2022-05-01)には以下の記述があった。
マルチリージョンにある Cloud Storage バケットからある 1 つのリージョンにある別の Google Cloud サービスへのデータの移動で、両方のロケーションが同じ大陸にある。
無料
現行は、この無料条件がなくなっているうえに、 $0.08/GB とまずまず高めの値段設定になった。
同じ大陸内の異なるロケーション間でデータを移動する場合、転送元バケットは ASIA マルチリージョンに配置され、上記の無料ケースのいずれも適用されない。
$0.08/GB
Container Registry (GCR) のコンテナイメージは Cloud Storage のマルチリージョンバケットに保存され、イメージを利用する実行環境は何らかのリージョンにあるので、この条件にあたってしまう。
今まではイメージと実行環境のロケーションを合わせていれば無料で使えたが1、一通りマルチリージョンバケットからの転送に費用がかかるようになってしまった現在はもう無料で使うことはできない!! asia ほどの費用にはならないが、gcr.io から us 内への転送も $0.02/GB と、無料ではなくなっている。
Artifact Registry を使う
Container Registry (GCR) より後に公開された Artifact Registry。
GCR が Docker イメージをホストする単機能なものだったのに対して、Maven や npm モジュールなどもホストできる。
移行するモチベーションは特になかったけど、今回の費用改定で明らかにメリットが生まれてしまった。
Artifact Registry はアーティファクトを保存するリポジトリのロケーションを選ぶことができる。実行環境と同じロケーションにイメージを置くことで、Cloud Storage のネットワーク費用を無料にすることができる!!
移行する作業は特に難しくなく、ドキュメントで移行について案内されている。
アクセス権限周りに大きな変更があったが、困るようなことはなかった。
同プロジェクト内で Artifact Registry を触りたいようなサービス、Cloud Build や GKE や Cloud Run にはデフォルトで Artifact Registry への読み取り権限がついている。
GCR 時代のアクセスコントロールは Cloud Storage の IAM ロールでやる感じで、おおざっぱだし分かりづらかったけど、Artifact Registry ではそれ用のロールが設けられプロジェクト単位でも個別のリポジトリに対しても権限を設定できる。
実際の作業としては、API を有効にし、Artifact Registry にリポジトリを作って、GCR に置いてあるイメージを Artifact Registry Registry に上げなおして、k8s manifest やデプロイコマンドなど各所の image 指定を更新する程度でした。
これでグラフの右端のように、また Cloud Storage 費用を無にできたわけです。
今回の値上げといい、ドキュメントの記述といい、かなり Artifact Registry への移行を促してる感ありますね。
Container Registry の進化形である Artifact Registry は、 https://cloud.google.com/artifact-registry?hl=ja
Container Registry は引き続き使用可能で、Google Enterprise API としてサポートされていますが、新機能は Artifact Registry でのみ利用可能です。Container Registry には、重要なセキュリティ修正のみ与えられます。 https://cloud.google.com/artifact-registry/docs/transition/transition-from-gcr
Google Cloud のドキュメント中の "大陸" (continent に対する訳) って独特の概念だよね、ASIA マルチリージョンの各所は海で隔てられている(台湾, 香港, 東京, ムンバイ, ...)2ものの、同じ文脈で大陸として出てくる "US" や "EU" と同じ扱いであったりもするわけで。でもある日 ASIA は大陸じゃありませーんと言われてもしょうがない気もするし。
- 以前書いた記事、grc.io は US 扱いで、asia-northeast1 の実行環境への image の pull には転送費用がかかるから、asia.gcr.io を使おうという話。 https://blog.pokutuna.com/entry/gke-autopilot-storage-egress↩
- アジアのデータセンター、としか書いていないが https://cloud.google.com/storage/docs/locations#available-locations↩