我正在使用 CDK(在 typescript 中)定义 AWS Timestream DB 和其中的表。
我想允许 AWS 设置数据库的名称(并避免对其进行硬编码)。问题是如何在表结构中引用该数据库名称。
CDK 用户会知道实际的数据库名称是在 AWS 中创建后才定义的(即在定义表的 CDK 代码执行之后)。为此,CDK 提出了占位符Token 的想法(我的重点)。
我知道在更高级别的CDK 构造中,已经定义了占位符 Token。对于低级 cfn构造,情况似乎并非如此。
下面是一些示例代码来解释:
此代码使用更高级别的发电机构造和 lambda 并且可以工作:
const table = new dynamodb.Table(this, id);
const lambda = new lambda.Function(this, id);
lambda.addEnvironment("TABLE_NAME", table.tableName)
console.log(`table Token is: ${table.tableName}`); // prints *like* "${Token[TOKEN.540]}"
这是我为 AWS Timestream 编写的代码,没有生成令牌:
const db = new ts.CfnDatabase(this, id);
console.log(`database name is is: ${db.databaseName}`); // prints null
const table = new ts.CfnTable(this, id, {
databaseName: db.databaseName,
});// this will break as databaseName is null
我的问题:
- 为什么:为什么较低级别的构造不生成令牌。
- 如何:我想我可以创建一个令牌并将其分配给
db.databaseName
但我不知道如何在cdk deploy
运行时用数据填充该令牌。
任何有关生成令牌并填充它的示例代码的帮助将不胜感激。