

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
<a name="tutorial-lambda-sam-template"></a>

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 denominado `SAM-Tutorial`. 

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

1.  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](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-template-basics.html).

**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 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 [AppSpec seção 'hooks' para uma implantação do AWS Lambda](reference-appspec-file-structure-hooks.md#appspec-hooks-lambda) e [PutLifecycleEventHookExecutionStatus](https://docs.aws.amazon.com/codedeploy/latest/APIReference/API_PutLifecycleEventHookExecutionStatus.html) na *Referência da 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 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`.   
 Você não pode especificar uma configuração de implantação personalizada em um modelo do AWS SAM. Para obter mais informações, consulte [Crie uma configuração de implantação com CodeDeploy](deployment-configurations-create.md).

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