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:
-
Cree un directorio llamado
SAM-Tutorial
. -
En el directorio
SAM-Tutorial
, cree un archivo denominadotemplate.yml
. -
Copie el siguiente YAML código en
template.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 denominadolive
. 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 suPutLifecycleEventHookExecutionStatus
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 deBeforeAllowTraffic
. -
CodeDeployHook_afterAllowTraffic
se ejecuta durante el enlace deAfterAllowTraffic
.
El nombre de ambas funciones comienza por
CodeDeployHook_
. El rol deCodeDeployRoleForLambda
permite llamadas al método deinvoke
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 demyDateTimeFunction
y, a continuación, la implementa con el aliaslive
. - 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 enlaceBeforeAllowTraffic
.PostTraffic
especifica la función que se ejecuta durante el enlaceAfterAllowTraffic
. - 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 funcionesCodeDeployHook_beforeAllowTraffic
yCodeDeployHook_afterAllowTraffic
invocan la función de Lambda implementada durante las pruebas de validación.