É possível usar um alias ponderado para dividir o tráfego entre duas diferentes versões da mesma função. Com essa abordagem, você pode testar novas versões de funções com uma pequena porcentagem de tráfego e reverter rapidamente, caso necessário. Esse processo é conhecido como implantação canária. Implantações canárias diferem de implantações azul/verde por exporem a nova versão a apenas uma parte das solicitações, em vez de alternar todo o tráfego de uma só vez.
Você pode apontar um alias para um máximo de duas versões de função do Lambda. As versões devem atender aos seguintes critérios:
-
As duas versões devem ter a mesma função de execução.
-
Ambas as versões devem ter a mesma configuração de fila de mensagens mortas ou configuração de nenhuma fila de mensagens mortas.
-
Ambas as versões devem ser publicadas. O alias não pode apontar para
$LATEST
.
nota
O Lambda usa um modelo probabilístico simples para distribuir o tráfego entre as duas versões de função. Em níveis de tráfego baixos, você pode ver uma alta variação entre a porcentagem configurada e real de tráfego em cada versão. Se sua função usa simultaneidade provisionada, você pode evitarInvocações de transbordamentoconfigurando um número maior de instâncias de simultaneidade provisionadas durante o tempo em que o roteamento de alias está ativo.
Criar um alias ponderado
Para configurar o roteamento em um alias usando o console
nota
Verifique se a função tem pelo menos duas versões publicadas. Para criar versões adicionais, siga as instruções em Como criar versões de função.
Abra a página Funções
do console do Lambda. -
Escolha uma função.
-
Escolha Aliases e, em seguida, escolha Create alias (Criar alias).
-
Na página Create alias (Criar alias), faça o seguinte:
-
Insira um Name (Nome) para o alias.
-
(Opcional) Insira uma Description (Descrição) do alias.
-
Em Version (Versão), escolha a primeira versão da função para a qual você deseja que o alias aponte.
-
Expanda Weighted alias (Alias ponderado).
-
Em Additional version (Versão adicional), escolha a segunda versão da função para a qual você deseja que o alias aponte.
-
Em Weight (%) (Peso (%)), insira um valor de peso para a função. Peso é a porcentagem do tráfego atribuído a essa versão quando o alias é invocado. A primeira versão recebe o peso residual. Por exemplo, se você especificar 10% para Additional version (Versão adicional), a primeira versão receberá automaticamente a atribuição de 90 por cento.
-
Escolha Salvar.
-
Determinar qual versão foi invocada
Ao configurar pesos de tráfego entre duas versões da função, há duas maneiras de determinar a versão da função do Lambda que foi chamada:
-
CloudWatch Logs: o Lambda emite automaticamente uma entrada de log
START
que contém o ID da versão invocada em cada invocação da função. Exemplo: .START RequestId: 1dh194d3759ed-4v8b-a7b4-1e541f60235f Version:
2
Para invocações de alias, o Lambda usa a dimensão
ExecutedVersion
para filtrar os dados de métrica pela versão invocada. Para ter mais informações, consulte Exibição de métricas de funções do Lambda. -
Carga de resposta (invocações síncronas) – As respostas às invocações de função síncrona incluem um cabeçalho
x-amz-executed-version
para indicar qual versão de função foi invocada.
Criar uma implantação contínua com aliases ponderados
Use o AWS CodeDeploy e o AWS Serverless Application Model (AWS SAM) para criar uma implantação contínua que detecta automaticamente alterações no código da função, implanta uma nova versão da função e aumenta gradualmente a quantidade de tráfego que flui para essa nova versão. A quantidade de tráfego e a taxa de aumento são parâmetros que você pode configurar.
Em uma implantação contínua, o AWS SAM executa estas tarefas:
-
Configura sua função do Lambda e cria um alias. A configuração de roteamento do alias ponderado é o recurso subjacente que implementa a implantação contínua.
-
Cria um aplicativo CodeDeploy e um grupo de implantação. O grupo de implantação gerencia a implantação contínua e a reversão, se necessário.
-
Detecta quando você cria uma nova versão da sua função do Lambda.
-
Aciona o CodeDeploy para iniciar a implantação da nova versão.
Exemplo de modelo AWS SAM
O exemplo a seguir mostra um Modelo do AWS SAM para uma implantação contínua simples.
AWSTemplateFormatVersion : '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: A sample SAM template for deploying Lambda functions
Resources:
# Details about the myDateTimeFunction Lambda function
myDateTimeFunction:
Type: AWS::Serverless::Function
Properties:
Handler: myDateTimeFunction.handler
Runtime: nodejs18.x
# Creates an alias named "live" for the function, and automatically publishes when you update the function.
AutoPublishAlias: live
DeploymentPreference:
# Specifies the deployment configuration
Type: Linear10PercentEvery2Minutes
Este modelo define uma função do Lambda denominada myDateTimeFunction
com as propriedades a seguir.
- AutoPublishAlias
-
A propriedade
AutoPublishAlias
cria um alias chamadolive
. Além disso, o framework AWS SAM detecta automaticamente quando você salva um código novo para a função. O framework publica uma nova versão da função e atualiza o alias dolive
para apontar para a nova versão. - DeploymentPreference
-
A propriedade
DeploymentPreference
determina a taxa na qual a aplicação do CodeDeploy muda o tráfego da versão original da função do Lambda para a nova versão. O valorLinear10PercentEvery2Minutes
muda dez por cento adicionais do tráfego para a nova versão a cada dois minutos.Para obter uma lista das configurações de implantação predefinidas, consulte Configurações de implantação.
Para obter mais informações sobre como criar implantações contínuas com o CodeDeploy e o AWS SAM, consulte o seguinte: