Cómo trabajar AWS SAM con el AWS kit de herramientas - AWS Cloud9

AWS Cloud9 ya no está disponible para nuevos clientes. Los clientes existentes de AWS Cloud9 pueden seguir utilizando el servicio con normalidad. Más información

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 trabajar AWS SAM con el AWS kit de herramientas

El AWS kit de herramientas proporciona soporte para aplicaciones sin servidor. Con el AWS kit de herramientas, puede crear aplicaciones sin servidor que contengan AWS Lambdafunciones y, a continuación, implementar las aplicaciones en una pila. AWS CloudFormation

Creación de una aplicación sin servidor

En este ejemplo se muestra cómo utilizar el AWS kit de herramientas para crear una aplicación sin servidor. Para obtener información sobre cómo ejecutar y depurar aplicaciones sin servidor, consulte Ejecución y depuración de aplicaciones sin servidor.

Los requisitos previos necesarios para crear una aplicación sin servidor incluyen el y el. AWS SAM CLIAWS CLI Estos se incluyen con. AWS Cloud9 Si no AWS SAM CLI está instalado o si está desactualizado, es posible que necesite ejecutar una instalación o actualización. Para obtener instrucciones sobre cómo realizar la instalación AWS SAM CLI, consulte Instalación del AWS SAM CLI y para obtener instrucciones sobre cómo actualizar el AWS SAM CLI, consulte Actualización del AWS SAM CLI.

Cómo crear una aplicación sin servidor con AWS Toolkit

En este ejemplo se muestra cómo crear una aplicación sin servidor con el AWS kit de herramientas mediante ().AWS Serverless Application ModelAWS SAM

  1. En el AWS explorador, abra el menú contextual (haga clic con el botón derecho) del nodo Lambda y, a continuación, seleccione Crear aplicación Lambda. SAM

    nota

    Como alternativa, puede seleccionar el icono de menú situado frente al encabezado AWS: Explorer y elegir Crear aplicación Lambda SAM.

  2. Elija el tiempo de ejecución de la SAM aplicación. Para este ejemplo, elija nodejs12.x.

    nota

    Si selecciona uno de los tiempos de ejecución con "(Imagen)", su aplicación es el tipo de paquete Image. Si selecciona uno de los tiempos de ejecución sin "(Imagen)", su aplicación es el tipo Zip. Para obtener más información acerca de la diferencia entre los tipos de paquetes Image y Zip, consulte Paquetes de implementación de Lambda en la Guía para desarrolladores de AWS Lambda .

  3. Elija una de las siguientes plantillas para la aplicación sin servidor:

    • AWS SAM Hello World: plantilla básica con una función Lambda que devuelve el clásico mensaje «Hello World».

    • AWS Aplicación de muestra Step Functions: una aplicación de muestra que ejecuta un flujo de trabajo de negociación de acciones. Step Functions orquesta las interacciones de las funciones de Lambda que están involucradas.

  4. Elija una ubicación para el nuevo proyecto. Si hay una disponible, puede seleccionar una carpeta de espacio de trabajo existente. De lo contrario, busque otra carpeta. Si elige Select a different folder (Seleccionar una carpeta diferente), aparece un cuadro de diálogo donde puede seleccionar una ubicación de carpeta.

  5. Ingrese un nombre para su nueva aplicación. Para este ejemplo, use my-sam-app-nodejs. Después de presionar Entrar, el AWS kit de herramientas tarda unos minutos en crear el proyecto.

Cuando se crea el proyecto, puede ver los archivos de la aplicación en la ventana Environment (Entorno). Se encuentra en la ventana del Explorador.

Captura de pantalla que muestra los tiempos de ejecución disponibles para las aplicacionesSAM.

Ejecución y depuración de aplicaciones sin servidor

Puede usar el AWS kit de herramientas para configurar cómo depurar aplicaciones sin servidor y ejecutarlas localmente en su entorno de desarrollo. Puedes depurar una aplicación sin servidor que esté definida por una plantilla (). AWS Serverless Application Model AWS SAM Esta plantilla utiliza una YAML sintaxis sencilla para describir los recursos, como las funcionesAPIs, las bases de datos y las asignaciones de fuentes de eventos, que componen una aplicación sin servidor.

Para ver más de cerca la AWS SAM plantilla, consulta la anatomía de la plantilla en la Guía AWS SAM para desarrolladores.AWS Serverless Application Model

Como alternativa, puedes depurar rápidamente las aplicaciones sin servidor que no se hayan asignado a una SAM plantilla.

Se empieza a configurar el comportamiento de depuración mediante acciones integradas para identificar una función apta. AWS Lambda Para utilizar la infraestructura definida por la SAM plantilla, utilice la acción en línea en el archivo con el formato correspondienteYAML. Para probar la función directamente sin la plantilla, utilice el enlace contextual para el controlador de Lambda en el archivo de aplicación.

nota

En este ejemplo, estamos depurando una aplicación que usa. JavaScript Sin embargo, puede utilizar las funciones de depuración disponibles en el AWS kit de herramientas con los siguientes idiomas y tiempos de ejecución:

  • JavaScript — Node.js 10. x, 12. x, 14. x

  • Python: 3.7, 3.8, 3.9, 3.10 (las aplicaciones sin servidor de Python 2.7 y 3.6 se pueden ejecutar pero el kit de herramientas no las AWS puede depurar).

Su elección de lenguaje también afecta a la manera en que los vínculos contextuales indican los controladores de Lambda aptos. Para obtener más información, consulte Ejecución y depuración de funciones sin servidor directamente desde el código.

Uso de SAM plantillas para ejecutar y depurar aplicaciones sin servidor

En el caso de las aplicaciones que se ejecutan y depuran mediante una SAM plantilla, un archivo con YAML formato S describe el comportamiento de la aplicación y los recursos que utiliza. Si crea una aplicación sin servidor con el AWS kit de herramientas, se generará automáticamente un archivo denominado para su template.yaml proyecto.

En este procedimiento, utilice la aplicación de ejemplo que se creó en Creación de una aplicación sin servidor.

Para usar una SAM plantilla para ejecutar y depurar una aplicación sin servidor

  1. Para ver los archivos de aplicación que componen la aplicación sin servidor, vaya a la ventana Environment (Entorno).

  2. Desde la carpeta de la aplicación (por ejemplo, my-sample-app), abra el template.yaml archivo.

  3. Para template.yaml, seleccione Edit Launch Configuration (Editar configuración de lanzamiento).

    Un nuevo editor muestra el archivo launch.json que proporciona una configuración de depuración con atributos predeterminados.

  4. Edite o confirme los valores de las siguientes propiedades de configuración:

    • "name": ingrese un nombre fácil de leer para que aparezca en el campo desplegable Configuration (Configuración) de la vista Run (Ejecución).

    • "target": asegúrese de que el valor es "template". De esta forma, la SAM plantilla es el punto de entrada a la sesión de depuración.

    • "templatePath": ingrese una ruta relativa o absoluta para el archivo template.yaml.

    • "logicalId"— Asegúrese de que el nombre coincida con el que se especifica en la sección Recursos de la SAM plantilla. En este caso, es HelloWorldFunction de tipoAWS::Serverless::Function.

    Para obtener más información sobre estas y otras entradas del archivo launch.json, consulte Opciones de configuración para depurar aplicaciones sin servidor.

  5. Si está satisfecho con la configuración de depuración, guarde el archivo launch.json. A continuación, selecciona el botón verde de «reproducir» situado junto a él RUNpara iniciar la depuración.

    nota

    Si SAM la aplicación no se ejecuta, compruebe la ventana de resultados para ver si el error se debe a una imagen de Docker que no se está creando. Es posible que tenga que liberar espacio del disco en el entorno.

    Para obtener más información, consulte Error al ejecutar SAM las aplicaciones de forma local en AWS Toolkit porque el AWS Cloud9 entorno no tiene suficiente espacio en disco.

    Cuando se inician las sesiones de depuración, el DEBUGCONSOLEpanel muestra el resultado de la depuración y muestra los valores devueltos por la función Lambda. Al depurar SAM aplicaciones, el AWS kit de herramientas se selecciona como canal de salida en el panel de salida.

    nota

    Para los usuarios de Windows, si encuentra un error de montaje de Docker durante este proceso, es posible que deba actualizar las credenciales de las unidades compartidas en Docker Settings (Configuración de Docker). Un error de montaje de Docker tiene un aspecto similar al siguiente.

    Fetching lambci/lambda:nodejs10.x Docker container image...... 2019-07-12 13:36:58 Mounting C:\Users\<username>\AppData\Local\Temp\ ... as /var/task:ro,delegated inside runtime container Traceback (most recent call last): ...requests.exceptions.HTTPError: 500 Server Error: Internal Server Error ...

Ejecución y depuración de funciones sin servidor directamente desde el código

Al probar la AWS SAM aplicación, puede optar por ejecutar y depurar solo la función Lambda. Excluya otros recursos que estén definidos en la SAM plantilla. Este enfoque implica el uso de una acción en línea para identificar los controladores de funciones de Lambda en el código fuente que se pueden invocar directamente.

Los controladores de Lambda que detectan los vínculos contextuales dependen del lenguaje y el tiempo de ejecución que esté utilizando para su aplicación.

Lenguaje/tiempo de ejecución Condiciones para identificar las funciones de Lambda mediante enlaces contextuales

JavaScript (Node.js 10.x, 12.x y 14.x)

La función tiene las siguientes características:
  • Es una función exportada con hasta tres parámetros.

  • Tiene un archivo package.json en su carpeta principal en la carpeta del área de trabajo.

Python (3.7, 3.8, 3.9 y 3.10)

La función tiene las siguientes características:
  • Es una función de alto nivel.

  • Tiene un archivo requirements.txt en su carpeta principal en la carpeta del área de trabajo.

Para ejecutar y depurar una aplicación sin servidor directamente desde el código de la aplicación

  1. Para ver los archivos de la aplicación sin servidor, vaya a la carpeta de la aplicación mediante la elección del icono de carpeta situado junto al editor.

  2. Desde la carpeta de la aplicación (por ejemplo, my-sample-app), expanda la carpeta de funciones (en este ejemplo, hello-world) y abra el archivo. app.js

  3. En la acción en línea que identifica una función de controlador de Lambda válida, elija Add Debug Configuration. Si no aparece la opción de agregar configuración de depuración, debe habilitar lentes de código. Para activar lentes de código, consulte Habilitar las lentes AWS de código de Toolkit .

    Acceda a la opción Add Debug Configuration (Agregar configuración de depuración) en la acción en línea de un controlador de funciones de Lambda.
  4. Seleccione el entorno de ejecución en el que se ejecuta SAM la aplicación.

  5. En el editor del archivo launch.json, edite o confirme los valores de las siguientes propiedades de configuración:

    • "name": ingrese un nombre fácil de leer.

    • "target": asegúrese de que el valor es "code" para que un controlador de funciones de Lambda se invoque directamente.

    • "lambdaHandler": ingrese el nombre del método en el código al que Lambda llama para ejecutar su función. Por ejemplo, para las aplicaciones en JavaScript, el valor predeterminado esapp.lambdaHandler.

    • "projectRoot": ingrese la ruta al archivo de aplicación que contiene la función de Lambda.

    • "runtime": ingrese o confirme un tiempo de ejecución válido para el entorno de ejecución de Lambda (por ejemplo, "nodejs.12x").

    • "payload". Elija una de las siguientes opciones para definir la carga del evento que desea proporcionar a la función de Lambda como entrada:

      • "json"pares JSON clave-valor con formato: que definen la carga útil del evento.

      • "path": ruta al archivo que se utiliza como carga del evento.

  6. Si está satisfecho con la configuración de depuración, seleccione la flecha verde de reproducción situada junto a ella para iniciar la depuración. RUN

    Cuando se inician las sesiones de depuración, el DEBUGCONSOLEpanel muestra el resultado de la depuración y muestra los valores devueltos por la función Lambda. Al depurar SAM aplicaciones, se selecciona AWS Toolkit como canal de salida en el panel de salida.

    nota

    Si Docker se menciona en los mensajes de error, consulte esta nota.

Ejecución y depuración de recursos locales de Amazon API Gateway

Puede ejecutar o depurar los recursos locales de AWS SAM API Gateway que se especifican en. template.yaml Para ello, ejecute una configuración de AWS Cloud9 inicio o type=aws-sam con. invokeTarget.target=api

nota

APIGateway admite dos tipos deAPIs. Son REST y HTTPAPIs. Sin embargo, la función API Gateway del AWS kit de herramientas solo es compatible RESTAPIs. A veces HTTP APIs se denominan «APIGateway V2»APIs.

Para ejecutar y depurar los recursos locales de API Gateway
  1. Elija uno de los siguientes enfoques para crear una configuración de lanzamiento para un recurso de AWS SAM API Gateway:

    • Opción 1: visite el código fuente del controlador (en concreto, archivo .js, .cs o .py) en su proyecto de AWS SAM , pase el cursor sobre el controlador de Lambda y elija Add Debug Configuration (Agregar configuración de depuración). Si no aparece la opción de agregar configuración de depuración, habilite lentes de código. Para activar lentes de código, consulte Habilitar las lentes AWS de código de Toolkit . Luego, en el menú, selecciona el elemento marcado como API Evento.

    • Opción 2: edite launch.json y cree una nueva configuración de lanzamiento mediante la sintaxis siguiente.

      { "type": "aws-sam", "request": "direct-invoke", "name": "myConfig", "invokeTarget": { "target": "api", "templatePath": "n12/template.yaml", "logicalId": "HelloWorldFunction" }, "api": { "path": "/hello", "httpMethod": "post", "payload": { "json": {} } }, "sam": {}, "aws": {} }
  2. En el menú desplegable junto al botón Run (Ejecutar), elija la configuración de lanzamiento (denominada myConfig en el ejemplo anterior).

  3. (Opcional) Agregue puntos de interrupción al código del proyecto de Lambda.

  4. Elija el botón Run (Ejecutar) junto al botón “reproducir” verde.

  5. En el panel de resultados, vea los resultados.

Configuración

Cuando utiliza el valor api de la propiedad invokeTarget.target, Toolkit cambia la validación y el comportamiento de la configuración de lanzamiento para admitir un campo api.

{ "type": "aws-sam", "request": "direct-invoke", "name": "myConfig", "invokeTarget": { "target": "api", "templatePath": "n12/template.yaml", "logicalId": "HelloWorldFunction" }, "api": { "path": "/hello", "httpMethod": "post", "payload": { "json": {} }, "querystring": "abc=def&qrs=tuv", "headers": { "cookie": "name=value; name2=value2; name3=value3" } }, "sam": {}, "aws": {} }

Reemplace los valores del ejemplo de la siguiente manera:

invokeTarget.logicalId

Un API recurso.

ruta

La API ruta que solicita la configuración de lanzamiento (por ejemplo,"path": "/hello").

Debe ser una API ruta válida resuelta a partir template.yaml de la especificada porinvokeTarget.templatePath.

httpMethod

Uno de los verbos siguientes: "delete", "get", "head", "options", "patch", "post", "put".

payload

La JSON carga útil (HTTPcuerpo) para enviar la solicitud con la misma estructura y reglas que el campo lambda.payload.

payload.pathapunta a un archivo que contiene la carga útil. JSON

payload.jsonespecifica una JSON carga útil en línea.

headers

Mapa opcional de pares nombre-valor. Se usa para especificar los HTTP encabezados que se van a incluir en la solicitud.

"headers": { "accept-encoding": "deflate, gzip;q=1.0, *;q=0.5", "accept-language": "fr-CH, fr;q=0.9, en;q=0.8, de;q=0.7, *;q=0.5", "cookie": "name=value; name2=value2; name3=value3", "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36", }
querystring

(Opcional) Use esta cadena para establecer el valor de querystring de la solicitud (por ejemplo, "querystring": "abc=def&ghi=jkl").

aws

Cómo se proporciona la información de AWS conexión. Para obtener más información, consulte la tabla de propiedades de conexión de AWS (aws) en Opciones de configuración para depurar aplicaciones sin servidor.

sam

Cómo se AWS SAM CLI crea la aplicación. Para obtener más información, consulte las propiedades AWS SAM CLI (» sam «) enOpciones de configuración para depurar aplicaciones sin servidor.

Sincronización de una aplicación sin servidor

En este ejemplo se muestra cómo sincronizar la aplicación sin servidor que se creó en el tema anterior (Creación de una aplicación sin servidor) en AWS mediante el AWS Toolkit for Visual Studio Code.

Requisitos previos

  • Asegúrese de elegir un nombre de bucket que sea globalmente único para Amazon S3.

  • Asegúrese de que las credenciales que ha configurado incluyen el acceso de lectura/escritura adecuado a los siguientes servicios: Amazon S3, AWS CloudFormation AWS Lambda, y Amazon API Gateway.

  • En el caso de las aplicaciones con tipo de implementaciónImage, asegúrese de tener un nombre de bucket de Amazon S3 único a nivel mundial y un ECR repositorio de Amazon URI para usar en la implementación.

Sincronización de una aplicación sin servidor

  1. En la ventana del AWS explorador, abra el menú contextual (haga clic con el botón derecho) del nodo Lambda y seleccione Sync SAM Application.

  2. Elija el lugar en el Región de AWS que desee realizar la implementación.

  3. Elija el archivo template.yaml que desea utilizar para la implementación.

  4. Ingrese el nombre de un bucket de Amazon S3 que se pueda utilizar en esta implementación. El bucket debe estar en la región en la que está realizando la implementación.

    aviso

    El nombre del bucket de Amazon S3 debe ser único globalmente para todos los nombres de buckets existentes en Amazon S3. Agregue un identificador único al nombre indicado en el siguiente ejemplo o elija otro nombre.

  5. Si su aplicación sin servidor incluye una función con un tipo de paqueteImage, introduzca el nombre de un ECR repositorio de Amazon que pueda usar esta implementación. El repositorio debe estar en la región en la que está realizando la implementación.

  6. Introduzca el nombre para la pila implementada, que puede ser nuevo o existente.

  7. Verifique el éxito de la implementación en la pestaña AWS Toolkit de la consola.

    Si se produce un error, aparece un mensaje en la parte inferior derecha.

    Si esto sucede, verifique el texto de la pestaña AWS Toolkit para obtener más información. A continuación se muestra un ejemplo de información sobre un error.

    Error with child process: Unable to upload artifact HelloWorldFunction referenced by CodeUri parameter of HelloWorldFunction resource. S3 Bucket does not exist. Execute the command to create a new bucket aws s3 mb s3://pbart-my-sam-app-bucket An error occurred while deploying a SAM Application. Check the logs for more information by running the "View AWS Toolkit Logs" command from the Command Palette.

    En este ejemplo, el error se ha producido porque el bucket de Amazon S3 no existía.

Una vez que se haya realizado la implementación, verá la aplicación en el Explorador de AWS . Consulte Invocación de funciones de Lambda remotas para obtener información acerca de cómo invocar la función de Lambda que se creó como parte de la aplicación.

Habilitar las lentes AWS de código de Toolkit

  1. En la barra de menús, elija AWS Cloud9 y luego Preferences (Preferencias).

  2. En la pestaña Preferences (Preferencias), en la barra lateral, seleccione AWS Toolkit.

  3. Para habilitar lentes de código, seleccione Enable Code Lenses (Habilitar enfoques de código).

Eliminación de una aplicación sin servidor de la nube de AWS

Eliminar una aplicación sin servidor implica eliminar la AWS CloudFormation pila que implementaste anteriormente en la nube. AWS Tenga en cuenta que este procedimiento no elimina el directorio de la aplicación del anfitrión local.

  1. Abra AWS Explorer.

  2. En la ventana AWS Explorer, expanda la región que contiene la aplicación implementada que desea eliminar y, a continuación, expanda AWS CloudFormation.

  3. Abre el menú contextual (haz clic con el botón derecho) para ver el nombre de la AWS CloudFormation pila que corresponde a la aplicación sin servidor que deseas eliminar. A continuación, seleccione Eliminar CloudFormation pila.

  4. Para confirmar que desea eliminar la pila seleccionada, elija Delete (Eliminar).

Si la eliminación de la pila se realiza correctamente, el AWS kit de herramientas elimina el nombre de la pila de la AWS CloudFormation lista del Explorador.AWS