Tutorial: Implementación de una aplicación Hello World con AWS SAM
En este tutorial, utilizarás la interfaz de AWS Serverless Application Model línea de comandos de (CLI de AWS SAM) para hacer lo siguiente:
-
Inicializa, crea e implementa una aplicación de muestra Hello World
-
Realiza cambios locales y sincronícelos con AWS CloudFormation.
-
Haga pruebas locales en el host de desarrollo.
-
Elimina la aplicación de muestra de la Nube de AWS.
La aplicación de muestra Hello World implementa un backend de API básico. Consta de los recursos siguientes:
-
Amazon API Gateway: punto de conexión de la API que utilizarás para invocar tu función.
-
AWS Lambda: función que procesa la solicitud HTTP API GET y devuelve el mensaje
hello world. -
Rol de AWS Identity and Access Management (IAM): proporciona permisos para que los servicios interactúen de forma segura.
El siguiente diagrama muestra los componentes de esta aplicación:
Requisitos previos
Asegúrate de haber completado lo siguiente:
nota
Si prefiere usar Visual Studio Code para el desarrollo sin servidor, consulte Creación de aplicaciones sin servidor en la Guía del usuario de AWS Toolkit para VS Code para obtener instrucciones paso a paso sobre el uso de la interfaz de VS Code.
Paso 1: inicializar la aplicación de muestra Hello World
En este paso, utilizarás la AWS SAM CLI para crear un proyecto de aplicación de muestra Hello World en su unidad local.
Para inicializar la aplicación de muestra Hello World
-
En la línea de comandos, ejecuta lo siguiente desde el directorio de inicio que desees:
$sam initnota
Este comando inicializa la aplicación sin servidor y crea el directorio del proyecto. El directorio contiene varios archivos y carpetas, como el archivo
template.yaml, el cual es su plantilla de AWS SAM.La versión de Python instalada debe coincidir con la propiedad
Runtimeespecificada entemplate.yaml. Para las cargas de trabajo de producción, recomendamos usar Python 3.12 o versiones anteriores que sean completamente compatibles con los entornos de AWS. Si las versiones de Python no coinciden, se producirán errores de compilación.Para resolver problemas de compatibilidad de versiones:
-
Especifique un tiempo de ejecución compatible durante la inicialización:
sam init --runtime python3.9 -
Modifique la propiedad
Runtimeentemplate.yamldespués de la inicialización
-
-
La AWS SAM CLI te guiará a través de la inicialización de una nueva aplicación. Configura lo siguiente:
-
Selecciona Plantillas de inicio rápido de AWS para elegir una plantilla de inicio.
-
Selecciona la plantilla Ejemplo de Hello World y descárgala.
-
Usa el tiempo de ejecución de Python y el tipo de paquete
zip. -
Para este tutorial, debes prescindir de la opción de rastreo AWS X-Ray. Para obtener más información, consulta ¿Qué es AWS X-Ray? en la Guía para desarrolladores de AWS X-Ray.
-
Para este tutorial, debes prescindir de la monitorización de Información de aplicaciones de Amazon CloudWatch Para obtener más información, consulta Información de aplicaciones de Amazon CloudWatch en la Guía del usuario de Amazon CloudWatch.
-
Para este tutorial, debe desactivar el parámetro de registro estructurado en formato JSON en las funciones de Lambda.
-
Asigna el nombre sam-app a tu aplicación.
Para usar el flujo interactivo de la CLI de AWS SAM:
-
Los corchetes (
[ ]) indican los valores predeterminados. Deja la respuesta en blanco para seleccionar el valor predeterminado. -
Escribe
para sí yypara no.n
A continuación, se muestra un ejemplo de flujo interactivo con
sam init.$sam init...Which template source would you like to use? 1 - AWS Quick Start Templates 2 - Custom Template Location Choice:1Choose an AWS Quick Start application template 1 - Hello World Example 2 - Data processing 3 - Hello World Example with Powertools for AWS Lambda 4 - Multi-step workflow 5 - Scheduled task 6 - Standalone function 7 - Serverless API 8 - Infrastructure event management 9 - Lambda Response Streaming 10 - GraphQLApi Hello World Example 11 - Full Stack 12 - Lambda EFS example 13 - Serverless Connector Hello World Example 14 - Multi-step workflow with Connectors 15 - DynamoDB Example 16 - Machine Learning Template:1Use the most popular runtime and package type? (Python and zip) [y/N]:yWould you like to enable X-Ray tracing on the function(s) in your application? [y/N]:ENTERWould 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]:ENTERWould you like to set Structured Logging in JSON format on your Lambda functions? [y/N]:ENTERProject name [sam-app]:ENTER -
-
La AWS SAM CLI descarga la plantilla inicial y crea la estructura de directorios del proyecto de la aplicación en el equipo local. A continuación, se muestra un ejemplo de resultados del AWS SAM CLI output.
Cloning from https://github.com/aws/aws-sam-cli-app-templates (process may take a moment) ----------------------- Generating application: ----------------------- Name: sam-app Runtime: python3.9 Architectures: x86_64 Dependency Manager: pip Application Template: hello-world Output Directory: . Configuration file: sam-app/samconfig.toml Next steps can be found in the README file at sam-app/README.md Commands you can use next ========================= [*] Create pipeline: cd sam-app && sam pipeline init --bootstrap [*] Validate SAM template: cd sam-app && sam validate [*] Test Function in the Cloud: cd sam-app && sam sync --stack-name {stack-name} --watch -
Desde la línea de comandos, dirígete al directorio
sam-apprecién creado. A continuación se muestra un ejemplo de lo que la CLI de AWS SAM ha creado:nota
Si el comando
treeno se instala automáticamente, ejecute este comando:brew install tree$cd sam-app$tree├── README.md ├── __init__.py ├── events │ └── event.json ├── hello_world │ ├── __init__.py │ ├── app.py │ └── requirements.txt ├── samconfig.toml ├── template.yaml └── tests ├── __init__.py ├── integration │ ├── __init__.py │ └── test_api_gateway.py ├── requirements.txt └── unit ├── __init__.py └── test_handler.py 6 directories, 14 filesAlgunos archivos importantes que hay que destacar:
-
hello_world/app.py: contiene el código de tu función de Lambda. -
hello_world/requirements.txt: contiene cualquier dependencia de Python que tu función de Lambda necesite. -
samconfig.toml: archivo de configuración para tu aplicación que almacena los parámetros predeterminados utilizados por la AWS SAM CLI. -
template.yaml: la plantilla de AWS SAM que contiene el código de infraestructura de la aplicación.
-
¡Ya tienes una aplicación sin servidor creada enteramente en tu equipo local!
Paso 2: crear tu propia aplicación
En este paso, usa AWS SAM CLI para crear la aplicación y prepararla para la implementación. Mientras la está creando, la de AWS SAM CLI crea un directorio de .aws-sam y organiza allí las dependencias de las funciones, el código del proyecto y los archivos del proyecto.
Para crear tu aplicación
-
En tu línea de comandos, desde el directorio del proyecto
sam-app, ejecuta lo siguiente:$sam buildnota
Si no tienes Python en tu equipo local, usa el comando sam build --use-container en su lugar. La AWS SAM CLI creará un contenedor de Docker que incluye el tiempo de ejecución y las dependencias de tu función. Este comando requiere que tengas Docker en tu equipo local. Para instalarDocker, consulta Instalar Docker.
A continuación, se muestra un ejemplo de resultados de la CLI de AWS SAM.
$sam buildStarting Build use cache Manifest file is changed (new hash: 3298f1304...d4d421) or dependency folder (.aws-sam/deps/4d3dfad6-a267-47a6-a6cd-e07d6fae318c) is missing for (HelloWorldFunction), downloading dependencies and copying/building source Building codeuri: /Users/.../Demo/sam-tutorial1/sam-app/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 Commands you can use next ========================= [*] Validate SAM template: sam validate [*] Invoke Function: sam local invoke [*] Test Function in the Cloud: sam sync --stack-name {{stack-name}} --watch [*] Deploy: sam deploy --guidedEl siguiente es un ejemplo abreviado del directorio de
.aws-samcreado por la CLI de AWS SAM:.aws-sam ├── build │ ├── HelloWorldFunction │ │ ├── __init__.py │ │ ├── app.py │ │ └── requirements.txt │ └── template.yaml └── build.toml
Algunos archivos importantes que hay que destacar:
-
build/HelloWorldFunction: contiene el código y las dependencias de tu función de Lambda. La AWS SAM CLI crea un directorio para cada función de tu aplicación. -
build/template.yaml: contiene una copia de la plantilla de AWS SAM a la que CloudFormation hace referencia en el momento de la implementación. -
build.toml: archivo de configuración que almacena los valores de los parámetros predeterminados a los que hace referencia la AWS SAM CLI al crear e implementar la aplicación.
Ahora estás listo o lista para implementar la aplicación en la Nube de AWS.
Paso 3: implementar tu aplicación en la Nube de AWS
nota
Este paso requiere la configuración de credenciales de AWS. Para obtener más información, consulta Paso 5: usa la AWS CLI para configurar AWS las credenciales en AWS SAMRequisitos previos de .
En este paso, utiliza la AWS SAM CLI para implementar la aplicación en la Nube de AWS. La AWS SAM de CLI hará lo siguiente:
-
Guiarte a través de la configuración de los ajustes de la aplicación para la implementación.
-
Cargar tus archivos de aplicación en Amazon Simple Storage Service (Amazon S3).
-
Transformar tu plantilla de AWS SAM en una plantilla de CloudFormation. Luego, carga tu plantilla en el servicio de CloudFormation para aprovisionar tus recursos de AWS.
Para implementar la aplicación
-
En tu línea de comandos, desde el directorio del proyecto
sam-app, ejecuta lo siguiente:$sam deploy --guided -
Sigue el flujo interactivo de la CLI de AWS SAM para configurar los ajustes de la aplicación. Configura lo siguiente:
-
El nombre de la pila de CloudFormation: una pila es una colección de recursos de AWS, que puedes administrar como una única unidad. Para obtener más información, consulta Trabajar con pilas en la Guía del usuario de AWS CloudFormation.
-
La Región de AWS en la que implementar su pila de CloudFormation. Para obtener más información, consulta CloudFormation Puntos de conexión de en la AWS CloudFormation Guía de usuario.
-
Para este tutorial, desactiva confirmar los cambios antes de la implementación.
-
Permitir la creación de roles de IAM: permite a AWS SAM crear el rol de IAM necesario para que el recurso de API Gateway y el recurso de función de Lambda interactúen.
-
Para este tutorial, desactiva deshabilitar la reversión.
-
Permitir HelloWorldFunction sin autorización definida: este mensaje aparece porque tu punto de conexión de la API Gateway está configurado para ser de acceso público, sin autorización. Dado que esta es la configuración prevista para tu aplicación Hello World, deje que la CLI de AWS SAM continúe. Para obtener más información acerca de la autorización de configuración, consulta Control del acceso a la API con la plantilla de AWS SAM.
-
Guardar los argumentos en el archivo de configuración: esto actualizará el archivo
samconfig.tomlde la aplicación con tus preferencias de implementación. -
Selecciona el nombre del archivo de configuración predeterminado.
-
Selecciona el entorno de configuración predeterminado.
A continuación se muestra un ejemplo del flujo interactivo
sam deploy --guided:$sam deploy --guidedConfiguring SAM deploy ====================== Looking for config file [samconfig.toml] : Found Reading default arguments : Success Setting default arguments for 'sam deploy' ========================================= Stack Name [sam-app]:ENTERAWS 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]:ENTERHelloWorldFunction may not have authorization defined, Is this okay? [y/N]:ySave arguments to configuration file [Y/n]:ENTERSAM configuration file [samconfig.toml]:ENTERSAM configuration environment [default]:ENTER -
-
La AWS SAM CLI implementa la aplicación de la siguiente manera:
-
La AWS SAM CLI crea un bucket de Amazon S3 y carga el directorio
.aws-sam. -
La AWS SAM CLI transforma tu plantilla AWS SAM en CloudFormation y la carga al servicio de CloudFormation.
-
CloudFormation aprovisiona tus recursos.
Durante la implementación, la AWS SAM CLI muestra tu progreso. El siguiente es un ejemplo de output:
Looking for resources needed for deployment: Managed S3 bucket: aws-sam-cli-managed-default-samclisam-s3-demo-bucket-1a4x26zbcdkqr A different default S3 bucket can be set in samconfig.toml Parameter "stack_name=sam-app" in [default.deploy.parameters] is defined as a global parameter [default.global.parameters]. This parameter will be only saved under [default.global.parameters] in /Users/.../Demo/sam-tutorial1/sam-app/samconfig.toml. 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 sam-app/da3c598813f1c2151579b73ad788cac8, skipping upload Deploying with following values =============================== Stack name : sam-app Region : us-west-2 Confirm changeset : False Disable rollback : False Deployment s3 bucket : aws-sam-cli-managed-default-samclisam-s3-demo-bucket-1a4x26zbcdkqr Capabilities : ["CAPABILITY_IAM"] Parameter overrides : {} Signing Profiles : {} Initiating deployment ===================== File with same data already exists at sam-app/2bebf67c79f6a743cc5312f6dfc1efee.template, skipping upload Waiting for changeset to be created.. CloudFormation stack changeset --------------------------------------------------------------------------------------------------------------------------------------------- Operation LogicalResourceId ResourceType Replacement --------------------------------------------------------------------------------------------------------------------------------------------- * Modify HelloWorldFunction AWS::Lambda::Function False * Modify ServerlessRestApi AWS::ApiGateway::RestApi False - Delete AwsSamAutoDependencyLayerNestedSt AWS::CloudFormation::Stack N/A ack --------------------------------------------------------------------------------------------------------------------------------------------- Changeset created successfully. arn:aws:cloudformation:us-west-2:012345678910:changeSet/samcli-deploy1678917603/22e05525-08f9-4c52-a2c4-f7f1fd055072 2023-03-15 12:00:16 - Waiting for stack create/update to complete CloudFormation events from stack operations (refresh every 0.5 seconds) --------------------------------------------------------------------------------------------------------------------------------------------- ResourceStatus ResourceType LogicalResourceId ResourceStatusReason --------------------------------------------------------------------------------------------------------------------------------------------- UPDATE_IN_PROGRESS AWS::Lambda::Function HelloWorldFunction - UPDATE_COMPLETE AWS::Lambda::Function HelloWorldFunction - UPDATE_COMPLETE_CLEANUP_IN_PROGRE AWS::CloudFormation::Stack sam-app - SS DELETE_IN_PROGRESS AWS::CloudFormation::Stack AwsSamAutoDependencyLayerNestedSt - ack DELETE_COMPLETE AWS::CloudFormation::Stack AwsSamAutoDependencyLayerNestedSt - ack UPDATE_COMPLETE AWS::CloudFormation::Stack sam-app - --------------------------------------------------------------------------------------------------------------------------------------------- CloudFormation outputs from deployed stack ---------------------------------------------------------------------------------------------------------------------------------------------- Outputs ---------------------------------------------------------------------------------------------------------------------------------------------- Key HelloWorldFunctionIamRole Description Implicit IAM Role created for Hello World function Value arn:aws:iam::012345678910:role/sam-app-HelloWorldFunctionRole-15GLOUR9LMT1W Key HelloWorldApi Description API Gateway endpoint URL for Prod stage for Hello World function Value https://<restapiid>.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:sam-app-HelloWorldFunction-yQDNe17r9maD ---------------------------------------------------------------------------------------------------------------------------------------------- Successfully created/updated stack - sam-app in us-west-2 -
¡Tu aplicación ya está implementada y ejecutándose en la Nube de AWS!
Paso 4: ejecutar la aplicación
En este paso, enviarás una solicitud GET al punto de conexión de la API y verás el resultado de la función de Lambda.
Para obtener el valor del punto de conexión de tu API
-
A partir de la información que muestra la AWS SAM CLI en el paso anterior, localiza la sección
Outputs. En esta sección, localiza tu recurso deHelloWorldApipara encontrar el valor del punto de conexión HTTP. El siguiente es un ejemplo de output:---------------------------------------------------------------------------------------------------------------------------------------------- Outputs ---------------------------------------------------------------------------------------------------------------------------------------------- ... Key HelloWorldApi Description API Gateway endpoint URL for Prod stage for Hello World function Value https://ets1gv8lxi.execute-api.us-west-2.amazonaws.com/Prod/hello/ ... ----------------------------------------------------------------------------------------------------------------------------------------------
-
También puedes utilizar el comando sam list endpoints --output json para obtener esta información. El siguiente es un ejemplo de output:
$sam list endpoints --output json2023-03-15 12:39:19 Loading policies from IAM... 2023-03-15 12:39:25 Finished loading policies from IAM. [ { "LogicalResourceId": "HelloWorldFunction", "PhysicalResourceId": "sam-app-HelloWorldFunction-yQDNe17r9maD", "CloudEndpoint": "-", "Methods": "-" }, { "LogicalResourceId": "ServerlessRestApi", "PhysicalResourceId": "ets1gv8lxi", "CloudEndpoint": [ "https://ets1gv8lxi.execute-api.us-west-2.amazonaws.com/Prod", "https://ets1gv8lxi.execute-api.us-west-2.amazonaws.com/Stage" ], "Methods": [ "/hello['get']" ] } ]
Para invocar tu función
-
Mediante el navegador o la línea de comandos, envía una solicitud GET al punto de conexión de la API. A continuación, se muestra un ejemplo con el comando curl:
$curl https://ets1gv8lxi.execute-api.us-west-2.amazonaws.com/Prod/hello/{"message": "hello world"}
Paso 5: interactuar con la función en la Nube de AWS
En este paso, utiliza la AWS SAM CLI para invocar la función de Lambda en la Nube de AWS.
Para invocar una función de Lambda en la nube
-
Toma nota del
LogicalResourceIdde la función del paso anterior. Debería serHelloWorldFunction. -
En tu línea de comandos, desde el directorio del proyecto
sam-app, ejecuta lo siguiente:$sam remote invokeHelloWorldFunction--stack-namesam-app -
La AWS SAM CLI invoca la función en la nube y devuelve una respuesta. El siguiente es un ejemplo de output:
$sam remote invoke HelloWorldFunction --stack-name sam-appInvoking Lambda Function HelloWorldFunction START RequestId: d5ef494b-5f45-4086-86fd-d7322fa1a1f9 Version: $LATEST END RequestId: d5ef494b-5f45-4086-86fd-d7322fa1a1f9 REPORT RequestId: d5ef494b-5f45-4086-86fd-d7322fa1a1f9 Duration: 6.62 ms Billed Duration: 7 ms Memory Size: 128 MB Max Memory Used: 67 MB Init Duration: 164.06 ms {"statusCode":200,"body":"{\"message\":\"hello world\"}"}%
Paso 6: modificar y sincronizar tu aplicación con la Nube de AWS
En este paso, utilizarás el comando sam sync --watch de la CLI de AWS SAM para sincronizar los cambios locales en la Nube de AWS.
Para usar la sincronización sam
-
En tu línea de comandos, desde el directorio del proyecto
sam-app, ejecuta lo siguiente:$sam sync --watch -
La AWS SAM CLI le pide que confirme que está sincronizando una pila de desarrollo. Como el comando sam sync --watch implementa automáticamente los cambios locales en la Nube de AWS en tiempo real, lo recomendamos solo para entornos de desarrollo.
La AWS SAM CLI realiza una implementación inicial antes de comenzar a monitorear los cambios locales. El siguiente es un ejemplo de output:
$sam sync --watchThe SAM CLI will use the AWS Lambda, Amazon API Gateway, and AWS StepFunctions APIs to upload your code without performing a CloudFormation deployment. This will cause drift in your CloudFormation stack. **The sync command should only be used against a development stack**. Confirm that you are synchronizing a development stack. Enter Y to proceed with the command, or enter N to cancel: [Y/n]:yQueued infra sync. Waiting for in progress code syncs to complete... Starting infra sync. Manifest is not changed for (HelloWorldFunction), running incremental build Building codeuri: /Users/.../Demo/sam-tutorial1/sam-app/hello_world runtime: python3.9 metadata: {} architecture: x86_64 functions: HelloWorldFunction Running PythonPipBuilder:CopySource Build Succeeded Successfully packaged artifacts and wrote output template to file /var/folders/45/5ct135bx3fn2551_ptl5g6_80000gr/T/tmpq3x9vh63. Execute the following command to deploy the packaged template sam deploy --template-file /var/folders/45/5ct135bx3fn2551_ptl5g6_80000gr/T/tmpq3x9vh63 --stack-name <YOUR STACK NAME> Deploying with following values =============================== Stack name : sam-app Region : us-west-2 Disable rollback : False Deployment s3 bucket : aws-sam-cli-managed-default-samclisam-s3-demo-bucket-1a4x26zbcdkqr Capabilities : ["CAPABILITY_NAMED_IAM", "CAPABILITY_AUTO_EXPAND"] Parameter overrides : {} Signing Profiles : null Initiating deployment ===================== 2023-03-15 13:10:05 - Waiting for stack create/update to complete CloudFormation events from stack operations (refresh every 0.5 seconds) --------------------------------------------------------------------------------------------------------------------------------------------- ResourceStatus ResourceType LogicalResourceId ResourceStatusReason --------------------------------------------------------------------------------------------------------------------------------------------- UPDATE_IN_PROGRESS AWS::CloudFormation::Stack sam-app Transformation succeeded CREATE_IN_PROGRESS AWS::CloudFormation::Stack AwsSamAutoDependencyLayerNestedSt - ack CREATE_IN_PROGRESS AWS::CloudFormation::Stack AwsSamAutoDependencyLayerNestedSt Resource creation Initiated ack CREATE_COMPLETE AWS::CloudFormation::Stack AwsSamAutoDependencyLayerNestedSt - ack UPDATE_IN_PROGRESS AWS::Lambda::Function HelloWorldFunction - UPDATE_COMPLETE AWS::Lambda::Function HelloWorldFunction - UPDATE_COMPLETE_CLEANUP_IN_PROGRE AWS::CloudFormation::Stack sam-app - SS UPDATE_COMPLETE AWS::CloudFormation::Stack sam-app - --------------------------------------------------------------------------------------------------------------------------------------------- CloudFormation outputs from deployed stack ---------------------------------------------------------------------------------------------------------------------------------------------- Outputs ---------------------------------------------------------------------------------------------------------------------------------------------- Key HelloWorldFunctionIamRole Description Implicit IAM Role created for Hello World function Value arn:aws:iam::012345678910:role/sam-app-HelloWorldFunctionRole-15GLOUR9LMT1W Key HelloWorldApi Description API Gateway endpoint URL for Prod stage for Hello World function Value https://ets1gv8lxi.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:sam-app-HelloWorldFunction-yQDNe17r9maD ---------------------------------------------------------------------------------------------------------------------------------------------- Stack update succeeded. Sync infra completed. Infra sync completed. CodeTrigger not created as CodeUri or DefinitionUri is missing for ServerlessRestApi.
A continuación, modificará el código de tu función de Lambda. La AWS SAM CLI detectará automáticamente este cambio y sincronizará tu aplicación con la Nube de AWS.
Para modificar y sincronizar tu aplicación
-
Abre el archivo
sam-app/hello_world/app.pycon el IDE que prefiera. -
Cambia el
messagey guarda el archivo. A continuación, se muestra un ejemplo:import json...def lambda_handler(event, context):...return { "statusCode": 200, "body": json.dumps({ "message": "hello everyone!",...}), } -
La AWS SAM CLI detecta el cambio y sincroniza la aplicación con la Nube de AWS. El siguiente es un ejemplo de output:
Syncing Lambda Function HelloWorldFunction... Manifest is not changed for (HelloWorldFunction), running incremental build Building codeuri: /Users/
.../Demo/sam-tutorial1/sam-app/hello_world runtime: python3.9 metadata: {} architecture: x86_64 functions: HelloWorldFunction Running PythonPipBuilder:CopySource Finished syncing Lambda Function HelloWorldFunction. -
Para verificar el cambio, vuelves a enviar una solicitud GET al punto de conexión de la API.
$curl https://ets1gv8lxi.execute-api.us-west-2.amazonaws.com/Prod/hello/{"message": "hello everyone!"}
Paso 7: (opcional) probar tu aplicación localmente
nota
Este paso es opcional.
importante
Este paso requiere que tenga Docker en su equipo local. Debe tener Docker instalado y configurado para utilizar la CLI de AWS SAM para pruebas locales. Para obtener más información, consulte Instalar Docker.
En este paso, usa el comando sam local de la CLI de AWS SAM para probar la aplicación localmente. Para ello, la AWS SAM CLI crea un entorno local utilizando Docker. Este entorno local emula el entorno de ejecución basado en la nube de tu función de Lambda.
Debes hacer lo siguiente:
-
Crea un entorno local para tu función de Lambda e invócala.
-
Aloja tu punto de conexión de la API HTTP localmente y úsalo para invocar tu función de Lambda.
Para invocar una función de Lambda localmente
-
En tu línea de comandos, desde el directorio del proyecto
sam-app, ejecuta lo siguiente:$sam local invoke -
La AWS SAM CLI crea un contenedor de Docker local e invoca tu función. El siguiente es un ejemplo de output:
$sam local invokeInvoking app.lambda_handler (python3.9) Local image was not found. Removing rapid images for repo public.ecr.aws/sam/emulation-python3.9 Building image..................... Using local image: public.ecr.aws/lambda/python:3.9-rapid-x86_64. Mounting /Users/.../Demo/sam-tutorial1/sam-app/.aws-sam/build/HelloWorldFunction as /var/task:ro,delegated inside runtime container START RequestId: b046db01-2a00-415d-af97-35f3a02e9eb6 Version: $LATEST END RequestId: b046db01-2a00-415d-af97-35f3a02e9eb6 REPORT RequestId: b046db01-2a00-415d-af97-35f3a02e9eb6 Init Duration: 1.01 ms Duration: 633.45 ms Billed Duration: 634 ms Memory Size: 128 MB Max Memory Used: 128 MB {"statusCode": 200, "body": "{\"message\": \"hello world\"}"}
Para alojar tu API de forma local
-
En tu línea de comandos, desde el directorio del proyecto
sam-app, ejecuta lo siguiente:$sam local start-api -
La AWS SAM CLI crea un contenedor de Docker local para la función de Lambda y crea un servidor HTTP local para simular el punto de conexión de la API. El siguiente es un ejemplo de output:
$sam local start-apiInitializing the lambda functions containers. Local image is up-to-date Using local image: public.ecr.aws/lambda/python:3.9-rapid-x86_64. Mounting /Users/.../Demo/sam-tutorial1/sam-app/.aws-sam/build/HelloWorldFunction as /var/task:ro,delegated inside runtime container Containers Initialization is done. Mounting HelloWorldFunction at http://127.0.0.1:3000/hello [GET] You can now browse to the above endpoints to invoke your functions. You do not need to restart/reload SAM CLI while working on your functions, changes will be reflected instantly/automatically. If you used sam build before running local commands, you will need to re-run sam build for the changes to be picked up. You only need to restart AWS SAM CLI if you update your AWS SAM template 2023-03-15 14:25:21 WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. * Running on http://127.0.0.1:3000 2023-03-15 14:25:21 Press CTRL+C to quit -
Mediante el navegador o la línea de comandos, envía una solicitud GET al punto de conexión de la API local. A continuación, se muestra un ejemplo con el comando curl:
$curl http://127.0.0.1:3000/hello{"message": "hello world"}
Paso 8: eliminar la aplicación de la Nube de AWS
En este paso, utiliza el comando AWS SAM CLI sam delete para eliminar tu aplicación de la Nube de AWS.
Para eliminar tu aplicación de la Nube de AWS
-
En tu línea de comandos, desde el directorio del proyecto
sam-app, ejecuta lo siguiente:$sam delete -
La AWS SAM CLI le pedirá que confirme. A continuación, debes eliminar el bucket y la pila de CloudFormation de Amazon S3 de la aplicación. El siguiente es un ejemplo de output:
$sam deleteAre you sure you want to delete the stack sam-app in the region us-west-2 ? [y/N]:yAre you sure you want to delete the folder sam-app in S3 which contains the artifacts? [y/N]:y- Deleting S3 object with key c6ce8fa8b5a97dd022ecd006536eb5a4 - Deleting S3 object with key 5d513a459d062d644f3b7dd0c8b56a2a.template - Deleting S3 object with key sam-app/2bebf67c79f6a743cc5312f6dfc1efee.template - Deleting S3 object with key sam-app/6b208d0e42ad15d1cee77d967834784b.template - Deleting S3 object with key sam-app/da3c598813f1c2151579b73ad788cac8 - Deleting S3 object with key sam-app/f798cdd93cee188a71d120f14a035b11 - Deleting Cloudformation stack sam-app Deleted successfully
Solución de problemas
Para solucionar problemas de AWS SAM CLI, consulta Solución de problemas para AWS SAM CLI.
Más información
Para conocer más sobre AWS SAM, consulta los siguientes recursos:
-
Taller completoAWS SAM
: un taller diseñado para enseñarle muchas de las principales características que AWS SAM ofrece. -
Sesiones con SAM
: serie de vídeos sobre el uso de AWS SAM creada por nuestro equipo de representantes de desarrolladores sin servidorAWS. -
Serverless Land
: sitio que reúne la información más reciente, blogs, vídeos, códigos y recursos de aprendizaje acerca del AWS sin servidor.