🙌
Cloud Runで複数のGCSバケットをマウントする際の落とし穴と解決策
データとかログとか、用途別にバケットを分けたいってなると、複数のバケットをCloud Runにマウントしたくなる。
gcloud run deploy
でハマりました。
❌ 試してみたけどダメだったコマンド
gcloud run deploy my-service \
--region us-central1 \
--source . \
--add-volume=name=bucket1-vol,type=cloud-storage,bucket=my-bucket-1,name=bucket2-vol,type=cloud-storage,bucket=my-bucket-2 \
--add-volume-mount=volume=bucket1-vol,mount-path=/mnt/bucket1,volume=bucket2-vol,mount-path=/mnt/bucket2
一部のバケットしかマウントされなかったり、マウントパスが変なことになったりした。原因は、--add-volume
や --add-volume-mount
のパラメータが、1つの引数で複数の設定を受け付けてくれない。カンマで区切って色々書くと、最初の設定以外は無視されるか、変に解釈されるっぽい。
✅ うまくいったコマンド
複数のバケットをマウントするには、--add-volume
と --add-volume-mount
をそれぞれのバケットごとに分けて指定する。
gcloud run deploy my-service \
--region us-central1 \
--source . \
\
--add-volume=name=bucket1-vol,type=cloud-storage,bucket=my-bucket-1 \
--add-volume-mount=volume=bucket1-vol,mount-path=/mnt/bucket1 \
\
--add-volume=name=bucket2-vol,type=cloud-storage,bucket=my-bucket-2 \
--add-volume-mount=volume=bucket2-vol,mount-path=/mnt/bucket2
これで狙い通りに全てのバケットが指定したパスにマウントされて、アプリからアクセスできるようになった。
ポイント
-
1ボリューム1パラメータ:
name
,type
,bucket
を含んだ--add-volume
と、volume
,mount-path
を含んだ--add-volume-mount
は、それぞれ1つのバケットにつき1組ずつ書く
備考
-
サービスアカウントの権限: Cloud Runサービスが使うサービスアカウントに、マウントするGCSバケットへの適切なアクセス権限(例えば
Storage オブジェクト閲覧者
とか)がちゃんと付いてるかも忘れずにチェック。
Discussion