Problem-我在single stack of CDKTF中创建了3个EC2虚拟机.计划文件如下所示-

resources {
  instances:[{instance 1},{instance 2},{instance 3}]
}

现在我想删除实例3,因为我想将AMD64更改为ARM,但我想保留IP.

ASK-如何传递像[None,None,10.xxx.xx.xxx]这样的计数迭代私有IP,从而将IP地址分配给我的实例3,而不影响实例1和实例2?

我目前的代码如下-

private_ip = [None,None,'10.xxx.xx.xxx']

instance = ec2.Instance(self.scope_obj,
                        "%s-instance-%s" % (self.app, zone), ami=self.ami, instance_type=self.flavor_name,
                        subnet_id=data_subnet_obj.id, tags=vm_tags, volume_tags=vol_tags,
                        root_block_device=root_volume,
                        count=instance_count,
                        metadata_options=metadata_options,
                        availability_zone=zones,
                        disable_api_termination=disable_api_termination,
                        iam_instance_profile = iam_instance_profile,
                        vpc_security_group_ids = vpc_security_group_ids,
                        key_name = key_name,
                        private_ip = private_ip["${count.index}"]
                        )

错误:类型错误:列表索引必须是整数或切片,而不是字符串

推荐答案

据我所知,您已经有了一个基础架构,并且在删除VM并更改味道类型之后,您想要获取IP并将其附加到VM.

您可以创建一个map而不是一个列表,然后创建一个terraform变量并进行查找,查看以下代码-

from cdktf import TerraformVariable

private_ip_map_variable = {0:'ip1',1:'10.xx.xxx.xx', 2:'10.90.xxx.xx'}

var = TerraformVariable(self.scope_obj,'varname',default=private_ip_map_variable, type="map(string)")

instance = ec2.Instance(self.scope_obj,
                        "%s-instance-%s" % (self.app, zone), ami=self.ami, instance_type=self.flavor_name,
                        subnet_id=data_subnet_obj.id, tags=vm_tags, volume_tags=vol_tags,
                        root_block_device=root_volume,
                        count=instance_count,
                        metadata_options=metadata_options,
                        availability_zone=zones,
                        disable_api_termination=disable_api_termination,
                        iam_instance_profile = iam_instance_profile,
                        vpc_security_group_ids = vpc_security_group_ids,
                        key_name = key_name,
                        private_ip = "${lookup(var.varname,count.index)}"
                        )

注意-不要保持PRIVATE_IP NONE,否则它不会显示在TerraformVariable对象中

Python-3.x相关问答推荐

我在创建Pandas DataFrame时感到困惑

像计数不显示在html和想知道如果我的模型设置正确

以编程方式关闭jupyterlab内核

没有这样的命令';角色';-可靠分子

如何将从维基百科表中抓取的数据转换为字典列表?

如何创建与导航抽屉一起使用的导航栏

如何将函数映射到所有命名元组的元素?

调用 Clear 时 Airflow 会加载新代码吗

如何根据索引子列表对元素列表进行分组或批处理?

协议不支持地址系列在将 Scapy L3socket 与 WSL 一起使用时

使用带有多线程的 win32com

如何从脚本中提取 PDF 文档的标题以进行重命名?

如何并行化文件下载?

如何从同一文件夹中的模块导入功能?

pandas 中 df.reindex() 和 df.set_index() 方法的区别

if 语句中冒号的语法错误

如何将 SimpleGUI 与 Python 2.7 和 3.0 shell 集成

用于 unicode 大写单词的 Python 正则表达式

使用 asyncio 的多个循环

在 Keras 中训练神经网络的零精度