Skip to content

ランタイム設定

ランタイム設定は、Nx Plugin for AWSが生成されたプロジェクトとコンポーネント間でデプロイ時の値を渡し、相互に接続できるようにするメカニズムです。例えば、APIを生成すると、そのURLは自動的にランタイム設定に登録され、接続されたウェブサイトがそれを検出できるようになります。

ランタイム設定は名前空間に整理されています。各名前空間は、関連する設定値の論理的なグループです。デプロイ時に、すべての名前空間はAWS AppConfigに設定プロファイルとして保存されます。

生成されたコンストラクトによって使用される4つの組み込み名前空間があります:

  • connection — 生成されたプロジェクトが相互に接続できるようにする設定:
    • API URL — APIコンストラクトによって自動的に登録されます
    • Cognito設定 — UserIdentityコンストラクトによって自動的に登録されます
    • エージェントランタイムARN — Reactウェブサイトをエージェントに接続する際に、接続ジェネレーターによって追加されます
  • agentcore — エージェントとMCPサーバー用のAgentCoreランタイムARN。エージェント/MCPコンストラクトによって自動的に登録され、サーバーサイドの検出(A2A経由のエージェント→エージェント、エージェント→MCPサーバー)に使用されます。
  • dynamodb — テーブル名。DynamoDBテーブルコンストラクトによって自動的に登録され、生成されたテーブルクライアントによって読み取られます。
  • database — Auroraの接続詳細。リレーショナルデータベースコンストラクトによって自動的に登録され、生成されたデータベースクライアントによって読み取られます。

connection名前空間は、ウェブサイトのS3バケットにruntime-config.jsonファイルとしてもデプロイされ、バックエンドリソースのクライアントサイド検出を可能にします。他の名前空間はサーバーサイドのみ(AppConfig経由)であるため、ウェブサイトを明示的に接続しない限り、エージェントランタイムARNやテーブル名などの値はフロントエンドに公開されません。

必要に応じて追加の名前空間をいくつでも定義でき、デプロイ時の値をLambda関数や他のコンピュートリソースに渡すための環境変数の便利な代替手段を提供します。

Diagram

生成されたコンストラクトは、関連する設定をconnection名前空間に自動的に書き込みます。任意の名前空間に独自の値を書き込むこともできます。

RuntimeConfig CDKコンストラクトはステージスコープのシングルトンです。set()を使用して名前空間にキーを書き込みます:

packages/infra/src/stacks/application-stack.ts
import { RuntimeConfig } from '@my-scope/common-constructs';
const rc = RuntimeConfig.ensure(this);
// Built-in 'connection' namespace (written automatically by generated constructs)
rc.set('connection', 'apis', {
...rc.get('connection').apis,
MyApi: api.url,
});
// Custom namespaces for server-side configuration
rc.set('tables', 'users', {
tableName: usersTable.tableName,
tableArn: usersTable.tableArn,
});

synth/デプロイ時に、RuntimeConfigは以下を含むAWS AppConfigアプリケーションを作成します:

  • 各名前空間の設定プロファイル
  • 各プロファイルのJSONデータを含むホスト型設定バージョン
  • default環境への即座のデプロイメント

サーバーサイドのコンシューマーは、ランタイムで設定を読み取るためにAppConfigアプリケーションIDとIAM権限が必要です。生成されたコンストラクトはこれを自動的に処理します。

appConfigApplicationIdを使用してAppConfigアプリケーションIDを取得し、grantReadAppConfig()を使用して読み取り権限を付与します:

packages/infra/src/stacks/application-stack.ts
const rc = RuntimeConfig.ensure(this);
// Get the AppConfig Application ID (lazy token, resolved at synth time)
const appId = rc.appConfigApplicationId;
// Pass it as an environment variable to a Lambda function
const myFunction = new Function(this, 'MyFunction', {
// ...
environment: {
RUNTIME_CONFIG_APP_ID: appId,
},
});
// Grant the function permission to read from AppConfig
rc.grantReadAppConfig(myFunction);

AppConfig経由のサーバーサイドアクセス

Section titled “AppConfig経由のサーバーサイドアクセス”

Lambda関数やエージェントなどのサーバーサイドコンシューマーは、AWS Lambda Powertoolsを使用してAWS AppConfigからランタイム設定を取得できます。

生成されたすべてのAPIおよびエージェントコンストラクトは、次のように自動的に設定されます:

  • RUNTIME_CONFIG_APP_ID環境変数(AppConfigアプリケーションID)
  • AppConfigから読み取るためのIAM権限

@aws-lambda-powertools/parametersgetAppConfigを使用します:

import { getAppConfig } from '@aws-lambda-powertools/parameters/appconfig';
// Retrieve the 'connection' namespace as a parsed JSON object
const config = await getAppConfig('connection', {
application: process.env.RUNTIME_CONFIG_APP_ID!,
environment: 'default',
transform: 'json',
});
// Access values
const apiUrl = config.apis?.MyApi;
const cognitoProps = config.cognitoProps;

カスタム名前空間を取得することもできます:

// Retrieve a custom 'tables' namespace
const tablesConfig = await getAppConfig('tables', {
application: process.env.RUNTIME_CONFIG_APP_ID!,
environment: 'default',
transform: 'json',
});
const usersTableName = tablesConfig.users?.tableName;

ウェブサイトの場合、connection名前空間はS3バケットにruntime-config.jsonファイルとしてデプロイされます。フロントエンドコードからこれらの値にアクセスする方法の詳細については、Reactウェブサイトのランタイム設定ガイドを参照してください。