2 de junio de 2022

Tips para disminuir el consumo de créditos en OCI

Buenas tardes, les voy a compartir algo muy interesante de como se puede ahorrar créditos dentro de OCI de una forma muy sensilla.

Antes de seguir, me ayudarian si siguen el blog:  SEGUIR !! Gracias

Como bien saben los costos de los recursos dentro de oci se cobran por uso. De esta forma nosotros podriamos configurar de forma automática apagar o bajar el uso de CPU según lo necesitemos.

Les voy a dar dos grandes ejemplos que usan la mayoria de las empresas para este caso.

1. Apagar instancias no productivas en horario nocturno y fin de semana

2. Bajar el uso de CPUs de Instancias (productivas o no) en horario y días que no tengan tanda demanda.


Estas configuraicones las podemos realizar gestionando nuestro tenant a travez de oci cli.

Para eso, primero debemos instalar OCICLI, dejo aca el link al post del paso a paso. Instalación

Una vez que tenemos una VM con OCI cli instalado y funcionando. Lo único que tenemos que hacer es crear los comandos para cada acción y dejarlos croneados en un crontab o en mi caso les voy a mostrar un menu muy sensillo en Linux.


1) Este es un comando muy facil para apagar o prender instancias:

oci compute instance action --action start --instance-id ocid1.instance.oc1.sa-saopaulo-1.antxeljrasdft4weycmftv6y6gqaiedqas2fxooiz6treewfasdcrur2d6onas4iq

or apagado:

oci compute instance action --action stop --instance-id ocid1.instance.oc1.sa-saopaulo-1.antxeljrasdft4weycmftv6y6gqaiedqas2fxooiz6treewfasdcrur2d6onas4iq

El detalle de eso lo podemos ver con el parametro --help:


Action Description: Performs one of the following power actions on the specified instance:

o START - Powers on the instance.
o STOP - Powers off the instance.
o RESET - Powers off the instance and then powers it back on.
o SOFTSTOP - Gracefully shuts down the instance by sending a shutdown

Con este comando, la idea es por ejemplo dejar un crontab que apague la instancia a las 18hs y la prenda a las 9am. Podemos armar un script .sh con el comando visto anteriormente.


2) En caso de contar con un EXACS que podemos bajar y subir los OCPU dinámicamente en forma online (esto quiere decir que no es necesario hacer un reinicio de las instancias=
Se puede programar que por ejemplo en horario nocturno o los fin de semana en lugar de ocupar 60OCpu ocupemos 10. y la reducción mensual de créditos en este caso es considerable.
Para eso el comando es el siguiente:

oci db cloud-vm-cluster update --cloud-vm-cluster-id ocid1.cloudvmcluster.oc1.sa-saopaulo-1.abtxel124ftjrs5qertujsrcyobl5pjuvne3asdprzxasdgfyzj11l2nzas4wca --cpu-core-count 28


Ahora que les mostré los dos comandos, vamos a ver como automatizarlos.

Ejemplo creamos un script para cada comando.
start_intance.sh
up_ocpu.sh
stop_instance.sh
down_ocpu_sh

Línea de crontab:
# Detención de Lunes a Viernes
00 18 * * 1-5 /scripts_oci/stop_instance.sh 
00 18 * * 1-5 /scripts_oci/down_ocpu.sh 

# Inicio de Lunes a Viernes a las 9am
00 9 * * 1-5 /scripts_oci/stop_instance.sh 
00 18 * * 1-5 /scripts_oci/up_ocpu.sh 

Otra opción es crear un menú interactivo en el cual podemos dar las opciones a un operador.:
Ejemplo scripts:

#!/bin/bash
#cpeque 23/05/2022
clear
while :
do
echo " Escoja una opcion para OCI "
echo "-----------------------------"
echo "1. Scale Down EXACS OCPU"
echo "2. Scale UP EXACS OCPU"
echo "3. Apagar instancias"
echo "4. Iniciar Instancias"
echo "5. Salir"
echo -n "Seleccione una opcion [1 - 5]: "

read opcion
case $opcion in

1) echo "Scale Down EXACS OCPU"
while true; do
echo
read -p "Confirmar Scale Down EXACS OCPU? " yn
case $yn in
y ) break;;
n ) exit;;
* ) echo "por favor responda Y o N ";;
esac
done
echo "Se procede con el Scale Down EXACS OCPU..."
/home/ocicliusr/scripts/down_ocpu.sh;;

2) echo "Scale UP EXACS OCPU"
while true; do
echo
read -p "Confirmar Scale UP EXACS OCPU? " yn
case $yn in
y ) break;;
n ) exit;;
* ) echo "por favor responda Y o N ";;
esac
done
echo "Se procede con el Scale UP EXACS OCPU..."
/home/ocicliusr/scripts/up_ocpu.sh;;

3) echo "Apagar instancias"
while true; do
echo
read -p "Confirmar Apagar instancias? " yn
case $yn in
y ) break;;
n ) exit;;
* ) echo "por favor responda Y o N ";;
esac
done
echo "Se procede con el apagado de las instancias...."
/home/ocicliusr/scripts/stop_instance.sh;;

4) echo "Iniciar Instancias"
while true; do
echo
read -p "Confirmar Iniciar Instancias? " yn
case $yn in
y ) break;;
n ) exit;;
* ) echo "por favor responda Y o N ";;
esac
done
echo "Se procede a Iniciar Instancias.."
/home/ocicliusr/scripts/start_intance.sh;;

5) echo "Exit";
exit 1;;
*) echo "$opc es una opcion invalida. ";

echo "Presiona ENTER para continuar...";
read foo;;
esac
done

Output Script: 




Espero que les sea útil y puedan ahorrar créditos universales para usarlos en más instancias de OCI ;-)

Los invito a seguir mi blog: SEGUIR