Aller au contenu

Configuration d'exécution

La configuration d’exécution est le mécanisme utilisé par Nx Plugin for AWS pour transmettre des valeurs de déploiement entre les projets et composants générés afin qu’ils puissent se connecter les uns aux autres. Par exemple, lorsque vous générez une API, son URL est automatiquement enregistrée dans la configuration d’exécution afin qu’un site web connecté puisse la découvrir.

La configuration d’exécution est organisée en espaces de noms. Chaque espace de noms est un regroupement logique de valeurs de configuration associées. Au moment du déploiement, tous les espaces de noms sont stockés dans AWS AppConfig en tant que profils de configuration.

Quatre espaces de noms intégrés sont utilisés par les constructions générées :

  • connection — configuration qui permet aux projets générés de se connecter les uns aux autres :
    • URL d’API — enregistrées automatiquement par les constructions d’API
    • Paramètres Cognito — enregistrés automatiquement par la construction UserIdentity
    • ARN d’exécution d’agent — ajoutés par le générateur de connexion lorsque vous connectez un site web React à un agent
  • agentcore — ARN d’exécution AgentCore pour les agents et les serveurs MCP. Enregistrés automatiquement par les constructions agent/MCP et utilisés pour la découverte côté serveur (agent → agent via A2A, agent → serveur MCP).
  • dynamodb — noms de tables, enregistrés automatiquement par les constructions de tables DynamoDB et lus par le client de table généré.
  • database — détails de connexion Aurora, enregistrés automatiquement par les constructions de bases de données relationnelles et lus par le client de base de données généré.

L’espace de noms connection est également déployé sous forme de fichier runtime-config.json dans le bucket S3 de votre site web, permettant la découverte côté client des ressources backend. Les autres espaces de noms sont uniquement côté serveur (via AppConfig), de sorte que les valeurs telles que les ARN d’exécution d’agent et les noms de tables ne sont pas exposées au frontend à moins que vous ne connectiez explicitement un site web à eux.

Vous pouvez définir autant d’espaces de noms supplémentaires que vous le souhaitez, offrant une alternative pratique aux variables d’environnement pour transmettre des valeurs de déploiement à vos fonctions Lambda ou autres ressources de calcul.

Diagram

Les constructions générées écrivent automatiquement la configuration pertinente dans l’espace de noms connection. Vous pouvez également écrire vos propres valeurs dans n’importe quel espace de noms.

La construction CDK RuntimeConfig est un singleton limité à la phase. Utilisez set() pour écrire une clé dans un espace de noms :

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

Au moment de la synthèse/du déploiement, RuntimeConfig crée une application AWS AppConfig contenant :

  • Un profil de configuration pour chaque espace de noms
  • Une version de configuration hébergée avec les données JSON pour chaque profil
  • Un déploiement instantané vers l’environnement default

Les consommateurs côté serveur ont besoin de l’ID d’application AppConfig et des permissions IAM pour lire la configuration au moment de l’exécution. Les constructions générées gèrent cela automatiquement.

Utilisez appConfigApplicationId pour obtenir l’ID d’application AppConfig, et grantReadAppConfig() pour accorder les permissions de lecture :

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

Les consommateurs côté serveur tels que les fonctions Lambda et les agents peuvent récupérer la configuration d’exécution depuis AWS AppConfig en utilisant AWS Lambda Powertools.

Toutes les constructions d’API et d’agent générées sont automatiquement configurées avec :

  • La variable d’environnement RUNTIME_CONFIG_APP_ID (l’ID d’application AppConfig)
  • Les permissions IAM pour lire depuis AppConfig

Utilisez getAppConfig depuis @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;

Vous pouvez également récupérer des espaces de noms personnalisés :

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

Pour les sites web, l’espace de noms connection est déployé sous forme de fichier runtime-config.json dans le bucket S3. Consultez le guide Configuration d’exécution du site web React pour plus de détails sur la façon d’accéder à ces valeurs depuis votre code frontend.