使用 EC2 VPC 实例的新主机名动态更新主机文件

Dynamically updating hosts file with new hostname for EC2 VPC instance

当 运行 在 Amazon Web Services EC2/VPC 上的 Ubuntu 14 服务器上执行 sudo 命令时,我收到以下错误。

sudo: unable to resolve host ip-xxx-xx-x-xx 

我把服务器的私有IP地址换成了x。

为了解决这个问题,我需要编辑 /etc/hosts 文件。当我将以下行添加到主机文件时:

127.0.0.1 ip-xxx-xx-x-xx

现在我没有收到错误。 127.0.0.1 之后的值解析为 hostname 命令值。 问题是以后我可能会创建一个AMI并恢复服务器,所以私有IP会改变。在 AWS forum 中,他们建议添加一个脚本,使用新 IP(hostname 值)自动更新主机文件,以便在从 AMI 恢复服务器或自动缩放时工作。

如何使用主机名值更新 hosts 文件,这样我就不需要担心任何未来的问题?

如果您出于某种原因无法在您的 VPC 上启用 DNS hostnames,那么您应该完全按照 AWS 论坛中的建议进行操作。编写脚本自动更改/etc/hosts 文件。示例:

#!/bin/bash
LOCAL_HOSTNAME=$(curl http://169.254.169.254/latest/meta-data/local-hostname)
cat << EOF >> /etc/hosts
127.0.0.1 $LOCAL_HOSTNAME
EOF

注意:这将覆盖整个主机文件,因此请确保您在其中写入了所有需要的内容。

根据 AWS documentationlocal-hostname 将 return 类似于 ip-10-251-50-12.ec2.internal。如果这不是您想要的,请检查上述文档中的其他可用元数据。

假设您不想要 .ec2.internal 部分,您可以自定义脚本以使用 cut 删除该部分。示例:

curl http://169.254.169.254/latest/meta-data/local-hostname | cut -d '.' -f1

运行 启动时

有几种方法可以在启动时使其 运行。我建议您从 rc.local 调用它(参见 here and here)。不要忘记给你的脚本执行权限。