¿Hay alguna manera de buscar la región de una instancia desde dentro de la instancia?
Estoy buscando algo similar al método para encontrar la identificación de la instancia .
amazon-ec2
amazon-web-services
Gary Richardson
fuente
fuente
http://169.254.169.254/latest/meta-data/placement/availability-zone
y elimine el último carácter.Respuestas:
Esa URL ( http://169.254.169.254/latest/dynamic/instance-identity/document ) ya no parece funcionar. Recibo un 404 cuando intenté usarlo. Sin embargo, tengo el siguiente código que parece funcionar:
Espero que esto ayude.
EDITAR: Mejorado en
sed
base a comentariosfuente
ec2-metadata
es solo un contenedor para esta API, pero esencialmente hace lo mismo.sed 's/[a-z]$//
Hay una forma más de lograr eso:
fuente
404 - Not Found
tratando de acceder aGET
esa URL desde una 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}'
Si está de acuerdo con el uso
jq
, puede ejecutar lo siguiente:Supongo que es la forma más limpia.
fuente
Para sistemas basados en Debian, el comando no tiene guión.
fuente
ec2-metadata --availability-zone | sed 's/placement: \(.*\).$/\1/'
ec2-metadata
no parece ser algo que esté disponible por defecto, ¿puede incluir instrucciones de instalación?Si desea evitar la expresión regular, aquí hay una línea que puede hacer con Python:
fuente
Puede usar metadatos ec2:
fuente
eu-central-1
estás jodido.central
no existía cuando inicialmente escribí mi respuesta. Se agregó ahora.awk '{split($2,arr,"-"); print arr[1]"-"arr[2]}'
mantendrá solo los dos primeros componentes del nombre AZ.eu-west-1
,eu-west-2
yeu-west-3
(Tambiénus-west-1
yus-west-2
) @OP: solo la coincidencia'[a-z][a-z]-[a-z]*-[0-9][0-9]*'
parece más segura (es una expresión regular básica, se puede acortar con un RE extendido). (La expresión regular actual se romperá en laca
región, lasaf
regiones y lame
región)Más fácil que encontré hasta ahora
fuente
un forro muy simple
fuente
curl: (6) Could not resolve host: instance-data; Name or service not known
error.Si tiene instalado jq , también puede hacerlo (probablemente el método más "elegante") de esta manera:
Esto simplemente devuelve el valor bruto de "región" sin ninguna impresión bonita u otro formato. Referencia: Foro de AWS
fuente
Obtenga la región de la zona de disponibilidad, elimine la última letra de la misma.
fuente
Use JQ:
fuente
Si puede usar AWS Java SDK, ahora hay un método que devolverá el nombre de la región actual (como "us-east-1", "eu-west-1"):
http://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/regions/Regions.html#getCurrentRegion ()
fuente
Esta es la solución más limpia que encontré:
curl -s http://169.254.169.254/latest/dynamic/instance-identity/document |sed -n 's/ "region" : "\(.*\)"/\1/p'
P.ej,
export REGION=$(curl -s http://169.254.169.254/latest/dynamic/instance-identity/document |sed -n 's/ "region" : "\(.*\)"/\1/p')
fuente
Gracias a https://unix.stackexchange.com/a/144330/135640 , con bash 4.2+ podemos eliminar el último carácter de la zona de disponibilidad:
Esto supone que AWS continúa utilizando un solo carácter para las zonas de disponibilidad agregadas a la región.
fuente
region=${region%?}
2 liner que funciona siempre que esté usando ec2.internal como su dominio de búsqueda:
fuente
Para cualquiera que quiera hacer esto con buen ol powershell
fuente
O no haga de Ubuntu o esta herramienta un requisito y simplemente haga:
fuente
Si trabaja con json, use las herramientas adecuadas. jq mucho poderoso en este caso.
fuente
Esto funciona para eu-central-1, así como para las diversas zonas de letras. (No tengo suficiente representante para responder a la respuesta sed anterior)
fuente
ec2metadata --availability-zone | sed 's/.$//'
(sin guión)Si está ejecutando en Windows, puede usar este one-liner de PowerShell:
fuente
También estaba buscando una solución para encontrar la región desde la instancia y aquí está mi solución Bash pura:
a menos que haya regiones donde AZ tenga más de dos letras, de las cuales no estoy al tanto.
fuente
Para obtener información sobre el EC2 en el que ha iniciado sesión, puede utilizar la herramienta de metadatos ec2.
Puede instalar la herramienta siguiendo este enlace. Después de instalar la herramienta, puede ejecutar
# ec2-metadata -z
para descubrir la región
Esta herramienta viene instalada con las últimas AMI de Ubuntu (10.10),
fuente
ec2-metadata -z
solo muestra la zona de disponibilidad, no la región.Si está buscando obtener una región utilizando JS, esto debería funcionar:
Este fue el mapeo encontrado en AWS DOCS, en respuesta a la llamada a la API de metadatos, simplemente recorte el último carácter que debería funcionar.
fuente
ec2metadata
(sin guión) es el comando actual para proporcionarle toda la información de hosting aws sobre su caja ec2. Este es el enfoque más elegante y seguro. (ec2-metadata
es el comando antiguo, que ya no es válido).fuente
Un método que usa solo egrep, que debería funcionar en la mayoría de las instancias de Linux sin tener que instalar ninguna herramienta adicional. Probé esto contra una lista de todas las regiones actuales de AWS y todas coinciden.
curl http://169.254.169.254/latest/meta-data/placement/availability-zone | egrep -o '(\w)+-(\w)+-[0-9]'
Explicación del REGEX:
Si quieres esto en una variable haz:
region=$(curl http://169.254.169.254/latest/meta-data/placement/availability-zone | egrep -o '(\w)+-(\w)+-[0-9]')
fuente
Para la solución sed y curl, parece que el formato ha cambiado un poco. Para mi trabaja
fuente
En algún momento, ya que esto la mayoría de estas respuestas han sido escritos, AWS hizo lo razonable y puso en práctica un nuevo camino:
latest/meta-data/placement/region
.Esto significa que obtener la región debería ser tan simple como
fuente
Puede obtener una región de instancia utilizando esta solicitud curl
fuente