Implantação gradual de aplicações sem servidor com o AWS SAM - AWS Serverless Application Model

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Implantação gradual de aplicações sem servidor com o AWS SAM

AWS Serverless Application Model (AWS SAM) vem embutido com o CodeDeploy para fornecer implantações AWS Lambda graduais. Com apenas algumas linhas de configuração, faz o AWS SAM seguinte para você:

  • Implanta novas versões da sua função do Lambda e cria automaticamente aliases que apontam para a nova versão.

  • Mude gradualmente o tráfego do cliente para a nova versão até que você esteja satisfeito com o funcionamento esperado. Se uma atualização não funcionar corretamente, você poderá reverter as alterações.

  • Define funções de teste pré-tráfego e pós-tráfego para verificar se o código recém-implantado está configurado corretamente e se seu aplicativo opera conforme o esperado.

  • Reverte automaticamente a implantação se os alarmes do CloudWatch forem acionados.

nota

Se você habilitar implantações graduais por meio do seu modelo AWS SAM, um recurso do CodeDeploy será criado automaticamente para você. Você pode visualizar o recurso CodeDeploy diretamente por meio do AWS Management Console.

Exemplo

O exemplo a seguir demonstra o uso do CodeDeploy para transferir gradualmente os clientes para sua versão recém-implantada da função do Lambda:

Resources: MyLambdaFunction: Type: AWS::Serverless::Function Properties: Handler: index.handler Runtime: nodejs20.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

Essas revisões do AWS SAM modelo fazem o seguinte:

  • AutoPublishAlias: Ao adicionar essa propriedade e especificar um nome de alias, AWS SAM:

    • Detecta quando um novo código está sendo implantado, com base em alterações no URI do Amazon S3 da função do Lambda.

    • Cria e publica uma versão atualizada dessa função com o código mais recente.

    • Cria um alias com um nome fornecido por você (a menos que já exista um alias) e aponta para a versão atualizada da função do Lambda. As invocações de função devem usar o qualificador de alias para aproveitar isso. Se você não estiver familiarizado com o controle de versão e os aliases da função do Lambda, consulte AWS Lambda Controle de versão e aliases de funções.

  • Deployment Preference Type: No exemplo anterior, 10% do seu tráfego de clientes é imediatamente transferido para sua nova versão. Após 10 minutos, todo o tráfego é transferido para a nova versão. No entanto, se os testes pré ou pós-tráfego falharem, ou se um alarme do CloudWatch for acionado, o CodeDeploy reverterá sua implantação. É possível especificar como o tráfego deve ser transferido entre versões das seguintes maneiras:

    • Canary: o tráfego é deslocado em dois incrementos. É possível escolher entre opções de canário predefinidas. As opções especificam a porcentagem de tráfego que é transferida para a versão atualizada da função do Lambda no primeiro incremento e o intervalo, em minutos, antes que o tráfego restante seja transferido no segundo incremento.

    • Linear: o tráfego é deslocado em incrementos iguais com um número igual de minutos entre cada incremento. Você pode escolher entre opções lineares predefinidas que especificam a porcentagem de tráfego deslocado em cada incremento e o número de minutos entre cada incremento.

    • AllAtOnce: todo o tráfego é deslocado da função do Lambda original para a versão da função do Lambda atualizada de uma única vez.

    A tabela a seguir descreve outras opções de mudança de tráfego que estão disponíveis além da usada no exemplo.

    Tipo de preferência de implantação

    Canary10Percent30Minutes

    Canary10Percent5Minutes

    Canary10Percent10Minutes

    Canary10Percent15Minutes

    Linear10PercentEvery10Minutes

    Linear10PercentEvery1Minute

    Linear10PercentEvery2Minutes

    Linear10PercentEvery3Minutes

    AllAtOnce

  • Alarms: esses são os alarmes do CloudWatch que são disparados por quaisquer erros gerados pela implantação. Quando encontrados, eles revertem automaticamente sua implantação. Por exemplo, se o código atualizado que você está implantando causar erros no aplicativo. Outro exemplo é se algum AWS Lambda ou métrica personalizada do CloudWatch que você especificou violou o limite de alarme.

  • Hooks: são funções de teste pré e pós-tráfego que executam verificações antes do início da mudança de tráfego para a nova versão e após a conclusão da mudança de tráfego.

    • PreTraffic: antes do início da mudança de tráfego, o CodeDeploy invoca a função do Lambda de pré-gancho de tráfego. Essa função do Lambda deve chamar CodeDeploy e indicar sucesso ou falha. Se a função falhar, ela aborta e reporta uma falha para o AWS CloudFormation. Se a função for bem-sucedida, o CodeDeploy prosseguirá com o deslocamento de tráfego.

    • PostTraffic: Após a conclusão da mudança de tráfego, o CodeDeploy invoca a função do Lambda de gancho pós-tráfego. Ela é semelhante ao ganchos de pré-tráfego, em que a função deve chamar o CodeDeploy novamente para informar sucesso ou falha. Use ganchos de pós-tráfego para executar testes de integração ou outras ações de validação.

    Para obter mais informações, consulte Referência do SAM para implantações seguras.

Implantação gradual de uma função do Lambda pela primeira vez

Ao implantar gradualmente uma função do Lambda, o CodeDeploy exige uma versão de função implantada anteriormente para transferir o tráfego. Portanto, sua primeira implantação deve ser realizada em duas etapas:

  • Etapa 1: implante sua função do Lambda e crie aliases automaticamente com o AutoPublishAlias.

  • Etapa 2: Execute sua implantação gradual com o DeploymentPreference.

Executar sua primeira implantação gradual em duas etapas dá ao CodeDeploy uma versão anterior da função do Lambda da qual deslocar o tráfego.

Etapa 1: Implantação da função do Lambda

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

Etapa 2: Execute sua implantação gradual

Resources: MyLambdaFunction: Type: AWS::Serverless::Function Properties: Handler: index.handler Runtime: nodejs20.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

Saiba mais

Para ver um exemplo prático de configuração de uma implantação gradual, consulte o Módulo 5 - Implantações canário no The Complete AWS SAMWorkshop.