SecretsFoundryによる環境変数の管理

Built for Speed: ~10ms Latency, Even Under Load
Blazingly fast way to build, track and deploy your models!
- Handles 350+ RPS on just 1 vCPU — no tuning needed
- Production-ready with full enterprise support
以前、環境変数を管理するさまざまな方法について、私の 投稿 こちらで書きました。私たちのスタートアップで設定を扱いやすくするために、 Truefoundry、SecretsFoundryという小さなツールを作成しました。これにより、すべてのアプリケーションチームがGitで設定を維持することが非常にシームレスになりました。他開発チームにも役立つと考え、 オープンソース化 することにしました。
詳細に入る前に、SecretsFoundryがどのような問題を解決するのかを理解しておくと良いでしょう。すべてのアプリケーションには、実行時にアプリケーションに提供する必要がある、非機密および機密の設定変数があります。非機密変数については、通常、変数をファイルに記述し、dotenvのようなライブラリを使用してアプリケーションに読み込みます。機密変数については、AWS SecretManagerやHashicorp Vaultのようなシークレットマネージャーに値を保存し、アプリケーションコードを記述してストアからシークレットをプルする方法があります。もう一つのアプローチは、外部システムがシークレットストアからアプリケーション環境に変数を注入する方法です。この場合、環境変数の管理はDevOpsの責任範囲となり、開発者は制御を失い、問題発生時のバグ増加やデバッグの困難さにつながります。
SecretsFoundryは、以下の方法で上記の問題を解決しようとします。
すべての機密キーと非機密キーを1つのファイルにまとめることができます。。
非機密変数については、変数を直接記述できます。機密変数については、シークレットストア内のパスをそれらの変数の値として記述します。この方法で、SecretsFoundryにそれらの値を取得する方法を伝えます。そのようなファイルの例は次のとおりです。
.envファイル
NODE_ENV = development
HOST = localhost
DB_NAME = example_app_db
DB_USER = ${aws-secret:/development/example_app/DB_USER}
DB_PASSWORD = ${aws-secret:/development/example_app/DB_PASSWORD}
上記の例では、実際のDB_USERとDB_PASSWORDはAWS Secrets Managerに保存されています。開発者は.envファイルにパスを記述するだけで、secretsfoundryがそれを取得します。
環境変数を取得するためのアプリケーション固有のコードは不要です
Secretsfoundryは、アプリケーション内部で処理するのではなく、起動前に実際の値をアプリの環境に注入することで機能します。これには2つの利点があります。
- アプリケーションに依存関係は発生せず、多数の異なる言語にわたってライブラリを追加する必要もありません。
- secretsfoundryが特定の環境変数を見つけられない場合、secretsfoundry自体がエラーを発生させ、Kubernetesのようなすべてのデプロイシステムに早期の異常信号を提供します。そうでなければ、検証とエラー処理はアプリケーション側で行うことになります。
複数のシークレットマネージャーに対応
SecretsFoundryは、シークレット管理のためにAWS Parameter Store、AWS S3、AWS SecretsManager、Hashicorp Vaultと統合されています。新しいシークレットストアの追加は非常に簡単で、将来的にはGCPとAzure Vaultへの対応も拡大する予定です。
SecretsFoundryの使用方法
secretsfoundryの使い方は次のとおりです。
secretsfoundry run -c "node start.js"
または、起動スクリプトに複数のコマンドがある場合:
secretsfoundry run -s "node run_migration_script && node start.js"
私たちが secretsfoundry run を実行すると、そのディレクトリ内の.envファイルを探し、変数の値を出力します。もし -c または -s 引数 がある場合、それらをそのアプリケーションの環境に注入します。したがって、以前に作成した.envファイルを考慮すると、そのディレクトリでsecretsfoundry runを実行すると、次の出力が得られます。
secretsfoundry run
NODE_ENV = development
HOST = localhost
DB_NAME = example_app_db
DB_USER = admin
DB_PASSWORD = password
start.jsに、以下のような小さなサンプルアプリケーションを用意できます。

secretsfoundry run -c “node start.js”

SecretsFoundryは、他の.env.<stage>ファイルも以下を使用して読み込むことができます。
secretsfoundry run — stage=<stage>
SecretsFoundryは、別のディレクトリから設定ファイルを以下を使用して取得できます。
secretsfoundry run -p <.envファイルが格納されている設定ディレクトリへのパス>
また、.env / json / yaml形式のファイルへの入力パスを受け取り、解決された変数を別のファイルに出力することもできます。これは、様々なKubernetesシステムとの連携に利用しており、これについては別のブログで詳しく説明します。
secretsfoundry run -i <変数を含む入力ファイル (.env/json/yaml)> -o <出力ファイル>
SecretsFoundryがSecretStoreからパラメータを取得するには認証情報が必要です。そのため、これらの変数を手動で環境に提供する必要があります。
インストールとドキュメント
secretsfoundryはnpmまたはyarnを使用してダウンロードできます (https://www.npmjs.com/package/secretsfoundry)
npm install -g secretsfoundry
SecretsFoundryは、こちらの GitHubリポジトリ にあり、そのドキュメントは https://truefoundry.gitbook.io/secretsfoundryで確認できます。
SecretsFoundryをぜひお試しいただき、ご意見をお聞かせください。AWS Parameter Storeとの連携では社内でかなり広範囲に利用していますが、Hashicorp Vaultとの連携については十分なテストが行われていません。ぜひお試しいただき、バグや機能リクエストがあればお知らせください。
初出: Medium
TrueFoundry AI Gateway delivers ~3–4 ms latency, handles 350+ RPS on 1 vCPU, scales horizontally with ease, and is production-ready, while LiteLLM suffers from high latency, struggles beyond moderate RPS, lacks built-in scaling, and is best for light or prototype workloads.


















.webp)
.webp)


.png)

.png)














