O Amazon Elastic Block Store (EBS) é um serviço que fornece armazenamento para instâncias Amazon EC2. O EBS é onde cada volume em suas instâncias EC2 é executado. Quando você depende de um serviço para executar infraestrutura importante, é prudente garantir que os dados sejam copiados. Neste post do blog, aprenda como gerenciar e automatizar snapshots do EC2 usando a linguagem de script PowerShell.
Cada volume EBS conectado a uma instância EC2 pode ser copiado por meio de um snapshot do EBS. Cada snapshot pode ser criado de duas maneiras; um snapshot completo ou incremental. Bem, tecnicamente ambos, mas… só me acompanhe nessa.
Ao criar o primeiro backup de snapshot para uma instância EC2, é criado um backup do volume inteiro. Quando snapshots subsequentes são criados, apenas os dados no nível de armazenamento do bloco que foram alterados desde o último snapshot são salvos. No entanto, ao contrário dos backups incrementais típicos, já que os snapshots podem ser encadeados, ao restaurar um snapshot, todos os dados para aquele volume são restaurados, tornando-o semelhante a um backup completo.
Os snapshots podem ocorrer de forma assíncrona, o que significa que os snapshots podem estar no processo de criação em paralelo. Quando iniciado, um snapshot entra em uma fase pendente até que todos os blocos necessários sejam copiados para a Amazon S3, onde todos os snapshots do EBS são armazenados.
Usando o PowerShell para Criar Snapshots AWS EC2
Existem algumas maneiras diferentes de a AWS permitir que você gerencie instantâneos do EBS. Você pode usar o Console de Gerenciamento da AWS, a CLI da AWS, o PowerShell ou as APIs diretamente, se preferir. Neste artigo, vamos usar o PowerShell, já que o módulo AWSPowerShell oferece ótimo suporte para gerenciar instantâneos do EBS com comandos do PowerShell.
Pré-requisitos
Antes de avançarmos muito, vou presumir que você tenha alguns pré-requisitos para aproveitar ao máximo este tutorial. Você vai precisar de:
- Uma conta da AWS
- Uma instância EC2 com um volume anexado
- Autenticado com o usuário root ou um usuário IAM com permissão para CreateSnapshot (arn:aws:ec2:região::snapshot/*)
Depois de ter todos esses pré-requisitos em ordem, estamos prontos para começar!
Encontrar Instantâneos EC2 Existente
Uma das primeiras tarefas que faremos é descobrir se já existem instantâneos lá fora. Para descobrir isso, usamos o comando Get-EC2Snapshot
. Este é o comando que procurará por quaisquer instantâneos que já tenham sido criados e os exibirá no console do PowerShell.
Você notará que os instantâneos EC2 da AWS que aparecem não são para sua instância EC2. Esses são todos instantâneos que foram compartilhados com você e estão disponíveis para serem restaurados em suas instâncias EC2. Para descobrir todos os instantâneos que vieram de suas instâncias EC2, use o parâmetro OwnerId
com o valor self
.
Criando um Novo Instantâneo EBS
Assumindo que você já tenha uma instância EC2 criada, agora você pode criar um snapshot. Você pode criar novos snapshots usando o comando New-EC2Snapshot
, mas primeiro, você precisará reunir o ID do volume para cada volume que deseja incluir no snapshot. Para fazer isso, primeiro precisamos encontrar o ID da instância EC2 à qual o volume está anexado.
Depois de saber o ID da instância EC2, será necessário usá-lo para localizar os volumes. Para encontrar todos os volumes anexados à instância EC2, você usará o comando Get-EC2Volume
e filtrará a saída para incluir apenas os volumes com um ID de instância anexado igual ao que estamos procurando.
Agora que temos os volumes, a AWS recomenda desligar a instância ou pelo menos desmontar o volume. Vamos desligar a instância.
Agora podemos iterar sobre cada volume e passar o ID desse volume como parâmetro VolumeId
no comando New-EC2Snapshot
. Quando isso acontecer, você notará que o snapshot entrará no estado de pendente.
Você pode confirmar que o snapshot foi concluído executando Get-EC2Snapshot
novamente e verificando se o Estado agora é concluído.
Atribuição de Tags
Se você tiver muitos snapshots para gerenciar, pode ser difícil manter tudo organizado. Para classificar snapshots e categorizá-los para cada descoberta, você também pode atribuir tags a eles. Tags são uma parte ubíqua do EC2 e podem ser usadas em seus snapshots do EBS.
Você pode atribuir tags durante a criação do snapshot ou posteriormente. Para atribuir tags durante a criação do snapshot, use o parâmetro TagSpecification
no New-EC2Snapshot
.
Por exemplo, talvez eu queira marcar esse snapshot do AWS EC2 que acabei de tirar antes de fazer uma alteração de produção. Eu gostaria de criar uma tag chamada Stage e atribuí-la como Dev. Para fazer isso, posso criar um objeto TagSpecification, atribuir um ou mais objetos Tag à propriedade Tags e, em seguida, definir o tipo de recurso a que essa tag será anexada.
Depois de criar o objeto TagSpecification, posso passá-lo para New-EC2Snapshot
.
Criando uma nova AMI a partir de snapshots
Outra funcionalidade legal dos snapshots é que você pode criar uma nova imagem (AMI) a partir de um snapshot. Se você tiver um snapshot do volume raiz de uma instância EC2 somente Linux, você pode facilmente criar uma nova AMI a partir desse snapshot do volume. Digamos que eu queira criar uma nova imagem a partir do snapshot que acabei de criar. Posso fazer isso usando o comando New-EC2Image
.
I’ll first need to capture the snapshot ID.
Em seguida, posso passar esse ID como um hashtable para o parâmetro BlockDeviceMapping
em New-EC2Image
.
Removendo snapshots do AWS EC2
Se já terminamos com os snapshots, agora podemos removê-los. Fazer isso é fácil. Basta redirecionar a instância retornada por Get-EC2Snapshot
para Remove-EC2Snapshot
. No entanto, você pode encontrar esse erro se uma AMI estiver em uso.
Nesse caso, a AMI está registrada e você deve desregistre-a primeiro usando o comando Unregister-EC2Image
.
Resumo
O PowerShell permite que você gerencie todos os aspectos dos snapshots do EBS. Se os cenários que abordamos aqui não atenderam ao que você precisa fazer, sugiro dar uma olhada em todos os comandos de snapshot do EC2 disponíveis executando Get-Command -Noun *ec2snapshot* -Module AWSPowerShell
. Isso lhe dará uma boa ideia do que é possível com o PowerShell e os snapshots do EC2 (EBS).