どのUbuntu AMIをEC2で起動するかを知るにはどうすればよいですか?


29

EC2でUbuntuのインスタンスを起動したい場合、適切なインスタンスを見つけるにはどうすればよいですか?名前に「Ubuntu」が含まれる何千ものパブリックイメージがあります。公式のUbuntuイメージの実行にのみ興味があります。どのAMIが正しいAMIであるかを確認するには


回答:


26

プラットフォームとしてのUbuntuの成功とAMIの更新に対するUbuntuのコミットメントは、Amazon EC2に「ubuntu」という名前の文字通り何千ものイメージがあることを意味します。「クイックスタート」メニューにUbuntuが存在しないことと相まって、適切なAMIを選択するのは簡単な作業ではありません。

Ubuntuに関する一般的な情報

すでにこれらの項目を知っているかもしれませんが、UbuntuまたはEC2を使い始めたばかりの人のために指摘したいと思います。

  • Ubuntuは6か月ごとにリリースされます。各リリースにはバージョン番号とコードネームがあります。ここで最も重要なことは、2年ごとにLTS(Long Term Support)リリースが行われることです。5年間の安定性とサポートが必要な場合は、LTSリリースを選択してください。最新のパッケージが必要な場合は、最新のリリースを選択してください。詳細については、ウィキペディアのエントリを参照してください。
  • この記事の執筆時点では、Amazon EC2には5つの「リージョン」があります。各地域は地理的な場所を表します。各リージョンには独自のAMI IDがあります。各リージョン内には、2つのアーキテクチャ(x86_64、i386)と2つの「ルートストア」タイプ(EBSまたはインスタンス)があります。つまり、ビルドのUbuntuリリースごとに、20個のami IDが生成されます。

最も簡単:WebブラウザからAMIを見つける

画像を選択するためのインターフェースを選択できます。次のいずれかに移動します。

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

    このページの下部で、リージョン、リリース、アーチ、またはルートストアを選択できます。ここには最新のリリースのみが表示されます。選択したら、AMI番号をコピーして貼り付けるか、クリックしてそのAMIのEC2コンソール起動ページに直接移動できます。

または

  • https://cloud-images.ubuntu.com/server/releases/
    • 番号またはコード名でリリースを選択してください
    • 「release /」を選択します。デバッグ用に過去のビルドを保持しますが、「release /」ディレクトリは常に最新のものになります。
    • テーブルからAMIを選択し、クリックしてコンソールで起動するか、コマンドラインをコピーして貼り付けます。

Amazon EC2コンソールを検索する

EC2コンソールは、AMIを並べ替えて起動するものを選択するグラフィカルな方法です。ここで公式のUbuntuイメージを起動するには、以下の手順に従ってください。

  • 左上の「ナビゲーション」の下で目的の地域を選択します。例:「米国東部(バージニア)」
  • [AMI ]をクリックします[インスタンスの起動]をクリックしないでください[下記の注を参照]
  • 「表示」で「すべての画像」を選択します
  • ubuntu-images /と入力して、結果をUbuntu Stableリリースイメージに制限します。

    [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名をクリックし、[起動]をクリックします

ノート

  • HTTPSアクセス:上記のオプションのうち、現時点ではhttps://cloud-images.ubuntu.com/server/releases/のみがhttps経由でデータを提供します。これは、AMI IDを見つけるときに「Man in the Middle」攻撃の可能性を心配している場合に重要です。https://cloud.ubuntu.com/amiへのhttpsアクセスをサポートするようにAhmed [ircのkim0]にリクエストしました。

  • Webコンソールの「インスタンスの起動」ダイアログ:「インスタンスの起動」ダイアログに所有者IDを表示する方法がありません。その場合、「コミュニティAMI」を見つけるためにそのダイアログを使用しないことをお勧めします。コンソール内から画像の所有者が誰であるかを確実に知る方法はありません。上級ユーザー向けに、AMIをプログラムで見つける方法について近日中にブログを書く予定です[ヒント]。

ソース


hvm-instanceとの違いを正確に教えていただけますhvm-ssdか?「インスタンス」は「準仮想」を意味するのではないかと思いますが、確信が持てず、それに関する情報が見つかりません。また、それは、そのノートに役立ちます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

基本的に、ubuntuの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 '",')

2つの部分で動作します。最初の部分は、さまざまな基準(ebs、x86_64、および名前パターン)を満たすubuntu trustyのすべてのAMIを取得します。名前を引き出し、それでソートします。名前は、日付順にソートされるようにフォーマットされているため、最後の名前が最新のものになります。次に、この名前が「name」変数に割り当てられます。

2番目の部分では、その名前を使用して、その名前のAMIのAMI IDを要求します。idのみを解析し、「ami_id」に割り当てます。


これが何をするのか説明してもらえますか?
カズウルフ14

答えに説明を追加しました。
ジョンエイケンベリー14

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



1

ec2_ami_findモジュールを使用して、Ansibleを使用してこれを行う方法をデモンストレーションすることは有益だと思いました。

執筆時点(2017-06-07)でap-southeast-2リージョンで、コンソールからEC2インスタンスを手動で起動した場合、AWSはこれらのUbuntu LTSイメージを提案します。

  • Ubuntu Server 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は利用可能な最新のイメージではなく、最新の2番目または3番目のイメージを推奨しています。ここでどの基準/ヒューリスティックが使用されているのかわかりません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.