微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

有没有办法从 AWS CDK 中的 qldb.CfnLedger 获取生成的 QLDB 分类帐名称?

如何解决有没有办法从 AWS CDK 中的 qldb.CfnLedger 获取生成的 QLDB 分类帐名称?

我正在创建一个 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;

解决方法

考虑到您的要求不是为 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。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。