Deploy aplicacion serverless en python con aws sam y github action

github actions y sam aws

AWS Serverless Application Model (SAM) es un marco de código abierto para crear aplicaciones sin servidor. Proporciona sintaxis abreviada para expresar funciones, API, bases de datos y asignaciones de origen de eventos, el cual le hace un complemento a cloudFormation para mejorar el deploy de una aplicación serverless.

Vamos a desplegar nuestra aplicación serverless escrita en python el codigo final.

  1. Creamos nuestra aplicacion base con sam puedes instalarlo.

sam init

2. Creamos un archivo .github/workflows/main.yml

on: [push]

jobs:
  hello_world_job:
    runs-on: ubuntu-latest
    name: Deploy sam 
    steps:
      - name: Checkout
        uses: actions/checkout@v2
      - name: Deploy sam on aws
        uses: ncleguizamon/aws-sam-python-action@v1.1
        env:
          AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
          AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          #AWS_SESSION_TOKEN: ${{ secrets.AWS_SESSION_TOKEN }}
          
        with:
         STACK: 'app1' #requerido
         S3_BUCKET: 'testactions' # requerido
         #PARAMETER_OVERRIDES: 'branch=master' 
         #AWS_DEFAULT_REGION: 'us-east-1'
         #CAPABILITIES: CAPABILITY_IAM 

Bueno les voy a comentar que hace cada steps

steps Checkout

- name: Checkout
        uses: actions/checkout@v2

Este step lo que hace es un pull  a la maquina que utiliza github para hacer el deploy en este caso un ubuntu  runs-on: ubuntu-latest

steps Deploy Sam on aws

En este step vamos a a empaquetar y deploy en nuestra cuenta aws, para eso devemos crear 2 o 3 secrets  en github.

AWS_ACCESS_KEY_ID

AWS_SECRET_ACCESS_KEY

AWS_SESSION_TOKEN (este es opcional)

Luego se especifica el Nombre del stack y el bucket en s3  los cuales son requeridos, los demas son opcionales.

3. hacemos push a github y vamos a la seccion de  actions y vemos que sucede.

Podemos ver el log de lo que esta empaquetando y configurando SAM

Vemos en aws cloudformation

y Listo ya se nos ha creado nuestro stack en nuestra cuenta aws.