Uso de AWS SAM con AWS Toolkit - AWS Cloud9

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

Uso de AWS SAM con AWS Toolkit

AWS Toolkit ofrece asistencia para aplicaciones sin servidor. Con AWS Toolkit, puede crear aplicaciones sin servidor que contengan funciones de AWS Lambda e implementar dichas aplicaciones en una pila de AWS CloudFormation.

Creación de una aplicación sin servidor

En este ejemplo, se muestra cómo utilizar AWS Toolkit 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 son la CLI de AWS SAM y la CLI de AWS. Se incluyen con AWS Cloud9. Si la CLI de AWS SAM no está instalada o está desactualizada, es posible que deba ejecutar una instalación o actualización. Para obtener instrucciones sobre cómo instalar la CLI de AWS SAM, consulte Instalación de la CLI de AWS SAM. Para obtener instrucciones sobre cómo actualizar la CLI de AWS SAM, consulte Actualización de la CLI de AWS SAM.

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 AWS Toolkit mediante AWS Serverless Application Model (AWS SAM).

  1. En el Explorador de AWS, haga clic con el botón derecho en el nodo Lambda y, a continuación, elija Create Lambda SAM Application (Crear aplicación de SAM de Lambda).

    nota

    También puede seleccionar el icono de menú situado en el encabezado del Explorador de AWS y elegir Create Lambda SAM Application (Crear aplicación de SAM de Lambda).

  2. Elija el tiempo de ejecución para su aplicación de SAM. 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 de Lambda que devuelve el clásico mensaje “Hola, mundo”.

    • Aplicación de muestra AWS Step Functions: aplicación de muestra que ejecuta un flujo de trabajo bursátil. 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 pulsar Intro, AWS Toolkit tarda unos momentos 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 aplicaciones de SAM.

Ejecución y depuración de aplicaciones sin servidor

Puede utilizar AWS Toolkit para configurar cómo depurar aplicaciones sin servidor y ejecutarlas localmente en su entorno de desarrollo. Puede depurar una aplicación sin servidor definida por una plantilla de AWS Serverless Application Model (AWS SAM). Esta plantilla utiliza una sintaxis simple de YAML para describir recursos como funciones, API, bases de datos y mapeos de fuentes de eventos que componen una aplicación sin servidor.

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

Alternativamente, puede depurar rápidamente las aplicaciones sin servidor que no se han confirmado en una plantilla de SAM.

Comience a configurar el comportamiento de depuración mediante acciones en línea para identificar una función de AWS Lambda apta. Para utilizar la infraestructura definida por la plantilla de SAM, utilice la acción en línea en el archivo con formato YAML correspondiente. 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. No obstante, puede usar las características de depuración disponibles en AWS Toolkit con los siguientes lenguajes 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 no depurar mediante el kit de herramientas de AWS).

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 plantillas de SAM para ejecutar y depurar aplicaciones sin servidor

Para las aplicaciones que se ejecutan y depuran con una plantilla de SAM, un archivo con formato YAML describe el comportamiento de la aplicación y los recursos que utiliza. Si crea una aplicación sin servidor mediante AWS Toolkit, un archivo llamado template.yaml se genera automáticamente para su proyecto.

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

Para utilizar una plantilla de SAM 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. En la carpeta de la aplicación (por ejemplo, my-sample-app), abra el archivo template.yaml.

  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 ese modo, la plantilla de SAM es el punto de entrada para 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 especificado en la sección Resources (Recursos) de la plantilla de SAM. 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, elija el botón de "reproducción" verde junto a RUN (Ejecutar) para iniciar la depuración.

    nota

    Si la aplicación de SAM no se ejecuta, consulte la ventana Output (Salida) para ver si el error se debe a una imagen de Docker que no se compila. Es posible que tenga que liberar espacio del disco en el entorno.

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

    Cuando se inician las sesiones de depuración, el panel DEBUG CONSOLE (CONSOLA DE DEPURACIÓN) muestra la salida de la depuración y los valores que devuelve la función de Lambda. Al depurar aplicaciones de SAM, AWS Toolkit (Kit de herramientas de AWS) se selecciona como canal de Output (Salida) en el panel Output (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 aplicación de AWS SAM, puede optar por ejecutar y depurar solo la función de Lambda. Excluya otros recursos definidos por la plantilla de SAM. 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 la función (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 Habilitación de lentes de código de AWS 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 tiempo de ejecución donde se ejecuta la aplicación de SAM.

  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 aplicaciones en JavaScript, el valor predeterminado es app.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 clave-valor con formato JSON que definen la carga del evento.

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

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

    Cuando se inician las sesiones de depuración, el panel DEBUG CONSOLE (CONSOLA DE DEPURACIÓN) muestra la salida de la depuración y los valores que devuelve la función de Lambda. Al depurar aplicaciones de SAM, AWS Toolkit (Kit de herramientas de AWS) se selecciona como el canal de Output (Salida) en el panel Output (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 lanzamiento de AWS Cloud9 de type=aws-sam con invokeTarget.target=api.

nota

API Gateway admite dos tipos de API. son las API REST y HTTP. Sin embargo, la característica API Gateway con AWS Toolkit solo admite las API REST. A veces las API HTTP se llaman “API Gateway V2”.

Para ejecutar y depurar recursos de API Gateway locales
  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 Habilitación de lentes de código de AWS Toolkit . A continuación, en el menú, elija el elemento marcado como Evento de API.

    • 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 recurso de API.

ruta

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

Debe ser una ruta de API válida resuelta desde el archivo template.yaml que se especifica mediante invokeTarget.templatePath.

httpMethod

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

payload

La carga JSON (cuerpo HTTP) para enviar en la solicitud, con la misma estructura y las mismas reglas que el campo lambda.payload.

payload.path apunta a un archivo que contiene la carga JSON.

payload.json especifica una carga JSON en línea.

headers

Mapa opcional de pares nombre-valor. Se usa para especificar los encabezados HTTP que se incluirán 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 conexión de AWS. 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

Procedimiento que sigue AWS SAM CLI para compilar la aplicación. Para obtener más información, consulte las propiedades de AWS SAM CLI (“sam”) en Opciones 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 configuradas incluyen el acceso de lectura/escritura adecuado a los siguientes servicios: Amazon S3, AWS CloudFormation, AWS Lambda y Amazon API Gateway.

  • Para aplicaciones con el tipo de implementación Image, asegúrese de que dispone de un nombre de bucket de Amazon S3 globalmente único y de un URI de repositorio de Amazon ECR para utilizarlo en la implementación.

Sincronización de una aplicación sin servidor

  1. En la ventana del Explorador de AWS, abra el menú contextual (haciendo clic con el botón derecho) del nodo Lambda y seleccione Sincronizar una aplicación SAM.

  2. Elija la Región de AWS en la que desea 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 el tipo de paquete Image, ingrese el nombre de un repositorio de Amazon ECR que se pueda utilizar en 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.

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

Eliminar una aplicación sin servidor implica eliminar la pila de AWS CloudFormation que ha implementado previamente en la nube de 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. Abra el menú contextual (haga clic con el botón derecho) del nombre de la pila de AWS CloudFormation que corresponde a la aplicación sin servidor que desea eliminar. A continuación, elija Delete CloudFormation Stack (Eliminar pila de CloudFormation).

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

Si la eliminación de la pila se realiza correctamente, AWS Toolkit elimina el nombre de la pila de la lista AWS CloudFormation en AWS Explorer.