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

commented Mar 19, 2017

Nice!

@arpat

This comment has been minimized.

Copy link

commented Sep 28, 2017

Thanks!

@visokoo

This comment has been minimized.

Copy link

commented Oct 2, 2017

You're awesome, thank you!

@blckct

This comment has been minimized.

Copy link

commented Mar 28, 2018

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

@michaelajr

This comment has been minimized.

Copy link

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

commented Apr 28, 2018

@michaelajr perfect, thanks.

@aggy07

This comment has been minimized.

Copy link

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

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

commented Aug 24, 2018

Is it possible to integrate that into cloudformation template?

@xgames330

This comment has been minimized.

Copy link

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

commented Nov 12, 2018

This is good, thanks!!

@coolblueray

This comment has been minimized.

Copy link

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

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"
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.