Existe uma maneira de procurar a região de uma instância de dentro da instância?
Estou procurando algo semelhante ao método de encontrar o ID da instância .
amazon-ec2
amazon-web-services
Gary Richardson
fonte
fonte
http://169.254.169.254/latest/meta-data/placement/availability-zone
e remova o último caractere.Respostas:
Esse URL ( http://169.254.169.254/latest/dynamic/instance-identity/document ) parece não funcionar mais. Recebo um 404 quando tentei usá-lo. Eu tenho o seguinte código que parece funcionar:
Espero que isto ajude.
EDIT: Melhorado com
sed
base nos comentáriosfonte
ec2-metadata
é apenas um invólucro para esta API, mas essencialmente faz a mesma coisa.sed 's/[a-z]$//
Há mais uma maneira de conseguir isso:
fonte
404 - Not Found
tentandoGET
acessar esse URL a partir de uma máquinaus-east-1a
.curl -s http://169.254.169.254/latest/dynamic/instance-identity/document | jq -r .region
curl -s http://169.254.169.254/latest/dynamic/instance-identity/document | awk -F\" '/region/ {print $4}'
Se você estiver bem com o uso
jq
, execute o seguinte:Eu acho que é o caminho mais limpo.
fonte
Para sistemas baseados em debian, o comando é sem traço.
fonte
ec2-metadata --availability-zone | sed 's/placement: \(.*\).$/\1/'
ec2-metadata
não parece ser algo disponível por padrão - você pode incluir instruções de instalação?Se você deseja evitar a expressão regular, aqui está uma lista que você pode fazer com o Python:
fonte
Você pode usar os metadados ec2:
fonte
eu-central-1
você estiver ferrado.central
não existia quando escrevi minha resposta inicialmente. Foi adicionado agora.awk '{split($2,arr,"-"); print arr[1]"-"arr[2]}'
manterá apenas os dois primeiros componentes do nome AZ.eu-west-1
,eu-west-2
eeu-west-3
(tambémus-west-1
eus-west-2
@OP): apenas correspondência'[a-z][a-z]-[a-z]*-[0-9][0-9]*'
parece mais seguro (que é uma expressão regular básica, pode ser feita mais curta com um RE estendida). (O regex atual quebrará naca
região, nasaf
regiões e name
região)Mais fácil que encontrei até agora
fonte
forro muito simples
fonte
curl: (6) Could not resolve host: instance-data; Name or service not known
erro.Se você tiver o jq instalado, também poderá fazê-lo (provavelmente o método mais "gracioso") desta maneira:
Isso simplesmente retorna o valor bruto da "região" sem nenhuma impressão bonita ou outra formatação. Referência: Fórum da AWS
fonte
Obtenha a região da zona de disponibilidade, retire a última letra dela.
fonte
Use JQ:
fonte
Se você pode usar o AWS Java SDK, agora existe um método que retornará o nome da região atual (como "us-east-1", "eu-west-1"):
http://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/regions/Regions.html#getCurrentRegion ()
fonte
Esta é a solução mais limpa que encontrei:
curl -s http://169.254.169.254/latest/dynamic/instance-identity/document |sed -n 's/ "region" : "\(.*\)"/\1/p'
Por exemplo,
export REGION=$(curl -s http://169.254.169.254/latest/dynamic/instance-identity/document |sed -n 's/ "region" : "\(.*\)"/\1/p')
fonte
Graças a https://unix.stackexchange.com/a/144330/135640 , com o bash 4.2+, podemos simplesmente retirar o último caractere da zona de disponibilidade:
Isso pressupõe que a AWS continue usando um único caractere para as zonas de disponibilidade anexadas à região.
fonte
region=${region%?}
Liner 2 que funciona desde que você esteja usando ec2.internal como seu domínio de pesquisa:
fonte
Para quem quiser fazer isso com o bom ol powershell
fonte
Ou não faça do Ubuntu ou desta ferramenta um requisito e simplesmente faça:
fonte
Se você trabalha com json - use as ferramentas certas. jq muito poderoso neste caso.
fonte
Isso funciona para eu-central-1 e para as várias zonas de letras. (Não tenho representante suficiente para responder à resposta sed acima)
fonte
ec2metadata --availability-zone | sed 's/.$//'
(sem traço)Se você estiver executando no Windows, poderá usar esta linha de comandos do PowerShell:
fonte
Também estava procurando uma solução para encontrar a região da instância e aqui está minha solução Bash pura:
a menos que haja regiões em que o AZ tenha mais de duas letras, das quais não conheço.
fonte
Para descobrir informações sobre o EC2 no qual você está conectado, use a ferramenta ec2-metadata.
Você pode instalar a ferramenta seguindo este link. Após instalar a ferramenta, você pode executar
# ec2-metadata -z
para descobrir a região.
Essas ferramentas são instaladas com as mais recentes AMIs do Ubuntu (10.10),
fonte
ec2-metadata -z
mostra apenas a zona de disponibilidade, não a região.Se você deseja obter uma região usando JS, isso deve funcionar:
Esse foi o mapeamento encontrado no AWS DOCS, em resposta à chamada da API de metadados, basta aparar o último caractere que deve funcionar.
fonte
ec2metadata
(sem traço) é o comando atual para fornecer todas as informações de hospedagem do aws sobre sua caixa ec2. esta é a abordagem mais elegante e segura. (ec2-metadata
é o comando antigo, não é mais válido.)fonte
Um método que usa apenas egrep, que deve funcionar na maioria das instâncias do linux, sem a necessidade de instalar ferramentas extras. Eu testei isso em uma lista de todas as regiões atuais da AWS e todas elas correspondem.
curl http://169.254.169.254/latest/meta-data/placement/availability-zone | egrep -o '(\w)+-(\w)+-[0-9]'
Explicação do REGEX:
Se você quiser isso em uma variável, faça:
region=$(curl http://169.254.169.254/latest/meta-data/placement/availability-zone | egrep -o '(\w)+-(\w)+-[0-9]')
fonte
Para a solução sed e curl, parece que o formato mudou um pouco. Para mim trabalha
fonte
Em algum momento, uma vez que esta maioria destas respostas foram postadas, AWS fez a coisa razoável e implementado um novo caminho:
latest/meta-data/placement/region
.Isso significa que a região deve ser tão simples quanto
fonte
Você pode obter a região da instância usando esta solicitação de ondulação
fonte