Hace unos pocos días Amazon nos sorprendió con el lanzamiento de App Runner, esta herramienta tan esperada (al menos por mi) ya que permite agilizar el deploy de nuestras aplicaciones Dockerizadas (entre otras). En mi caso salir con un nuevo servicio implicaba demasiada configuración entre administrar el Load Balancing, Instancias, Services, Clusters, etc, en mi opinión era demasiado y más si tan solo se necesita un servicio para una prueba de concepto.
En este post aprovecharemos este nuevo servicio para llevar a un entorno más real la aplicación Springboot creada en mi anterior post el cual puede ver aquí.
Subiendo nuestra imagen a ECR
ECR (Elastic Container Registry) es el servicio de Amazon similar a Docker Hub el actúa como un repositorio de imágenes y nos permite distribuir la misma y tenerla disponible para otras personas. En nuestro caso crearemos un registry privado y sera usado para que nuestro App Runner levante la misma.
- Accedemos a la consola de AWS desde aquí (cambie a la región que usted desee)
- En mi configuración dejare como un registry privado y en el nombre usare “spring-boot-docker-aws” para seguir una coherencia con mi repositorio
- Una vez creado copiaremos nuestra URI que sera similar a: 112233445566.dkr.ecr.us-west-2.amazonaws.com/spring-boot-docker-aws
- Ahora debemos ejecutar unos comando para subir nuestra imagen, en resumen nos logearemos a AWS, haremos un build de la aplicación, un build de la imagen y subiremos a nuestro registry. Para agilizar este proceso me gusta tener un archivo MAKE y evitar escribir todo el tiempo lo mismo (además de agregar algunas otras tareas como ejecutar test, agregar tags a la imagen con el commit, etc). Debemos crear el siguiente archivo en la raíz de nuestro proyecto.
Makefile
Tener en cuenta cambiar la URI de su registry y la región de la misma. Para poder usar la función login es necesario tener las credenciales en nuestras variables de entorno (más información en (docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html)
NAME := 112233445566.dkr.ecr.us-west-2.amazonaws.com/spring-boot-docker-aws
TAG := $$(git log -1 --pretty=%H)
IMG := ${NAME}:${TAG}
LATEST := ${NAME}:latest
DEV := ${NAME}:dev
.PHONY: all build
all: build
build:
@gradlew clean build --warning-mode all
tests:
@gradlew test --warning-mode all
deploy:
@docker build -t ${IMG} .
@docker tag ${IMG} ${LATEST}
@docker tag ${IMG} ${DEV}
@docker push ${DEV}
@docker push ${LATEST}
@docker push ${IMG}
# Start the app
docker:
@docker-compose up --build
start:
@gradlew run
login:
@aws ecr get-login-password --region us-west-2 | docker login --username AWS --password-stdin 112233445566.dkr.ecr.us-west-2.amazonaws.com
Con los siguientes comandos realizaremos las tareas que mencionamos anteriormente.
> make login
> make build
> make deploy
Configurando App Runner
Con nuestra imagen disponible deberemos ingresar a configurar el App Runner con el siguiente link: us-west-2.console.aws.amazon.com/apprunner/home?region=us-west-2#/create (nuevamente cambie de región según su preferencia).
El formulario es realmente sencillo y para la mayoria de los casos los valores default alcanzan y ese sera nuestro caso. Podremos ver como completamos nuestro formulario en las siguientes imagenes.
En el tercer paso nos pedira confirmar los datos y una vez confirmados comenzara a desplegar todos los componentes necesarios (lo cual no lleva más de 15 minutos).
En conclusión …
Con tan solo unos pocos minutos disponemos de nuestra aplicación configurada para ser usada, ya no nos tenemos que preocupar por configurar todo desde cero. Obviamente esto tambien tiene como contra parte el no poder definir ciertos criterios que en algunas situación son necesarios.
Recordemos que tambien disponemos de un auto deploy al momento de subir actualizaciones al registry, lamentablemente por el momento la construcción de imagenes Docker mediante un repositorio esta muy limitada a GitHub y a pocos lenguajes. Pero es muy reciente y estoy seguro que pronto tendremos noticias sobre nuevos lenguajes y proveedores.
TL;DR;
Luego de unas pocas horas de uso me encontre con varias limitaciones las cuales en mi situación son criticas, como lo es cambiar variables de entorno, usar en la región de Brasil, soportar un ECR de la región de Brasil. Estaré atento a nuevas actualizaciones.