Cree su plantilla AWS SAM - AWS CodeDeploy

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Cree su plantilla AWS SAM

Cree un archivo AWS SAM de plantilla que especifique los componentes de su infraestructura.

Para crear la plantilla AWS SAM, realice el siguiente procedimiento:
  1. Cree un directorio llamado SAM-Tutorial.

  2. En el directorio SAM-Tutorial, cree un archivo denominado template.yml.

  3. Copie el siguiente YAML código entemplate.yml. Esta es la plantilla de 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

Esta plantilla especifica lo siguiente. Para obtener más información, consulte Conceptos de la plantilla de AWS SAM.

Una función de Lambda llamada myDateTimeFunction

Cuando se publica esta función de Lambda, la línea AutoPublishAlias de la plantilla la vincula a un alias denominado live. Más adelante en este tutorial, una actualización de esta función desencadena una implementación AWS CodeDeploy que desplaza gradualmente el tráfico de producción de la versión original a la versión actualizada.

Dos funciones de validación de implementación de Lambda

Las siguientes funciones de Lambda se ejecutan durante los enlaces CodeDeploy del ciclo de vida. Las funciones contienen código que valida la implementación de myDateTimeFunction actualizado. El resultado de las pruebas de validación se transfiere CodeDeploy mediante su PutLifecycleEventHookExecutionStatus API método. Si la prueba de validación falla, se produce un error en la implementación y se revisa.

  • CodeDeployHook_beforeAllowTraffic se ejecuta durante el enlace de BeforeAllowTraffic.

  • CodeDeployHook_afterAllowTraffic se ejecuta durante el enlace de AfterAllowTraffic.

El nombre de ambas funciones comienza por CodeDeployHook_. El rol de CodeDeployRoleForLambda permite llamadas al método de invoke de Lambda solo en funciones de Lambda con nombres que comienzan con este prefijo. Para obtener más información, consulte AppSpec sección de «ganchos» para una implementación de AWS Lambda y PutLifecycleEventHookExecutionStatusen la CodeDeploy APIReferencia.

Detección automática de una función de Lambda actualizada

El término AutoPublishAlias indica al marco de trabajo que detecte cuándo cambia la función de myDateTimeFunction y, a continuación, la implementa con el alias live.

Una configuración de implementación

La configuración de despliegue determina la velocidad a la que la CodeDeploy aplicación desplaza el tráfico de la versión original de la función Lambda a la nueva versión. Esta plantilla especifica la configuración de implementación predefinida Linear10PercentEvery1Minute.

nota

No puede especificar una configuración de despliegue personalizada en una AWS SAM plantilla. Para obtener más información, consulte Create a Deployment Configuration.

Funciones de enlace de ciclo de vida de implementación

La sección Hooks especifica las funciones que se van a ejecutar durante los enlaces de eventos del ciclo de vida. PreTraffic especifica la función que se ejecuta durante el enlace BeforeAllowTraffic. PostTraffic especifica la función que se ejecuta durante el enlace AfterAllowTraffic.

Permisos para que Lambda invoque otra función de Lambda

El lambda:InvokeFunction permiso especificado otorga al rol utilizado por la AWS SAM aplicación permiso para invocar una función Lambda. Esto es necesario cuando las funciones CodeDeployHook_beforeAllowTraffic y CodeDeployHook_afterAllowTraffic invocan la función de Lambda implementada durante las pruebas de validación.