Qual é a melhor prática para designar um EIP EC2 depois de iniciar uma instância?

2

Eu gostaria de atribuir automaticamente um EIP a uma instância quando ela é iniciada. Eu sei que posso escrever um script para parar / iniciar a instância e atribuir o EIP que eu quero usando as ferramentas do EC2, mas isso depende de eu parar / iniciar o servidor. No caso de uma interrupção do EC2 ou falha de hardware em que o Amazon interrompe / inicia minha instância, o EIP não será reatribuído.

Eu fiz uma pergunta a alguém antes e eles mencionaram enigmaticamente que isso poderia ser feito via script de dentro da caixa após o boot. Então eles ficaram offline, então eu não pude acompanhar.

Existe alguma maneira de vincular um EIP a uma instância no momento da inicialização?

    
por jdw 28.09.2011 / 16:19

3 respostas

1
Concorde com Eric, essa opção não é sábia em termos de segurança. Outra opção seria ter outra máquina, com credenciais, responsável por responder a solicitações de outras máquinas. Por exemplo: a máquina com minha credencial é EC2-1. Você lança talvez 2 máquinas para executar seus servidores da Web, EC2-2 e EC2-3. Quando eles são inicializados, eles podem "sinalizar" isso para o EC2-1, que por sua vez executará a chamada da API para associar EC2-2 e EC2-3 a dois Elastic IPs. Desta forma, você tem que tornar o EC2-1 muito seguro, e você não corre riscos com as outras máquinas.

Melhor,

Simone

    
por 29.09.2011 / 04:55
3

Você pode fazer isso com algo como isto, no /etc/rc.local no servidor em questão:

ec2-associate-address --private-key /root/private_key.pem --cert /root/public_key.pem <eip-address> -i 'curl http://169.254.169.254/latest/meta-data/instance-id
    
por 28.09.2011 / 22:27
3

Use um VPC, então você não terá que se preocupar com esse problema.

Aqui está um bash que escrevi para alterar o EIP em qualquer Instância VPC usando o amigável nome="tag", você também pode especificar uma região padrão ou adicioná-la ao comando.

#change vpc instance public IP address (EIP -> NIC|INSTANCE)
#usage "changeip [instance friendly tag=Name] [region]"
#example "changeip my.instnace us-west-1"
#dafault region is us-west-1 (you must include --region for $region default)
#for VPC instances only
function changeip {
    if [[ ! $1 ]]; then
        echo 'Error : You must provide tag name for instance'
        echo 'Example:  changeip [friendly name]'
        return
    fi
    if [[ $2 ]]; then
        region='--region '$2
        echo 'Using region '$2
    else
        region='--region us-west-1' #sets default region
        echo 'Using default '$region
    fi  
    name=$1
    instance=$(ec2-describe-instances $region | grep Name | grep $name | cut -f3)
    if [[ ! $instance =~ ^('i-'[A-Za-z0-9]*)$ ]]; then
        echo 'Error : Getting the instance id'
        echo $instance
        return
    fi
    echo 'Applying to '$1 '=> '$instance
    echo 'Please wait....'
    ip_new=$(ec2-allocate-address $region -d vpc | cut -f2)
    if [[ ! $ip_new =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then
        echo 'Error : Getting a new IP address'
        echo $ip_new
        return
    fi
    new_idas=$(ec2-describe-addresses $region $ip_new | cut -f 5) >> /dev/null
    if [[ ! $new_idas =~ ^('eipalloc-'[A-Za-z0-9]*)$ ]]; then
        echo 'Error : Getting New IP allocation id eipalloc'
        echo $new_idas
        return  
    fi
    ip_old=$(ec2-describe-addresses $region | grep $instance | cut -f2)
    if [[ ! $ip_old =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then
        echo 'Error : Getting old IP address'
        echo $ip_old
        return
    fi
    id_dis=$(ec2-describe-addresses $region $ip_old | cut -f 6)
    if [[ ! $id_dis  =~ ^('eipassoc-'[A-Za-z0-9]*)$ ]]; then
        echo 'Error : Dissasociating Old IP'
        echo $id_dis
        return
    fi
    id_release=$(ec2-describe-addresses $region $ip_old | cut -f 5) >> /dev/null
    if [[ ! $new_idas =~ ^('eipalloc-'[A-Za-z0-9]*)$ ]]; then
        echo 'Error : Release Old IP'
        echo $id_release
        return
    fi
    ec2-disassociate-address $region -a $id_dis  >> /dev/null
    sleep 8
    ec2-release-address $region -a $id_release >> /dev/null
    ec2-associate-address $region -i $instance -a $new_idas >> /dev/null
    echo 'SUCCESS!'
    echo 'Old = '$ip_old
    echo 'New = '$ip_new
}
    
por 10.06.2013 / 04:03