Salta ai contenuti

Configurazione Runtime

La configurazione runtime è il meccanismo utilizzato da Nx Plugin for AWS per passare valori al momento del deploy 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 Profiles.

Il namespace integrato connection viene utilizzato per la configurazione che consente ai progetti generati di connettersi tra loro, ad esempio:

  • URL delle API — registrati automaticamente dai construct API
  • Impostazioni Cognito — registrate automaticamente dal construct UserIdentity
  • ARN runtime degli agenti — registrati automaticamente dai construct agent

Il namespace connection viene anche distribuito come file runtime-config.json nel bucket S3 del tuo sito web, abilitando la scoperta lato client delle risorse backend.

Puoi definire tutti i namespace aggiuntivi che desideri, fornendo un’alternativa conveniente alle variabili d’ambiente per passare valori al momento del deploy come i nomi delle tabelle DynamoDB alle tue funzioni Lambda o ad altre risorse di calcolo.

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

Il construct 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 all’ambiente default

I consumer lato server necessitano dell’AppConfig Application ID e delle autorizzazioni IAM per leggere la configurazione a runtime. I construct 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 consumer lato server come le funzioni Lambda e gli agenti possono recuperare la configurazione runtime da AWS AppConfig utilizzando AWS Lambda Powertools.

Tutti i construct 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 React Website Runtime Configuration per i dettagli su come accedere a questi valori dal tuo codice frontend.