O Amazon Elastic Block Store (EBS) é um serviço que fornece armazenamento para instâncias Amazon EC2. O EBS é o que cada volume em suas instâncias EC2 utiliza. Quando você depende de um serviço para executar infraestrutura importante, é sábio garantir que os dados estejam sendo 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 através de um snapshot EBS. Cada snapshot pode ser criado de duas maneiras; um snapshot completo ou incremental. Bem, tecnicamente ambos, mas… apenas siga comigo nesta.
Ao criar o primeiro backup de snapshot para uma instância EC2, ele cria um backup de todo o volume. 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 de backups incrementais típicos no ponto no tempo, como 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.
Snapshots podem ocorrer de forma assíncrona, o que significa que snapshots podem estar em 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 EBS são armazenados.
Usando o PowerShell para Criar Snapshots do AWS EC2
Existem algumas maneiras diferentes pelas quais a AWS permite que você gerencie snapshots do EBS. Você pode usar o Console de Gerenciamento da AWS, a CLI da AWS, PowerShell ou as APIs diretamente, se preferir. Neste artigo, vamos usar o PowerShell, já que o módulo AWSPowerShell oferece ótimo suporte para gerenciar snapshots do EBS com comandos do PowerShell.
Pré-requisitos
Antes de avançarmos muito, haverá alguns pré-requisitos que presumirei que você tenha 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 CreateSnapshot (arn:aws:ec2:region::snapshot/*)
Depois de ter todos esses pré-requisitos em ordem, estamos prontos para prosseguir!
Encontrando Snapshots Existentes do EC2
Uma das primeiras tarefas que faremos é descobrir se já existem snapshots por aí. Para descobrir isso, usamos o comando Get-EC2Snapshot
. Este é o comando que irá procurar por quaisquer snapshots que já tenham sido criados e irá mostrá-los no console do PowerShell.
Você vai notar que os snapshots do EC2 da AWS que aparecem não são para sua instância EC2. Esses são todos snapshots que foram compartilhados com você e estão disponíveis para você restaurar em suas instâncias EC2. Para descobrir todos os snapshots que vieram de suas instâncias EC2, use o parâmetro OwnerId
com o valor self
.
Criando um Novo Snapshot do 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 antes, será necessário reunir o ID do volume para cada volume que você deseja snapshot. Para fazer isso, primeiro precisamos encontrar o ID da instância EC2 à qual o volume está anexado.
Depois de conhecer o ID da instância EC2, será necessário usá-lo para encontrar os volumes. Para encontrar todos os volumes anexados à instância EC2, utilize o comando Get-EC2Volume
e filtre a saída apenas para os volumes com um ID de instância anexado 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 um e passar o ID do volume para o parâmetro VolumeId
no comando New-EC2Snapshot
. Quando isso acontecer, você notará que o snapshot entrará em um estado de pendente.
Você pode confirmar que o snapshot foi concluído executando Get-EC2Snapshot
novamente e verificando que o Estado agora é concluído.
Atribuindo Tags
Se você tiver muitos snapshots para gerenciar, pode ser difícil mantê-los organizados. Para classificar e categorizar os snapshots 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 EBS.
Você pode atribuir tags durante a criação do snapshot ou depois. Para atribuir tags durante a criação do snapshot, use o parâmetro TagSpecification
no New-EC2Snapshot
.
Por exemplo, talvez eu queira marcar este snapshot do AWS EC2 que acabei de tirar antes de fazer uma mudança de produção. 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 então definir o tipo de recurso a que esta tag será anexada.
Depois de criar o objeto TagSpecification, posso passá-lo para New-EC2Snapshot
.
Criando uma nova AMI a partir de Snapshots
Outro recurso interessante 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 de 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 o snapshot, agora podemos removê-los. Fazer isso é fácil. Basta encaminhar a instância retornada por Get-EC2Snapshot
para Remove-EC2Snapshot
. No entanto, você pode encontrar este erro se uma AMI estiver em uso.
Neste caso, a AMI está registrada e você deve primeiro removê-la do registro usando o comando Unregister-EC2Image
.
Resumo
O PowerShell permite que você gerencie todos os aspectos das snapshots do EBS. Se os cenários que cobrimos aqui não atenderem 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 as snapshots do EC2 (EBS).