ฉันจะรู้ได้อย่างไรว่า Ubuntu AMI จะเปิดตัวบน EC2 อย่างไร


29

เมื่อฉันต้องการเปิดใช้งานอินสแตนซ์ของ Ubuntu บน EC2 ฉันจะค้นหาสิ่งที่เหมาะสมได้อย่างไร มีภาพสาธารณะหลายพันภาพที่มี "Ubuntu" อยู่ในชื่อ ฉันสนใจเพียงแค่เรียกใช้อิมเมจอย่างเป็นทางการของ Ubuntu ฉันจะเลือก AMI ที่เหมาะสมได้อย่างไร?


คำตอบ:


26

ความสำเร็จของอูบุนตูในฐานะแพลตฟอร์มและความมุ่งมั่นของอูบุนตูในการรีเฟรช AMIs หมายความว่ามีรูปภาพนับพันรูปบน Amazon EC2 ที่มี "ubuntu" ในชื่อของพวกเขา เมื่อรวมกับและการขาดอูบุนตูในเมนู "เริ่มต้นอย่างรวดเร็ว" ทำให้การเลือก AMI ที่เหมาะสมเป็นงานที่ไม่สำคัญ

ข้อมูล Ubuntu ทั่วไปบางส่วน

คุณอาจทราบถึงรายการเหล่านี้แล้ว แต่ฉันต้องการชี้ให้เห็นสำหรับผู้ที่เพิ่งเริ่มต้นใช้งาน Ubuntu หรือ EC2

  • Ubuntu ออกทุก 6 เดือน แต่ละรุ่นมีหมายเลขรุ่นและชื่อรหัส สิ่งที่สำคัญที่สุดที่ควรทราบคือการปล่อย LTS (Long Term Support) ทุก 2 ปี หากคุณต้องการความมั่นคงและการสนับสนุนเป็นเวลา 5 ปีให้เลือกรุ่น LTS หากคุณต้องการแพ็คเกจล่าสุดให้เลือกรุ่นล่าสุด ดูรายการวิกิพีเดียสำหรับข้อมูลเพิ่มเติม
  • ในช่วงเวลาของการเขียนนี้มี 5 "ภูมิภาค" ใน Amazon EC2 แต่ละภูมิภาคแสดงที่ตั้งทางภูมิศาสตร์ แต่ละภูมิภาคมีรหัส AMI ของตัวเอง ภายในแต่ละภูมิภาคจะมี 2 สถาปัตยกรรม (x86_64, i386) และ 2 "root store" ประเภท (EBS หรืออินสแตนซ์) นั่นหมายความว่าสำหรับแต่ละรุ่นของ Ubuntu เราจะสร้างรหัส 20 ami

ง่ายที่สุด: ค้นหา AMIs จากเว็บเบราว์เซอร์ของคุณ

คุณสามารถเลือกอินเทอร์เฟซของคุณสำหรับการเลือกรูปภาพ ไปที่:

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

    ที่ด้านล่างของหน้านี้คุณสามารถเลือกภูมิภาคปล่อยโค้งหรือเก็บราก คุณแสดงเฉพาะรุ่นล่าสุดที่นี่เท่านั้น เมื่อคุณทำการเลือกคุณสามารถคัดลอกและวางหมายเลข ami หรือเพียงคลิกที่มันเพื่อไปที่หน้าการเปิดตัวคอนโซล EC2 สำหรับ AMI นั้น

หรือ

  • https://cloud-images.ubuntu.com/server/releases/
    • เลือกรุ่นของคุณตามหมายเลขหรือชื่อรหัส
    • เลือก 'release /': เราเก็บประวัติการสร้างมาเพื่อการดีบั๊ก แต่ไดเรกทอรี 'release /' จะเป็นเวอร์ชั่นล่าสุดเสมอ
    • เลือก AMI ของคุณจากตารางและคลิกเพื่อเปิดในคอนโซลหรือคัดลอกและวางบรรทัดคำสั่ง

ค้นหาผ่าน Amazon EC2 Console

EC2 Console เป็นวิธีกราฟิกในการจัดเรียง AMI และเลือกหนึ่งตัวเพื่อเปิดใช้ หากต้องการเปิดภาพ Ubuntu อย่างเป็นทางการที่นี่ทำตามขั้นตอนด้านล่าง

  • เลือกภูมิภาคที่คุณต้องการในด้านซ้ายบนภายใต้ตัวอย่าง 'การนำทาง': "Us East (Virginia)"
  • คลิก "Amis" ทำไม่ได้คลิกที่ "อินสแตนซ์เปิดตัว" [ดูหมายเหตุด้านล่าง]
  • สำหรับ 'กำลังดู' เลือก "รูปภาพทั้งหมด"
  • จำกัด ผลลัพธ์ไว้ที่รูปภาพที่มีเสถียรภาพของ Ubuntu โดยพิมพ์ ubuntu-images /

    คุณควรขยายฟิลด์ 'ชื่อ AMI' ให้กว้างที่สุด (อาจย่อขนาด)

  • จำกัด ผลลัพธ์ให้เป็นรุ่นเฉพาะโดยการต่อท้าย '. *'

    ตัวอย่างเช่น: ubuntu-images /.* 10.04

  • จำกัด ผลลัพธ์ไว้ที่ส่วนโค้งที่กำหนดโดยการเพิ่ม '. * i386' หรือ '. * amd64'

    หมายเหตุ : หากคุณต้องการเรียกใช้ m1.small หรือ c1.medium คุณต้องมี 'i386' หากคุณต้องการเรียกใช้ t1.micro คุณจะต้องเลือกภาพ 'ebs'

  • จัดเรียงผลลัพธ์ของคุณตามชื่อ AMI และทำการเลือก

    ด้วยการจัดเรียงตามชื่อ AMI คุณสามารถดู AMI ใหม่ล่าสุดสำหรับชุดที่กำหนดได้ง่ายขึ้น AMI แต่ละอันลงท้ายด้วยตัวเลขในรูปแบบ YYYYMMMM (ปี, เดือน, วัน) คุณต้องการล่าสุด

  • ยืนยันเจ้าของคือ 099720109477!

    ผู้ใช้สามารถลงทะเบียน AMI ภายใต้ชื่อใดก็ได้ ไม่มีสิ่งใดป้องกันผู้ใช้ที่เป็นอันตรายจากการลงทะเบียน AMI ที่จะตรงกับการค้นหาด้านบน ดังนั้นเพื่อความปลอดภัยคุณต้องยืนยันว่าเจ้าของ ami คือ ' 099720109477 '

  • หาก "เจ้าของ" ไม่ใช่คอลัมน์สำหรับคุณให้คลิก "แสดง / ซ่อน" ที่ด้านบนขวาและเลือก "เจ้าของ" เพื่อแสดง
  • คลิกที่ชื่อ AMI จากนั้นคลิก 'เริ่มต้น'

หมายเหตุ

  • การเข้าถึง HTTPS : จากตัวเลือกด้านบนตอนนี้https://cloud-images.ubuntu.com/server/releases/เป็นตัวเลือกเดียวที่ให้ข้อมูลผ่าน https นี่อาจเป็นสิ่งสำคัญสำหรับคุณหากคุณกังวลเกี่ยวกับการโจมตี "Man in the Middle" ที่อาจเกิดขึ้นเมื่อค้นหารหัส AMI ผมเคยขออาเหม็ด [kim0 ใน IRC] เพื่อสนับสนุนการเข้าถึง HTTPS https://cloud.ubuntu.com/ami

  • กล่องโต้ตอบ 'เปิดใช้งานอินสแตนซ์' ของคอนโซลบนเว็บ : ฉันไม่เห็นวิธีใด ๆ ในกล่องโต้ตอบ 'เรียกใช้อินสแตนซ์' เพื่อดู ID เจ้าของ เพราะถ้าเป็นเช่นนี้ฉันไม่แนะนำให้ใช้กล่องโต้ตอบนั้นเพื่อค้นหา "Community AMIs" ไม่มีทางที่คุณจะสามารถรู้ได้อย่างมั่นใจว่าใครเป็นเจ้าของภาพจากภายในคอนโซล สำหรับผู้ใช้ขั้นสูงฉันจะบล็อกบางครั้งในเร็ว ๆ นี้เพื่อหา AMIs โดยทางโปรแกรม [คำแนะนำ]

แหล่ง


คุณช่วยกรุณาแยกแยะความแตกต่างระหว่างhvm-instanceและhvm-ssd? ฉันกลัว "อินสแตนซ์" หมายถึง "paravirtual" แต่ไม่แน่ใจและไม่สามารถหาข้อมูลเกี่ยวกับมันได้ นอกจากนี้ยังมีประโยชน์ที่จะทราบว่าhttps://cloud-images.ubuntu.com/locator/ตัวกรองข้อเสนอ ... ที่ด้านล่างของหน้า
Balmipour

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 ของ Ubuntu และใช้ jq เพื่อแยกแถวที่ฉันต้องการจากนั้น grep จะดึงค่าออกมา เร็วกว่ารุ่นเก่ามาก


-- รุ่นเดิม

นี่เป็นอีกตัวอย่างหนึ่ง ฉันเพิ่งเขียนสิ่งนี้เพื่อรับรหัส AMI ที่ไว้วางใจล่าสุด มันใช้เครื่องมือ 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 '",')

มันทำงานได้ใน 2 ส่วน ส่วนแรกได้รับ AMI ทั้งหมดสำหรับ Ubuntu ที่เชื่อถือได้ซึ่งเป็นไปตามเกณฑ์ที่หลากหลาย (ebs, x86_64 และรูปแบบชื่อ) มันดึงชื่อและเรียงลำดับตามมัน ชื่อจะถูกจัดรูปแบบเพื่อให้เรียงลำดับตามวันที่ดังนั้นชื่อสุดท้ายจะเป็นชื่อใหม่ล่าสุด ชื่อนี้จะถูกกำหนดให้กับตัวแปร 'ชื่อ'

ส่วนที่สองใช้ชื่อนั้นเพื่อขอ AMI ID สำหรับ AMI ด้วยชื่อนั้น มันแยกวิเคราะห์เฉพาะ 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, คุณสามารถค้นพบ Ubuntu 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

2

คุณสามารถใช้https://cloud-images.ubuntu.com/locator/ec2/ซึ่งให้การเปรียบเทียบที่ครอบคลุมตามเวอร์ชันวันที่วางจำหน่ายและอื่น ๆ

ค้นหารุ่นภูมิภาคที่คุณต้องการและเรียงลำดับตามวันที่วางจำหน่ายเพื่อรับเวอร์ชันล่าสุด


1

มีเป็นรายการที่ครอบคลุมของ AMIS อย่างเป็นทางการที่มีอยู่บนUbuntu เมฆพอร์ทัล คุณสามารถค้นหาแหล่งข้อมูลเพิ่มเติมเกี่ยวกับการเปิดตัว EC2 AMI อย่างเป็นทางการของ Canonical ในวิธีใช้ของUbuntu: คู่มือเริ่ม EC2และไดเรกทอรีดิบของ AMIs ทั้งหมดที่ออกโดย Canonical ในรูปภาพ EC2 ของ Ubuntu


1

ฉันคิดว่ามันจะมีประโยชน์ในการสาธิตวิธีการใช้Ansibleโดยใช้โมดูลec2_ami_find

ในขณะที่เขียน (2017-06-07) ในภูมิภาค ap-southeast-2 AWS จะแนะนำรูปภาพ Ubuntu LTS เหล่านี้หากคุณเริ่มต้นอินสแตนซ์ EC2 ด้วยตนเองจากคอนโซล:

  • เซิร์ฟเวอร์ Ubuntu 16.04 LTS (HVM), SSD ระดับเสียง - ami-96666ff5
  • เซิร์ฟเวอร์ Ubuntu 14.04 LTS (HVM), SSD ระดับเสียง - ami-807876e3

สิ่งนี้สอดคล้องกับคำแนะนำในการใช้การจำลองเสมือนแบบ HVM และไดรฟ์ข้อมูล SSD ที่สนับสนุน EBS

เพื่อประสิทธิภาพที่ดีที่สุดเราขอแนะนำให้คุณใช้ประเภทอินสแตนซ์การสร้างปัจจุบันและ HVM AMIs เมื่อคุณเปิดใช้งานอินสแตนซ์ของคุณ

ในการรับ AMI เดียวกันกับที่ AWS แนะนำคุณสามารถใช้งานต่อไปนี้:

- 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 รหัสที่ส่งคืนโดย playbook คุณสามารถดู AWS ไม่แนะนำรูปภาพล่าสุดที่มี แต่แทนที่จะเป็นรูปภาพที่สองหรือสามล่าสุด ฉันไม่รู้ว่าพวกเขากำลังใช้เกณฑ์ / การเรียนรู้แบบไหน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.