17

With a json output like :

{
   "Functions":[
      {
         "CodeSha256":"7NBvXXacp9x3aK3cKaI=",
         "FunctionName":"function_1",
         "FunctionArn":"arn:aws:lambda:eu-west-1:1111:function:function_1",
         "LastModified":"2015-02-09T11:35:31.084+0000"
      },
      {
         "CodeSha256":"7NBvXXacKaI=",
         "FunctionName":"function_3",
         "FunctionArn":"arn:aws:lambda:eu-west-1:1111:function:function_3",
         "LastModified":"2015-03-09T11:35:31.084+0000"
      },
      {
         "CodeSha256":"7NBvXXacaK3cKaI=",
         "FunctionName":"function_2",
         "FunctionArn":"arn:aws:lambda:eu-west-1:1111:function:function_2",
         "LastModified":"2015-02-11T11:35:31.084+0000"
      }
   ]
}

How can I return the two most recent Functions sorted by LastModified?

dreftymac
  • 31,404
  • 26
  • 119
  • 182
Mio
  • 1,412
  • 2
  • 19
  • 41

2 Answers2

30

You need to use reverse and sort_by first. Then add [:2] for only two record :

aws lambda list-functions --query "reverse(sort_by(Functions, &LastModified))[:2]"
Mio
  • 1,412
  • 2
  • 19
  • 41
  • 2
    It doesn't work in all case because jmespath consider this: `"215-02-09T11:35:31.084+0000" > "2015-02-09T11:35:31.084+0000"`return `true` so you need to have date with the same amount of digit to apply the method above. – bosskay972 Aug 25 '19 at 10:56
  • 3
    @bosskay972 Yep, coming to this late, but won't ISO dates all have the same number of characters, hence, for this question, the answer is correct? The crux of what you appear to be saying is that jmespath sorts by string or number only. It doesn't sort by date, as such but with ISO date format string sorting works pretty well. – smcstewart Sep 10 '19 at 13:16
9

If you need top 1 last modified, whose name starts with 'abc'

--query "reverse(sort_by([?starts_with(name, 'abc')], &properties.lastModified))[:1]"
Syscall
  • 19,327
  • 10
  • 37
  • 52
Ramanujam Allam
  • 1,300
  • 12
  • 11