変数と Secrets
Lizard は設定を secrets として保存します。これらには service(デフォルト)と project(--global)の 2 つのスコープがあり、定義された優先順位に従ってアプリの環境にマージされます。workspace レベルのグローバルスコープはありません。
変数の設定
lizard secrets set は可変長です。一度に 1 つでも複数でも設定できます。デフォルトでは linked service に書き込みます。
lizard secrets set DATABASE_URL=postgres://… LOG_LEVEL=info
lizard secrets set API_KEY=sk_live_… --service apiproject スコープに書き込むには --global を追加します(プロジェクト内のすべてのサービスから参照できます)。
lizard secrets set NODE_ENV=production --global一覧表示、削除、インポート
lizard secrets list # current scope
lizard secrets list --show # reveal values
lizard secrets delete OLD_KEY ANOTHER_KEY # variadic; add -y in scripts
cat .env | lizard secrets import # KEY=value lines from stdinsecrets import は単純な KEY=value 行を読み取り、引用符も値の一部として保持します。secrets delete は確認を求めます。端末の外で実行する場合は -y を渡してください。
すべてのフラグについては、lizard secrets コマンドリファレンスを参照してください。
スコープ
| スコープ | コマンド | 保存形式 | 表示対象 |
|---|---|---|---|
| サービス(デフォルト) | lizard secrets set K=v --service <svc> | secrets.services[<svc>] | そのサービスのみ |
| プロジェクト(グローバル) | lizard secrets set K=v --global | secrets.shared | プロジェクト内のすべてのサービス |
デフォルトでは service スコープを使ってください。 侵害されたサービスは自身の環境を読み取れます。より広いスコープは、理由もなく公開される認証情報が増えることを意味します。--global は、LOG_LEVEL、NODE_ENV、feature flag、またはフロントエンドの SENTRY_DSN のような、secret ではなく公開されても問題ないと証明できる値に限って使ってください。値が secret かどうか迷う場合は、secret として扱い、service にスコープしてください。
実行中のすべての Postgres と Redis の addon の DATABASE_URL と REDIS_URL は、最も低い優先順位で、すでにプロジェクト内のすべてのサービスに届いています。特定の addon を選ぶ場合やプライベート URL を使う場合は、--global ではなく reference を使って利用側ごとにバインドしてください。
lizard secrets set DATABASE_URL='${{postgres.DATABASE_PRIVATE_URL}}' --service api
lizard secrets set DATABASE_URL='${{postgres.DATABASE_PRIVATE_URL}}' --service workeraddon の値が変わった場合、各利用側は次回のデプロイ時または変数の変更時に新しい値を取り込みます。
優先順位
同じキーが複数の場所で定義されている場合、最後に書き込まれたものが勝ちます。
addon-issued env < project secrets < project env < app env < app secrets < platform varsしたがって、app secrets は project secrets を上書きし、platform variables(PORT、LIZARD_SERVICE_NAME、LIZARD_PROJECT_ID、LIZARD_PUBLIC_DOMAIN、LIZARD_PRIVATE_DOMAIN)は最後に適用されるため、上書きできません。PORT は、サービスに HTTP ポートがある場合にのみ設定されます。PORT を自分で設定すると、ポートが lizard port で設定されていない限り、次回のデプロイ時に Lizard がルーティングするポートが変わります。
ビルド時と実行時
ほとんどの変数変更は 再ビルドなし で反映されます。反映のためにサービスは再起動され、これには数秒かかります。例外は、イメージに焼き込まれるビルド時の値です。
VITE_*またはNEXT_PUBLIC_*の値を変更すると、影響を受ける実行中のサービス(--globalの場合は実行中のすべてのサービス)の再ビルドがすぐに始まります。- Lizard は、GitHub サービス(lizardpack が生成する Dockerfile、またはリポジトリのルートの Dockerfile)と、
buildCommand/startCommandからビルドされる Node サービスについて、これらの値をENV行として焼き込みます。独自のdockerfilePathを持つサービスや、それらのコマンドなしでlizard upでアップロードされたサービスには、ビルド時に Lizard の変数は渡されません。COMMIT_SHA以外のビルド引数はどのサービスにも渡されません。そうした場合の公開する値は、.env.productionにコミットするか、ビルドコマンドを設定するか、Dockerfile に書き込んでください。
ビルド パイプライン → 再ビルド トリガー を参照してください。
確認
サービスへのシェルアクセス(lizard ssh)は無効になっているため、別の方法で値を確認します。
lizard logs --build --service api # warns about every empty ${{…}} reference
lizard secrets list --service api --show # stored values
lizard secrets list --service api --ref # reference templates you can use想定していた値が存在しない場合は、Troubleshooting → secret または reference が表示されないを参照してください。
ローカル開発
サービスの project secrets と service secrets を注入した状態で、ローカル でコマンドを実行します。
lizard run --service api -- node scripts/seed.js値は保存されたとおりに渡されます。${{…}} 参照は文字列のまま残り、プラットフォーム変数(PORT、LIZARD_*)は注入されません。データベースが必要なスクリプトは、addon の実際の接続値を使って実行してください。
lizard run --service postgres -- node scripts/seed.jslizard run が注入するものを参照してください。
関連項目
- サービス間参照 — 認証情報をコピー&ペーストせずに、あるサービスから別のサービスの値を読み取ります。
lizard secrets— 完全なコマンドリファレンス。
更新日