使用 Packer 和 Ansible 创建 AWS 实例后如何获取其 IP 地址

3

我正在使用Packer和Ansible在AWS上构建AMI镜像。我的最终目标是拥有一个AMI镜像,当它被构建为EC2实例时,我的Web应用程序运行。为了达到这个目标,我需要在我的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上的存储库

非常感谢您的帮助。


为什么不使用 server_name _; - nbari
@nbari 哇!太感谢了!我不知道那个。我会试试看! - Harith
@nbari 它不起作用。 - Harith
2个回答

2
由于您正在创建AMI,因此无法在(镜像)构建时使用ansible进行配置。稍后,当您从创建的映像启动新实例时,IP地址和主机名将不同。
相反,您应该添加一个cloud-init脚本,每次从图像启动新实例时都会更新配置文件。您可以通过在/var/lib/cloud/scripts/per-instance/中添加脚本来实现此目的,请参见cloud-init文档

那我使用 ansible 在那里添加一个脚本?它会自动运行吗? - Harith
1
是的,您可以使用Ansible将其添加到那里,cloud-init将在新实例的第一次启动时运行它。 - Rickard von Essen
这是一个标准的软件包,但应该已经安装在基础AMI中。 - Rickard von Essen
那么你的意思是我不需要安装它吗? - Harith
1
是的,你不应该这样做。但请再次检查已安装的软件包。 - Rickard von Essen
显示剩余4条评论

0

您还可以使用弹性IP。假设您将使用您的镜像创建一个实例,AWS 提供的选项是弹性IP,它基本上是静态 IPv4 地址。Setup 在您喜欢的区域为您的帐户设置一个弹性IP,然后在提供服务时将其与您的实例或网络接口相关联。

你的 Nginx 配置文件应该长这样:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接