gpt4 book ai didi

aws-cloudformation - AWS CDK - 如何将 "placeholder" token 与低级 cfn 构造结合使用

转载 作者:行者123 更新时间:2023-12-03 07:13:28 25 4
gpt4 key购买 nike

我正在使用 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 编写的代码,没有生成 token :

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

我的问题:

  1. 原因:为什么较低级别的构造不生成 token 。
  2. 如何:我认为我可以创建一个 token 并将其分配给db.databaseName,但我不知道如何在 cdk部署已运行。

任何有关生成 token 并填充它的示例代码的帮助将不胜感激。

最佳答案

您可能正在寻找 ref 而不是 databaseName:

const db = new ts.CfnDatabase(this, id);
console.log(`database name is is: ${db.ref}`); // prints null

const table = new ts.CfnTable(this, id, {
databaseName: db.ref,
});

这与 AWS::Timestream::Database CloudFormation 资源一一对应。作为docs描述,Ref返回值代表数据库名称。

背景:“CFN 资源”(也称为 L1 资源)中公开的属性,包括资源属性(它们在对象初始化时配置)和资源属性,这就是你所追求的。

关于aws-cloudformation - AWS CDK - 如何将 "placeholder" token 与低级 cfn 构造结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64796282/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com