获取 Amazon EC2 实例内部 IP 地址的最佳方法是什么?
What is best way to get internal IP address of Amazon EC2 instances?
请检查以下场景:
- 我正在使用 CloudFormation 模板创建 3 个 Amazon EC2 实例。
- 在模板中,我使用 Auto Scaling 组来启动 3 个实例。
- 我没有分配 Public IP 地址 - 只有私有 IP 地址会分配给实例。
我想做一个有3个实例的集群,所以这3个实例需要知道彼此的私有IP地址。
在第 3 个实例中获取其他 2 个实例的 IP 地址的最佳方法是什么?我应该在 AMI 中保留一个小脚本,它将把 IP 地址扔到外面吗?
在 cloudformation 中,您可以使用 GetAtt intrinsic function,它 returns 模板中资源的属性值。
要获取 PrivateIp,它看起来像这样:
{ "Fn::GetAtt" : [ "Ec2Instance", "PrivateIp" ] }
一般来说,最好避免通过 IP 地址引用其他资源。例如,一个实例可能会失败,然后您可以将其替换为一个新实例,该实例将接收不同的 IP 地址。
相反,建议 为一个实例分配一个 DNS 名称 并通过该 DNS 名称引用它。您可以在 CloudFormation 模板中定义一个 Amazon Route 53 私有托管区域,并创建记录集来为 3 个 EC2 实例中的每一个实例分配一个名称。
这样,实例本身不需要知道 IP 地址,也不需要 'send' 其他实例的 IP 地址,也不需要在每个实例上存储 IP 地址.
参见:
请检查以下场景:
- 我正在使用 CloudFormation 模板创建 3 个 Amazon EC2 实例。
- 在模板中,我使用 Auto Scaling 组来启动 3 个实例。
- 我没有分配 Public IP 地址 - 只有私有 IP 地址会分配给实例。
我想做一个有3个实例的集群,所以这3个实例需要知道彼此的私有IP地址。
在第 3 个实例中获取其他 2 个实例的 IP 地址的最佳方法是什么?我应该在 AMI 中保留一个小脚本,它将把 IP 地址扔到外面吗?
在 cloudformation 中,您可以使用 GetAtt intrinsic function,它 returns 模板中资源的属性值。
要获取 PrivateIp,它看起来像这样:
{ "Fn::GetAtt" : [ "Ec2Instance", "PrivateIp" ] }
一般来说,最好避免通过 IP 地址引用其他资源。例如,一个实例可能会失败,然后您可以将其替换为一个新实例,该实例将接收不同的 IP 地址。
相反,建议 为一个实例分配一个 DNS 名称 并通过该 DNS 名称引用它。您可以在 CloudFormation 模板中定义一个 Amazon Route 53 私有托管区域,并创建记录集来为 3 个 EC2 实例中的每一个实例分配一个名称。
这样,实例本身不需要知道 IP 地址,也不需要 'send' 其他实例的 IP 地址,也不需要在每个实例上存储 IP 地址.
参见: