¿Cómo sé qué Ubuntu AMI lanzar en EC2?

29

Cuando quiero lanzar una instancia de Ubuntu en EC2, ¿cómo encuentro la correcta? Hay miles de imágenes públicas que tienen "Ubuntu" en su nombre. Solo estoy interesado en ejecutar las imágenes oficiales de Ubuntu. ¿Cómo puedo saber cuál AMI es la correcta?

smoser
fuente

Respuestas:

26

El éxito de Ubuntu como plataforma y el compromiso de Ubuntu de actualizar las AMI significa que hay literalmente miles de imágenes en Amazon EC2 con "ubuntu" en su nombre. Eso, combinado con la falta de Ubuntu en el menú "Inicio rápido" hace que seleccionar la AMI correcta sea una tarea no trivial.

Alguna información general de Ubuntu

Es posible que ya conozca estos elementos, pero quiero señalarlos para aquellos que recién están comenzando con Ubuntu o EC2.

  • Ubuntu lanza cada 6 meses. Cada versión tiene un número de versión y un nombre en clave. Lo más importante a tener en cuenta aquí es que cada 2 años se realiza una versión LTS (Soporte a largo plazo). Si desea estabilidad y soporte durante 5 años, seleccione una versión LTS. Si desea los paquetes más nuevos, seleccione la versión más reciente. Vea la entrada de wikipedia para más información.
  • En el momento de escribir este artículo, hay 5 "regiones" en Amazon EC2. Cada región representa una ubicación geográfica. Cada región tiene sus propios identificadores AMI. Dentro de cada región hay 2 arquitecturas (x86_64, i386) y 2 tipos de "almacén raíz" (EBS o instancia). Eso significa que para cada versión de Ubuntu de compilación, generamos 20 ami ids.

Más fácil: encuentre las AMI desde su navegador web

Puede elegir su interfaz para seleccionar imágenes. Ir a cualquiera:

  • http://cloud.ubuntu.com/ami

    En la parte inferior de esta página, puede seleccionar la región, la versión, el archivo o el almacén raíz. Aquí solo se muestran los lanzamientos más recientes. Cuando haya hecho su selección, puede copiar y pegar el número ami, o simplemente hacer clic en él para ir directamente a la página de inicio de la consola EC2 para esa AMI.

o

  • https://cloud-images.ubuntu.com/server/releases/
    • Seleccione su lanzamiento por número o nombre en clave
    • Seleccione 'release /': mantenemos versiones históricas para la depuración, pero el directorio 'release /' siempre será el último.
    • Seleccione su AMI de la tabla y haga clic para iniciar en la consola o copie y pegue una línea de comando.

Buscar a través de la consola Amazon EC2

La consola EC2 es una forma gráfica de clasificar AMI y seleccionar una para iniciar. Para iniciar una imagen oficial de Ubuntu aquí, siga los pasos a continuación.

  • Seleccione la región que desea en la esquina superior izquierda, en 'Navegación' Ejemplo: "Us East (Virginia)"
  • Haga clic en "AMI". No haga clic en "Iniciar instancia" [consulte la nota a continuación]
  • para 'Ver', seleccione "Todas las imágenes"
  • Limite los resultados a las imágenes de Ubuntu Stable Release escribiendo ubuntu-images /

    Debería expandir el campo 'Nombre de AMI' lo más ancho posible (tal vez reducir los demás).

  • Limite los resultados a una versión específica agregando '. *'.

    Por ejemplo: ubuntu-images /.* 10.04

  • Limite los resultados a un arco dado agregando '. * I386' o '. * Amd64'

    Nota : Si desea ejecutar un m1.small o c1.medium, necesita 'i386'. Si desea ejecutar un t1.micro, deberá seleccionar una imagen 'ebs'.

  • Ordene sus resultados por nombre de AMI y haga una selección

    Al ordenar por nombre de AMI, puede ver más fácilmente la AMI más nueva para un conjunto dado. Cada AMI termina con un número en el formato AAAAMMDD (año, mes, día). Quieres el más reciente.

  • ¡Verifique que el propietario sea 099720109477!

    Cualquier usuario puede registrar un AMI con cualquier nombre. Nada impide que un usuario malintencionado registre un AMI que coincida con la búsqueda anterior. Entonces, para estar seguro, debe verificar que el propietario de la ami sea ' 099720109477 '.

  • Si "Propietario" no es una columna para usted, haga clic en "Mostrar / Ocultar" en la esquina superior derecha y seleccione "Propietario" para mostrar.
  • Haga clic en el nombre de AMI, luego haga clic en 'Iniciar'

Notas

  • Acceso HTTPS : De las opciones anteriores, en este momento https://cloud-images.ubuntu.com/server/releases/ es la única que proporciona datos a través de https. Esto puede ser importante para usted si le preocupan los posibles ataques de "Man in the Middle" al encontrar una identificación de AMI. Solicité a Ahmed [kim0 in irc] que admitiera el acceso https a https://cloud.ubuntu.com/ami .

  • Cuadro de diálogo "Instancia de inicio de la consola web" : no vi ninguna manera en el cuadro de diálogo "Instancia de inicio" para ver la ID del propietario. Porque si esto, sugiero no usar ese diálogo para buscar "AMI de la comunidad". Simplemente no hay forma de saber de manera confiable quién es el propietario de la imagen desde la consola. Para usuarios avanzados, bloguearé pronto para encontrar AMIs programáticamente [Sugerencia].

Fuente

smoser
fuente
¿Podría precisar la diferencia entre hvm-instancey hvm-ssd? Me temo que "instancia" significa "paravirtual", pero no estoy seguro y no puedo encontrar información al respecto. Además, puede ser útil observar que https://cloud-images.ubuntu.com/locator/ofrecen filtros ... al final de la página
Balmipour
11

Versión nueva y mejorada.

# needed as json list returned by ubuntu site is mal-formed
remove_last_comma() { sed '
        $x;$G;/\(.*\),/!H;//!{$!d
    };  $!x;$s//\1/;s/^\n//'
}

curl -s "https://cloud-images.ubuntu.com/locator/ec2/releasesTable" \
    | remove_last_comma \
    | jq -c '.aaData[] | select(contains(["16.04", "us-west-2", "hvm:ebs"]))' \
    | grep -o 'ami-[a-z0-9]\+' | head -1

Básicamente toma datos sin procesar utilizados para la página de búsqueda de ami de ubuntu, y usa jq para analizar la fila que quiero y luego un grep para extraer el valor. Mucho más rápido que la versión anterior.


-- Versión original

Aquí hay otro ejemplo. Acabo de escribir esto para obtener la última identificación de AMI de confianza. Utiliza la herramienta aws cli para consultar la API, utilizando el hecho de que los nombres se ordenan por fecha para obtener la última.

name=$(\
    aws --region us-west-2 ec2 describe-images --owners 099720109477 \
        --filters Name=root-device-type,Values=ebs \
            Name=architecture,Values=x86_64 \
            Name=name,Values='*hvm-ssd/ubuntu-trusty-14.04*' \
    | awk -F ': ' '/"Name"/ { print $2 | "sort" }' \
    | tr -d '",' | tail -1)

ami_id=$(\
    aws --region us-west-2 ec2 describe-images --owners 099720109477 \
        --filters Name=name,Values="$name" \
    | awk -F ': ' '/"ImageId"/ { print $2 }' | tr -d '",')

Funciona en 2 partes. La primera parte obtiene todas las AMI para ubuntu de confianza que cumplen con los diversos criterios (ebs, x86_64 y el patrón de nombre). Saca el Nombre y lo ordena por él. Los nombres están formateados de modo que al ordenarlos se ordenan por fecha, de modo que el último será el más nuevo. Este nombre se asigna a la variable 'nombre'.

La segunda parte usa ese nombre para solicitar la ID de AMI para la AMI con ese nombre. Analiza solo el id y lo asigna a 'ami_id'.

John Eikenberry
fuente
¿Puedes explicar qué hace esto?
Kaz Wolfe
Se agregó la explicación a la respuesta.
John Eikenberry
44
Esto debería lograr algo similar, pero utilizando una expresión de consulta JMESPath:aws --region us-west-2 ec2 describe-images --owners 099720109477 --filters Name=root-device-type,Values=ebs Name=architecture,Values=x86_64 Name=name,Values='*hvm-ssd/ubuntu-trusty-14.04*' --query 'sort_by(Images, &Name)[-1].ImageId'
dnlbrky
4

usando ruby ​​aws-sdk, puedes descubrir programáticamente la última AMI de Ubuntu como esta

    ec2 = AWS::EC2.new

    root_device_type = "ebs"
    ami_owner = '099720109477'
    ami_name = "*ubuntu/images/#{root_device_type}/ubuntu-precise-12.04*"  # hardcoded to ubuntu 12.04. You can apply your own criteria here.

    AWS.memoize do
      linux_ami = ec2.images.with_owner(ami_owner).
        filter("root-device-type", root_device_type).
        filter("architecture", "x86_64").        # use 'i386' for 32 bit and 'x86_64' for 64 bit
        filter("name", ami_name)
        # this only makes one request due to memoization
      begin
        return linux_ami.to_a.sort_by(&:name).last
      rescue
        abort red "Error discovering latest AMI. Terminating."
      end
    end
Tornasol
fuente
2

Puede usar https://cloud-images.ubuntu.com/locator/ec2/ que proporciona una comparación exhaustiva basada en la versión, fecha de lanzamiento, etc.

Busque la versión, región que desee y ordene según la fecha de lanzamiento para obtener la última versión.

Jasim Muhammed
fuente
1

Pensé que sería útil demostrar cómo hacer esto usando Ansible usando el módulo ec2_ami_find .

Al momento de escribir (2017-06-07) en la región ap-sureste-2, AWS le sugerirá estas imágenes Ubuntu LTS si inicia una instancia EC2 manualmente desde la consola:

  • Ubuntu Server 16.04 LTS (HVM), tipo de volumen SSD - ami-96666ff5
  • Ubuntu Server 14.04 LTS (HVM), tipo de volumen SSD - ami-807876e3

Esto está en línea con sus recomendaciones para usar la virtualización HVM y los volúmenes SSD respaldados por EBS.

Para obtener el mejor rendimiento, le recomendamos que utilice los tipos de instancia de generación actual y las AMI de HVM cuando inicie sus instancias.

Para obtener las mismas AMI que AWS recomienda, puede usar las siguientes tareas:

- name: Find the most recent xenial AMI
  ec2_ami_find:
    aws_access_key: "{{ vault_aws_access_key }}"
    aws_secret_key: "{{ vault_aws_secret_key }}"
    region: "{{ config_region }}"
    name: "ubuntu/images/hvm-ssd/ubuntu-xenial-16.04-amd64-server-*"
    owner: 099720109477 # canonical ownerid
    virtualization_type: hvm
    sort: name
    sort_order: descending
    sort_end: 2
  register: ami_find_xenial

- name: Newest Xenial AMI
  debug:
    msg: "{{ ami_find_xenial.results[0].ami_id }}"

- name: AWS recommend Xenial AMI
  debug:
    msg: "{{ ami_find_xenial.results[1].ami_id }}"

- name: Find the most recent trusty AMI
  ec2_ami_find:
    aws_access_key: "{{ vault_aws_access_key }}"
    aws_secret_key: "{{ vault_aws_secret_key }}"
    region: "{{ config_region }}"
    name: "ubuntu/images/hvm-ssd/ubuntu-trusty-14.04-amd64-server-*"
    owner: 099720109477 # canonical ownerid
    virtualization_type: hvm
    architecture: x86_64
    sort: name
    sort_order: descending
    sort_end: 3
  register: ami_find_trusty

- name: Newest Trusty AMI
  debug:
    msg: "{{ ami_find_trusty.results[0].ami_id }}"

- name: AWS recommend Trusty AMI
  debug:
    msg: "{{ ami_find_trusty.results[2].ami_id }}"

Lo que da el siguiente resultado:

TASK [Load secrets from Vault] *****************************************************************************************************************************************************************************
ok: [localhost]

TASK [Find the most recent xenial AMI] *********************************************************************************************************************************************************************
ok: [localhost]

TASK [Newest Xenial AMI] ***********************************************************************************************************************************************************************************
ok: [localhost] => {
    "changed": false, 
    "msg": "ami-1e01147d"
}

TASK [AWS recommended Xenial AMI] **************************************************************************************************************************************************************************
ok: [localhost] => {
    "changed": false, 
    "msg": "ami-96666ff5"
}

TASK [Find the most recent trusty AMI] *********************************************************************************************************************************************************************
ok: [localhost]

TASK [Newest Trusty AMI] ***********************************************************************************************************************************************************************************
ok: [localhost] => {
    "changed": false, 
    "msg": "ami-993e2bfa"
}

TASK [AWS recommended Trusty AMI] **************************************************************************************************************************************************************************
ok: [localhost] => {
    "changed": false, 
    "msg": "ami-807876e3"
}

Si compara los identificadores AMI devueltos por el libro de jugadas, puede ver que AWS no recomienda la última imagen disponible, sino la segunda o la tercera más reciente. No sé qué criterios / heurísticos están usando aquí.

htaccess
fuente