我正在使用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 回答
由于您正在创建AMI,因此无法在(图像)构建时使用ansible来配置它 . 稍后,当您从创建的映像启动新实例时,IP和主机名将不同 .
相反,您应该添加一个cloud-init脚本,每当从图像启动一个新实例时,它将更新配置文件 . 您可以通过在
/var/lib/cloud/scripts/per-instance/
中添加脚本来执行此操作,请参阅cloud-init documentation你也可以使用弹性ip . 假设您将使用您的图像仅旋转一个实例,AWS可以选择弹性IP,它基本上是一个静态ipv4地址 . Setup一个用于您首选区域中的帐户,然后在配置时将其与您的实例或网络接口相关联 . 您的nginx配置文件应如下所示