Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Find the most recent Ubuntu AMI using aws-cli (or any other AMI for that matter)
#!/bin/sh
# Use AWS CLI to get the most recent version of an AMI that
# matches certain criteria. Has obvious uses. Made possible via
# --query, --output text, and the fact that RFC3339 datetime
# fields are easily sortable.
export AWS_DEFAULT_REGION=us-east-1
aws ec2 describe-images \
--filters Name=name,Values=ubuntu/images/hvm-ssd/ubuntu-trusty-14.04-amd64* \
--query 'Images[*].[ImageId,CreationDate]' --output text \
| sort -k2 -r \
| head -n1
@jamesonwilliams

This comment has been minimized.

Copy link

@jamesonwilliams jamesonwilliams commented Mar 19, 2017

Nice!

@arpat

This comment has been minimized.

Copy link

@arpat arpat commented Sep 28, 2017

Thanks!

@visokoo

This comment has been minimized.

Copy link

@visokoo visokoo commented Oct 2, 2017

You're awesome, thank you!

@blckct

This comment has been minimized.

Copy link

@blckct blckct commented Mar 28, 2018

Piping it to cut -f 1 will give only the ami name :)

@michaelajr

This comment has been minimized.

Copy link

@michaelajr michaelajr commented Apr 27, 2018

Might want to limit that to the Ubuntu Cloud account. Can also use sort_by in the query to get the most recent.

aws ec2 describe-images \
    --owners 099720109477 \
    --filters Name=name,Values=ubuntu/images/hvm-ssd/ubuntu-xenial-16.04-amd64-server-* \
    --query 'sort_by(Images,&CreationDate)[-1].ImageId'
@ccsalway

This comment has been minimized.

Copy link

@ccsalway ccsalway commented Apr 28, 2018

@michaelajr perfect, thanks.

@aggy07

This comment has been minimized.

Copy link

@aggy07 aggy07 commented Jul 11, 2018

Is there any way we can get the Latest AMI for all the regions instead of a specific one?

@sunfriendli

This comment has been minimized.

Copy link

@sunfriendli sunfriendli commented Jul 26, 2018

Is there a much more canonical filter to use,instead of "Name=name"?In case someone create a ami with similar name.

@phozzy

This comment has been minimized.

Copy link

@phozzy phozzy commented Aug 24, 2018

Is it possible to integrate that into cloudformation template?

@xgames330

This comment has been minimized.

Copy link

@xgames330 xgames330 commented Oct 24, 2018

Good Find!

Revised to capture all Ubuntu Images:
aws ec2 describe-images --filters "Name=name,Values=ubuntu*" --query "sort_by(Images, &CreationDate)[].Name"

@aggy07 Run command against region that you want, and it will give you the corresponding AMI for that region. Commands must be run against a specific region, no way to list all AMI's in all regions at once.

@vgallissot

This comment has been minimized.

Copy link

@vgallissot vgallissot commented Nov 12, 2018

This is good, thanks!!

@coolblueray

This comment has been minimized.

Copy link

@coolblueray coolblueray commented Mar 26, 2019

With Image Name and AMI ID together,
aws ec2 describe-images --filters "Name=name,Values=ubuntu*" --query "sort_by(Images, &CreationDate)[].[Name, ImageId]"

BTW, Thanks to All of you for posting your comments on this. It helped me!

@nlowe

This comment has been minimized.

Copy link

@nlowe nlowe commented Jun 28, 2019

You can also do all of the sorting and filtering in the CLI itself, which should be portable between Windows / Mac / Linux:

$ aws ec2 describe-images --filters "Name=name,Values=amazon-eks-node-1.11*" --query 'reverse(sort_by(Images, &CreationDate))[0]'
{
    "Architecture": "x86_64",
    "CreationDate": "2019-06-15T06:31:01.000Z",
    "ImageId": "ami-053e2ac42d872cc20",
    "ImageLocation": "amazon/amazon-eks-node-1.11-v20190614",
    "ImageType": "machine",
    "Public": true,
    "OwnerId": "602401143452",
    "State": "available",
    "BlockDeviceMappings": [
        {
            "DeviceName": "/dev/xvda",
            "Ebs": {
                "DeleteOnTermination": true,
                "SnapshotId": "snap-06620aa1d7ab94987",
                "VolumeSize": 20,
                "VolumeType": "gp2",
                "Encrypted": false
            }
        }
    ],
    "Description": "EKS Kubernetes Worker AMI with AmazonLinux2 image (k8s: 1.11.9, docker:18.06)",
    "EnaSupport": true,
    "Hypervisor": "xen",
    "ImageOwnerAlias": "amazon",
    "Name": "amazon-eks-node-1.11-v20190614",
    "RootDeviceName": "/dev/xvda",
    "RootDeviceType": "ebs",
    "SriovNetSupport": "simple",
    "VirtualizationType": "hvm"
}
@RaghavendraP

This comment has been minimized.

Copy link

@RaghavendraP RaghavendraP commented Mar 5, 2020

Is there any way we can get the Latest AMI for all the regions instead of a specific one?

in a bash environment:

for region in `aws ec2 describe-regions --output text | cut -f4`
do
	echo "region: $region, image: ubuntu-xenial-16.04*"
	aws ec2 describe-images --filters "Name=name,Values=ubuntu/images/hvm-ssd/ubuntu-xenial-16.04*" \
        --query 'sort_by(Images, &CreationDate)[-1].[CreationDate,Name,ImageId]' --region $region \
        --output text --owners 099720109477
done
@sween

This comment has been minimized.

Copy link

@sween sween commented Apr 16, 2020

Thanks! bacon saver.

@emmanuelnk

This comment has been minimized.

Copy link

@emmanuelnk emmanuelnk commented Nov 20, 2020

Get the latest IMAGE as seen in the quick start instance screen on the AWS console:

In my case I want the latest ubuntu 20 server arm64 image (Take note of the [-1:] -- return the last element of the array). It will have the image name and ami-id.

aws ec2 describe-images \
--filters "Name=name,Values=ubuntu*20.04-arm64-server*" \
--query "sort_by(Images, &CreationDate)[-1:].[Name, ImageId]"
@themobileprof

This comment has been minimized.

Copy link

@themobileprof themobileprof commented May 24, 2021

To get the most recent Bionic 18.04 from Canonical themselves, I had to do

aws ec2 describe-images --filters "Name=name,Values=ubuntu/images/hvm-ssd/ubuntu-bionic*" --query "sort_by(Images, &CreationDate)[-1].[Name, ImageId]" --owners 099720109477

Thanks!

@marcelo321

This comment has been minimized.

Copy link

@marcelo321 marcelo321 commented May 29, 2021

I am comparing the output I get from:

aws ec2 describe-images \
--filters "Name=name,Values=ubuntu*20.04-arm64-server*" \
--query "sort_by(Images, &CreationDate)[-1:].[Name, ImageId]"

And the image-id is not the same in the quick-start interface, in the same region

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment