gpt4 book ai didi

aws-cdk - 解析为未定义的 CDK 方面和 token

转载 作者:行者123 更新时间:2023-12-04 14:08:04 25 4
gpt4 key购买 nike

我遇到了一个问题,我们想要确保在 CloudFormation 资源的命名中遵循一些约定。这个想法是我们使用 CDK Aspects来处理资源。一个简单的例子:

export class BucketConvention implements cdk.IAspect {
private readonly ctx: Context;

constructor(ctx: Context) {
this.ctx = ctx;
}

public visit(node: cdk.IConstruct): void {
if (cdk.CfnResource.isCfnResource(node) && node.cfnResourceType == 'AWS::S3::Bucket') {
const resource = node as s3.CfnBucket;
const resourceId = resource.bucketName ? resource.bucketName : cdk.Stack.of(node).getLogicalId(node);
resource.addPropertyOverride('BucketName', `${ctx.project}-${ctx.environment}-${resourceId}`);
}
}
}

Context 接口(interface)只包含一些用于创建名称的变量。此代码段的问题在于,如果未使用逻辑 ID,我们将尝试插入已设置的存储桶名称。现在获取逻辑 ID 的方法有效,但是 resource.BucketName 将返回一个 token ,其解析值可能是未定义的(即用户在构造桶时没有传递桶名称,这在高级构造中经常发生)。所以逻辑 ID 实际上永远不会触发,因为 token 总是被定义的。如果你记录插值输出,你会得到类似的东西

myproject-myenvironment-${Token[TOKEN.104]}

我的问题是,如果提供了存储桶名称,如果不使用逻辑 ID,我们如何才能使插值发生在存储桶名称上?有没有办法查看 token 在合成期间是否会给出未定义的值?

最佳答案

并找到了我的问题的答案...类似于您可以使用的逻辑 ID

cdk.Stack.of(resource).resolve(resource.bucketName)

关于aws-cdk - 解析为未定义的 CDK 方面和 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66698277/

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