aws cli search for latest ami
This simple oneliner gets you the latest ami in a given region for a specific search term.
# get the latest ecs-optimized amazon ami in eu-west-1
aws ec2 describe-images --region eu-west-1 --owners amazon --filters "Name=name,Values=*amazon-ecs-optimized" "Name=architecture,Values=x86_64" "Name=architecture,Values=x86_64" --query 'sort_by(Images, &CreationDate)[-1].ImageId'
So lets break it down to give you what you need to get your favorite ami.
# Get the full ami list for name search term "*amazon-ecs-optimized"
aws ec2 describe-images --region eu-west-1 --owners amazon --filters "Name=name,Values=*amazon-ecs-optimized" "Name=architecture,Values=x86_64"
# this is searching for just the name, you could of course replace or expand this with other atributes like:
aws ec2 describe-images --region eu-west-1 --owners amazon --filters "Name=name,Values=*amazon-ecs-optimized" "Name=architecture,Values=x86_64" "Name=block-device-mapping.volume-type,Values=gp2"
the full filter atributes list can be found in the aws docs
Now lets take a look at the structure of the returned json
aws ec2 describe-images --region eu-west-1 --owners amazon --filters "Name=name,Values=*amazon-ecs-optimized" "Name=architecture,Values=x86_64" | head
# example output:
{
"Images": [
{
"Architecture": "x86_64",
"CreationDate": "2017-11-10T19:59:12.000Z",
"ImageId": "ami-014ae578",
"ImageLocation": "amazon/amzn-ami-2017.09.b-amazon-ecs-optimized",
"ImageType": "machine",
"Public": true,
"OwnerId": "591542846629",
This returnes an Images array with your results (ami with all the juicy metadata)
I use the built in query tool to grok this data (the query is written in JMESPath), to get at the object that we want we take the following steps:
- sort an array
- which one: the Images array
- what to sort that data by the value of CreationDate
- return the last object
- retrieve .ImageId from the returned object
return objects from the Images array sorted by value of date
--query 'sort_by(Images, &CreationDate)'
just get the -1 object (-1 last, 0 first)
--query 'sort_by(Images, &CreationDate)[-1]'
get the ami id from the returned object
--query 'sort_by(Images, &CreationDate)[-1].ImageId'
Testing these query’s can be done over here: JMESPath
Now put all this together and you get:
$ aws ec2 describe-images --owners amazon --filters "Name=name,Values=*amazon-ecs-optimized" "Name=architecture,Values=x86_64" --query 'sort_by(Images, &CreationDate)[-1].ImageId'
"ami-0af844a965e5738db"
Elastic beanstalk latest PHP SolutionStackName finder
aws --region us-east-2 elasticbeanstalk list-available-solution-stacks --query 'SolutionStackDetails[?contains(SolutionStackName, `PHP`) == `true`].[SolutionStackName][-1]'
Figuring this out took me way too long so thought I’d share it here
More examples I found in a blogpost of OpenSource Connections