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

时间:2018-05-20 03:46:39

标签: amazon-web-services nginx amazon-ec2 ansible packer

我正在使用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上的repository

任何帮助都将受到高度赞赏。

2 个答案:

答案 0 :(得分:2)

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

相反,您应该添加一个cloud-init脚本,每次从图像启动新实例时都会更新配置文件。您可以通过在/var/lib/cloud/scripts/per-instance/中添加脚本来查看cloud-init documentation

答案 1 :(得分:0)

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

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