Implantação gradual de aplicativos com tecnologia sem servidor - 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 aplicativos com tecnologia sem servidor

AWS Serverless Application Model(AWS SAM) vem embutido CodeDeploypara fornecer AWS Lambda implantações 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 CloudWatch os alarmes forem acionados.

nota

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

Exemplo

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

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

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 seus testes de pré-tráfego ou pós-tráfego falharem, ou se um CloudWatch alarme for acionado, CodeDeploy reverte 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

    PercentEveryLinear 10 10 minutos

    PercentEveryLinear 10 1 minuto

    PercentEveryLinear 10 2 minutos

    PercentEveryLinear 10 3 minutos

    AllAtOnce

  • Alarms: são CloudWatch alarmes acionados 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 alguma CloudWatch métrica personalizada especificada por você AWS Lambdaviolou 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, CodeDeploy invoca a função Lambda do gancho de pré-tráfego. Essa função Lambda deve retornar 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, CodeDeploy prossiga com a mudança de tráfego.

    • PostTraffic: após a conclusão da mudança de tráfego, CodeDeploy invoca a função Lambda do gancho pós-tráfego. Isso é semelhante ao gancho pré-tráfego, em que a função deve retornar para CodeDeploy relatar um sucesso ou uma 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 uma função Lambda gradualmente CodeDeploy , é necessária 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 fornece CodeDeploy uma versão anterior da função Lambda da qual transferir o tráfego.

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

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

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.