次の方法で共有


Data API Builder で環境変数の置換に @env() を使用する

データ 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

ガイドライン:

  • .envdab-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')
シミュレーション ファイル .envname=value行を含む
@env() と混ぜ合わせる Supported.

Review

@env()を使用して、シークレットと環境固有の値を構成ファイルから除外します。 セキュリティで保護された柔軟なデプロイのために、CI/CD 変数ストアやコンテナー定義などの規範的なシークレット管理と組み合わせて使用します。 エンタープライズボールトを使用する場合は、@akv()関数と組み合わせてシークレットを一元化します。