使用 packer 和 ansible 时获取 AWS 实例的 IP 地址

Getting IP address of the AWS instance when using packer and ansible

我正在使用打包程序和 Ansible 在 AWS 上构建 AMI 映像。我的最终目标是拥有一个 AMI 映像,这样当它被构建到 EC2 实例中时,它就有我的网络应用程序 运行。为了达到我的最终目标,我需要在我的 AMI 中配置 Nginx 服务器。我的挑战是我不知道如何获取 EC2 实例的 IP 地址并使用它来配置 Nginx 服务器。这是我当前的 Nginx 文件配置:

server {
    listen 80;
    server_name {{ ansible_default_ipv4.address }};

    location / {
        include uwsgi_params;
        uwsgi_pass unix:/home/ubuntu/Yummy-Recipes/Yummy-Recipes-Ch3/yummy-recipes.sock;
    }
}

server_name 应该保存 运行 所在的 EC2 实例的值。如果您想了解更多关于我的代码的信息,请随时访问我在 GitHub 上的 repository

非常感谢任何帮助。

由于您正在创建 AMI,因此您不能在(图像)构建时使用 ansible 来配置它。稍后当您从创建的映像启动新实例时,IP 和主机名将不同。

相反,您应该添加一个 cloud-init 脚本,该脚本将在每次从映像启动新实例时更新配置文件。您可以通过在 /var/lib/cloud/scripts/per-instance/ 中添加脚本来执行此操作,请参阅 cloud-init documentation

你也可以使用弹性ip。假设您打算使用您的图像来启动一个实例,AWS 有一个弹性 ip 选项,它基本上是一个静态 ipv4 地址。 Setup 一个用于您首选区域中的帐户,然后在配置时将其与您的实例或网络接口相关联。 你的 nginx 配置文件应该是这样的

server {
listen 80;
server_name <your_elastic_ip>;
...
}