Criando backups no OCI de hora em hora

Já se perguntou como gerar um backup de hora em hora dos seus boot/block volumes? Talvez você já tenha pensando em criar uma politica de backup customizada para isso e tenha se deparado com a seguinte limitação:

Caso na sua politica de backup já exista um agendamento diário, não é possível configurar um outro e um disco (até o momento) só pode ter uma politica atribuída a ele.

Sendo assim apresento aqui algumas opções usando o bom e velho oci cli.

Backup sob demanda

A sintaxe do comando é bem simples, bastando passar para o comando o ocid do disco a ser feito o backup:

oci bv backup create [OPTIONS]

E para boot volume você deve usar:

oci bv boot-volume-backup create [OPTIONS]

Além disso, vamos usar a opção –type com o valor INCREMENTAL para que sempre seja feito um backup da forma incremental, dessa forma economizamos o espaço consumido pelo nosso backup.

Daqui pra frente mostro como fazer backup de Block Volumes, caso deseje fazer de Boot Volumes, basta alterar o comando para bv boot-volume-backup XXXX.

#!/bin/bash
##This script creates an backup on demand
##How to use: ./bkp_on_demand.sh VOL_OCID BKP_NAME


export OCI_CLI_AUTH=instance_principal
export DATA=$(date +"%d-%m-%y")
export HORA=$(date +"%H%M")

oci bv backup create --volume-id $1 --type incremental --display-name $2-$DATA --freeform-tags '{"Hora": "'"$HORA"'"}'

A limitação desse método é que com ele (ainda) não é possível definir a retenção do backup, você precisa apagar os backups de forma “manual” executando o comando abaixo e passando o ocid do backup, o que torna seu gerenciamento um pouco mais chato:

oci bv boot-volume-backup delete OCID

Você pode fazer uma gambiarra solução de contorno que é listar todos os backups que possuam uma data X no nome e passar o ocid o para o comando delete:

#!/bin/bash
##This script delete an backup
##How to use: ./del_bkp_on_demand.sh COMPARTIMENT BKP_NAME


export OCI_CLI_AUTH=instance_principal
export RETENCAO=$(date +"%d-%m-%y" -d  "1 day ago")

oci bv backup list -c $1 --all --display-name $2-$RETENCAO --lifecycle-state AVAILABLE | jq -r '.data[]|.id' > del_bkp$2.txt

while IFS="" read -r p || [ -n "$p" ]
do
  oci bv backup delete  --volume-backup-id $p  --force
done < del_bkp$2.txt

Você também poderia usar o jq para filtrar o campo com a data de criação do backup (time-created) mas ai estaríamos complicando ainda mais o processo.

Uma luz no fim do túnel

Uma forma que encontrei de minimizar o nosso trabalho é fazendo a Oracle trabalhar por nós, crie diversas politicas de backup customizada da forma que desejar e execute um script para alterar a politica vinculada ao disco, dessa forma a nossa retenção vai ser aplicada de forma automática.

Aqui em meu ambiente tenho algumas politicas criadas conforme pode ser visto:


Cada uma delas tem um agendamento em um horário do dia como o nome indica e cada uma delas tem uma retenção diferente, o backup feito as 8am e 12am ficam armazenados por um dia, o backup feito as 10pm fica armazenado por 7 dias.

A ideia é bem simples, se você tem uma politica que executa um backup as 22h(tome cuidado com o timezone do agendamento), o seu disco precisa estar com ela um pouco antes, sendo assim, segue mais um script que nos ajuda com isso, bastando passar o ocid do volume e o ocid da politica desejada:

 #!/bin/bash
##This script changes the backup policy from block volume
##How to use: ./change_bkp_pol.sh VOL_OCID POLICY_OCID

oci bv volume-backup-policy-assignment create --asset-id $1 --policy-id $2

No fim você vai ter algo mais ou menos assim, para cada disco que deseja mudar a politica, basta fazer um agendamento no crontab:

E aqui podemos validar no OCI que a retenção foi aplicada com sucesso:

No mais é isso, acredito que tenha conseguido exemplificar uma forma de fazer essa automação que ainda não é possível fazer via interface web.

chevron_left
chevron_right