EC2でUbuntuのインスタンスを起動したい場合、適切なインスタンスを見つけるにはどうすればよいですか?名前に「Ubuntu」が含まれるパブリックイメージには数千があります。公式のUbuntuイメージの実行にのみ興味があります。どのAMIが正しいAMIであるかを確認するにはどうすればよいですか?
プラットフォームとしてのUbuntuの成功と、AMIの更新に対するUbuntuのコミットメントは、Amazon EC2に「ubuntu」という名前の文字通り何千ものイメージがあることを意味します。 「クイックスタート」メニューにUbuntuが存在しないことと相まって、適切なAMIを選択するのは簡単な作業ではありません。
いくつかの一般的なUbuntu情報
すでにこれらの項目を知っているかもしれませんが、UbuntuまたはEC2を使い始めたばかりの人のために指摘したいと思います。
最も簡単:WebブラウザからAMIを見つける
画像を選択するためのインターフェースを選択できます。次のいずれかに移動します。
このページの下部で、リージョン、リリース、Arch、またはルートストアを選択できます。ここには最新のリリースのみが表示されます。選択したら、AMI番号をコピーして貼り付けるか、クリックしてそのAMIのEC2コンソール起動ページに移動します。
または
Amazon EC2コンソールで検索する
EC2コンソールは、AMIを並べ替えて起動するものを選択するグラフィカルな方法です。ここで公式のUbuntuイメージを起動するには、以下の手順に従ってください。
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」であることを確認する必要があります。
注
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をプログラムで検索する方法について近日中にブログを作成します[ヒント]。
新規および改善されたバージョン。
# 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」に割り当てます。
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
https://cloud-images.ubuntu.com/locator/ec2/ を使用して、バージョン、リリース日などに基づいた包括的な比較を提供できます。
バージョン、目的の地域を検索し、リリース日に基づいて並べ替えて、最新バージョンを取得します。
ec2_AMI_find モジュールを使用して、Ansibleを使用してこれを実行する方法を示すと便利だと思いました。
執筆時点(2017-06-07)でap-southeast-2リージョンでは、コンソールから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は最新の利用可能なイメージではなく、最新の2番目または3番目のイメージを推奨しています。ここでどの基準/ヒューリスティックを使用しているかわかりません。
buntu Cloud Portal には、利用可能な公式AMIの 包括的なリスト があります。 Canonicalの公式EC2 AMIリリースに関する追加リソースは、 buntuヘルプ:EC2 Starts Guide と、Canonicalが buntu EC2 Images でリリースしたすべてのAMIの未加工ディレクトリにあります。