Crie seu modelo de AWS SAM - AWS CodeDeploy

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á.

Crie seu modelo de AWS SAM

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

Para criar seu modelo de AWS SAM
  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. Posteriormente neste tutorial, uma atualização dessa função aciona uma implantação AWS CodeDeploy que transfere 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 seguintes funções do Lambda são executadas durante os ganchos do ciclo de CodeDeploy vida. As funções contêm código que validam a implantação da myDateTimeFunction atualizada. O resultado dos testes de validação é passado para o CodeDeploy uso de seu método de PutLifecycleEventHookExecutionStatus API. 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 AppSpec seção 'hooks' para uma implantação do AWS Lambda e PutLifecycleEventHookExecutionStatusna Referência CodeDeploy da API.

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 CodeDeploy aplicativo transfere o tráfego da versão original da função Lambda para a nova versão. Esse modelo especifica a configuração de implantação predefinida Linear10PercentEvery1Minute.

nota

Você não pode especificar uma configuração de implantação personalizada em um modelo do AWS SAM. Para ter 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 lambda:InvokeFunction permissão especificada concede à função usada pelo aplicativo AWS SAM permissão para invocar uma função 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.