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
-
Crie um diretório chamado
SAM-Tutorial. -
No diretório
SAM-Tutorial, crie um arquivo chamadotemplate.yml. -
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
AutoPublishAliasno modelo a vincula a um alias chamadolive. 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 APIPutLifecycleEventHookExecutionStatus. Se houver falha em um teste de validação, haverá falha na implantação e ela será revertida.-
CodeDeployHook_beforeAllowTrafficé executado durante o ganchoBeforeAllowTraffic. -
CodeDeployHook_afterAllowTrafficé executado durante o ganchoAfterAllowTraffic.
O nome das duas funções começa com
CodeDeployHook_. A funçãoCodeDeployRoleForLambdapermite chamadas para o métodoinvokedo 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
AutoPublishAliasinforma à estrutura para detectar quando a funçãomyDateTimeFunctionmuda e implanta-a usando o aliaslive. - 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
Hooksespecifica as funções a serem executadas durante ganchos de evento de ciclo de vida.PreTrafficespecifica a função que é executada durante o ganchoBeforeAllowTraffic.PostTrafficespecifica a função que é executada durante o ganchoAfterAllowTraffic. - Permissões para o Lambda invocar outra função do Lambda
-
A permissão
lambda:InvokeFunctionespecificada concede à função usada pelo aplicativo SAM do AWS permissão para invocar uma função do Lambda. Isso é necessário quando as funçõesCodeDeployHook_beforeAllowTrafficeCodeDeployHook_afterAllowTrafficinvocam a função do Lambda implantada durante os testes de validação.