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.

Le namespace intégré connection est utilisé pour la configuration qui permet aux projets générés de se connecter entre eux, par exemple :

  • 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 — enregistrés automatiquement par les constructs d’agents

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.

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.