Cómo cargar archivos locales durante la implementación con AWS SAMCLI - AWS Serverless Application Model

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.

Cómo cargar archivos locales durante la implementación con AWS SAMCLI

Al desarrollar, a menudo le resultará beneficioso dividir el código de la aplicación en archivos separados para organizar y administrar mejor la aplicación. Un ejemplo básico de esto es separar el código de AWS Lambda función del código de infraestructura. Para ello, organiza el código de la función Lambda en un subdirectorio del proyecto y hace referencia a su ruta local dentro de la plantilla (). AWS Serverless Application Model AWS SAM

Cuando despliega su aplicación en Nube de AWS, AWS CloudFormation requiere que sus archivos locales se carguen primero en un AWS servicio accesible, como Amazon Simple Storage Service (Amazon S3). Puede utilizar la CLI de AWS SAM para facilitar este proceso de forma automática. Utilice el comando sam deploy o sam package para hacer lo siguiente:

  1. Cargue automáticamente sus archivos locales a un AWS servicio accesible.

  2. Actualice automáticamente la plantilla de su solicitud para hacer referencia a la nueva ruta del archivo.

Demostración: utilice la CLI de AWS SAM para cargar el código de la función de Lambda

En esta demostración, inicializamos la aplicación Hello World de ejemplo con un tipo de paquete .zip para la función de Lambda. Utilizamos la CLI de AWS SAM para cargar automáticamente el código de la función de Lambda en Amazon S3 y hacer referencia a su nueva ruta en la plantilla de aplicación.

Primero, ejecutamos sam init para inicializar la aplicación Hello World.

$ sam init ... Which template source would you like to use? 1 - AWS Quick Start Templates 2 - Custom Template Location Choice: 1 Choose an AWS Quick Start application template 1 - Hello World Example 2 - Multi-step workflow ... Template: 1 Use the most popular runtime and package type? (Python and zip) [y/N]: y Would you like to enable X-Ray tracing on the function(s) in your application? [y/N]: ENTER Would you like to enable monitoring using CloudWatch Application Insights? For more info, please view https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch-application-insights.html [y/N]: ENTER Project name [sam-app]: demo ----------------------- Generating application: ----------------------- Name: demo Runtime: python3.9 Architectures: x86_64 Dependency Manager: pip Application Template: hello-world Output Directory: . Configuration file: demo/samconfig.toml ...

El código de la función de Lambda está organizado en el subdirectorio hello_world de nuestro proyecto.

demo
├── README.md
├── hello_world
│   ├── __init__.py
│   ├── app.py
│   └── requirements.txt
├── template.yaml
└── tests

En nuestra AWS SAM plantilla, hacemos referencia a la ruta local al código de nuestra función Lambda mediante la CodeUri propiedad.

AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 ... Resources: HelloWorldFunction: Type: AWS::Serverless::Function # More info about Function Resource: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction Properties: CodeUri: hello_world/ Handler: app.lambda_handler Runtime: python3.9 ...

A continuación, ejecute sam build para crear e implementar la aplicación.

$ sam build Starting Build use cache Manifest file is changed (new hash: 3298f13049d19cffaa37ca931dd4d421) or dependency folder (.aws-sam/deps/7896875f-9bcc-4350-8adb-2c1d543627a1) is missing for (HelloWorldFunction), downloading dependencies and copying/building source Building codeuri: /Users/.../demo/hello_world runtime: python3.9 metadata: {} architecture: x86_64 functions: HelloWorldFunction Running PythonPipBuilder:CleanUp Running PythonPipBuilder:ResolveDependencies Running PythonPipBuilder:CopySource Running PythonPipBuilder:CopySource Build Succeeded Built Artifacts : .aws-sam/build Built Template : .aws-sam/build/template.yaml ...

A continuación, ejecute sam deploy --guided para crear e implementar la aplicación.

$ sam deploy --guided Configuring SAM deploy ====================== Looking for config file [samconfig.toml] : Found Reading default arguments : Success Setting default arguments for 'sam deploy' ========================================= Stack Name [demo]: ENTER AWS Region [us-west-2]: ENTER #Shows you resources changes to be deployed and require a 'Y' to initiate deploy Confirm changes before deploy [Y/n]: n #SAM needs permission to be able to create roles to connect to the resources in your template Allow SAM CLI IAM role creation [Y/n]: ENTER #Preserves the state of previously provisioned resources when an operation fails Disable rollback [y/N]: ENTER HelloWorldFunction may not have authorization defined, Is this okay? [y/N]: y Save arguments to configuration file [Y/n]: ENTER SAM configuration file [samconfig.toml]: ENTER SAM configuration environment [default]: ENTER Looking for resources needed for deployment: ... Saved arguments to config file Running 'sam deploy' for future deployments will use the parameters saved above. The above parameters can be changed by modifying samconfig.toml Learn more about samconfig.toml syntax at https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-cli-config.html File with same data already exists at demo/da3c598813f1c2151579b73ad788cac8, skipping upload Deploying with following values =============================== Stack name : demo Region : us-west-2 Confirm changeset : False Disable rollback : False Deployment s3 bucket : aws-sam-cli-managed-default-samclisourcebucket-1a4x26zbcdkqr Capabilities : ["CAPABILITY_IAM"] Parameter overrides : {} Signing Profiles : {} Initiating deployment ===================== ... Waiting for changeset to be created.. CloudFormation stack changeset ------------------------------------------------------------------------------------------------- Operation LogicalResourceId ResourceType Replacement ------------------------------------------------------------------------------------------------- + Add HelloWorldFunctionHell AWS::Lambda::Permissio N/A oWorldPermissionProd n + Add HelloWorldFunctionRole AWS::IAM::Role N/A ... ------------------------------------------------------------------------------------------------- Changeset created successfully. arn:aws:cloudformation:us-west-2:012345678910:changeSet/samcli-deploy1680906292/1164338d-72e7-4593-a372-f2b3e67f542f 2023-04-07 12:24:58 - Waiting for stack create/update to complete CloudFormation events from stack operations (refresh every 5.0 seconds) ------------------------------------------------------------------------------------------------- ResourceStatus ResourceType LogicalResourceId ResourceStatusReason ------------------------------------------------------------------------------------------------- CREATE_IN_PROGRESS AWS::IAM::Role HelloWorldFunctionRole - CREATE_IN_PROGRESS AWS::IAM::Role HelloWorldFunctionRole Resource creation Initiated ... ------------------------------------------------------------------------------------------------- CloudFormation outputs from deployed stack ------------------------------------------------------------------------------------------------- Outputs ------------------------------------------------------------------------------------------------- Key HelloWorldFunctionIamRole Description Implicit IAM Role created for Hello World function Value arn:aws:iam::012345678910:role/demo-HelloWorldFunctionRole-VQ4CU7UY7S2K Key HelloWorldApi Description API Gateway endpoint URL for Prod stage for Hello World function Value https://satnon55e9.execute-api.us-west-2.amazonaws.com/Prod/hello/ Key HelloWorldFunction Description Hello World Lambda Function ARN Value arn:aws:lambda:us-west-2:012345678910:function:demo- HelloWorldFunction-G14inKTmSQvK ------------------------------------------------------------------------------------------------- Successfully created/updated stack - demo in us-west-2

Durante la implementación, la CLI de AWS SAM carga automáticamente el código de la función de Lambda a Amazon S3 y actualiza la plantilla. Nuestra plantilla modificada en la AWS CloudFormation consola refleja la ruta del bucket de Amazon S3.

AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 ... Resources: HelloWorldFunction: Type: AWS::Serverless::Function Properties: CodeUri: s3://aws-sam-cli-managed-default-samclisourcebucket-1a4x26zbcdkqr/demo/da3c598813f1c2151579b73ad788cac8 Handler: app.lambda_handler ...

Casos de uso admitidos

AWS SAMCLIPuede facilitar automáticamente este proceso para varios tipos de archivos, tipos de AWS CloudFormation recursos y AWS CloudFormation macros.

Tipos de archivos

Se admiten archivos de aplicaciones e imágenes de Docker.

AWS CloudFormation tipos de recursos

La siguiente es una lista de los tipos de recursos compatibles y sus propiedades:

Recurso Propiedades
AWS::ApiGateway::RestApi BodyS3Location
AWS::ApiGatewayV2::Api BodyS3Location
AWS::AppSync:FunctionConfiguration

CodeS3Location

RequestMappingTemplateS3Location

ResponseMappingTemplateS3Location

AWS::AppSync::GraphQLSchema DefinitionS3Location
AWS::AppSync::Resolver

CodeS3Location

RequestMappingTemplateS3Location

ResponseMappingTemplateS3Location

AWS::CloudFormation::ModuleVersion ModulePackage
AWS::CloudFormation::ResourceVersion SchemaHandlerPackage
AWS::ECR::Repository RepositoryName
AWS::ElasticBeanstalk::ApplicationVersion SourceBundle
AWS::Glue::Job Command.ScriptLocation
AWS::Lambda::Function

Code

Code.ImageUri

AWS::Lambda::LayerVersion Content
AWS::Serverless::Api DefinitionUri
AWS::Serverless::Function

CodeUri

ImageUri

AWS::Serverless::GraphQLApi

SchemaUri

Function.CodeUri

Resolver.CodeUri

AWS::Serverless::HttpApi DefinitionUri
AWS::Serverless::LayerVersion ContentUri
AWS::Serverless::StateMachine DefinitionUri
AWS::StepFunctions::StateMachine DefinitionS3Location

AWS CloudFormation macros

Se admiten los archivos a los que se hace referencia mediante la macro de transformación de AWS::Include.

Más información

Para obtener más información sobre la AWS::Include transformación, consulte la AWS::Include transformación en la Guía del AWS CloudFormation usuario.

Para ver un ejemplo del uso de la AWS::Include transformación en una AWS SAM plantilla, consulta el patrón API HTTP a SQS de API Gateway en Serverless Land.