如何在 Vagrant 启动的 EC2 实例上配置网络?

如何在 Vagrant 启动的 EC2 实例上配置网络?

这是我的 AWS 设置:

  • 1 个 VPC,具有:
    • 默认公共子网,10.0.0.0/24
      • 1 个 EC2 微型实例,私有 10.0.0.172 和公共弹性 IP
    • 1 个 RDS 实例,运行 MySQL

EC2 实例已与外界建立网络连接(已通过 验证ping 8.8.8.8)。这是它的路由表:

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         ip-10-0-0-1.eu- 0.0.0.0         UG    0      0        0 eth0
10.0.0.0        *               255.255.255.0   U     0      0        0 eth0
instance-data.e *               255.255.255.255 UH    0      0        0 eth0

EC2实例也可以连接到RDS实例。

我想要的是使用 Vagrant 从第一个 EC2 实例内部启动第二个 EC2 实例 (Amazon Linux AMI 2014.03.1 64 位)。第二个 EC2 实例应该位于同一个 VPC 子网中,但它的实际 IP 地址并不重要。它也不需要公共 Elastic IP。它确实需要连接到外部世界,以便使用安装软件yum

这是我的Vagrantfile

VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "dummy"

  config.vm.provider :aws do |aws, override|
    aws.access_key_id = "ACCESS_KEY_ID"
    aws.secret_access_key = "SECRET_ACCESS_KEY"
    aws.keypair_name = "KEYPAIR_NAME"

    aws.ami = "ami-2918e35e"
    aws.instance_type = "m1.small"
    aws.region = "eu-west-1"

    aws.subnet_id = "subnet-SUBNETID"
    aws.security_groups = "sg-SECURITYGROUPID"


    override.ssh.username = "ec2-user"
    override.ssh.private_key_path = "PRIVATE_KEY.pem"
  end

  config.ssh.pty = true
  config.vm.provision "shell", path: "provision.sh"
end

在 shell 脚本中provision.sh我安装了一些软件:

yum install -y subversion

这失败了,因为yum无法连接到外部网络。

当我这样做vagrant ssh并检查 IP 地址时,它位于 10.0.0.0/24 范围内,我可以在两个 EC2 实例之间双向 ping(安全组中允许使用 ICMP)。我不能,ping 8.8.8.8也不能使用yum install软件,因为实例无法访问存储库。我检查了,route它与第一个实例的 IP 地址相同。

此外,在 AWS Web 控制台中,第二个实例没有公共 IP 地址。

当我将这一行添加到我的Vagrantfile

aws.associate_public_ip = true

然后我收到以下错误vagrant up --provider=aws --provision

There are errors in the configuration of this machine. Please fix
the following errors and try again:

AWS Provider:
* The following settings shouldn't exist: associate_public_ip

并且实例没有启动。

所以我的问题是:如何在不使用弹性 IP 的情况下为 vagrant 实例提供网络连接?

答案1

在我的安装中该参数不存在,但是

aws.elastic_ip = true

具有相同的目的。

要查找插件中使用的实际字段,请检查此文件

~/.vagrant.d/gems/gems/vagrant-aws-0.4.1/lib/vagrant-aws/config.rb

当然,我有与你相同的 vagrant-aws-0.4.1 更改

相关内容