Contenido
- Crear un repositorio para nuestra API
- Crear una api en kotlin y dockerizarla
- Crear un Azure Container Registry para guardar la imagen de nuestra api
- Buildear y pushear la imagen de nuestra API
- Crear una Azure Container App para deployar la imagen de nuestra api
- Automarizar deploys con GitHub Actions
Crear un repositorio para nuestra API
Lo primero es crear el repositorio de GitHub para luego poder automatizar los deploys con github actions.
Para eso ejecutaremos los siguiente comandos:
Crear una api en kotlin y dockerizarla
El codigo de la API pueden sacarlo de este repositorio. O pueden codear su propia api. En la de este ejemplo es un simple aplicacion que levanta un http server y escucha peticiones en el puerto que pongas como variable de entorno. Y al enviar un GET a / resibiremos un texto con la frase “Hello World!”
Una vez descargado el codigo (o habiendo creado su propia API) debemos dockerizarla.
Para eso crearemos un archivo .Dockerfile en la raiz del proyecto
En .Dockefile
:
Para probar que nuestra API esta funcionando correctamente dentro de un container, debemos buildearla y correrla.
Si vamos a http://localhost:80 deberiamos ver lo que nos responde nuestra API.
Crear un Azure Container Registry para guardar la imagen de nuestra api
Debemos entrar a nuestra cuenta en https://portal.azure.com/ y crear un nuevo recurso. El recurso que crearemos sera “Container Registry”.
Luego en Container Registry debemos crear un nuevo resource grupo (en mi caso container-app-example
). Y debemos ponerle un nombre a nuestro registry (en mi caso kotlinapi
)
Le damos al boton “Next” hasta crearlo.
Y si vamos a Container Registry devuelta, podemos ver que ya esta creado:
Dentro de nuestro registry debemos ir a update:
Y activar el Admin user
Buildear y pushear la imagen de nuestra API
Cuando usamos herramientas de CI/CD como github actions para deployar recursos a Azure, necesitamos crear un “service principal” que este autorizado a hacer eso.
Para eso debemos descargar el CLI de Azure y logearnos.
Una vez logeados, lo primero es obtener el id del resource group donde crearemos un “service principal” y luego crearemos el “service principal”.
Para obtener el resource group id:
Para crear el “service principal”:
Obtendremos un resultado similar a este:
Debemos guardar este JSON porque nos servira mas tarde.
El siguiente paso es actualizar el “service principal” para que tenga permisos de pushear y pullear una imagen de nuestro container registry.
Para eso debemos tener el id de nuestro container registry:
Y actualizarlo con el id de nuestro registry y el ClientId del JSON del paso anterior.
Una vez hecho esto debemos guardar nuestras credenciales en nuestro Repo:
- Entra a tu repo y navega a Settings > Secrets > Actions.
- Selecciona New repository secret y agrega los siguientes secretos AZURE_CREDENTIALS: el json del paso anterior REGISTRY_USERNAME: el clientId del json del paso anterior REGISTRY_PASSWORD: el clientSecret del json del paso anterior
Por ultimo debemos agregar nuestro script de GitHub Actions que buildeara la imagen y pusheara al registry. En la raiz de nuestro proyecto crearemos una carpeta .github
y dentro de ella una carpeta llamada workflows
dentro de workflows crearemos nuestro script llamado api.yml
Dentro de .github/workflows/api.yml
:
Pushear y comittear
Luego en nuestro repositorio podemos ver que el action se habra activado
Y si vemos nuestros repositories en Azure veremos que hay una nueva imagen pusheada.
Crear una Azure Container App para deployar la imagen de nuestra api
Una vez que ya tenemos el mecanismo para buildear y pushear la imagen a nuestro registry, podemos crear un Container App que tome la imagen de nuestro registry.
Para eso debemos crear un nuevo recurso llamado “Container App”
Luego en Container App debemos seleccionar nuestro resource group y un Container Apps Environment, si no tenemos uno debemos crearlo. En mi caso lo cree con el nombre “staging”
En la seccion de App settings debemos desmarcar la opcion “Use quickstart image”. Luego debemos seleccionar nuestro registry, la imagen y el tag.
En mi caso agregue las environment variables que necesita mi API. Y tambien active para que sea accesible por la internet publica.
Una vez creado si volvemos a Container Apps podemos ver que nuestro Container App esta creado y si lo seleccionamos nos saldra la URL.
Automarizar deploys con GitHub Actions
Una vez ya creado nuestro Container App, podemos automatizar los deploys mediante GitHub Actions. A nuestro workflow ya creado (que buildea la imagen y pushea a nuestro registry), le debemos agregar ahora que update el container con la nueva version de la imagen buildeada.
En .github/workflows/api.yml
:
Recuerde cambiar los nombres en “container-app-name” y “resource-group-name”