Criar seu modelo SAM do AWS - AWS CodeDeploy

Criar seu modelo SAM do AWS

Crie um arquivo de modelo SAM do AWS que especifique os componentes em sua infraestrutura.

Como criar seu modelo do SAM AWS
  1. Crie um diretório chamado SAM-Tutorial.

  2. No diretório SAM-Tutorial, crie um arquivo chamado template.yml.

  3. Copie o código YAML a seguir no template.yml. Este é seu modelo do AWS SAM.

    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 # Instructs your myDateTimeFunction is published to an alias named "live". AutoPublishAlias: live # Grants this function permission to call lambda:InvokeFunction Policies: - Version: "2012-10-17" Statement: - Effect: "Allow" Action: - "lambda:InvokeFunction" Resource: '*' DeploymentPreference: # Specifies the deployment configuration Type: Linear10PercentEvery1Minute # Specifies Lambda functions for deployment lifecycle hooks Hooks: PreTraffic: !Ref beforeAllowTraffic PostTraffic: !Ref afterAllowTraffic # Specifies the BeforeAllowTraffic lifecycle hook Lambda function beforeAllowTraffic: Type: AWS::Serverless::Function Properties: Handler: beforeAllowTraffic.handler Policies: - Version: "2012-10-17" # Grants this function permission to call codedeploy:PutLifecycleEventHookExecutionStatus Statement: - Effect: "Allow" Action: - "codedeploy:PutLifecycleEventHookExecutionStatus" Resource: !Sub 'arn:aws:codedeploy:${AWS::Region}:${AWS::AccountId}:deploymentgroup:${ServerlessDeploymentApplication}/*' - Version: "2012-10-17" # Grants this function permission to call lambda:InvokeFunction Statement: - Effect: "Allow" Action: - "lambda:InvokeFunction" Resource: !Ref myDateTimeFunction.Version Runtime: nodejs18.x # Specifies the name of the Lambda hook function FunctionName: 'CodeDeployHook_beforeAllowTraffic' DeploymentPreference: Enabled: false Timeout: 5 Environment: Variables: NewVersion: !Ref myDateTimeFunction.Version # Specifies the AfterAllowTraffic lifecycle hook Lambda function afterAllowTraffic: Type: AWS::Serverless::Function Properties: Handler: afterAllowTraffic.handler Policies: - Version: "2012-10-17" Statement: # Grants this function permission to call codedeploy:PutLifecycleEventHookExecutionStatus - Effect: "Allow" Action: - "codedeploy:PutLifecycleEventHookExecutionStatus" Resource: !Sub 'arn:aws:codedeploy:${AWS::Region}:${AWS::AccountId}:deploymentgroup:${ServerlessDeploymentApplication}/*' - Version: "2012-10-17" Statement: # Grants this function permission to call lambda:InvokeFunction - Effect: "Allow" Action: - "lambda:InvokeFunction" Resource: !Ref myDateTimeFunction.Version Runtime: nodejs18.x # Specifies the name of the Lambda hook function FunctionName: 'CodeDeployHook_afterAllowTraffic' DeploymentPreference: Enabled: false Timeout: 5 Environment: Variables: NewVersion: !Ref myDateTimeFunction.Version

Esse modelo especifica o seguinte. Para obter mais informações, consulte Conceitos de modelo do AWS SAM.

Uma função do Lambda chamada myDateTimeFunction

Quando essa função do Lambda é publicada, a linha AutoPublishAlias no modelo a vincula a um alias chamado live. Mais adiante neste tutorial, uma atualização dessa função aciona uma implantação pelo AWS CodeDeploy que desloca incrementalmente o tráfego de produção da versão original para a versão atualizada.

Duas funções de validação de implantação do Lambda

As funções do Lambda a seguir são executadas durante ganchos do ciclo de vida do CodeDeploy. As funções contêm código que validam a implantação da atualizada myDateTimeFunction. O resultado dos testes de validação é passado para o CodeDeploy usando seu método da API PutLifecycleEventHookExecutionStatus. Se houver falha em um teste de validação, haverá falha na implantação e ela será revertida.

  • CodeDeployHook_beforeAllowTraffic é executado durante o gancho BeforeAllowTraffic.

  • CodeDeployHook_afterAllowTraffic é executado durante o gancho AfterAllowTraffic.

O nome das duas funções começa com CodeDeployHook_. A função CodeDeployRoleForLambda permite chamadas para o método invoke do Lambda somente em funções do Lambda com nomes que começam com esse prefixo. Para obter mais informações, consulte A seção “hooks” AppSpec para uma implantação AWS Lambda e PutLifecycleEventHookExecutionStatus na Referência de API do CodeDeploy.

Detecção automática de uma função do Lambda atualizada

O termo AutoPublishAlias informa à estrutura para detectar quando a função myDateTimeFunction muda e implanta-a usando o alias live.

Uma configuração de implantação

A configuração de implantação determina a taxa na qual seu aplicativo do CodeDeploy desloca o tráfego da versão original da função do Lambda para a nova versão. Esse modelo especifica a configuração de implantação predefinida Linear10PercentEvery1Minute.

nota

É possível especificar uma configuração de implantação personalizada em um modelo SAM do AWS. Para obter mais informações, consulte Create a Deployment Configuration.

Funções de gancho de ciclo de vida de implantação

A seção Hooks especifica as funções a serem executadas durante ganchos de evento de ciclo de vida. PreTraffic especifica a função que é executada durante o gancho BeforeAllowTraffic. PostTraffic especifica a função que é executada durante o gancho AfterAllowTraffic.

Permissões para o Lambda invocar outra função do Lambda

A permissão lambda:InvokeFunction especificada concede à função usada pelo aplicativo SAM do AWS permissão para invocar uma função do Lambda. Isso é necessário quando as funções CodeDeployHook_beforeAllowTraffic e CodeDeployHook_afterAllowTraffic invocam a função do Lambda implantada durante os testes de validação.