Amazon Linuxの最新AMIを取得する
概要
Amazon Linuxの最新AMIを取得する方法について説明します。AMIのIDはリージョンごとに異なるため、利用しているリージョンで有効なAMIが取得できる方法を考えます。
事前準備
- Python 3.6.4
- boto3 1.5.35
次のようなコードで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']