Amazon Elastic Block Store (EBS) – это сервис, предоставляющий хранилище для экземпляров Amazon EC2. EBS – это то, на чем работает каждый том на ваших экземплярах EC2. Когда вы полагаетесь на сервис для выполнения важной инфраструктуры, мудро обеспечить резервное копирование данных. В этом блоге узнайте, как управлять и автоматизировать снимки EC2 с использованием языка сценариев PowerShell.
Каждый том EBS, подключенный к экземпляру EC2, может быть резервным копированием с использованием снимка EBS. Каждый снимок можно создать одним из двух способов: полным или инкрементальным. Ну, технически оба, но… просто идите со мной на это.
Когда создается первая резервная копия снимка для экземпляра EC2, создается резервная копия всего тома. При создании последующих снимков сохраняются только данные на уровне блочного хранилища, которые изменились с момента последнего снимка. Однако, в отличие от типичных инкрементальных резервных копий в точке времени, поскольку снимки могут быть цеплены, при восстановлении снимка восстанавливаются все данные для этого тома, что делает его подобным полному резервному копированию.
Снимки могут происходить асинхронно, что означает, что снимки могут находиться в процессе создания параллельно. Когда начинается, снимок входит в фазу ожидания, пока все необходимые блоки не будут скопированы в Amazon S3, где хранятся все снимки EBS.
Использование PowerShell для создания снимков AWS EC2
Есть несколько различных способов, которые позволяют управлять снимками EBS в AWS. Вы можете использовать консоль управления AWS, AWS CLI, PowerShell или API напрямую, если хотите. В этой статье мы будем использовать PowerShell, поскольку модуль AWSPowerShell отлично поддерживает управление снимками EBS с помощью команд PowerShell.
Предварительные требования
Прежде чем мы начнем, я предполагаю, что у вас есть несколько предварительных требований, чтобы получить максимальную отдачу от этого учебного пособия. Вам понадобится:
- Учетная запись AWS
- Экземпляр EC2 с прикрепленным томом
- Аутентификация с корневым пользователем или IAM-пользователем с разрешением CreateSnapshot (arn:aws:ec2:region::snapshot/*)
Как только у вас все эти предварительные требования в порядке, мы готовы начать!
Поиск существующих снимков EC2
Одним из первых заданий, которые мы сделаем, будет выяснить, есть ли уже какие-либо существующие снимки. Для этого мы используем команду Get-EC2Snapshot
. Это команда, которая будет искать любые снимки, которые уже были созданы, и выведет их в консоль PowerShell.
Вы заметите, что снимки AWS EC2, которые появляются, на самом деле не являются снимками для вашего экземпляра EC2. Это все снимки, которые были вам предоставлены и доступны для восстановления на ваши экземпляры EC2. Чтобы обнаружить все снимки, которые поступили из ваших экземпляров EC2, используйте параметр OwnerId
со значением self
.
Создание нового снимка EBS
Предполагая, что у вас уже создан экземпляр EC2, вы можете теперь создать снимок. Вы можете создавать новые снимки с помощью команды New-EC2Snapshot
, но сначала вам нужно собрать идентификатор тома для каждого тома, который вы хотели бы сделать снимок. Для этого сначала нам нужно найти идентификатор экземпляра EC2, к которому подключен том.
Как только вы узнаете идентификатор экземпляра EC2, вам нужно будет использовать его, чтобы найти тома. Чтобы найти все тома, подключенные к экземпляру EC2, вы будете использовать команду Get-EC2Volume
и фильтровать вывод только томами с присоединенным идентификатором экземпляра, который мы ищем.
Теперь, когда у нас есть тома, AWS рекомендует выключить экземпляр или хотя бы снять том с монтировки. Мы продолжим и выключим экземпляр.
Теперь мы можем перебрать каждый том и передать его идентификатор в параметр VolumeId
команды New-EC2Snapshot
. Как только это произойдет, вы заметите, что снимок перейдет в состояние ожидание.
Вы можете подтвердить завершение снимка, запустив Get-EC2Snapshot
еще раз и подтвердив, что Состояние теперь завершено.
Назначение тегов
Если у вас много снимков для управления, их может быть трудно отслеживать все. Чтобы упорядочить снимки и классифицировать их для каждого открытия, вы также можете назначить им теги. Теги – это неотъемлемая часть EC2 и могут использоваться с вашими снимками EBS.
Вы можете назначить теги при создании снимка или после. Чтобы назначить теги при создании снимка, используйте параметр TagSpecification
в команде New-EC2Snapshot
.
Например, возможно, я хочу пометить этот снимок AWS EC2, который я только что сделал перед внесением изменений в производство. Я бы хотел создать метку с именем Stage и назначить ей значение Dev. Для этого я могу создать объект TagSpecification, присвоить один или несколько объектов Tag свойству Tags, а затем определить тип ресурса, к которому будет прикреплена эта метка.
После создания объекта TagSpecification я могу передать его в New-EC2Snapshot
.
Создание нового AMI из снимков
Еще одна интересная возможность снимков заключается в том, что вы можете создать совершенно новый образ (AMI) из снимка. Если у вас есть снимок корневого тома экземпляра EC2 только для Linux, вы можете легко создать совершенно новый AMI из этого снимка тома. Допустим, я хочу создать новый образ из только что созданного снимка. Я могу сделать это с помощью команды New-EC2Image
.
I’ll first need to capture the snapshot ID.
Затем я могу передать этот идентификатор в виде таблицы хэшей параметру BlockDeviceMapping
на New-EC2Image
.
Удаление снимков AWS EC2
Если мы закончили с снимком, мы можем их удалить. Это легко сделать. Просто направьте экземпляр, возвращенный Get-EC2Snapshot
, в Remove-EC2Snapshot
. Однако вы можете столкнуться с этой ошибкой, если AMI используется.
В этом случае AMI зарегистрирован, и сначала вы должны отменить его регистрацию с помощью команды Unregister-EC2Image
.
Итог
PowerShell позволяет управлять каждым аспектом снимков EBS. Если сценарии, рассмотренные здесь, не соответствуют вашим потребностям, я предлагаю взглянуть на все доступные команды снимков EC2, запустив Get-Command -Noun *ec2snapshot* -Module AWSPowerShell
. Это даст вам хорошее представление о том, что возможно с PowerShell и снимками EC2 (EBS).