Buenas prácticas con Serverless
Yoandy Rodriguez Martinez

Yoandy Rodriguez Martinez @yorodm

About: Desarrollo, leo y blogueo acerca de software, soy seguidor de Linux, Python , Go y todo lo que huela a Common-Lisp

Location:
Sofia, Bulgaria
Joined:
Mar 10, 2018

Buenas prácticas con Serverless

Publish Date: Jul 13 '18
12 0

Algunas buenas practicas para Serverless Framework

Aunque llevo poco tiempo utilizando Serverless he intentado ir escribiendo un conjunto de prácticas para escribir plantillas. Las comparto aquí para los que como yo están empezando.

Reducir la dependencia de valores externos.

En varios de los ejemplos que he encontrado (incluso en el sitio oficial) es común utilizar referencias a valores externos por toda la plantilla.

functions:
  hello:
    name: ${env:FUNC_PREFIX}-hello
    handler: handler.hello
  world:
    name: ${env:FUNC_PREFIX}-world
    handler: handler.world
Enter fullscreen mode Exit fullscreen mode

Aunque esto no es una mala practica en si, hace que nuestras funciones dependan de un valor que solo vamos a obtener desde el entorno. ¿Qué tal si mañana decidimos que el valor venga de la salida de otro stack?

Por suerte para nosotros podemos hacer esto:

custom:
    func_prefix: # cualquier fuente para el valor
functions:
    hello:
        name: ${self:custom.func_prefix}
Enter fullscreen mode Exit fullscreen mode

De esta manera la dependencia al valor externo ocurre en un solo punto y se propaga hacia el resto de la plantilla.

Usar plugins.

Las plantillas pueden utilizar plugins que adicionan funcionalidades que van desde nueva sintáxis para algunos aspectos a acceso a características especiales del proveedor que estemos utilizando. Antes de lanzarte a crear un script o lastimar a una cabra deberías consultar si alguien acreado un plugin

Contenido en la plantilla según condiciones.

Serverless no tiene soporte para evaluación condicional de plantillas así que si pretendes crear contenido basado por ejemplo en el stage del despliegue puedes hacer algo como esto:

# stage_properties-qa.yml
functions:
    qa_function:
        handler: MyQaHandler

# stage_properties-prod.yml
functions:
    prod_function:
        handler: MyProdHandler

# serverless.yml
custom:
    stage: ${opt:stage, "qa"}
functions: ${file(stage_properties-${self:custom.stage}.yml):functions}
Enter fullscreen mode Exit fullscreen mode

Ahora tienes contenido en functions acorde al valor del stage si usas varios entornos de configuración esta estructura te puede ahorrar mucho trabajo y posibles complicaciones.

Otras pistas o trucos.

¿Tienes otras pistas o trucos? Por favor compartelas en los comentarios

Comments 0 total

    Add comment