Bỏ qua để đến nội dung

Cấu Hình Runtime

Cấu hình runtime là cơ chế được Nx Plugin for AWS sử dụng để truyền các giá trị tại thời điểm triển khai giữa các dự án và thành phần được tạo để chúng có thể kết nối với nhau. Ví dụ, khi bạn tạo một API, URL của nó sẽ tự động được đăng ký trong cấu hình runtime để một website được kết nối có thể khám phá nó.

Cấu hình runtime được tổ chức thành các namespace. Mỗi namespace là một nhóm logic của các giá trị cấu hình liên quan. Tại thời điểm triển khai, tất cả các namespace được lưu trữ trong AWS AppConfig dưới dạng Configuration Profiles.

Bốn namespace tích hợp sẵn được sử dụng bởi các construct được tạo:

  • connection — cấu hình cho phép các dự án được tạo kết nối với nhau:
    • API URLs — được đăng ký tự động bởi các construct API
    • Cognito settings — được đăng ký tự động bởi construct UserIdentity
    • Agent runtime ARNs — được thêm bởi trình tạo kết nối khi bạn kết nối một website React với một Agent
  • agentcore — AgentCore runtime ARNs cho các agent và MCP server. Được đăng ký tự động bởi các construct agent/MCP và được sử dụng để khám phá phía server (agent → agent qua A2A, agent → MCP server).
  • dynamodb — tên bảng, được đăng ký tự động bởi các construct bảng DynamoDB và được đọc bởi table client được tạo.
  • database — chi tiết kết nối Aurora, được đăng ký tự động bởi các construct cơ sở dữ liệu quan hệ và được đọc bởi database client được tạo.

Namespace connection cũng được triển khai dưới dạng file runtime-config.json vào S3 bucket của website của bạn, cho phép khám phá các tài nguyên backend từ phía client. Các namespace khác chỉ dành cho phía server (qua AppConfig), vì vậy các giá trị như agent runtime ARN và tên bảng không được tiết lộ cho frontend trừ khi bạn kết nối rõ ràng một website với chúng.

Bạn có thể định nghĩa bao nhiêu namespace bổ sung tùy thích, cung cấp một giải pháp thay thế thuận tiện cho các biến môi trường để truyền các giá trị tại thời điểm triển khai cho các hàm Lambda hoặc tài nguyên tính toán khác của bạn.

Diagram

Các construct được tạo tự động ghi cấu hình liên quan vào namespace connection. Bạn cũng có thể ghi các giá trị của riêng mình vào bất kỳ namespace nào.

Construct CDK RuntimeConfig là một singleton có phạm vi stage. Sử dụng set() để ghi một key vào một 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,
});

Tại thời điểm synth/deploy, RuntimeConfig tạo một ứng dụng AWS AppConfig chứa:

  • Một Configuration Profile cho mỗi namespace
  • Một Hosted Configuration Version với dữ liệu JSON cho mỗi profile
  • Một Deployment tức thì vào môi trường default

Các consumer phía server cần AppConfig Application ID và quyền IAM để đọc cấu hình tại runtime. Các construct được tạo xử lý điều này tự động.

Sử dụng appConfigApplicationId để lấy AppConfig Application ID, và grantReadAppConfig() để cấp quyền đọc:

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

Các consumer phía server như hàm Lambda và agent có thể truy xuất cấu hình runtime từ AWS AppConfig bằng cách sử dụng AWS Lambda Powertools.

Tất cả các construct API và agent được tạo đều được cấu hình tự động với:

  • Biến môi trường RUNTIME_CONFIG_APP_ID (AppConfig Application ID)
  • Quyền IAM để đọc từ AppConfig

Sử dụng getAppConfig từ @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;

Bạn cũng có thể truy xuất các namespace tùy chỉnh:

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

Đối với các website, namespace connection được triển khai dưới dạng file runtime-config.json vào S3 bucket. Xem hướng dẫn React Website Runtime Configuration để biết chi tiết về cách truy cập các giá trị này từ mã frontend của bạn.