Introducción a Oracle Cloud Infraestructura OCI

Una guía práctica para crear y empezar a usar Oracle Cloud Free Tier

Cuando se habla de Cloud hay grandes nombres que enseguida vienen a la cabeza: AWS de Amazon, Azure de Microsoft, GCP de Google. Quizás menos conocido sea OCI de Oracle aunque en este último año se está dando a conocer muchísimo. He de reconocer que para mi, hasta hace pocos meses, Oracle era la empresa de Java y las bases de datos y desconocía que daban servicios de servidores y redes virtuales.

Con Oracle Cloud podemos crear varios VPS y algunos otros servicios de manera totalmente gratuita "para siempre". Siendo realistas, vamos a pensar que será gratis hasta que Oracle cambie las condiciones pero, mientras tanto, tenemos la posibilidad de aprender y crear algún pequeño proyecto dentro de Oracle Cloud. Sobre la fiabilidad del servicio gratuito, he leido experiencias de usuarios con varios meses de uso continuo sin fallos y también de usuarios que tienen problemas con los servidores porque se detenien sin previo aviso y a la hora de levantarlos da error y lleve varios días volver a activarlo. En mi experiencia personal, tuve un parón de uno de mis VPS y me costó días arrancarlo. En cualquier caso, es muy interesante tener acceso a OCI en el modo gratuito y llegado el caso que se esté haciendo un proyecto que valga la pena siempre puedes hacer upgrade a la versión de pago en Oracle o cualquier otra empresa de Cloud.

De entrada, OCI se trata de un entorno mucha mas complejo que las empresas de alojamiento web o hosting web. Una vez dados de alta, obtenemos una "tenancy" o arrendamiento. Esto es una partición aislada dentro de la infraestructura de Oracle Cloud de la que tenemos control para crear, organizar y administrar los recursos de Cloud. Podemos escoger el área geográfica de la "tenancy". A esta área OCI la llama "región". Actualmente existen mas de 20 regiones en el mundo. Lo mejor es elegir una que se encuentre geográficamente cerca de nuestra ubicación por temas de latencia. Hay muchos conceptos de los que comentar en profundidad sería demasiado extenso y para eso ya está la propia documentación de Oracle. Cuando elegimos una región está tiene uno o mas Availability Domains o Dominios de Disponibilidad conectados entre si. Cada Availability Domains tiene 3 Fault Domains. Los Fault Domains o dominios de errores, podemos decir que son los Data Centers de Oracle. Están por triplicado y en ubicaciones distintas por razones de seguridad. Si uno falla o se daña en un incendio o cualquier fatalidad, los demás están en otra zona a salvo.

Para conocer mejor que es OCI es muy recomendable visitar: https://www.oracle.com/es/cloud/ Hay mucha documentación y cursos en video en inglés con subtitulos en castellano.

Al registrarte en OCI, inicialmente tenemos un regalo de 300$ para usar durante 30 días todos los servicios hasta agotar la cantidad o pase el plazo. Pasado este periodo o agotado el saldo, no podremos utilizar algunas características y otras se podrán usar pero con menor carga de trabajo. Aún en modo solo gratuito, los servicios prestados son de una potencia y calidad iguales o mejores que muchos hosting web de pago.

Comenzamos. Crear instancias de servidor

Tras el proceso de registrarse con nuestros datos personales, elegimos una región donde se ubicará nuestro "arrendamiento" o "tenancy" y se muestra la página principal de OCI. Hay un menú contextual a la izquierda desde donde podemos empezar a crear recursos.

Comenzaremos por crear un VPS. En el modo "siempre gratuito" podemos crear servidores virtuales de varios distros Linux. Si necesitamos un Windows Server tendremos que hacer un "upgrade" y nos facturarán mensualmente el servicio contratado. OCI nos permitirá probar gratis 30 días el servidor Windows. Este documento solo trata sobre creación de servidores Linux y los recursos siempre gratuitos.

OCI nos brinda 4 núcleos de procesador, 24GB de RAM y 200GB de almacenamiento para crear uno o dos servidores. Debemos repartir estos recursos en función de cuantos VPS queremos crear. Si preferimos solo uno le podemos asignar todo y si preferimos dos servidores los repartimos entre los 2 pero nunca superando el máximo establecido para poder cumplir requesitos de "siempre gratis". Cuando se crea una instancia de servidor, por defecto, tiene 50Gb de almacenamiento. Por tanto, si creamos dos VPS ya estamos consumiendo como mínimo 100Gb por lo que nos quedan otros 100Gb para ampliar la capacidad de uno de ellos o los dos. Las combinaciones son muchas. Yo voy a crear 2 VPS de 2 núcleos, 12GB de RAM, uno con 100Gb de almacenamiento y el otro con 50GB para tratar de añadir un Storage adicional de 50Gb posteriormente. Como ves la suma está dentro de los límites de 4 núcleos, 24GB de Ram y 200GB de almacenamiento. Además de los servidores, en OCI, en el modo gratuito, tenemos un servidor autónomo de bases de datos NoSQL con capacidad para 3 tablas de 25Mb cada una. Las tablas si no se usan durante 30 días OCI las desactivará mandando un aviso al administrador. Pasados 90 días sin uso se eliminará la tabla. Para volver a activar una tabla detenida por OCI hay que hacer cualquier operación get/put/delete. (IMPORTANTE: Este servicio no está disponible gratis en todas las regiones. Actualmente Marseille, la que estoy usando, no lo permite).

Para información actualizada de lo que está permitido en modo gratuito visita directamente la web de Oracle en https://www.oracle.com/es/cloud/free/#always-free

Llegó el momento de empezar a crear recursos. Para crear la instancia de VPS, en el menú contextual de la izquierda, vamos a Compute->Instance y le damos al botón "Create Instance". (Aunque el portal de OCI está disponible también en español suelo utilizar la versión en inglés porque la documentación técnica está en gran parte sin traducir.)

Al pulsar el botón nos aparece un formulario para rellenar las características del VPS. Lo primero que vemos es el nombre de la instancia o VPS. Debajo está el "Compartment" o compartimento. Un compartimento es algo así como un directorio donde se guardarán los recursos. Si vamos a crear un proyecto muy grande de varios servidores y bases de datos, para llevar un orden es mucho mejor clasificarlo en diferentes compartimentos. En nuestro pequeño ejemplo, inicialmente, pondremos la instancia en el compartimento raiz y más tarde veremos que crear compartimentos y mover recursos es muy rápido y fácil.

El siguiente ajuste de la instancia es la ubicación o "placement" donde podemos elegir sobre que Availability domain y Fault domain crear el recurso. En mi caso particular, al ser Marseille una región con infraestrustura pequeña de un solo Availability Domain no hay donde elegir. Si puedo escoger Fault domain o dejar que OCI lo instale en el mas óptimo. Recuerda que dijimos que cada Availability domain tiene 3 Fault domains.

Cuando creas la cuenta en OCI y eliges región ya no es posible cambiarla gratis. Un consejo: elige una región de 3 Availability domains. La mía es de un solo AD y estoy descubriendo que tiene algunas limitaciones en el modo gratuito que no tienen las regiones de 3 AD. OCI está creciendo y quizás pronto Marseille no presente desventajas para usuarios gratuitos.

A continuación tenemos que elegir Image and shape. En español OCI lo ha traducido como Imagen y unidad. Una unidad es una plantilla que determina el número de CPU, la cantidad de memoria y otros recursos asignados a una instancia. La imagen es el sistema operativo que se ejecuta sobre la unidad. En este bloque dentro de Image elegimos una de las distros linux disponibles. En el bloque shape, configuramos tipo de procesador y memoria de la máquina virtual.

En el bloque shape, configuramos tipo de procesador y memoria de la máquina virtual.

Para Ubuntu, la distro que yo escogí, solo deja escoger procesadores Ampere. La memoria y núcleo lo puedes seleccionar a tu gusto. Yo le puse 2 núcleos y 12GB para poder crear 2 VPS de idéntica potencia.

El siguiente apartado, llamado Networking, es sobre redes virtuales en la nube (VNC). Se puede configurar una red muy compleja si nuestro proyecto es grande y además somos un usuario de pago. Una red virtual es muy parecida a una red tradicional. Tiene reglas de firewall, subredes, diversos enrutadores para conectar las subredes y regiones o tener conexión con internet,... En el modo gratuito, como todo está limitado a utilizar pocos recursos, nos vamos a conformar con una configuración más sencilla. Nuestra VNC tendrá un Gateway para salir a internet, una IP pública para poder montar un servidor web o algún servicio que requiera internet, algunas reglas de firewall y, al menos, una subred donde ubicar el servidor. Si creamos otro servidor, puede estar en la misma subreb o en otra. En el formulario de crear servidor, apartado Networking, escogemos entre:

  • Crear una nueva VNC
  • Especificar una VCN previamente creada de un menú desplegable
  • Especificar una VCN previamente creada a través de Oracle Cloud ID (OCID)

Para la subnet, ocurre algo parecido. O creamos una nueva o asignamos una ya creada previamente. Si decidimos crear una nueva lo haremos usando la notación CIDR. El asistente nos sugiere 10.0.0.0/24. Esto quiere decir que el rango de la subred irá de 10.0.0.0 a 10.0.0.255, máscara 255.255.255.0.

Para no complicarnos mucho si es tu primera instancia puedes escoger la opción de "Crear una nueva VNC" y "Crear una nueva subnet". Si queremos cambiar el nombre por defecto de las redes o el rango de la subnet los campos son editables.

En esta sección también marcamos si queremos o no una IP pública. Será necesario para conectarnos desde internet al servidor y también para crear un servidor web.

La conexión al servidor desde nuestro ordenador se puede hacer desde terminal con el comando SSH o con la aplicación gratuita PuTTY SSH disponible para Windows, Mac y Linux.

Desde OCI podemos crear un par de claves público-privada. La clave pública se copia en el formulario y la privada se graba en el ordenador desde donde nos conectamos. También puedes crear la clave desde una terminal con el comando ssh-keygen o con PuTTY Key Generator. Existen otros muchos clientes gratuitos como alternativa a PuTTY: OpenSSH, Zen, KiTTY... Todas las maneras son válidas. Aquí cada uno es libre de elegir el que mas le guste.

Si creas las claves desde OCI y te conectas por terminal debería de ir bien pero si te conectas desde PuTTY con esa clave privada te dará un error de formato y tendrás que recoventirla a formato .ppk. Se soluciona desde PuTTY Key Generator en Conversions->Import Key y cargamos el archivo privado. A continuación Save Private key para guardarla en formato .ppk.

El último apartado del formulario es sobre el volumen de arranque del VPS. Por defecto, con todas las opciones desmarcadas creará un VPS de 50GB. Opcionalmente podemos especificar un tamaño mayor siempre que no superemos el máximo de nuestra cuenta, de 200GB si es una cuenta gratuita.

Ya solo queda pulsar el botón Create y OCI empezará a aprovisionar la instancia de servidor y estará funcionando en menos de un minuto. Si todo ha ido bien, mostrará en pantalla el estado "Running".

En Compute->Instances muestra los VPS creados por cada compartimento. Aquí tenemos la IP pública necesaria para conectar por SSH y algunos datos mas.

Si clickamos sobre el nombre obtenemos mas detalles sobre la instancia. Aquí podemos saber el nombre del usuario del servidor con el iniciaremos sesión. OCI por defecto lo llama "ubuntu". Cuando iniciemos sesión podremos renombrarlo y crear otros usuarios.

Uno de los servidores que creé hace tiempo, un buen día se detuvo y al intentar iniciarlo de nuevo (botón Start) salía el error: error: "Out of capacity for shape VM.Standard.A1.Flex in availability domain AD-1. Create the instance in a different availability domain or try again later". Lo intenté de nuevo varias veces en diferentes momentos en varios días y salía el mismo mensaje. ¿Se acabó lo gratis para siempre? Buscando ayuda por internet descubrí que no era el único con ese mismo problema. Por lo que se comenta Oracle ha crecido mucho en número de usuarios y tiene momentos en que por sobrecarga detiene servicios de los "usuarios gratuitos" para dar buen servicio a los registrados de pago. Si te ocurre esto, inténtalo en diferentes momentos hasta que pilles un hueco. Incluso ya hay un programador que ha publicado un código para automatizar la pulsación de la tecla "Create Instance" cada 5 segundos. También se comenta que Oracle va a ampliar su infraestructura para dar cabida a todos los usuarios. Ahora llevo unos meses con dos servidores arrancados y por el momento siempre activos.

Crear compartimentos

Usar compartimentos es opcional pero lo recomiendo para adquirir buenas prácticas. Aunque en un proyecto pequeño no tenga mucha necesidad, vamos a separar recursos en compartimentos. Podemos hacer dos compartimentos para que contengan un VPS cada uno y un tercer compartimento para guardar las VCN.

Para crear un nuevo compartimento, simplemente desde Identity & Security->Compartments, pulsamos "Create Compartment". Mostrará un formulario donde entrar el Nombre, una descripción (opcional) y cual será su compartimento padre. Se pueden anidar hasta 6 compartimentos.

Para mover un recurso a un compartimento debemos buscar el botón "Move Resource" y seleccionar a donde quieres moverlo. Por ejemplo, si queremos mover de compartimento una instancia, el botón se encuentra dentro del desplegable "More Actions" cuando estamos en la ventana que muestra detalles de esa instacia. en Compute->Instances->Instance details

Conexión al VPS por SSH

SSH son las siglas de Secure Shell. Es un protocolo que ofrece acceso remoto a un servidor. Su principal característica es que ofrece acceso seguro, con comunicación va cifrada para evitar que un tercero con un sniffer de red obtenga información de lo que se transmite.

En este punto ya tenemos activado, al menos, un servidor con IP pública, tenemos la clave privada guardada en local en nuestro ordenador y conocemos el nombre de un usuario para poder entrar. Ha llegado el momento de conectarnos por SSH al servidor. Lo veremos desde dos formas muy comunes: mediante el cliente de SSH mas conocido PuTTY y desde la terminal con el comando SSH.

Conexión mediante PuTTY:

PuTTY es un clásico de las conexiones SSH en Windows. Para iniciar una conexión debemos poner la IP en Host name (or IP address). Opcionalmente, podemos poner antes el nombre de usuario de iniciar sesión seguido de @ip_del_servidor. Así ya entramos directamente sin teclear el usuario.

Indicar la ruta a la clave en Connection->SSH->Auth->Private key file for authentication. Recuerda que para PuTTY debe ser en formato .ppk

Por comodidad estos ajustes se pueden grabar para iniciar mas comodamente la próxima vez. Simplemente selecciona el ajuste y pulsa Open para abrir sesión. La primera vez que conectamos puede salir un mensaje de advertencia de aun no se ha establecido la Key que identifica al servidor seguro como tal. Debemos confirmar y ya nunca mas hará la pregunta.

Si todo ha ido bien tendrás algo parecido a esto:

¡Enhorabuena! Tenemos un servidor en Oracle Cloud corriendo.

Esta pantalla de entrada nos da mucha información. Nos dice que estamos con el usuario ubuntu, la versión de Linux, datos de memoria libre y en uso, la ip que ocupa el servidor en la subnet...

También tenemos dos advertencias: una que dice que algunas paquetes pueden actualizarse y que el servidor debe reiniciarse. Vamos a solucionarlo.

Podemos saber que paquetes necesitan actualizarse entrandoapt list --upgradable

ubuntu@ubuntusrv1:~$ apt list --upgradable
Listing... Done
landscape-common/focal-updates 19.12-0ubuntu4.3 arm64 [upgradable from: 19.12-0ubuntu4.2]
libnetplan0/focal-updates 0.104-0ubuntu2~20.04.1 arm64 [upgradable from: 0.103-0ubuntu5~20.04.6]
netplan.io/focal-updates 0.104-0ubuntu2~20.04.1 arm64 [upgradable from: 0.103-0ubuntu5~20.04.6]

Para actualizarlos usaremos apt update y a continuaciónapt upgrade. Si no queremos ponersudo a cada comando cambiamos a root mediante sudo -i

ubuntu@ubuntusrv1:~$ sudo -i
root@ubuntusrv1:~# apt update
.
.
.
done

Nota: Listará muchas líneas de que cambios está haciendo. Lo simplifico con 3 puntos

El siguiente paso es el upgrade

root@ubuntusrv1:~# apt upgrade
.
.
.
done

Para verificar que no es necesario actualizar el sistema si repetimos el comando apt upgradedevolverá un texto informando de que no hay nada que actualizar

0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

Lo siguiente a corregir es reiniciar el sistema tal como nos recomienda la pantalla de bienvenida. Para conocer que paquetes o librerías requieren reiniciar el sistema podemos consultar el archivo /var/run/reboot-required.pkgs con el comandocat o cualquier otro visor de textos.

ubuntu@ubuntusrv1:~$ cat /var/run/reboot-required.pkgs
linux-image-5.13.0-1021-oracle
linux-base
libc6
libssl1.1

Por último, reiniciamos con reboot que como imaginas también cierra la sesión. Pasado un breve tiempo podemos volver a conectar. En esta nueva sesión no tenemos que tener advertencias de reiniciar el sistema o actualizarlo.

Vamos a verificarlo abriendo sesión de nuevo pero esta vez desde una terminal

Conexión mediante SSH:

Para conectarnos por terminal necesitamos un shell con SSH. Desde la versión 10 de Windows es posible conectarse desde CMD o "Símbolo del sistema" al traer ya SSH incorparado o desde su hermano mayor PowerShell. Linux y Mac por supuesto también cuentan con su terminal de comandos.

El comando que usaremmos tiene esta sintaxis:

ssh -i claveprivada.key nombre_usuario@ip_servidor

Si no lo indicamos por parámetro SSH usará el puerto 22 que es el habitual. Si el servidor está configurado para otro puerto se añade -p numero_puerto. Lo vemos con un ejemplo a un imaginario servidor con usuario pepe y puerto SSH 3434:

ssh -i claveprivada.key pepe@11.22.33.44 -p 3434

Si fuera un servidor que no requiere clave privada omitimos -i claveprivada.key. La -i viene de identidad.

Tras esta explicación vamos a un caso real y abrimos sesión en el VPS. Se supone que ya no debe pedir actualizar nada y tampoco hay que reiniciar. Lo veremos desde CMD. Es necesario indicar la ruta completa a la clave o situarte en su directorio con el comando cd. Fíjate en la diferencia de archivo. La clave privada para conectar por terminal tiene extensión .key y para PuTTY es .ppk.

ssh -i ssh-key-2022-01-31.key ubuntu@144.24.195.42

Como ves en la captura el sistema está puesto al día de actualizaciones.

Explorando el servidor

De entrada, ya vemos algunas de sus características como la memoria de almacenamiento, la interfaz de red con la ip, la versión de Linux...Son los datos que esperabamos porque al crear la instancia ya establecimos que queríamos un servidor con esas caráteristicas. El procesador debe ser de 2 núcleos Ampere. Podemos cerciorarnos con el comando lscpu que muestra mucha información muy bien estructurada sobre el procesador.

De memoria Ram debemos tener 12GB. El comando free lo puede confirmar. Sin parámetros muestra en la memoria en bytes. Para mostrarlo en megas se añade --mega, para kilobytes --kilo, para gigabytes --giga y sin parámetros en una unidad muy desconocida llamada "kibibytes".(Hay muchas mas unidades, consulta documentación si las necesitas con man free

Otro comando útil es el que nos muestra el espacio de almacenamiento df -h /

Queda comprobado que tenemos un servidor con capacidad para instalar los servicios que queramos. Nos falta conocer mejor las interfaces de red y en que estado se encuentra el firewall. Lo dejamos para el siguiente capítulo.