

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.

# Tutorial: Cree y pruebe una aplicación sin servidor con AWS Lambda
<a name="lambda-build-test-severless-app"></a>

Puede crear una aplicación Lambda sin servidor mediante AWS Toolkit for Visual Studio una plantilla. Las plantillas del proyecto Lambda incluyen una para una **aplicación AWS sin servidor**, que es la AWS Toolkit for Visual Studio implementación del [modelo de aplicaciones AWS sin servidor](https://github.com/awslabs/serverless-application-model) (SAM).AWS Con este tipo de proyecto, puede desarrollar un conjunto de AWS Lambda funciones e implementarlas con los AWS recursos necesarios como una aplicación completa, que se utiliza AWS CloudFormation para organizar la implementación.

Para obtener información sobre los requisitos previos y la configuración de AWS Toolkit for Visual Studio, consulte [Uso de plantillas AWS Lambda en AWS el Toolkit](lambda-index.md) for Visual Studio.

**Topics**
+ [Cree un nuevo proyecto de aplicación sin servidor AWS](#create-a-new-aws-serverless-application-project)
+ [Revisión de los archivos de la aplicación sin servidor](#examine-the-files-in-the-serverless-application)
+ [Implementación de la aplicación sin servidor](#deploy-the-serverless-application)
+ [Prueba de la aplicación sin servidor](#test-the-serverless-application)

## Cree un nuevo proyecto de aplicación sin servidor AWS
<a name="create-a-new-aws-serverless-application-project"></a>

AWS Los proyectos de aplicaciones sin servidor crean funciones Lambda con una CloudFormation plantilla sin servidor. CloudFormation Las plantillas le permiten definir recursos adicionales, como bases de datos, añadir funciones de IAM e implementar varias funciones a la vez. Esto difiere de los proyectos AWS Lambda, que se centran en desarrollar e implementar una sola función Lambda.

En el siguiente procedimiento se describe cómo crear un nuevo proyecto de aplicación sin servidor de AWS .

1. Desde Visual Studio, expanda el menú **Archivo**, expanda **Nuevo** y, a continuación, elija **Proyecto**.

1. En el cuadro de diálogo **Nuevo proyecto**, asegúrese de que los cuadros desplegables **Idioma**, **Plataforma** y **Tipo de proyecto** están definidos en "Todo…" e introduzca **aws lambda** en el campo **Buscar**.

1. Seleccione la plantilla **Aplicación sin servidor de AWS con pruebas (.NET Core - C\$1)**.
**nota**  
Es posible que la plantilla **Aplicación sin servidor de AWS con pruebas (.NET Core - C\$1)** no aparezca en la parte superior de los resultados.

1. Haga clic en **Siguiente** para abrir el cuadro de diálogo **Configurar su nuevo proyecto**.

1. En el cuadro de diálogo **Configurar su nuevo proyecto**, introduzca **ServerlessPowertools** para el **Nombre** y, a continuación, complete los campos restantes según sus preferencias. Pulse el botón **Crear** para pasar al cuadro de diálogo de **Selección de esquemas**.

1. En la página **Seleccionar esquema,** elija el esquema **Powertools para AWS Lambda** y, a continuación, elija **Finalizar** para crear el proyecto de Visual Studio.

## Revisión de los archivos de la aplicación sin servidor
<a name="examine-the-files-in-the-serverless-application"></a>

En las siguientes secciones se ofrece una visión detallada de los tres archivos de aplicaciones sin servidor creados para el proyecto:

1. serverless.template

1. Functions.cs

1. aws-lambda-tools-defaults.json

### 1. serverless.template
<a name="blogcs"></a>

Un `serverless.template` archivo es una AWS CloudFormation plantilla para declarar las funciones de Serverless y otros AWS recursos. El archivo incluido en este proyecto contiene una declaración para una sola función de Lambda que se expondrá a través de Amazon API Gateway como una operación `HTTP *Get*`. Puede editar esta plantilla para personalizar la función existente o añadir más funciones y otros recursos que necesite su aplicación.

A continuación se muestra un ejemplo de un archivo `serverless.template`:

```
{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Transform": "AWS::Serverless-2016-10-31",
  "Description": "An AWS Serverless Application.",
  "Resources": {
    "Get": {
      "Type": "AWS::Serverless::Function",
      "Properties": {
         "Architectures": [
            "x86_64"
            ],
         "Handler": "ServerlessPowertools::ServerlessPowertools.Functions::Get",
         "Runtime": "dotnet8",
         "CodeUri": "",
         "MemorySize": 512,
         "Timeout": 30,
         "Role": null,
         "Policies": [
            "AWSLambdaBasicExecutionRole"
            ],
         "Environment": {
            "Variables": {
               "POWERTOOLS_SERVICE_NAME": "ServerlessGreeting",
               "POWERTOOLS_LOG_LEVEL": "Info",
               "POWERTOOLS_LOGGER_CASE": "PascalCase",
               "POWERTOOLS_TRACER_CAPTURE_RESPONSE": true,
               "POWERTOOLS_TRACER_CAPTURE_ERROR": true,
               "POWERTOOLS_METRICS_NAMESPACE": "ServerlessGreeting"
               }
            },
         "Events": {
            "RootGet": {
               "Type": "Api",
               "Properties": {
                  "Path": "/",
                  "Method": "GET"
                  }
               }
            }
         }
      }
   },
  "Outputs": {
    "ApiURL": {
      "Description": "API endpoint URL for Prod environment",
      "Value": {
        "Fn::Sub": "https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/"
      }
    }
  }
}
```

Tenga en cuenta que muchos de los campos de declaración `...AWS:: Serverless::Function...` son similares a los campos de la implementación de un proyecto de Lambda. El registro, las métricas y el rastreo de Powertools se configuran mediante las siguientes variables de entorno:
+ POWERTOOLS\$1SERVICE\$1NAME= ServerlessGreeting
+ POWERTOOLS\$1LOG\$1LEVEL=Info
+ POWERTOOLS\$1LOGGER\$1CASE= PascalCase
+ POWERTOOLS\$1TRACER\$1CAPTURE\$1RESPONSE=true
+ POWERTOOLS\$1TRACER\$1CAPTURE\$1ERROR=true
+ POWERTOOLS\$1METRICS\$1NAMESPACE= ServerlessGreeting

[Para obtener definiciones y detalles adicionales sobre las variables de entorno, consulte el sitio web Powertools para obtener referencias. AWS Lambda](https://awslabs.github.io/aws-lambda-powertools-dotnet/references/)

### 2. Functions.cs
<a name="functionscs"></a>

`Functions.cs` es un archivo de clase que contiene un método de C\$1 asignado a una sola función declarada en el archivo de plantilla. La función de Lambda responde a los métodos `HTTP Get` de la API Gateway. A continuación se muestra un ejemplo del archivo `Functions.cs`:

```
public class Functions
{
    [Logging(LogEvent = true, CorrelationIdPath = CorrelationIdPaths.ApiGatewayRest)]
    [Metrics(CaptureColdStart = true)]
    [Tracing(CaptureMode = TracingCaptureMode.ResponseAndError)]
    public APIGatewayProxyResponse Get(APIGatewayProxyRequest request, ILambdaContext context)
    {
        Logger.LogInformation("Get Request");

        var greeting = GetGreeting();

        var response = new APIGatewayProxyResponse
        {
            StatusCode = (int)HttpStatusCode.OK,
            Body = greeting,
            Headers = new Dictionary (string, string) { { "Content-Type", "text/plain" } }
        };

        return response;
    }

    [Tracing(SegmentName = "GetGreeting Method")]
    private static string GetGreeting()
    {
        Metrics.AddMetric("GetGreeting_Invocations", 1, MetricUnit.Count);

        return "Hello Powertools for AWS Lambda (.NET)";
    }
}
```

### 3. aws-lambda-tools-defaults.json
<a name="functionscs"></a>

`aws-lambda-tools-defaults.json`proporciona los valores predeterminados para el asistente de AWS implementación en Visual Studio y los AWS Lambda comandos agregados a la CLI de.NET Core. A continuación se muestra un ejemplo del archivo `aws-lambda-tools-defaults.json` que se incluye en este proyecto:

```
{
  "profile": "Default",
  "region": "us-east-1",
  "configuration": "Release",
  "s3-prefix": "ServerlessPowertools/",
  "template": "serverless.template",
  "template-parameters": ""
}
```

## Implementación de la aplicación sin servidor
<a name="deploy-the-serverless-application"></a>

Para implementar la aplicación sin servidor complete los siguientes pasos.

1. En el **Explorador de soluciones**, abra el menú contextual del proyecto (haga clic con el botón derecho) y seleccione **Publicar en AWS Lambda para** abrir el cuadro de diálogo **Publicar aplicación AWS sin servidor**.

1. En el cuadro de diálogo **Publicar una aplicación AWS sin servidor**, introduzca un nombre para el contenedor de la CloudFormation pila en el campo Nombre de la **pila**.

1. En el campo **Bucket de S3**, elija un bucket de Amazon S3 en el que se cargará el paquete de aplicaciones o elija el botón **Nuevo...** e introduzca el nombre de un nuevo bucket de Amazon S3. A continuación, seleccione **Publicar** para publicar e implementar la aplicación.
**nota**  
La CloudFormation pila y el bucket de Amazon S3 deben estar en la misma AWS región. El resto de los ajustes del proyecto se definen en el archivo `serverless.template`.  
![\[Imagen del cuadro de diálogo Publicar una aplicación AWS sin servidor.\]](http://docs.aws.amazon.com/es_es/toolkit-for-visual-studio/latest/user-guide/images/lambda-upload-serverless-03192024.png)

1. La ventana de vista de **Pila** se abre durante el proceso de publicación. Cuando se completa la implementación, el campo **Estado** muestra: `CREATE_COMPLETE`.  
![\[Imagen de la ventana de visualización de la pila de implementación en Visual Studio.\]](http://docs.aws.amazon.com/es_es/toolkit-for-visual-studio/latest/user-guide/images/lambda-upload-stackview-03192024.png)

## Prueba de la aplicación sin servidor
<a name="test-the-serverless-application"></a>

Cuando se complete la creación de la pila, podrá ver la aplicación mediante la **URL sin servidor de AWS **. Si ha completado este tutorial sin agregar funciones o parámetros adicionales, al acceder a su URL AWS sin servidor, se muestra la siguiente frase en su navegador web:. `Hello Powertools for AWS Lambda (.NET)`