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!