답변:
Ubuntu가 플랫폼으로 성공하고 Ubuntu가 AMI를 새로 고치 겠다는 약속은 Amazon EC2에 문자 그대로 "ubuntu"가있는 수천 개의 이미지가 있음을 의미합니다. 즉, "빠른 시작"메뉴에서 우분투와의 결합 및 부족으로 올바른 AMI를 선택하는 것은 사소한 일이 아닙니다.
일반적인 우분투 정보
이미 이러한 항목을 알고있을 수도 있지만 Ubuntu 또는 EC2를 시작한 사람들을 위해 지적하고 싶습니다.
가장 쉬운 방법 : 웹 브라우저에서 AMI 찾기
이미지 선택을위한 인터페이스를 선택할 수 있습니다. 다음 중 하나로 이동하십시오.
이 페이지의 맨 아래에서 리전, 릴리스, 아치 또는 루트 저장소를 선택할 수 있습니다. 최신 릴리스 만 여기에 표시됩니다. 선택했으면 ami 번호를 복사하여 붙여 넣거나 클릭하여 해당 AMI의 EC2 콘솔 시작 페이지로 바로 이동할 수 있습니다.
또는
Amazon EC2 콘솔을 통한 검색
EC2 콘솔은 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 ' 인지 확인해야합니다 .
노트
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-instance
와 hvm-ssd
? "인스턴스"는 "반 가상화"를 의미하지만, 확실하지 않으며 이에 대한 정보를 찾을 수 없습니다. 또한 https://cloud-images.ubuntu.com/locator/
페이지 하단에 필터 를 제공 한다는 점에 유의하는 것이
새롭고 개선 된 버전.
# 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'에 할당합니다.
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'
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
https://cloud-images.ubuntu.com/locator/ec2/ 를 사용하면 버전, 출시 날짜 등을 기준으로 포괄적 인 비교를 제공 할 수 있습니다 .
원하는 버전, 지역을 검색하고 릴리스 날짜를 기준으로 정렬하여 최신 버전을 얻으십시오.
이 포괄적 인 목록 상의 가능한 공식 AMI에의 우분투 클라우드 포털 . Ubuntu 도움말 : EC2 시작 안내서 에서 Canonical의 공식 EC2 AMI 릴리스에 대한 추가 리소스와 Ubuntu EC2 이미지 에서 Canonical이 릴리스 한 모든 AMI의 원시 디렉토리가 있습니다.
ec2_ami_find 모듈 을 사용하여 Ansible과 함께 사용하는 방법을 설명하는 것이 유용하다고 생각했습니다 .
ap-southeast-2 리전에서 문서를 작성할 때 (2017-06-07) 콘솔에서 EC2 인스턴스를 수동으로 시작하면 AWS는 이러한 Ubuntu LTS 이미지를 제안합니다.
이는 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가 사용 가능한 최신 이미지가 아니라 두 번째 또는 세 번째 최신 이미지를 권장한다는 것을 알 수 있습니다. 그들이 여기에서 어떤 기준 / 휴리스틱을 사용하는지 모르겠습니다.