AWS Timestream DB とその中のテーブルを定義するために (typescript で) CDK を使用しています。
AWS がデータベースの名前を設定できるようにしたい (ハードコーディングを避けたい)。問題は、テーブル構成でそのデータベース名を参照する方法です。
CDK ユーザーは、AWS で作成されるまで (テーブルを定義する CDK コードが実行された後)、実際のデータベース名が定義されていないことを認識します。この目的のために、CDK はプレースホルダートークンのアイデアを作成しました (私の強調)。
より高いレベルのCDK コンストラクトでは、プレースホルダー Token が既に定義されていることを知っています。これは、低レベルの cfnコンストラクトには当てはまらないようです。
説明するサンプルコードを次に示します。
このコードは、より高いレベルの dynamo コンストラクトとラムダを使用して動作します。
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
。
トークンを生成して入力するためのサンプル コードに関するヘルプをいただければ幸いです。