Thank you for the PR, Kushal. I will soon merge it.
I'm a little confused right now. When my CI build was failing the day before yesterday because it didn't find an AMI for 21, I looked for it manually and didn't find any. I can see ami-15326925 now but it shows a creation date of February 2, 2015 at 6:54:05 PM UTC-8. The only possible explanation is that the image was published under a new, slightly different name.
Anyways, there's an AMI for 21 now and my immediate problem is solved. Thanks everyone for helping out!
As far as archival of AMIs for EOLed releases is concerned, I would be ok if the AMI ID changed as long as it is documented, how I would get to the archived AMIs. I don't match AMIs by ID but by name because I want to take advantage of updated AMIs for a release while it is actively supported. This seems like a contradiction to my reproducibility argument, but I distinguish between "soft" and "hard" reproducibility. For soft reproducibility the base image can have minor changes, and so can the code that further provisions the VM. For hard reproducibility we take a custom image of the provisioned VM.