Создавайте повторяющиеся образы AWS AMI с помощью скрипта для использования в Jenkins.

Я нахожусь в процессе написания задания Jenkins Pipeline, которое создаст резервную копию Jenkins в AWS AMI, а затем обновит плагины. Я могу создать AMI без проблем, но в идеале я хотел бы хранить их ограниченное количество, удаляя самые старые, чтобы сохранить, скажем, три одновременно.

Это двусторонний вопрос;

  1. Есть ли способ захвата и сортировки AMI с помощью Groovy? (или сценарий оболочки, который затем можно интегрировать в Groovy.) У нас хранятся десятки AMI, поэтому мне нужно иметь возможность просеивать только те, которые названы определенным образом, а затем сортировать их по дате, а затем по номеру версии. Я представляю систему именования в соответствии с строками yyyymmdd_jenkinsbkup_##, где ## — это номер версии (01, 02 и т. д.)

  2. Если да, могу ли я удалить самую старую версию и перейти к следующему номеру версии при создании следующего AMI? Скажем, у меня есть следующие три сохраненных

    20161201_jenkinsbkup_08
    20161204_jenkinsbkup_09
    20161212_jenkinsbkup_10
    

    можно ли тогда как-то удалить 20161201_jenkinsbkup_08 и создать 20161215_jenkinsbkup_11

Я новичок в AWS, но в своем сценарии я зашел так далеко, чтобы создать образ. Обратите внимание, что это выполняется внутри более крупного скрипта конвейера.

sh "aws ec2 create-image --instance-id i-############# --name 'something to create the requested format' --region us-east-1 --no-reboot"

person Alex    schedule 15.12.2016    source источник


Ответы (1)


Вы можете сортировать AMI, предоставляя фильтры для ec2:describeImages.
В вашем примере вы, вероятно, отфильтруете по имени, затем отсортируете их по дате (я не добавляю ее в имя, потому что createdDate уже является свойством), создадите моментальный снимок самого нового, а затем удалите оба ami и снимок самого старого. Возможно, вы захотите пометить снимок с идентификатором ami перед тем, как удалить его, чтобы вы могли очистить его, если вас прервали, прежде чем вам удастся его удалить, поскольку снимки нельзя удалить, если ami существует, и не будет показать связь с AMI, если он ушел.

Я не знаю, как это сделать в groovy от jenkins, но должен быть какой-то способ выполнения команд ec2, возможно, java sdk, если не groovy. Или, если вы хотите, вы можете реализовать это в лямбде и просто вызвать лямбду, если это лучше. Это было бы привлекательно, если бы вы хотели делать моментальные снимки в другое время или для других систем в дополнение к моментальному снимку перед обновлением.

person Daniel Farrell    schedule 17.12.2016
comment
Все еще борюсь с этим, но я хотел отдать вам должное за то, что вы повернули меня к описаниям изображений; Спасибо за помощь! - person Alex; 21.12.2016