Como eu sei o que o Ubuntu AMI deve iniciar no EC2?

26

Quando eu quero lançar uma instância do Ubuntu no EC2, como eu encontro o caminho certo? 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 certa?

    
por smoser 18.07.2011 / 16:41

6 respostas

20

O sucesso do Ubuntu como plataforma e o compromisso do Ubuntu em atualizar as AMIs significa que há literalmente milhares de imagens no Amazon EC2 com o "ubuntu" em seu nome. Isso, combinado com a falta do Ubuntu no menu "Quick Start", faz com que selecionar a AMI certa seja uma tarefa não trivial.

Algumas informações gerais do Ubuntu

Você já pode estar ciente desses itens, mas quero destacá-los para aqueles que estão começando a usar o Ubuntu ou o EC2.

  • O Ubuntu lança a cada 6 meses. Cada versão tem um número de versão e um codinome. A coisa mais importante a notar aqui é que a cada 2 anos é feita uma liberação LTS (Long Term Support). Se você quiser estabilidade e suporte por 5 anos, selecione uma versão LTS. Se você quiser os pacotes mais novos, 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 tem 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, nós geramos 20 ami ids.

Mais fácil: encontre AMIs no navegador da Web

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

  • link

    Na parte inferior desta página, você pode selecionar a região, release, arch ou root-store. Você só está mostrando os lançamentos mais recentes aqui. Depois de 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 inicialização do console do EC2 para essa AMI.

ou

  • link
    • Selecione seu release por número ou nome de código
    • Selecione "release /": mantemos versões históricas para depuração, mas o diretório "release /" sempre será o mais recente.
    • Selecione sua AMI na tabela e clique para iniciar no console ou copie e cole uma linha de comando.

Pesquise pelo 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 os passos abaixo.

  • Selecione a região desejada no canto superior esquerdo, em "Navegação" Exemplo: "Nós do Leste (Virgínia)"
  • Clique em "AMIs" não clique em "Iniciar Instância" [veja a nota abaixo]
  • para "Visualizar", selecione "Todas as imagens"
  • Limite os resultados para as imagens do Ubuntu Stable Release, digitando ubuntu-images /

    Você deve expandir o campo 'Nome AMI' o máximo possível (talvez diminuir os outros).

  • Limite os resultados para uma versão específica acrescentando '. *'.

    Por exemplo: ubuntu-images /.* 10.04

  • Limite os resultados para um determinado arco adicionando '. * i386' ou '. * amd64'

    Nota : Se você quer rodar um m1.small ou c1.medium, você precisa do 'i386'. Se você deseja executar um t1.micro, será necessário selecionar uma imagem 'ebs'.

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

    Classificando por nome AMI, você pode ver mais facilmente a nova AMI 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 sob qualquer nome. Nada impede que um usuário mal-intencionado registre uma AMI que corresponda à pesquisa acima. Então, para estar seguro, você precisa verificar se o dono 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" para ser exibido.
  • Clique no nome da AMI e, em seguida, clique em "Iniciar"

Notas

  • Acesso HTTPS : das opções acima, agora link é o único que fornece dados por meio de 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 Ahmed [kim0 in irc] para dar suporte ao acesso https ao link .

  • 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, eu sugiro não usar esse diálogo para encontrar "AMIs comunitárias". Simplesmente não há como saber com segurança quem é o proprietário da imagem no console. Para usuários avançados, vou blogar em breve sobre uma maneira de encontrar AMIs programaticamente [Hint].

Fonte

    
por smoser 18.07.2011 / 16:53
11

Nova e melhorada versão.

# needed as json list returned by ubuntu site is mal-formed
remove_last_comma() { sed '
        $x;$G;/\(.*\),/!H;//!{$!d
    };  $!x;$s///;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, pega dados brutos usados na página de localização do Ubuntu, e usa jq para analisar a linha que eu quero, então 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 o último ID da AMI confiável. 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 o mais recente.

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  | "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  }' | tr -d '",')

Funciona em 2 partes. A primeira parte obtém todas as AMIs para o Ubuntu Trust que atendem aos vários critérios (ebs, x86_64 e o padrão de nome). Puxa o Nome e classifica por ele. Os nomes são formatados de modo que ordená-los classifica por data, de modo 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 para a AMI com esse nome. Ele analisa apenas o id e atribui a 'ami_id'.

    
por John Eikenberry 08.10.2014 / 07:18
4

usando o ruby aws-sdk, você pode descobrir programaticamente o último AMI do Ubuntu como este

    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
    
por Litmus 11.06.2013 / 12:59
1

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

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

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

Isto está de acordo com suas recomendações para usar a virtualização HVM e EBS apoiado SSD Volumes.

  

Para o melhor desempenho, recomendamos que você use a geração atual   tipos de instância e AMIs do HVM quando você inicia 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 dá 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 AMI devolvidos pela cartilha você pode ver AWS não recomendo a última imagem disponível, mas sim o segundo ou terceiro mais recente. Eu não sei quais critérios / heurística eles estão usando aqui.

    
por htaccess 07.06.2017 / 05:37
1

Você pode usar o link 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ê quer e classifique com base na data de lançamento para obter a versão mais recente.

    
por Jasim Muhammed 22.10.2017 / 10:46
0

Existe uma lista abrangente de AMIs oficiais disponíveis no Ubuntu Cloud Portal . Você encontra recursos adicionais com relação aos lançamentos oficiais da Canonical EC2 AMI na Ajuda do Ubuntu: Guia de iniciação do EC2 e um diretório bruto de todos os AMIs lançadas pela Canonical em Imagens do Ubuntu EC2

    
por Marco Ceppi 18.07.2011 / 16:44