0

我正在创建一个 QLDB 分类帐作为我的堆栈的一部分。我不想提供分类帐名称(否则由于名称冲突,我无法创建多个环境)。

我还需要知道分类帐名称作为我的堆栈的输出/返回值,因为稍后一些 lambda 函数需要知道它才能使用 QLDB SDK。

使用以下代码,ledger.name 始终未定义

import * as qldb from '@aws-cdk/aws-qldb';

const ledger = new qldb.CfnLedger(this, 'Ledger', {
  deletionProtection,
  permissionsMode: 'STANDARD',
});

console.log(ledger.name)

这是有道理的,因为在 AWS 中创建分类帐之前,分类帐似乎不会获得其生成的名称(尽管它似乎确实是从堆栈中派生的)。

仅供参考,一旦创建它并且我知道它的名称,在cdk.out文件夹中搜索名称什么也找不到,所以我不相信它包含在 CFN 模板中。

现在,我正在使用以下代码使用 CDK 生成一个唯一名称,但我只是想知道是否有更简洁的方法。

const name = cdk.Names.uniqueId(ledger);
ledger.name = name;

编辑

此代码生成的名称通常比账本名称的 32 个字符限制长,因此我还在其上运行了一个正则表达式来获取唯一名称的最后一部分。

const name = cdk.Names.uniqueId(ledger);
ledger.name = name;
4

1 回答 1

0

考虑到您的要求不是硬编码创建 cfnLedger 的分类帐名称,并且您想在其他 cfn 资源中引用它的名称,您有以下两个选项

  1. 将分类帐名称作为参考
    const ledger = new qldb.CfnLedger(this, 'Ledger', {
        deletionProtection,
        permissionsMode: 'STANDARD',
    });
    const ledgerName = ledger.ref
    
    // Create CloudFormation output. 
    new cdk.CfnOutput(this, 'QldbLedgerName', {
        value: ledger.ref,
        description: 'Qldb Ledger Name',
    });

注意:console.log(ledger.ref)不会产生名称而是令牌引用。例如${Token[TOKEN.#]}

  1. 生成账本名称作为唯一 id 并将其传递给账本创建。你采取的方法。

我们建议您使用选项#1。

于 2021-07-09T22:12:48.757 回答