GitHub: Implementar la función Lambda

github

Implementar la función Lambda mediante la acción de GitHub

 

Hoy, hablaremos de un punto funcional relacionado con la acción de Github en la función AWS Lambda.

 

Hoy en día, la tecnología sin servidor es una de las mejores opciones que la gente elige con sus negocios. Es fácil de administrar, implementar y crear. Uno de los mejores proveedores de funciones sin servidor es AWS y su servicio Lambda, que le permite hacer todo lo que pueda imaginar con un costo mínimo.

Agregar un proyecto sin servidor a una canalización de DevOps sería un diamante en el oro y por qué ir a otro lado si tenemos GitHub para rescatar.

En este artículo les hablaré sobre cómo puede crear un flujo de trabajo que implementará automáticamente sus funciones con la ayuda de las acciones de Github.


¡Empecemos!

Asumiré que tiene un proyecto sin servidor en funcionamiento en algún lugar. Entonces, creemos un archivo .github/workflows/lambda-deployment.yml que será el controlador de la implementación. Necesitamos seguir algunos pasos para implementar el proyecto.

  • Rama que se desplegará
  • Configuración del trabajo
  • Autenticación
  • Configuración de env
  • Instalar todas las dependencias
  • Despliegue

Independientemente del marco que elija, los pasos seguirán siendo más o menos los mismos. Así que ten en cuenta estas cosas

 

La acción de Github ejecuta cada comando en una instancia de terminal diferente, por lo que si tiene export en su script, asegúrese de que se transmita junto con el comando de uso

 

Aparte del paso 4, todos los demás pasos se explican por sí mismos, pero ¿por qué agregué la configuración de env tal como está?

Por que env es importante

Si su proyecto no tiene ningún archivo env, puede omitir este paso directamente, pero si lo tiene, insistiré en que lea esto.

Cuando empaquetamos la función sin servidor, necesita todas las dependencias instaladas en la máquina en particular con todos los archivos necesarios. Puede incluir o excluir según los requisitos de su proyecto. Hay 2 tipos de archivos de entorno

  • Usado para acceder al recurso
  • Usado dentro del recurso

Por un punto, puede acceder a él usando las acciones de Github y su entorno, pero para el punto 2 necesita un archivo .env para usar las variables

Cuando empaquetamos los archivos, también empaquetará el env junto con él. Por tanto, es importante utilizar el enfoque correcto del problema.

A muchos les gusta la idea de crear .env pero preferiré env.yml para almacenar la credencial. ¿Por qué? Debido a que será más fácil administrar archivos de múltiples entornos en uno y solo puede copiar y pegar el entorno en una variable, no es necesario mantener variables separadas para cada elemento.

La idea es crear una variable env en GitHub y copiar y pegar el valor de su sistema en ella. Por ejemplo:

Sí, env.ymlDebe agregar este archivo en .gitignore


Flujo de trabajo

Movámonos y creemos el producto final que pretendemos crear desde el principio.

Sus pasos para el archivo se verán así, después de arriba:

steps:

- uses: actions/checkout@v2

- name: Use Node.js ${{ matrix.node-version }}

uses: actions/setup-node@v1

with:node-version: ${{ matrix.node-version }}

- name: Install Serverless Framework

run: npm install -g serverless

- name: Serverless AWS authentication

run: serverless config credentials --provider aws --key ${{ secrets.AWS_ACCESS_KEY_ID }} --secret ${{ secrets.AWS_SECRET_ACCESS_KEY }}

- name: Create env file

run: | # cp sample.env.yml env.yml

cat > env.yml << EOF

${{ secrets.ENV }}

EOF

Esto creará el entorno para que no implementemos el código. Para este artículo, estoy usando el marco sin servidor, puede elegir nativo si lo desea, pero los pasos seguirían siendo los mismos

serverless deploy es el comando para implementar, así que usémoslo

name: Deploy lambda functions

on:
  push:
    branches:
      - main
      - feature/milestone4

jobs:
  deploy-dev:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        node-version: [14.x]
    steps:
    - uses: actions/checkout@v2
    - name: Use Node.js ${{ matrix.node-version }}
      uses: actions/setup-node@v1
      with:
        node-version: ${{ matrix.node-version }}
    - name: Install Serverless Framework
      run: npm install -g serverless
    - name: Serverless AWS authentication
      run: serverless config credentials --provider aws --key ${{ secrets.AWS_ACCESS_KEY_ID }} --secret ${{ secrets.AWS_SECRET_ACCESS_KEY }}
    - name: Create env file
      run: | # cp sample.env.yml env.yml
        cat > env.yml << EOF
        ${{ secrets.ENV }}
        EOF
    - name: Install NPM dependencies
      run: yarn install --frozen-lockfile && SLS_DEBUG=*
    - name: Generate prisma 
      run: yarn gen
    - name: Deploy Lambda functions
      run: serverless deploy -s dev

Conclusión

Puede escribir su acción con más elementos basados en su proyecto, espero que aprenda algo bueno hoy. Hasta que nos veamos la próxima vez, ¡adiós!

Recent Post