Salta ai contenuti

Configurazione Runtime

La configurazione runtime è il meccanismo utilizzato da Nx Plugin for AWS per passare valori di deploy-time tra progetti e componenti generati in modo che possano connettersi tra loro. Ad esempio, quando generi un’API, il suo URL viene automaticamente registrato nella configurazione runtime in modo che un sito web connesso possa scoprirlo.

La configurazione runtime è organizzata in namespace. Ogni namespace è un raggruppamento logico di valori di configurazione correlati. Al momento del deploy, tutti i namespace vengono memorizzati in AWS AppConfig come Configuration Profile.

Quattro namespace integrati vengono utilizzati dai costrutti generati:

  • connection — configurazione che consente ai progetti generati di connettersi tra loro:
    • URL delle API — registrati automaticamente dai costrutti API
    • Impostazioni Cognito — registrate automaticamente dal costrutto UserIdentity
    • ARN runtime degli Agent — aggiunti dal generatore di connessioni quando connetti un sito web React a un Agent
  • agentcore — ARN runtime di AgentCore per agent e server MCP. Registrati automaticamente dai costrutti agent/MCP e utilizzati per la scoperta lato server (agent → agent tramite A2A, agent → server MCP).
  • dynamodb — nomi delle tabelle, registrati automaticamente dai costrutti delle tabelle DynamoDB e letti dal client della tabella generato.
  • database — dettagli di connessione Aurora, registrati automaticamente dai costrutti dei database relazionali e letti dal client del database generato.

Il namespace connection viene anche distribuito come file runtime-config.json nel bucket S3 del tuo sito web, consentendo la scoperta lato client delle risorse backend. Gli altri namespace sono solo lato server (tramite AppConfig), quindi valori come gli ARN runtime degli agent e i nomi delle tabelle non vengono esposti al frontend a meno che tu non connetta esplicitamente un sito web a essi.

Puoi definire tutti i namespace aggiuntivi che desideri, fornendo una comoda alternativa alle variabili d’ambiente per passare valori di deploy-time alle tue funzioni Lambda o ad altre risorse di calcolo.

Diagram

I costrutti generati scrivono automaticamente la configurazione rilevante nel namespace connection. Puoi anche scrivere i tuoi valori in qualsiasi namespace.

Il costrutto CDK RuntimeConfig è un singleton con scope di stage. Usa set() per scrivere una chiave in un namespace:

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

Al momento di synth/deploy, RuntimeConfig crea un’applicazione AWS AppConfig contenente:

  • Un Configuration Profile per ogni namespace
  • Una Hosted Configuration Version con i dati JSON per ogni profilo
  • Un Deployment istantaneo nell’ambiente default

I consumatori lato server necessitano dell’AppConfig Application ID e dei permessi IAM per leggere la configurazione a runtime. I costrutti generati gestiscono questo automaticamente.

Usa appConfigApplicationId per ottenere l’AppConfig Application ID, e grantReadAppConfig() per concedere i permessi di lettura:

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

I consumatori lato server come funzioni Lambda e agent possono recuperare la configurazione runtime da AWS AppConfig utilizzando AWS Lambda Powertools.

Tutti i costrutti API e agent generati sono automaticamente configurati con:

  • La variabile d’ambiente RUNTIME_CONFIG_APP_ID (l’AppConfig Application ID)
  • Permessi IAM per leggere da AppConfig

Usa getAppConfig da @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;

Puoi anche recuperare namespace personalizzati:

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

Per i siti web, il namespace connection viene distribuito come file runtime-config.json nel bucket S3. Consulta la guida Configurazione Runtime del Sito Web React per dettagli su come accedere a questi valori dal tuo codice frontend.