Como configurar a rede na instância do EC2 lançada pelo Vagrant?

2

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?

    
por Amedee Van Gasse 04.06.2014 / 11:38

1 resposta

1

na minha instalação, esse parâmetro não existia, mas existe

aws.elastic_ip = true

que tem o mesmo propósito.

Para encontrar os campos reais usados nos seus plugins, chech este arquivo

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

é claro que tenho a mudança do vagrant-aws-0.4.1 com a sua

    
por 05.06.2014 / 18:30