如果EC2实例已经设置为获取公网IP (非弹性IP),并且当前处于停机状态,那么在启动时可以通过什么来查看它是否会获取到公网IP?让我们假设它所在的子网没有设置,为所有实例提供公网IP。当实例运行时,当我使用client.describe_instances()检索实例时,我可以看到公共IP信息,但是当它停止时,我看不到任何东西。谢谢。
发布于 2021-01-29 05:04:57
在阅读了大量文档后,我得出结论,通过API公开的信息不能可靠地完成这项工作。answer by John介绍了决定EC2实例是否会在第一次引导时分配公网IP的因素的重要细节。
根据这些信息,可以确定新启动的EC2实例是否将获得公共IP,该IP实际上由AssociatePublicIpAddress参数控制。这可以在启动实例时显式设置(请参阅doc1 - Example 5、doc2),并且将有一个默认值,该值取决于实例在其中启动的子网。
如果实例在MapPublicIPOnLaunch设置为true的子网中启动,则默认为true;如果MapPublicIPOnLaunch设置为false,则默认为false。但是,您可以覆盖此默认值。
假设公网IP关联的信息保留在弹性网卡上,如果docs可信的话(重点是我的)。
创建网络接口时,它会从子网继承公共IPv4寻址属性。如果稍后修改子网的公共IPv4寻址属性,则网络接口将保留创建时的有效设置。如果启动实例并将现有网络接口指定为主网络接口,则公共IPv4地址属性将由此网络接口确定。
不幸的是,似乎没有任何应用程序接口公开这个内部标志的值--无论是DescribeInstances还是DescribeNetworkInterfaces API调用都不会在响应中包含它。
因此,您可以根据实例所在的子网进行有根据的猜测,但无论如何,这仍然是一种猜测,因为只有在AssociatePublicIpAddress的默认设置没有更改的情况下,这才能起作用。确定可靠的唯一方法是打开实例,到其上的DescribeInstances,并检查它是否收到了公网IP。
发布于 2021-01-29 04:25:18
为实例分配公网IP地址有3种方式:
AssociatePublicIpAddress设置为True启动实例,或MapPublicIpOnLaunch设置为True要了解子网是否会自动附加公有IP地址,请调用DescribeSubnets()并检查MapPublicIpOnLaunch属性。
https://stackoverflow.com/questions/65943916
复制相似问题