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 se organiza 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.

El espacio de nombres connection integrado se utiliza para la configuración que permite que los proyectos generados se conecten entre sí, por ejemplo:

  • URLs de API — registradas automáticamente por los constructos de API
  • Configuración de Cognito — registrada automáticamente por el constructo UserIdentity
  • ARNs de runtime de agentes — registrados automáticamente por los constructos de agentes

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 los recursos del backend.

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 como nombres de tablas de DynamoDB a tus funciones Lambda u otros recursos de cómputo.

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 de AWS AppConfig que contiene:

  • Un Configuration Profile para cada espacio de nombres
  • Una Hosted Configuration Version con los datos JSON para cada perfil
  • Un Deployment instantáneo al entorno default

Los consumidores del lado del servidor necesitan el AppConfig Application ID 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 AppConfig Application ID, 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 las funciones Lambda y los agentes pueden recuperar la configuración en tiempo de ejecución desde AWS AppConfig usando AWS Lambda Powertools.

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

  • La variable de entorno RUNTIME_CONFIG_APP_ID (el AppConfig Application ID)
  • 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 React Website Runtime Configuration para obtener detalles sobre cómo acceder a estos valores desde tu código frontend.