No es un misterio que en este blog escribo en su gran mayoría de temas relacionados con Serverless y en esa búsqueda, investigación y descubrimiento de herramienta, estoy siempre probando lo que tenemos a nuestra mano. Primero para compartir conocimiento, pero también me ayuda a tener contexto al momento de proponer ideas en los distintos proyectos en los que participo.
Uno de los conceptos que dentro de las arquitecturas Serverless se ve más viable o apetecible es el de Self Services o IDP(Internal Developer Platform). ¿De qué se trata el concepto del IDP o Self Services?, es la capacidad de tener a pocos pasos, la posibilidad de desplegar un Stack que ya está probado y que podamos reutilizar en distintas cargas de trabajo en la nube.
En este artículo vamos a revisar ¿Qué es AWS Serverless Aplication Repository?, como funciona y que puede ofrecernos en el camino y búsqueda a un Self Services o IDP.
AWS Serverless Application Repository (serverlessrepo)
En palabras de AWS:
AWS Serverless Application Repository es un repositorio administrado para aplicaciones sin servidor. Se les permite a los equipos, organizaciones y desarrolladores individuales almacenar y compartir aplicaciones reutilizables y ensamblar e implementar fácilmente arquitecturas sin servidor de maneras nuevas y potentes. Si utiliza Serverless Application Repository, no tiene que clonar, crear, empaquetar o publicar el código fuente en AWS antes de implementarlo. Por el contrario, puede implementar aplicaciones prediseñadas de Serverless Application Repository en las arquitecturas sin servidor, lo que ayuda a usted y a sus equipos a reducir el trabajo doble, asegurar las prácticas recomendadas de la organización y llegar al mercado más rápido.
Como vemos, tiene buena pinta, un lugar donde desplegar nuestras aplicaciones y desde el cual servirlas directamente. ¿Pero cómo?
Aquí vienen las primeras consideraciones, la herramienta de IaC que utiliza AWS serverlessrepo es AWS SAM. Lo cual puede ser algo a tener en cuenta, pero no una limitación; sin embargo, eso lo veremos más adelante en siguientes post.
El resultado final es un directorio donde tenemos acceso a las aplicaciones (públicas), del cual podemos hacer un despliegue de las aplicaciones a un Click.
Desplegando una Aplicación en serverlessrepo
Hay dos maneras para desplegar las aplicaciones, de manera manual, subiendo el pakaged.yml
al formulario y los valores que solicita el formulario y Utilizando AWS Sam Cli.
Si AWS Sam tiene un parámetro que permite subir nuestro Stack al Serverless Aplication Respository vamos a revisarlo paso a paso.
Publicando la aplicación
Primero tendremos que tener probada nuestra aplicación y funcionando. Previamente, he desplegado mi aplicación usando un AWS Sam Deploy
y he verificado que funcione correctamente. La aplicación que vamos a publicar la hemos tratado antes en este blog: Mimic.
Aquí el repositorio que he preparado para esta demo:
El Siguiente paso es crear un Bucket S3 y dar permisos al “Serverless Aplication Repository” para que acceda a nuestro S3 donde va a estar desplegado el código de la aplicación.
Dentro de las Policy del Bucket
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "serverlessrepo.amazonaws.com"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::<your-bucket-name>/*",
"Condition" : {
"StringEquals": {
"aws:SourceAccount": "123456789012"
}
}
}
]
}
Luego en nuestro archivo de template.yml
agregar la metadata que ayudara a empaquetar nuestra aplicación.
Metadata:
AWS::ServerlessRepo::Application:
Name: my-app
Description: hello world
Author: user1
SpdxLicenseId: Apache-2.0
LicenseUrl: LICENSE.txt
ReadmeUrl: README.md
Labels: ['tests']
HomePageUrl: https://github.com/user1/my-app-project
SemanticVersion: 0.0.1
SourceCodeUrl: https://github.com/user1/my-app-project
Resources:
HelloWorldFunction:
Type: AWS::Lambda::Function
Properties:
...
CodeUri: source-code1
...
Esta metadata es equivalente a todos los campos que el formulario de publicación manual solicita al momento de hacer un despliegue.
Luego ejecutamos el comando que empaquetara el despliegue:
# Remplazar <your-bucket-name> con el nombre del bucket que creamos en el paso anterior
sam package --output-template-file packaged.yaml --s3-bucket <your-bucket-name>
Este comando da como salida un archivo: packaged.yaml que utilizaremos para publicar nuestra aplicación.
Ahora finalmente publicamos nuestra aplicación
# Remplazar la region por la region donde queremos desplegar nuestro stack
sam publish --template packaged.yaml --region us-east-1
Finalmente, verificamos si queremos que la aplicación sea, pública, privada o compartida a cuentas específicas.
Conclusiones
El Serverless Aplication Repository permite subir nuestros stacks para reutilizarlos dentro de nuestra cuenta o compartido con otras cuentas o de manera pública.
El proceso de deploy se realiza utilizando AWS Sam y un comando poco conocido
sam publish