Esta é minha configuração da AWS:
- 1 VPC com:
- sub-rede pública padrão, 10.0.0.0/24
- 1 micro instância do EC2, privada 10.0.0.172 e IP elástico público
- 1 instância do RDS executando o MySQL
A instância do EC2 tem conexão de rede com o mundo externo (verificada com ping 8.8.8.8
). Esta é a sua tabela de roteamento:
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
A instância do EC2 também pode se conectar à instância do RDS.
O que eu quero é lançar uma segunda instância do EC2 (Amazon Linux AMI 2014.03.1 64 bits) de dentro da primeira instância do EC2, usando o Vagrant. A segunda instância do EC2 deve estar na mesma sub-rede do VPC, mas o endereço IP real não importa muito. Também não precisa de um IP elástico público. Ele precisa se conectar ao mundo externo para instalar o software usando yum
.
Este é o meu 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
No script de shell provision.sh
, instalo algum software:
yum install -y subversion
Isso falha porque yum
não pode se conectar à rede externa.
Quando eu faço vagrant ssh
e verifico o endereço IP, ele está no intervalo 10.0.0.0/24 e posso fazer ping em qualquer direção entre as duas instâncias do EC2 (o ICMP foi permitido no grupo de segurança). Eu não posso ping 8.8.8.8
e não posso yum install
software porque a instância não pode alcançar os repositórios. Eu verifiquei o route
e é idêntico ao da primeira instância.
Além disso, no console da Web da AWS, a segunda instância não tem um endereço IP público.
Quando adiciono esta linha ao meu Vagrantfile
:
aws.associate_public_ip = true
então recebo o seguinte erro em 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
e a instância não é iniciada.
Então, minha pergunta é: como posso dar à instância do vagrant uma conexão de rede, sem usar um IP elástico?