この記事を必要とする人
Cloud BuildからSecret Managerを利用しようとしたけどなぜか利用できない人へ
こんなこと起きてませんか?
と言いたいだけの記事です。ちなみに公式ドキュメントを読んだ人は、この記事の気にしてみるポイント
の5番だけ読んだらもしかしたら解決するかも。もしこれで解決できない人とか、他の原因見つけたらコメントくれると追記します。
想定しているもの
エラーになっているものはこちらで
steps:
- name: gcr.io/cloud-builders/docker
id: Build
args:
- build
- '--no-cache'
- '-t'
- '$_GCR_HOSTNAME/$PROJECT_ID/$REPO_NAME/$_SERVICE_NAME:$COMMIT_SHA'
- .
- '-f'
- 'Dockerfile'
- id: 'Migration'
name: "docker"
args:
- "run"
- "-e"
- 'DATABASE_URL="$DATABASE_URL"'
- "-w"
- "/usr/src/app"
- '$_GCR_HOSTNAME/$PROJECT_ID/$REPO_NAME/$_SERVICE_NAME:$COMMIT_SHA'
- "sh"
- "-c"
- 'npx prisma db push'
で解決したバージョンはこちら
steps:
- name: gcr.io/cloud-builders/docker
id: Build
args:
- build
- '--no-cache'
- '-t'
- '$_GCR_HOSTNAME/$PROJECT_ID/$REPO_NAME/$_SERVICE_NAME:$COMMIT_SHA'
- .
- '-f'
- 'Dockerfile'
- id: 'Migration'
name: "gcr.io/cloud-builders/docker"
entrypoint: 'bash'
args: [
"-c",
"docker run --env DATABASE_URL=$$DATABASE_URL -w /usr/src/app $_GCR_HOSTNAME/$PROJECT_ID/$REPO_NAME/$_SERVICE_NAME:$COMMIT_SHA sh -c 'npx prisma db push'"
]
secretEnv: [ 'DATABASE_URL' ]
availableSecrets:
secretManager:
- versionName: "projects/$PROJECT_ID/secrets/DATABASE_URL/versions/latest"
env: DATABASE_URL
公式ドキュメント
気にしてみるポイント
-
availableSecretsは設定していますか?
-
Stepで利用したいsecretEnvは入っていますか?
そのStepで利用するsecretはstep内でsecretEnvを立てないとうまくいきません。secretEnv: [ 'DATABASE_URL' ]
-
secret managerから取る変数は
$$
を先頭につけていますか?
$$DATABASE_URL
のように利用しましょう。 -
entrypoint: bash
を指定した上でコマンド実行前に-c
をいれてますか?
(ここまではドキュメントに大体書いてあるけど、4に関してはなんで????) -
argsなどの列挙型は
[]
で記載してますか?
これがめっちゃ罠です。よくあるのは列挙型を-
で記載すると思うのですがこれは反応しないらしい。。。なんでやねん。
https://stackoverflow.com/questions/73176741/google-cloud-build-with-pack-and-secrets-manager-not-accessing-environment-varia
最後に
4と5で一生詰まってました。なんでこんな仕様にしたん、Googleさん。。。(4に関してはドキュメントに書いてあるから私が悪い。)
てことで良いGCPライフを。