AWS Serverless Application Repository

AWS Serverless Application Repository

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.

https://aws.amazon.com/es/serverless/serverlessrepo/

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

References