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 au moment du 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 namespaces (espaces de noms). Chaque namespace est un regroupement logique de valeurs de configuration associées. Au moment du déploiement, tous les namespaces sont stockés dans AWS AppConfig en tant que Configuration Profiles.

Deux namespaces intégrés sont utilisés par les constructs générés :

  • connection — configuration qui permet aux projets générés de se connecter entre eux :
    • URLs d’API — enregistrées automatiquement par les constructs d’API
    • Paramètres Cognito — enregistrés automatiquement par le construct UserIdentity
    • ARNs d’exécution des agents — ajoutés par le générateur de connexion lorsque vous connectez un site web React à un Strands Agent
  • agentcore — ARNs d’exécution AgentCore pour les agents et les serveurs MCP. Enregistrés automatiquement par les constructs d’agents/MCP et utilisés pour la découverte côté serveur (agent → agent via A2A, agent → serveur MCP).

Le namespace 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. Le namespace agentcore est uniquement côté serveur (via AppConfig), de sorte que les ARNs d’exécution des agents ne sont pas exposés au frontend à moins que vous ne connectiez explicitement un site web à un agent.

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

Les constructs générés écrivent automatiquement la configuration pertinente dans le namespace connection. Vous pouvez également écrire vos propres valeurs dans n’importe quel namespace.

Le construct CDK RuntimeConfig est un singleton à portée de stage. Utilisez set() pour écrire une clé dans 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,
});

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

  • Un Configuration Profile pour chaque namespace
  • Une Hosted Configuration Version avec les données JSON pour chaque profil
  • Un Deployment instantané vers l’environnement default

Les consommateurs côté serveur ont besoin de l’AppConfig Application ID et des permissions IAM pour lire la configuration à l’exécution. Les constructs générés gèrent cela automatiquement.

Utilisez appConfigApplicationId pour obtenir l’AppConfig Application ID, 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.

Tous les constructs d’API et d’agents générés sont automatiquement configurés avec :

  • La variable d’environnement RUNTIME_CONFIG_APP_ID (l’AppConfig Application ID)
  • 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 namespaces 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, le namespace 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.