シークレットまたは参照がサービスに反映されない
シークレットまたは ${{name.KEY}} 参照を設定して再デプロイしても、実行中のサービスでは期待した値が確認できないことがあります。
これは何を意味するのか
設定した値がサービスのマージ後の環境に一度も入っていないか、アプリの起動前にマージ処理で別の値に上書きされたことを意味します。
なぜ起こるのか
- 参照先のターゲットまたはキーが存在しません。 存在しない service / addon 名への参照、またはその addon が公開していないキーへの参照は、デプロイを失敗させる代わりに 空文字列 として解決されます。通知するエラーは出ないため、サービスは空の値のまま起動します。
- より高い優先順位のものに上書きされました。 値は固定順序でマージされます —
addon-issued env < project secrets < project env < app env < app secrets < platform vars— そのため、project スコープの (--global) シークレットは、同じキーを持つ service スコープのシークレットに静かに隠されることがあります。また、プラットフォーム変数 (PORT,LIZARD_SERVICE_NAME,LIZARD_PROJECT_ID,LIZARD_PUBLIC_DOMAIN) は常に優先され、まったく上書きできません。 - ビルド時の値を変更したのに再ビルドしていません。 ほとんどの変数変更は再ビルド不要で適用され、サービスはそれらを取り込むために再起動されます。例外は
VITE_*とNEXT_PUBLIC_*の値で、これらはビルド済みアセットに埋め込まれるため、単なる再起動では新しい値は反映されません。サービスには新しいビルドが必要です。
考えられる解決策
実行中のサービスが実際に何を見ているか確認する
これは信頼できる確認方法です。設定したつもりの値ではなく、稼働中コンテナの実際の環境を表示します。
lizard ssh --service api -- env | grep DATABASE_URLキーが見つからない、または空の場合、参照先のターゲット / キーが誤っているか、そのスコープには何も設定されていません。lizard ps で addon または service 名を再確認し、キーについては addon のドキュメント化された変数を確認してください。
スコープの衝突を確認する
両方のスコープのシークレットを一覧し、比較してください。
lizard secrets list --service api --show
lizard secrets list --global --showapp secrets は project secrets を上書きする ことに注意してください。同じキーに service スコープの値が存在する場合、--global で設定したものよりそちらが優先されます。
ビルド時の変更後は再ビルドする
変更したキーが VITE_* または NEXT_PUBLIC_* の場合、再起動ではなく実際の再ビルドを実行してください。
lizard redeploy --service apiビルド時と実行時 および ビルド パイプライン → 再ビルドをトリガーするもの も参照してください。
関連項目
- 変数 & Secrets — スコープと優先順位。
- サービス間参照 — 参照構文と解決方法。