EC2에서 어떤 Ubuntu AMI를 시작할지 어떻게 알 수 있습니까?


29

EC2에서 Ubuntu 인스턴스를 시작하려면 올바른 인스턴스를 어떻게 찾습니까? 이름에 "Ubuntu" 가있는 수천 개의 공개 이미지가 있습니다. 공식 우분투 이미지를 실행하는 데 관심이 있습니다. 이제 어떤 AMI가 올바른가요?


답변:


26

Ubuntu가 플랫폼으로 성공하고 Ubuntu가 AMI를 새로 고치 겠다는 약속은 Amazon EC2에 문자 그대로 "ubuntu"가있는 수천 개의 이미지가 있음을 의미합니다. 즉, "빠른 시작"메뉴에서 우분투와의 결합 및 부족으로 올바른 AMI를 선택하는 것은 사소한 일이 아닙니다.

일반적인 우분투 정보

이미 이러한 항목을 알고있을 수도 있지만 Ubuntu 또는 EC2를 시작한 사람들을 위해 지적하고 싶습니다.

  • Ubuntu는 6 개월마다 릴리스됩니다. 각 릴리스에는 버전 번호와 코드 명이 있습니다. 여기서 주목해야 할 가장 중요한 것은 2 년마다 LTS (Long Term Support)가 릴리스된다는 것입니다. 5 년 동안 안정성과 지원을 받으려면 LTS 릴리스를 선택하십시오. 최신 패키지를 원하면 최신 릴리스를 선택하십시오. 자세한 정보는 Wikipedia 항목을 참조하십시오.
  • 이 글을 쓰는 시점에서 Amazon EC2에는 5 개의 "지역"이 있습니다. 각 지역은 지리적 위치를 나타냅니다. 각 리전마다 고유 한 AMI ID가 있습니다. 각 지역에는 2 개의 아키텍처 (x86_64, i386)와 2 개의 "루트 저장소"유형 (EBS 또는 인스턴스)이 있습니다. 즉, 각 빌드 Ubuntu 릴리스마다 20 개의 ami id를 생성합니다.

가장 쉬운 방법 : 웹 브라우저에서 AMI 찾기

이미지 선택을위한 인터페이스를 선택할 수 있습니다. 다음 중 하나로 이동하십시오.

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

    이 페이지의 맨 아래에서 리전, 릴리스, 아치 또는 루트 저장소를 선택할 수 있습니다. 최신 릴리스 만 여기에 표시됩니다. 선택했으면 ami 번호를 복사하여 붙여 넣거나 클릭하여 해당 AMI의 EC2 콘솔 시작 페이지로 바로 이동할 수 있습니다.

또는

  • https://cloud-images.ubuntu.com/server/releases/
    • 번호 또는 코드 명으로 릴리스를 선택하십시오
    • 'release /'선택 : 우리는 디버깅을 위해 역사적 빌드를 유지하지만 'release /'디렉토리는 항상 최신 디렉토리입니다.
    • 테이블에서 AMI를 선택하고을 클릭하여 콘솔에서 시작하거나 명령 줄을 복사하여 붙여 넣습니다.

Amazon EC2 콘솔을 통한 검색

EC2 콘솔은 AMI를 정렬하고 시작할 하나를 선택하는 그래픽 방식입니다. 여기에서 공식 우분투 이미지를 시작하려면 아래 단계를 따르십시오.

  • '탐색'아래 왼쪽 상단에서 원하는 지역을 선택하십시오. 예 : "미국 동부 (버지니아)"
  • "AMI를"함을 클릭 하지 "실행 인스턴스"를 클릭 [아래 참고 참조]
  • '보기'에서 '모든 이미지'를 선택하십시오.
  • ubuntu-images /를 입력하여 결과를 Ubuntu Stable Release 이미지로 제한

    'AMI 이름'필드를 가능한 넓게 확장해야합니다 (다른 이름은 축소 할 수 있음).

  • '. *'를 추가하여 결과를 특정 릴리스로 제한하십시오.

    예를 들면 다음과 같습니다. ubuntu-images /.* 10.04

  • '. * i386'또는 '. * amd64'를 추가하여 주어진 아치로 결과를 제한하십시오.

    참고 : m1.small 또는 c1.medium을 실행하려면 'i386'이 필요합니다. t1.micro를 실행하려면 'ebs'이미지를 선택해야합니다.

  • AMI 이름별로 결과를 정렬하고 선택

    AMI 이름을 기준으로 정렬하면 지정된 세트에 대한 최신 AMI를 더 쉽게 볼 수 있습니다. 각 AMI는 YYYYMMDD (년, 월, 일) 형식의 숫자로 끝납니다. 가장 최근의 것을 원합니다.

  • 소유자가 099720109477인지 확인하십시오!

    모든 사용자는 모든 이름으로 AMI를 등록 할 수 있습니다. 악의적 인 사용자가 위 검색과 일치하는 AMI를 등록하는 것을 막을 수있는 것은 없습니다. 따라서 안전을 위해 ami의 소유자가 ' 099720109477 ' 인지 확인해야합니다 .

  • "소유자"가 열이 아닌 경우 오른쪽 상단의 "표시 / 숨기기"를 클릭하고 "소유자"를 선택하십시오.
  • AMI 이름을 클릭 한 다음 'Launch'를 클릭하십시오.

노트

  • HTTPS 액세스 : 위의 옵션 중 현재 https://cloud-images.ubuntu.com/server/releases/ 는 https를 통해 데이터를 제공하는 유일한 옵션 입니다. AMI ID를 찾을 때 잠재적 인 "중간자"공격이 우려되는 경우이 방법이 중요 할 수 있습니다. https://cloud.ubuntu.com/ami 에 대한 https 액세스를 지원하기 위해 Ahmed [irc의 kim0]를 요청했습니다 .

  • 웹 콘솔 '인스턴스 시작'대화 상자 : '인스턴스 시작'대화 상자에서 소유자 ID를 볼 수있는 방법이 없습니다. 이 경우 "Community AMI"를 찾기 위해 해당 대화 상자를 사용하지 않는 것이 좋습니다. 콘솔 내에서 이미지 소유자가 누구인지 확실하게 알 수있는 방법은 없습니다. 고급 사용자의 경우 프로그래밍 방식으로 AMI를 찾는 방법에 대해 곧 블로그에 올릴 것입니다 [힌트].

출처


당신은 차이 정확한 기쁘게 수 hvm-instancehvm-ssd? "인스턴스"는 "반 가상화"를 의미하지만, 확실하지 않으며 이에 대한 정보를 찾을 수 없습니다. 또한 https://cloud-images.ubuntu.com/locator/페이지 하단에 필터 를 제공 한다는 점에 유의하는 것이
좋습니다

11

새롭고 개선 된 버전.

# 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

기본적으로 우분투의 ami 찾기 페이지에 사용 된 원시 데이터를 잡고 jq를 사용하여 원하는 행을 구문 분석 한 다음 grep을 사용하여 값을 가져옵니다. 이전 버전보다 훨씬 빠릅니다.


-원본 버전

또 다른 예가 있습니다. 방금 최신 신뢰할 수있는 AMI ID를 가져 오기 위해 이것을 썼습니다. 이름을 날짜순으로 정렬하여 최신 정보를 얻는다는 사실을 사용하여 aws cli 도구를 사용하여 API를 쿼리합니다.

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

그것은 두 부분으로 작동합니다. 첫 번째 부분은 다양한 기준 (ebs, x86_64 및 이름 패턴)을 충족하는 우분투 신뢰에 대한 모든 AMI를 가져옵니다. 이름을 꺼내서 정렬합니다. 이름을 정렬하면 날짜별로 정렬되므로 마지막 이름이 최신 이름이됩니다. 그런 다음이 이름은 'name'변수에 지정됩니다.

두 번째 부분은 해당 이름을 사용하여 해당 이름을 가진 AMI의 AMI ID를 요청합니다. ID 만 파싱하여 'ami_id'에 할당합니다.


이것이 무엇을하는지 설명해 주시겠습니까?
Kaz Wolfe

답변에 설명을 추가했습니다.
John Eikenberry

4
이와 유사하지만 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

ruby aws-sdk를 사용하면 다음과 같이 최신 우분투 AMI를 프로그래밍 방식으로 찾을 수 있습니다

    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



1

ec2_ami_find 모듈 을 사용하여 Ansible과 함께 사용하는 방법을 설명하는 것이 유용하다고 생각했습니다 .

ap-southeast-2 리전에서 문서를 작성할 때 (2017-06-07) 콘솔에서 EC2 인스턴스를 수동으로 시작하면 AWS는 이러한 Ubuntu LTS 이미지를 제안합니다.

  • Ubuntu 서버 16.04 LTS (HVM), SSD 볼륨 유형 -ami-96666ff5
  • Ubuntu Server 14.04 LTS (HVM), SSD 볼륨 유형 -ami-807876e3

이는 HVM 가상화 및 EBS 지원 SSD 볼륨 사용에 대한 권장 사항 과 일치 합니다.

최상의 성능을 위해서는 인스턴스를 시작할 때 현재 세대 인스턴스 유형과 HVM AMI를 사용하는 것이 좋습니다.

AWS에서 권장하는 것과 동일한 AMI를 얻으려면 다음 작업을 사용할 수 있습니다.

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

다음과 같은 결과가 나타납니다.

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

플레이 북에서 반환 한 AMI ID를 비교하면 AWS가 사용 가능한 최신 이미지가 아니라 두 번째 또는 세 번째 최신 이미지를 권장한다는 것을 알 수 있습니다. 그들이 여기에서 어떤 기준 / 휴리스틱을 사용하는지 모르겠습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.