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 eles 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 site 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.

Quatro namespaces integrados são usados por constructs gerados:

  • connection — configuração que permite que projetos gerados se conectem uns aos outros:
    • URLs de API — registradas automaticamente por constructs de API
    • Configurações do Cognito — registradas automaticamente pelo construct UserIdentity
    • ARNs de runtime de Agent — adicionados pelo gerador de conexão quando você conecta um site React a um Agent
  • agentcore — ARNs de runtime do AgentCore para agents e servidores MCP. Registrados automaticamente pelos constructs de agent/MCP e usados para descoberta do lado do servidor (agent → agent via A2A, agent → servidor MCP).
  • dynamodb — nomes de tabelas, registrados automaticamente por constructs de tabela DynamoDB e lidos pelo cliente de tabela gerado.
  • database — detalhes de conexão do Aurora, registrados automaticamente por constructs de banco de dados relacional e lidos pelo cliente de banco de dados gerado.

O namespace connection também é implantado como um arquivo runtime-config.json no bucket S3 do seu site, permitindo a descoberta de recursos de backend do lado do cliente. Os outros namespaces são apenas do lado do servidor (via AppConfig), portanto valores como ARNs de runtime de agent e nomes de tabelas não são expostos ao frontend, a menos que você conecte explicitamente um site a eles.

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

Diagram

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 perfil
  • Uma Deployment instantânea para o ambiente default

Consumidores do lado do servidor precisam do AppConfig Application ID e permissões IAM para ler a configuração em tempo de execução. 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 do lado do servidor, como funções Lambda e agents, podem recuperar a configuração de runtime do AWS AppConfig usando AWS Lambda Powertools.

Todos os constructs gerados de API e agent 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 sites, o namespace connection é implantado como um arquivo runtime-config.json no bucket S3. Consulte o guia Configuração de Runtime do Site React para detalhes sobre como acessar esses valores do seu código frontend.