web-dev-qa-db-ja.com

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

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

28
smoser

プラットフォームとしての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

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

または

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

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

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

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

    [AMI名]フィールドをできるだけ広く展開する必要があります(他のフィールドは縮小する可能性があります)。

  • 「。*」を追加して、結果を特定のリリースに制限します。

    例:ubuntu-images /.* 10.04

  • 「。* i386」または「。* AMD64」を追加して、指定されたArchに結果を制限します

    :m1.smallまたはc1.mediumを実行する場合は、「i386」が必要です。 t1.microを実行する場合は、「ebs」イメージを選択する必要があります。

  • AMI名で結果を並べ替えて選択します

    AMI名で並べ替えることにより、特定のセットの最新のAMIをより簡単に確認できます。各AMIは、YYYYMMDD(年、月、日)の形式の数字で終わります。最新のものが必要です。

  • 所有者が099720109477であることを確認してください!

    すべてのユーザーが任意の名前でAMIを登録できます。悪意のあるユーザーが上記の検索に一致するAMIを登録することを妨げるものは何もありません。したがって、安全であるためには、AMIの所有者が「099720109477」であることを確認する必要があります。

  • [所有者]が列ではない場合は、右上の[表示/非表示]をクリックし、表示する[所有者]を選択します。
  • AMI名をクリックし、[起動]をクリックします

  • HTTPS Access:上記のオプションのうち、現時点では https://cloud-images.ubuntu.com/server/releases/ =は、https経由でデータを提供する唯一のものです。これは、AMI idを見つけるときに潜在的な「中間者」攻撃の可能性を心配する場合に重要です。 Ahmed [ircのkim0]に https://cloud.ubuntu.com/AMI へのhttpsアクセスをサポートするようリクエストしました。

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

ソース

25
smoser

新規および改善されたバージョン。

# 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」に割り当てます。

11
John Eikenberry

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
4
Litmus

https://cloud-images.ubuntu.com/locator/ec2/ を使用して、バージョン、リリース日などに基づいた包括的な比較を提供できます。

バージョン、目的の地域を検索し、リリース日に基づいて並べ替えて、最新バージョンを取得します。

2
Jasim Muhammed

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番目のイメージを推奨しています。ここでどの基準/ヒューリスティックを使用しているかわかりません。

1
htaccess

buntu Cloud Portal には、利用可能な公式AMIの 包括的なリスト があります。 Canonicalの公式EC2 AMIリリースに関する追加リソースは、 buntuヘルプ:EC2 Starts Guide と、Canonicalが buntu EC2 Images でリリースしたすべてのAMIの未加工ディレクトリにあります。

1
Marco Ceppi