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.