データ API ビルダー (DAB) を使用すると、読み込み時に値を置き換えることで、シークレット (データベース接続文字列など) を dab-config.json から除外できます。 サポートされる最初のメカニズムは、ホスト プロセス環境またはローカル @env() ファイルから環境変数を解決する.env関数です。
「 the @akv() function」も参照してください。
@env()の機能
文字列値が必要な任意の場所に環境変数への参照を配置します。
{
"data-source": {
"connection-string": "@env('SQL_CONN_STRING')"
}
}
構成の読み込み時に、DAB は @env('VAR_NAME') パターンの文字列値をスキャンし、トークンを環境変数 VAR_NAMEの値に置き換えます。
値のソース
| 情報源 | Description |
|---|---|
| OS/プロセス環境 | DAB プロセスの開始時に存在する標準環境変数。 |
.env ファイル |
構成ディレクトリに NAME=VALUE 行を含むプレーンテキスト ファイル (ローカル開発の便宜上)。 |
注
.env ファイルは、両方が同じ名前を定義する場合に、既存のプロセス/システム環境変数をオーバーライドします。
開発用のローカル .env ファイルを指定した場合、そのエントリは、ローカル環境を呼び出さずに @env('var-name') 参照を満たすために使用されます。
.env ファイルの例:
SQL_CONN_STRING=Server=localhost;Database=AppDb;User Id=app;Password=local-dev;
DB_TYPE=mssql
JOB_API_KEY=dev-job-key
ガイドライン:
-
.envをdab-config.json(またはスタートアッププロセスで想定される場所)の隣に保持します。 -
.envを.gitignoreに追加します。 -
#で始まる空白行と行 (サポートされている場合は確認) は通常無視されます。コメントのサポートを文書化する前に確認してください。 - Linux/macOS では、名前では大文字と小文字が区別されます。 Windows では、実質的に大文字と小文字が区別されません。
構成での @env() の使用
基本的な置換
{
"data-source": {
"database-type": "@env('DB_TYPE')",
"connection-string": "@env('SQL_CONN_STRING')"
}
}
と組み合わせる @akv()
{
"data-source": {
"database-type": "@env('DB_TYPE')",
"connection-string": "@akv('prod-sql-connection')"
}
}
ストアド プロシージャのパラメーター
{
"entities": {
"RunJob": {
"source": {
"object": "dbo.RunJob",
"type": "stored-procedure",
"parameters": {
"intParam": "@env('SP_PARAM1_INT')",
"boolParam": "@env('SP_PARAM2_BOOL')"
}
},
"permissions": [
{ "role": "anonymous", "actions": [ "execute" ] }
]
}
}
}
環境の値は文字列として置き換えられます。 後続の解析 (int や bool など) は、使用する構成またはランタイム ロジックによって処理されます。
トラブルシューティング
| Scenario | 結果 |
|---|---|
| 変数が見つかりました | 置換は成功します。 |
| 変数が存在しない | 構成の読み込みが失敗する可能性があります。 |
| 変数が見つかりません | 空の文字列に置き換えます。 |
異なるプロパティにおける複数の@env() |
すべて個別に解決されます。 |
| 数値またはブール値が必要な場合に使用されます | 文字列として置き換えられた値。解析が成功する可能性があります。 |
パターンが無効です (引用符が見つからない @env(DB_VAR) など) |
リテラル文字列として扱われます。 |
完全な例
dab-config.json:
{
"data-source": {
"database-type": "@env('DB_TYPE')",
"connection-string": "@env('SQL_CONN_STRING')"
},
"runtime": {
"rest": { "enabled": true }
},
"entities": {
"Books": {
"source": "dbo.Books",
"permissions": [
{ "role": "anonymous", "actions": [ "read" ] }
]
}
}
}
.env:
DB_TYPE=mssql
SQL_CONN_STRING=Server=localhost;Database=BooksDb;User Id=app;Password=StrongPassword!;
Important
シークレットを含むファイル .env コミットしないでください。 |
クイック リファレンス
| Item | 概要 |
|---|---|
| 構文 | @env('variable-name') |
| シミュレーション ファイル |
.envはname=value行を含む |
@env() と混ぜ合わせる |
Supported. |
Review
@env()を使用して、シークレットと環境固有の値を構成ファイルから除外します。 セキュリティで保護された柔軟なデプロイのために、CI/CD 変数ストアやコンテナー定義などの規範的なシークレット管理と組み合わせて使用します。 エンタープライズボールトを使用する場合は、@akv()関数と組み合わせてシークレットを一元化します。