这是我的 AWS 设置:
- 1 个 VPC,具有:
- 默认公共子网,10.0.0.0/24
- 1 个 EC2 微型实例,私有 10.0.0.172 和公共弹性 IP
- 1 个 RDS 实例,运行 MySQL
- 默认公共子网,10.0.0.0/24
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 更改