Pular para o conteúdo

Configuração de Runtime

A configuração de runtime é o mecanismo usado pelo Nx Plugin for AWS para passar valores de tempo de implantação entre projetos e componentes gerados para que possam se conectar uns aos outros. Por exemplo, quando você gera uma API, sua URL é automaticamente registrada na configuração de runtime para que um website conectado possa descobri-la.

A configuração de runtime é organizada em namespaces. Cada namespace é um agrupamento lógico de valores de configuração relacionados. No momento da implantação, todos os namespaces são armazenados no AWS AppConfig como Configuration Profiles.

O namespace connection integrado é usado para configuração que permite que projetos gerados se conectem uns aos outros, por exemplo:

  • URLs de API — registradas automaticamente por constructs de API
  • Configurações do Cognito — registradas automaticamente pelo construct UserIdentity
  • ARNs de runtime de agentes — registrados automaticamente por constructs de agentes

O namespace connection também é implantado como um arquivo runtime-config.json no bucket S3 do seu website, permitindo a descoberta client-side de recursos de backend.

Você pode definir quantos namespaces adicionais desejar, fornecendo uma alternativa conveniente às variáveis de ambiente para passar valores de tempo de implantação, como nomes de tabelas DynamoDB, para suas funções Lambda ou outros recursos de computação.

Os constructs gerados escrevem automaticamente a configuração relevante no namespace connection. Você também pode escrever seus próprios valores em qualquer namespace.

O construct CDK RuntimeConfig é um singleton com escopo de stage. Use set() para escrever uma chave em um 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,
});

No momento de synth/deploy, RuntimeConfig cria uma aplicação AWS AppConfig contendo:

  • Um Configuration Profile para cada namespace
  • Uma Hosted Configuration Version com os dados JSON para cada profile
  • Um Deployment instantâneo para o ambiente default

Os consumidores server-side precisam do AppConfig Application ID e permissões IAM para ler a configuração em runtime. Os constructs gerados lidam com isso automaticamente.

Use appConfigApplicationId para obter o AppConfig Application ID, e grantReadAppConfig() para conceder permissões de leitura:

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

Consumidores server-side, como funções Lambda e agentes, podem recuperar a configuração de runtime do AWS AppConfig usando AWS Lambda Powertools.

Todos os constructs de API e agente gerados são automaticamente configurados com:

  • A variável de ambiente RUNTIME_CONFIG_APP_ID (o AppConfig Application ID)
  • Permissões IAM para ler do AppConfig

Use getAppConfig de @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;

Você também pode recuperar namespaces personalizados:

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

Para websites, o namespace connection é implantado como um arquivo runtime-config.json no bucket S3. Consulte o guia React Website Runtime Configuration para detalhes sobre como acessar esses valores do seu código frontend.