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 AWS SAM modelo
Crie um arquivo AWS SAM de modelo que especifique os componentes em sua infraestrutura.
Como criar seu modelo do AWS SAM
-
Crie um diretório chamado
SAM-Tutorial
. -
No diretório
SAM-Tutorial
, crie um arquivo chamadotemplate.yml
. -
Copie o YAML código a seguir em
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 chamadolive
. 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 seuPutLifecycleEventHookExecutionStatus
API método. 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çãoCodeDeployRoleForLambda
permite chamadas para o métodoinvoke
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 CodeDeploy APIReferência. -
- Detecção automática de uma função do Lambda atualizada
-
O termo
AutoPublishAlias
informa à estrutura para detectar quando a funçãomyDateTimeFunction
muda e implanta-a usando o aliaslive
. - 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 AWS SAM modelo. 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 ganchoBeforeAllowTraffic
.PostTraffic
especifica a função que é executada durante o ganchoAfterAllowTraffic
. - Permissões para o Lambda invocar outra função do Lambda
-
A
lambda:InvokeFunction
permissão especificada concede à função usada pelo AWS SAM aplicativo permissão para invocar uma função Lambda. Isso é necessário quando as funçõesCodeDeployHook_beforeAllowTraffic
eCodeDeployHook_afterAllowTraffic
invocam a função do Lambda implantada durante os testes de validação.