Como sei qual AMI do Ubuntu iniciar no EC2?

29

Quando quero iniciar uma instância do Ubuntu no EC2, como encontro a correta? Existem milhares de imagens públicas que têm "Ubuntu" em seu nome. Estou interessado apenas em executar as imagens oficiais do Ubuntu. Como faço para saber agora qual AMI é a correta?

smoser
fonte

Respostas:

26

O sucesso do Ubuntu como plataforma e o compromisso do Ubuntu com a atualização de AMIs significa que existem literalmente milhares de imagens no Amazon EC2 com "ubuntu" em seu nome. Isso, combinado com a falta de Ubuntu no menu "Início Rápido", torna a seleção da AMI correta uma tarefa não trivial.

Algumas informações gerais sobre o Ubuntu

Você já deve estar ciente desses itens, mas quero indicá-los para aqueles que estão apenas começando com o Ubuntu ou EC2.

  • O Ubuntu é lançado a cada 6 meses. Cada versão possui um número de versão e um nome de código. O mais importante a ser observado aqui é que a cada 2 anos é feita uma versão do LTS (Long Term Support). Se você deseja estabilidade e suporte por 5 anos, selecione uma versão LTS. Se você deseja os pacotes mais recentes, selecione a versão mais recente. Veja a entrada da Wikipedia para mais informações.
  • No momento da redação deste artigo, existem 5 "regiões" no Amazon EC2. Cada região representa uma localização geográfica. Cada região possui seus próprios IDs de AMI. Dentro de cada região, existem 2 arquiteturas (x86_64, i386) e 2 tipos de "armazenamento raiz" (EBS ou instância). Isso significa que, para cada versão do Ubuntu, geramos 20 ami ids.

Mais fácil: encontre AMIs no seu navegador da web

Você pode escolher sua interface para selecionar imagens. Vá para:

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

    Na parte inferior desta página, você pode selecionar a região, versão, arco ou armazenamento raiz. Você só mostra os lançamentos mais recentes aqui. Ao fazer sua seleção, você pode copiar e colar o número de ami ou apenas clicar nele para ir diretamente para a página de lançamento do console do EC2 para essa AMI.

ou

  • https://cloud-images.ubuntu.com/server/releases/
    • Selecione Sua liberação por número ou codinome
    • Selecione 'release /': mantemos compilações históricas para depuração, mas o diretório 'release /' sempre será o mais recente.
    • Selecione sua AMI na tabela e clique em para iniciar no console ou copie e cole uma linha de comando.

Pesquise no console do Amazon EC2

O console do EC2 é uma maneira gráfica de classificar as AMIs e selecionar uma para iniciar. Para iniciar uma imagem oficial do Ubuntu aqui, siga as etapas abaixo.

  • Selecione a região desejada no canto superior esquerdo, em 'Navegação'. Exemplo: "Leste dos EUA (Virgínia)"
  • Clique em "amis" Do não clique em "Iniciar Instância" [ver nota abaixo]
  • para 'Visualização', selecione "Todas as imagens"
  • Limite os resultados às imagens do Ubuntu Stable Release digitando ubuntu-images /

    Você deve expandir o campo 'Nome da AMI' o mais amplo possível (talvez reduza os outros).

  • Limite os resultados a um release específico anexando '. *'.

    Por exemplo: ubuntu-images /.* 10.04

  • Limite os resultados a um determinado arco anexando '. * I386' ou '. * Amd64'

    Nota : Se você deseja executar um m1.small ou c1.medium, precisa de 'i386'. Se você deseja executar um t1.micro, precisará selecionar uma imagem 'ebs'.

  • Classifique seus resultados por nome da AMI e faça a seleção

    Ao classificar pelo nome da AMI, você pode ver mais facilmente a AMI mais recente de um determinado conjunto. Cada AMI termina com um número no formato AAAAMMDD (ano, mês, dia). Você quer o mais recente.

  • Verifique se o proprietário é 099720109477!

    Qualquer usuário pode registrar uma AMI com qualquer nome. Nada impede que um usuário mal-intencionado registre uma AMI que corresponda à pesquisa acima. Portanto, para estar seguro, você precisa verificar se o proprietário do ami é ' 099720109477 '.

  • Se "Proprietário" não for uma coluna para você, clique em "Mostrar / Ocultar" no canto superior direito e selecione "Proprietário" a ser exibido.
  • Clique no nome da AMI e clique em 'Iniciar'

Notas

  • Acesso HTTPS : Das opções acima, neste momento, https://cloud-images.ubuntu.com/server/releases/ é o único que fornece dados por https. Isso pode ser importante para você se estiver preocupado com possíveis ataques "Man in the Middle" ao encontrar um ID da AMI. Solicitei ao Ahmed [kim0 no irc] para oferecer suporte ao acesso https a https://cloud.ubuntu.com/ami .

  • Caixa de diálogo 'Iniciar Instância' do Console da Web : não vi nenhuma maneira na caixa de diálogo 'Iniciar Instância' para ver o ID do Proprietário. Porque, se isso for sugerido, não use essa caixa de diálogo para encontrar "AMIs da comunidade". Simplesmente não há como você saber com segurança quem é o proprietário da imagem no console. Para usuários avançados, em breve farei um blog sobre uma maneira de encontrar AMIs programaticamente [Dica].

Fonte

smoser
fonte
Poderia, por favor, precisar a diferença entre hvm-instancee hvm-ssd? Receio que "instância" signifique "paravirtual", mas não tenho certeza e não consigo encontrar informações sobre ele. Além disso, pode ser útil observar que os https://cloud-images.ubuntu.com/locator/filtros de oferta ... na parte inferior da página
Balmipour
11

Versão nova e melhorada.

# 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

Basicamente, agarra dados brutos usados ​​para a página de localização ami do ubuntu e usa jq para analisar a linha que eu quero, em seguida, um grep para extrair o valor. Muito mais rápido que a versão antiga.


-- versão original

Aqui está outro exemplo. Eu acabei de escrever isso para buscar a última identificação confiável de AMI. Ele usa a ferramenta aws cli para consultar a API, usando o fato de que os nomes são classificados em ordem de data para obter as últimas.

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 em 2 partes. A primeira parte obtém todas as AMIs do ubuntu confiáveis ​​que atendem aos vários critérios (ebs, x86_64 e o padrão de nome). Ele pega o nome e classifica por ele. Os nomes são formatados para ordená-los por data, para que o último seja o mais novo. Este nome é então atribuído à variável 'name'.

A segunda parte usa esse nome para solicitar o ID da AMI com a AMI com esse nome. Ele analisa apenas o ID e o atribui a 'ami_id'.

John Eikenberry
fonte
Você pode explicar o que isso faz?
Kaz Wolfe
Adicionada a explicação à resposta.
John Eikenberry
4
Isso deve realizar algo semelhante, mas usando uma expressão 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, você pode descobrir programaticamente a mais recente AMI do 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
Tornassol
fonte
2

Você pode usar https://cloud-images.ubuntu.com/locator/ec2/, que fornece uma comparação abrangente com base na versão, data de lançamento etc.

Pesquise a versão, a região que você deseja e classifique com base na data de lançamento para obter a versão mais recente.

Jasim Muhammed
fonte
1

Eu pensei que seria útil demonstrar como fazer isso usando o Ansible usando o módulo ec2_ami_find .

No momento da escrita (07/06/2017) na região ap-southeast-2, a AWS sugere essas imagens do Ubuntu LTS se você iniciar uma instância do EC2 manualmente a partir do console:

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

Isso está de acordo com as recomendações de uso da virtualização HVM e volumes SSD suportados pelo EBS.

Para obter o melhor desempenho, recomendamos o uso dos tipos de instância de geração atual e AMV HVM ao iniciar suas instâncias.

Para obter as mesmas AMIs recomendadas pela AWS, você pode usar as seguintes tarefas:

- 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 }}"

O que fornece a seguinte saída:

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"
}

Se você comparar os IDs de AMI retornados pelo manual, poderá ver a AWS não recomendar a imagem mais recente disponível, mas a segunda ou terceira mais recente. Não sei que critério / heurística eles estão usando aqui.

htaccess
fonte