Obtendo o endereço IP público da instância EC2 de fora usando o AWS-cli [closed]

6

Estou tentando usar a elasticidade da Amazon e trazer instâncias on-line e off usando o AWS cli . Mas, como você sabe, toda vez que você desconecta um sistema e o traz de volta à vida, ele vem com um novo endereço IP. Eu tenho o pacote AWS-cli instalado no meu servidor Centos 6, localizado em outro lugar. Eu venho pesquisando isso há dias e não consigo encontrar um comando de trabalho, que eu possa emitir da minha caixa Centos e obter o endereço IP da instância no Amazon EC2. A instância do EC2 está em funcionamento.

A informação mais relevante que encontrei foi

aws ec2 describe-instances

mas tudo que estou recebendo de volta deste comando é algo como uma saída de sintaxe de uso. Eu também encontrei (e perdi imediatamente) um switch --query seguido por um conjunto de palavras-chave para extrair essa informação. Mas esse comando me deu uma resposta, dizendo --query não é um argumento reconhecido. Eu verifiquei a referência cli da Amazon para este comando e apenas o parâmetro que parece aceitar é --filter e os exemplos estão longe de serem úteis.

Alguém sabe como fazer isso?

EDITAR Mais sobre a questão que descobri no fim de semana. Antes da minha tentativa de obter as informações do DNS público da instância, preciso de uma maneira de me conectar a essa instância. Não consigo obter informações sobre as instâncias que tenho, não importa o que eu faça:

$ ec2-describe-instances i-b78a096f
sanity-check: Your system clock is 50 seconds behind.
+----------------------------+---------------------------------------------+
|            Code            |                   Message                   |
+----------------------------+---------------------------------------------+
| InvalidInstanceID.NotFound | The instance ID 'i-b78a096f' does not exist |
+----------------------------+---------------------------------------------+

Eu sei que minhas variáveis AWS_ACCESS_KEY e AWS_SECRET_KEY estão corretamente atribuídas a seus nomes de variáveis apropriados. O ID da instância foi copiado e colado do console de gerenciamento da AWS. Para testar, criei uma nova instância e testei o mesmo comando, sem resultado diferente. Embora, quando eu executar o comando ec2-describe-regions , eu possa ver a lista de regiões disponível para mim sem problemas. Estou perplexo agora.

    
por MelBurslan 03.03.2016 / 22:34

2 respostas

7

Uma instância ec2 pode ser identificada por seu id de instância, que nunca será alterado, não importa quantas vezes você pare e inicie a instância. Então, você pode tentar fazer isso se tiver um ID de instância e precisar do endereço IP dele.

Para endereço IP público:

aws ec2 describe-instances --instance-ids i-b78a096f | grep PublicIpAddress | awk -F ":" '{print $2}' | sed 's/[",]//g'

Para o endereço IP privado:

aws ec2 describe-instances --instance-ids i-b78a096f | grep PrivateIpAddress  | head -1 | awk -F ":" '{print $2}' | sed 's/[",]//g'
Ainda assim, eu pessoalmente acho que seria muito melhor se você tentasse a mesma coisa em python. Eu implementei a mesma lógica em minha organização anterior com a biblioteca de botons python e foi muito mais simples e gerenciável.

configurando env virtual:

#!/usr/bin/env bash

set -e
HOME_DIR=/home/$(whoami)

#Dependencies
sudo apt-get install ncurses-devel patch openssl openssl-devel zlib-devel

# Install python locally
mkdir -p $HOME_DIR/src
mkdir -p $HOME_DIR/.localpython
cd $HOME_DIR/src
wget https://www.python.org/ftp/python/2.7.8/Python-2.7.8.tgz
tar -zxvf Python-2.7.8.tgz
cd Python-2.7.8
./configure --prefix=$HOME_DIR/.localpython 
make
make install

# Install virtualenv locally
cd $HOME_DIR/src
wget --no-check-certificate https://pypi.python.org/packages/source/v/virtualenv/virtualenv-1.11.6.tar.gz#md5=f61cdd983d2c4e6aeabb70b1060d6f49
tar -zxvf virtualenv-1.11.6.tar.gz
cd virtualenv-1.11.6/
~/.localpython/bin/python setup.py install 


# Create a test virtual environment
mkdir -p $HOME_DIR/virtualenvs
cd $HOME_DIR/virtualenvs
~/.localpython/bin/virtualenv my_virtual_env --python=$HOME_DIR/.localpython/bin/python2.7
cd my_virtual_env
source bin/activate
pip install awscli
    
por 09.03.2016 / 11:31
0

Você pode usar os comandos start-instances e stop-instances para iniciar / parar uma instância da seguinte forma -

aws ec2 stop-instances --instance-ids i-b78a096f
aws ec2 start-instances --instance-ids i-b78a096f

Você verá que não especifica o nome da região na linha de comando porque AWS cli lê as informações da região do arquivo <user_home_directory>/.aws/config . Este arquivo se parece com o seguinte -

[default]
output = json
region = us-east-1

A maior parte do valor propably do atributo region neste arquivo é diferente da região em que a instância está localizada. Então você liga para uma região diferente do que você acha que deveria ir. Não vejo outro motivo para não funcionar.

Para verificar com que valor da região o AWS cli está trabalhando, basta invocar aws configure da linha de comando. Ele perguntará sobre o formato de chave, segredo, região e resposta do aws. Ao mesmo tempo, ele mostrará os valores que ele usará se você não especificar nenhum valor.

Eu uso AWS cli em cenários como este, onde gerenciar AWS da linha de comando é muito mais rápido. No entanto, criei uma ferramenta de código aberto para visualizar muitos AWS recursos ao mesmo tempo que você pode achar útil -

https://github.com/pistonportal/custom-turbine/wiki/Running-and-operating-Turbine-app 

Por exemplo, você pode abrir VPC Designer nessa ferramenta e ver em quais zonas de disponibilidade um VPC se estende, quais sub-redes estão em quais zonas de disponibilidade e quais VMs estão em quais sub-redes. Isso é algo que requer muitos cliques em AWS console ou não é possível.

Ele não tem capacidade de iniciar / interromper uma instância neste momento, mas isso estará disponível nos próximos dias.

    
por 09.03.2016 / 12:16