typescript - 如何使用 importValue() 从现有 Cloudformation 堆栈中检索数组
问题描述
我正在尝试将现有 CloudFormation 堆栈中的子网列表导入我正在部署的堆栈中。这些值以逗号分隔的字符串形式存储在现有堆栈的输出中,例如
subnet-1, subnet-2, subnet-3
我尝试使用的导入代码是:
const privateSubnets = Fn.importValue(PrivateSubnets).split(',');
我希望我可以只使用 .split(','),但是当我稍后在 VPC 声明中尝试使用 privateSubnets 变量时出现错误:
const myVpc = Vpc.fromVpcAttributes(this, 'Vpc', {
vpcId: vpcId,
availabilityZones: [0, 1, 2].map(i => Fn.select(i, Fn.getAzs())),
privateSubnetIds: privateSubnets,
publicSubnetIds: publicSubnets
});
我已经四处寻找,但看起来我无法做到这一点。正如您在上面看到的,我正在导入可用区域,然后将它们解析出来,但是我无法找到一种与 importValue() 函数一起使用的方法。
解决方案
Fn.importValue
返回一个Ref - 所以为了使用 ref 中的值,您需要使用内部函数。
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 堆栈中并使用它。
推荐阅读
- elixir - 使用主管为每个节点启动 elixir 子进程
- c++ - arm-none-eabi-g++:没有这样的文件或目录
- javascript - fs.readdir 没有读取作为参数传递的路径
- elasticsearch - 弹性搜索 - 有没有办法在可能符合“must_not”标准的结果中强制文档?
- arrays - 有没有办法可以将 a[indexOfMin] = a[startIndex] 转换为 ArrayList 形式?我似乎不能正确地这样做
- node.js - User.find 不是函数猫鼬
- angular - 如何从 Ionic 3 在 Modal 上 popToRoot
- android - Android导航如何在第二级片段上添加导航向上按钮
- php - 更新 wp 数据库中的记录
- graphql - 获取 NestJS/GraphQL 请求中的请求键列表