我正在尝试将现有CloudFormation堆栈中的子网列表导入到正在部署的堆栈中。这些值以逗号分隔的字符串形式存储在现有堆栈的输出中,例如
subnet-1, subnet-2, subnet-3我尝试使用的导入代码是:
const privateSubnets = Fn.importValue(PrivateSubnets).split(',');const myVpc = Vpc.fromVpcAttributes(this, 'Vpc', {
vpcId: vpcId,
availabilityZones: [0, 1, 2].map(i => Fn.select(i, Fn.getAzs())),
privateSubnetIds: privateSubnets,
publicSubnetIds: publicSubnets
});我已经找遍了,但看起来我做不到。
发布于 2020-12-28 08:02:21
Fn.importValue返回一个Ref -所以为了使用ref中的值,你需要使用intrinsic functions。
const privateSubnets = Fn.split(',', Fn.importValue(PrivateSubnets));
const myVpc = Vpc.fromVpcAttributes(this, 'Vpc', {
vpcId: vpcId,
availabilityZones: [0, 1, 2].map(i => Fn.select(i, Fn.getAzs())),
privateSubnetIds: [Fn.select(0, privateSubnets), Fn.select(1, privateSubnets), Fn.select(2, privateSubnets)],
publicSubnetIds: publicSubnets
});不幸的是,没有一种好的方法来知道Ref的长度并迭代它来正确地将privateSubnetsId映射到ImportValue。
对于您来说,使用SSM参数而不是CloudFormation导出来存储/传递专用子网ID的值可能是一种更干净的长期选择。因为您可以将SSM参数的字符串值加载到CDK堆栈中并使用它。
https://stackoverflow.com/questions/65415784
复制相似问题