Ir al contenido

Configuración en Tiempo de Ejecución

La configuración en tiempo de ejecución es el mecanismo utilizado por Nx Plugin for AWS para pasar valores en tiempo de despliegue entre proyectos y componentes generados para que puedan conectarse entre sí. Por ejemplo, cuando generas una API, su URL se registra automáticamente en la configuración en tiempo de ejecución para que un sitio web conectado pueda descubrirla.

La configuración en tiempo de ejecución está organizada en espacios de nombres. Cada espacio de nombres es una agrupación lógica de valores de configuración relacionados. En tiempo de despliegue, todos los espacios de nombres se almacenan en AWS AppConfig como Perfiles de Configuración.

Cuatro espacios de nombres integrados son utilizados por los constructos generados:

  • connection — configuración que permite a los proyectos generados conectarse entre sí:
    • URLs de API — registradas automáticamente por los constructos de API
    • Configuración de Cognito — registrada automáticamente por el constructo UserIdentity
    • ARNs de tiempo de ejecución de agentes — agregados por el generador de conexión cuando conectas un sitio web React a un agente
  • agentcore — ARNs de tiempo de ejecución de AgentCore para agentes y servidores MCP. Registrados automáticamente por los constructos de agente/MCP y utilizados para descubrimiento del lado del servidor (agente → agente vía A2A, agente → servidor MCP).
  • dynamodb — nombres de tablas, registrados automáticamente por los constructos de tabla DynamoDB y leídos por el cliente de tabla generado.
  • database — detalles de conexión de Aurora, registrados automáticamente por los constructos de base de datos relacional y leídos por el cliente de base de datos generado.

El espacio de nombres connection también se despliega como un archivo runtime-config.json en el bucket S3 de tu sitio web, permitiendo el descubrimiento del lado del cliente de recursos backend. Los otros espacios de nombres son solo del lado del servidor (vía AppConfig), por lo que valores como ARNs de tiempo de ejecución de agentes y nombres de tablas no se exponen al frontend a menos que conectes explícitamente un sitio web a ellos.

Puedes definir tantos espacios de nombres adicionales como desees, proporcionando una alternativa conveniente a las variables de entorno para pasar valores en tiempo de despliegue a tus funciones Lambda u otros recursos de cómputo.

Diagram

Los constructos generados escriben automáticamente la configuración relevante en el espacio de nombres connection. También puedes escribir tus propios valores en cualquier espacio de nombres.

El constructo CDK RuntimeConfig es un singleton con ámbito de stage. Usa set() para escribir una clave en un espacio de nombres:

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,
});

En tiempo de synth/deploy, RuntimeConfig crea una aplicación AWS AppConfig que contiene:

  • Un Perfil de Configuración para cada espacio de nombres
  • Una Versión de Configuración Alojada con los datos JSON para cada perfil
  • Un Despliegue instantáneo al entorno default

Los consumidores del lado del servidor necesitan el ID de Aplicación AppConfig y permisos IAM para leer la configuración en tiempo de ejecución. Los constructos generados manejan esto automáticamente.

Usa appConfigApplicationId para obtener el ID de Aplicación AppConfig, y grantReadAppConfig() para otorgar permisos de lectura:

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);

Los consumidores del lado del servidor como funciones Lambda y agentes pueden recuperar la configuración en tiempo de ejecución desde AWS AppConfig usando AWS Lambda Powertools.

Todos los constructos generados de API y agente se configuran automáticamente con:

  • La variable de entorno RUNTIME_CONFIG_APP_ID (el ID de Aplicación AppConfig)
  • Permisos IAM para leer desde AppConfig

Usa getAppConfig de @aws-lambda-powertools/parameters:

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;

También puedes recuperar espacios de nombres personalizados:

// 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;

Para sitios web, el espacio de nombres connection se despliega como un archivo runtime-config.json en el bucket S3. Consulta la guía Configuración en Tiempo de Ejecución del Sitio Web React para detalles sobre cómo acceder a estos valores desde tu código frontend.