代码之家  ›  专栏  ›  技术社区  ›  Harith

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

  •  2
  • Harith  · 技术社区  · 6 年前

    我正在使用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实例的值。如果您想了解更多关于我的代码,请随时访问我的 repository 在GitHub上。

    任何帮助都将不胜感激。

    2 回复  |  直到 6 年前
        1
  •  2
  •   Rickard von Essen    6 年前

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

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

        2
  •  0
  •   Ibrahim M    6 年前

    你也可以使用弹性ip。假设您将使用映像来启动一个实例,AWS有一个弹性ip选项,基本上是一个静态ipv4地址。 Setup 然后在您所在地区的某个网络实例上,将其与您的首选接口关联。 您的nginx配置文件应该如下所示

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