speg03の雑記帳

主に未来の自分のために試したことなどを記録しています

Amazon Linuxの最新AMIを取得する

概要

Amazon Linuxの最新AMIを取得する方法について説明します。AMIのIDはリージョンごとに異なるため、利用しているリージョンで有効なAMIが取得できる方法を考えます。

事前準備

次のようなコードでEC2のAPIにアクセスできる状態とします。

import boto3

session = boto3.session.Session()
ec2 = session.client('ec2')

実験

現時点で、Amazon Linuxの最新AMIはamzn-ami-hvm-2017.09.1.20180115-x86_64-gp2という名前のようです。(東京リージョンではID ami-ceafcba8です)

query = 'amzn-ami-hvm-2017.09.1.20180115-x86_64-gp2'
response = ec2.describe_images(Filters=[{'Name': 'name', 'Values': [query]}])
response['Images'][0]
{'Architecture': 'x86_64',
 'BlockDeviceMappings': [{'DeviceName': '/dev/xvda',
   'Ebs': {'DeleteOnTermination': True,
    'Encrypted': False,
    'SnapshotId': 'snap-0d38721ac6a1fdcc9',
    'VolumeSize': 8,
    'VolumeType': 'gp2'}}],
 'CreationDate': '2018-01-15T19:13:56.000Z',
 'Description': 'Amazon Linux AMI 2017.09.1.20180115 x86_64 HVM GP2',
 'EnaSupport': True,
 'Hypervisor': 'xen',
 'ImageId': 'ami-ceafcba8',
 'ImageLocation': 'amazon/amzn-ami-hvm-2017.09.1.20180115-x86_64-gp2',
 'ImageOwnerAlias': 'amazon',
 'ImageType': 'machine',
 'Name': 'amzn-ami-hvm-2017.09.1.20180115-x86_64-gp2',
 'OwnerId': '137112412989',
 'Public': True,
 'RootDeviceName': '/dev/xvda',
 'RootDeviceType': 'ebs',
 'SriovNetSupport': 'simple',
 'State': 'available',
 'VirtualizationType': 'hvm'}

フィルタリングを使って検索してみます。 https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/Using_Filtering.html

query = 'amzn-ami-hvm-????.??.?.????????-x86_64-gp2'
response = ec2.describe_images(
    Filters=[{'Name': 'name', 'Values': [query]}],
    Owners=['amazon'])

# 作成日の降順でソート
images = sorted(response['Images'], key=lambda img: img['CreationDate'], reverse=True)

# AMI名だけのリストで表示
[img['Name'] for img in images]
['amzn-ami-hvm-2017.09.1.20180115-x86_64-gp2',
 'amzn-ami-hvm-2017.09.1.20180108-x86_64-gp2',
 'amzn-ami-hvm-2017.09.1.20180103-x86_64-gp2',
 'amzn-ami-hvm-2017.09.1.20171120-x86_64-gp2',
 'amzn-ami-hvm-2017.09.1.20171103-x86_64-gp2',
 'amzn-ami-hvm-2017.09.0.20170930-x86_64-gp2',
 'amzn-ami-hvm-2017.03.1.20170812-x86_64-gp2',
 'amzn-ami-hvm-2017.03.1.20170623-x86_64-gp2',
 'amzn-ami-hvm-2017.03.1.20170617-x86_64-gp2',
 'amzn-ami-hvm-2017.03.0.20170417-x86_64-gp2',
 'amzn-ami-hvm-2017.03.0.20170401-x86_64-gp2',
 'amzn-ami-hvm-2016.09.1.20170119-x86_64-gp2',
 'amzn-ami-hvm-2016.09.1.20161221-x86_64-gp2',
 'amzn-ami-hvm-2016.09.0.20161028-x86_64-gp2',
 'amzn-ami-hvm-2016.09.0.20160923-x86_64-gp2']