2

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

私の質問:

  1. 理由: 下位レベルの構成がトークンを生成しないのはなぜですか。
  2. 方法:トークンを作成して割り当てることはできると思いますdb.databaseNameが、実行時にトークンにデータを入力する方法がわかりませんcdk deploy

トークンを生成して入力するためのサンプル コードに関するヘルプをいただければ幸いです。

4

1 に答える 1