Implementación gradual de aplicaciones sin servidor con AWS SAM - AWS Serverless Application Model

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Implementación gradual de aplicaciones sin servidor con AWS SAM

AWS Serverless Application Model (AWS SAM) viene integrado CodeDeploypara proporcionar AWS Lambda despliegues graduales. Con solo unas pocas líneas de configuración, AWS SAM hace lo siguiente por usted:

  • Implementa nuevas versiones de la función de Lambda y crea automáticamente alias que apuntan a la nueva versión.

  • Cambia gradualmente el tráfico de clientes a la nueva versión hasta que esté satisfecho de que funciona como se esperaba. Si una actualización no funciona correctamente, puede deshacer los cambios.

  • Define funciones de prueba previas y posteriores al tráfico para verificar que el código recién implementado está configurado correctamente y que la aplicación funciona como se espera.

  • Si se activan las CloudWatch alarmas, revierte automáticamente el despliegue.

nota

Si habilita los despliegues graduales a través de su AWS SAM plantilla, se creará automáticamente un CodeDeploy recurso para usted. Puede ver el CodeDeploy recurso directamente a través del AWS Management Console.

Ejemplo

El siguiente ejemplo demuestra el uso de la función Lambda CodeDeploy para trasladar gradualmente a los clientes a la versión recién implementada:

Resources: MyLambdaFunction: Type: AWS::Serverless::Function Properties: Handler: index.handler Runtime: nodejs12.x CodeUri: s3://bucket/code.zip AutoPublishAlias: live DeploymentPreference: Type: Canary10Percent10Minutes Alarms: # A list of alarms that you want to monitor - !Ref AliasErrorMetricGreaterThanZeroAlarm - !Ref LatestVersionErrorMetricGreaterThanZeroAlarm Hooks: # Validation Lambda functions that are run before & after traffic shifting PreTraffic: !Ref PreTrafficLambdaFunction PostTraffic: !Ref PostTrafficLambdaFunction

Estas revisiones de la AWS SAM plantilla hacen lo siguiente:

  • AutoPublishAlias: Al añadir esta propiedad y especificar un nombre de alias, AWS SAM:

    • Detecta cuándo se está implementando código nuevo, en función de los cambios en el Amazon S3 de la función Lambda. URI

    • Crea y publica una versión actualizada de esa función con el código más reciente.

    • Crea un alias con el nombre que usted le indique (a menos que ya exista un alias) y apunta a la versión actualizada de la función de Lambda. Las invocaciones de la función deben utilizar el cualificador de alias para poder usar esta característica. Si no está familiarizado con el control de versiones y los alias de las funciones de Lambda, consulte Control de versiones y alias de las funciones de AWS Lambda.

  • Deployment Preference Type: En el ejemplo anterior, el 10 por ciento del tráfico de clientes se desvía inmediatamente a la nueva versión. Transcurridos 10 minutos, todo el tráfico se desvía a la nueva versión. Sin embargo, si las pruebas previas o posteriores al tráfico fallan, o si se activa una CloudWatch alarma, revierte la CodeDeploy implementación. Puede especificar cómo debe desviarse el tráfico entre versiones de las siguientes maneras:

    • Canary: el tráfico se desvía en dos incrementos. Puede elegir entre opciones de valores controlados predefinidos. Las opciones especifican el porcentaje de tráfico que se desvía a la versión actualizada de la función de Lambda en el primer incremento y el intervalo, en minutos, antes de que se desvíe el tráfico restante en el segundo incremento.

    • Linear: El tráfico se desvía en incrementos iguales con el mismo número de minutos entre incrementos. Puede elegir opciones lineales predefinidas que especifiquen el porcentaje de tráfico desviado en cada incremento y el número de minutos entre cada incremento.

    • AllAtOnce: todo el tráfico se desvía a la vez desde la función de Lambda original a la versión de la función de Lambda actualizada.

    En la siguiente tabla se describen otras opciones de cambio de tráfico que están disponibles además de la utilizada en el ejemplo.

    Tipo de preferencia de implementación

    Canary10Percent30Minutes

    Canary10Percent5Minutes

    Canary10Percent10Minutes

    Canary10Percent15Minutes

    Lineal: 10 (10 minutos) PercentEvery

    Lineal PercentEvery 10:1 minuto

    Lineal: 10PercentEvery, 2 minutos

    Lineal: 10PercentEvery, 3 minutos

    AllAtOnce

  • Alarms: Se trata de CloudWatch alarmas que se activan por cualquier error provocado por la implementación. Cuando se detectan, anulan automáticamente la implementación. Por ejemplo, si el código actualizado que está implementando provoca errores en la aplicación. Otro ejemplo es si alguna métrica AWS Lambdao una CloudWatch métrica personalizada que especificó ha superado el umbral de alarma.

  • Hooks: funciones de prueba anteriores y posteriores al tráfico que realizan comprobaciones antes de que el tráfico empiece a desviarse a la nueva versión y una vez completado el desvío de tráfico.

    • PreTraffic: Antes de que comience el cambio de tráfico, CodeDeploy invoca la función Lambda previa al enlace de tráfico. Esta función Lambda debe volver a llamar CodeDeploy e indicar que se ha realizado correctamente o se ha producido un error. Si la función falla, se interrumpe e informa del error a. AWS CloudFormation Si la función se ejecuta correctamente, CodeDeploy pasa al cambio de tráfico.

    • PostTraffic: Una vez finalizado el cambio de tráfico, CodeDeploy invoca la función Lambda posterior al gancho de tráfico. Esto es similar a lo que ocurre antes del bloqueo de tráfico, en el que la función debe volver a llamar CodeDeploy para informar de un éxito o un fracaso. Utilice enlaces posteriores al tráfico para ejecutar pruebas de integración u otras acciones de validación.

    Para obtener más información, consulte SAMReference to Safe Deployments.

Implementación gradual de una función de Lambda por primera vez.

Cuando se implementa una función Lambda de forma gradual, se CodeDeploy requiere una versión de función previamente implementada desde la que desviar el tráfico. Por lo tanto, su primera implementación debe realizarse en dos pasos:

  • Paso 1: implemente la función de Lambda y cree alias automáticamente con AutoPublishAlias.

  • Paso 2: realice su implementación gradual con DeploymentPreference

Al realizar el primer despliegue gradual en dos pasos, se obtiene CodeDeploy una versión anterior de la función Lambda desde la que desplazar el tráfico.

Paso 1: implementación de la función de Lambda

Resources: MyLambdaFunction: Type: AWS::Serverless::Function Properties: Handler: index.handler Runtime: nodejs12.x CodeUri: s3://bucket/code.zip AutoPublishAlias: live

Paso 2: realizar la implementación gradual

Resources: MyLambdaFunction: Type: AWS::Serverless::Function Properties: Handler: index.handler Runtime: nodejs12.x CodeUri: s3://bucket/code.zip AutoPublishAlias: live DeploymentPreference: Type: Canary10Percent10Minutes Alarms: # A list of alarms that you want to monitor - !Ref AliasErrorMetricGreaterThanZeroAlarm - !Ref LatestVersionErrorMetricGreaterThanZeroAlarm Hooks: # Validation Lambda functions that are run before and after traffic shifting PreTraffic: !Ref PreTrafficLambdaFunction PostTraffic: !Ref PostTrafficLambdaFunction

Más información

Para ver un ejemplo práctico de cómo configurar una implementación gradual, consulte el Módulo 5: implementaciones de valores controlados en el taller completo de AWS SAM .