言いたいこと
- 組織ポリシーで、GCPのリソースの地域を制限することが出来るよ
- GAEの2nd gen(Python3.7とか)には、マルチリージョンなバケットが必要だよ
- ので、地域制限するなら、マルチリージョンな単位(eu/us/asia)でした方がいいよ
組織ポリシーによる地域制限の話
組織ポリシー(organization policy)で、GCPのリソースが作られる場所を制限することが出来ます。
GCPサービスに与える影響
組織ポリシーが、各GCPサービスごとに与える影響は、こちらのページに書いています。
例えば:
- Bigtableはクラスターが作られるゾーンを限定(既存のクラスターには影響しない)
- GCSはバケットのリージョン・マルチリージョンを限定(既存のバケットには影響しない)
- GCEの場合はちょっと複雑
- インスタンスの作成はリージョンで制限される
- CloudDNSなどは、地域制限の対象外
地域の指定
ゾーン(asia-northeast1-aとか)、リージョン(asia-northeast1とか)、マルチリージョン(asiaとか)で指定することも出来ますが、ValueGroup(asia-northeast1-locationsとか)で指定する方が良いです
なぜなら:
- Googleが関連するゾーン・リージョンを加えてくれる
- リージョンだけを許可すると、ゾーンで立つGCP サービス(GCEとかDataflow)は使えない
- (私はasia-northeast1だけを許可して、Dataflowの起動に失敗しました)
ためです。
GAEの2nd genのデプロイで失敗した話
- Python3.7
- 組織ポリシーでasia-northeast1関連のみ許可(asia-northeast1-locations)
- この設定では、マルチリージョンなバケット(usとかasia)は作られない
で試すと、GAEをデプロイするときに失敗しました(issue)。
なんで失敗するかと言うと、
- GAEの2nd generationは、Standardでもデプロイ時にContainer Registryを使用
- Container Registryはマルチリージョンなバケットを[使う]
(https://cloud.google.com/container-registry/docs/overview?hl=ja#registry_name) - そのため、組織ポリシーでマルチリージョンなバケットを制限しているとコケる
からです。
ちなみに、1st gen(Python2.7)では地域制限をしていても使うことが出来ました。
(2nd genでgVisorベースになった影響?)
じゃあ地域制限って使えないの?
- マルチリージョンなバケット作ることが出来る制限(europe-locationsやus-locations)であれば…
- Pub/Subは、組織ポリシーとは別に地域制限を設定することが出来ます