

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.

# AWS Lambda Proyecto básico: creación de una imagen de Docker
<a name="lambda-creating-project-docker-image"></a>

Puede usar el Toolkit for Visual Studio para implementar AWS Lambda la función como una imagen de Docker. Con Docker, tiene más control sobre su tiempo de ejecución. Por ejemplo, puede elegir tiempos de ejecución personalizados, como .NET 8.0. La imagen de Docker se despliega de la misma forma que cualquier otra imagen de contenedor. Este tutorial es muy similar al [Tutorial: proyecto básico de Lambda](lambda-creating-project-in-visual-studio.md), con dos diferencias:
+ El proyecto incluye un Dockerfile.
+ Se elige una configuración de publicación alternativa.

Para obtener más información sobre las imágenes de contenedor de Lambda, consulte [Paquetes de implementación de Lambda](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-package.html) en la *Guía para desarrolladores de AWS Lambda *.

Para obtener información adicional sobre cómo trabajar con Lambda AWS Toolkit for Visual Studio, consulte el AWS Toolkit for Visual Studio tema [Uso de las AWS Lambda plantillas de esta Guía del](lambda-index.md) usuario.

## Creación de un proyecto de Lambda con .NET Core en Visual Studio
<a name="create-a-visual-studio-net-core-lam-project"></a>

Puede usar plantillas y esquemas de Visual Studio de Lambda para acelerar la inicialización del proyecto. Los esquemas de Lambda contienen funciones escritas previamente que simplifican la creación de una base de proyecto flexible.

**Para crear un proyecto de Lambda con .NET Core en Visual Studio**

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

1. Desde el cuadro de diálogo **Nuevo proyecto**, configure los cuadros desplegables **Idioma**, **Plataforma** y **Tipo de proyecto** en "Todo…" e introduzca **aws lambda** en el campo **Buscar**. Elija la plantilla **Lambda Project (.NET Core - C\$1) de AWS **.

1. En el campo **Nombre del proyecto**, introduzca **AWSLambdaDocker**, especifique la **Ubicación** del archivo y, a continuación, seleccione **Crear**.

1. En la página **Seleccionar un esquema, elija el blueprint.NET** **8 (Container Image)** y, a continuación, elija **Finalizar** para crear el proyecto de Visual Studio. Ahora puede revisar la estructura y el código del proyecto.

## Revisión de los archivos del proyecto
<a name="review-the-project-files"></a>

En las siguientes secciones se examinan los tres archivos de proyecto creados por el esquema **.NET 8 (Imagen de contenedor)**:

1. `Dockerfile`

1. `aws-lambda-tools-defaults.json`

1. `Function.cs`

### 1. Dockerfile
<a name="dockerfile"></a>

Un `Dockerfile` realiza tres acciones principales:
+ `FROM`: establece la imagen de base que se utilizará en esta imagen. Esta imagen base proporciona el tiempo de ejecución de.NET, el tiempo de ejecución de Lambda y un script del intérprete de comandos que facilita un punto de entrada para el proceso de Lambda .NET.
+ `WORKDIR`: Establece el directorio de trabajo interno de la imagen como. `/var/task`
+ `COPY`: copiará los archivos generados a partir del proceso de creación desde su ubicación local al directorio de trabajo de la imagen.

Las siguientes son acciones opcionales de un `Dockerfile` que se pueden especificar:
+ `ENTRYPOINT`: la imagen de base ya incluye un `ENTRYPOINT`, que es el proceso de inicio que se ejecuta cuando se inicia la imagen. Si desea especificar el suyo propio, anulará ese punto de entrada de base.
+ `CMD`: Indica AWS qué código personalizado desea ejecutar. Espera un nombre completo para su método personalizado. Esta línea debe incluirse directamente en el Dockerfile o puede especificarse durante el proceso de publicación. 

  ```
  # Example of alternative way to specify the Lambda target method rather than during the publish process.
  CMD [ "AWSLambdaDocker::AWSLambdaDocker.Function::FunctionHandler"]
  ```

A continuación se muestra un ejemplo de un Dockerfile creado mediante el esquema .NET 8 (Imagen de contenedor).

```
FROM public.ecr.aws/lambda/dotnet:8

WORKDIR /var/task

# This COPY command copies the .NET Lambda project's build artifacts from the host machine into the image. 
# The source of the COPY should match where the .NET Lambda project publishes its build artifacts. If the Lambda function is being built 
# with the AWS .NET Lambda Tooling, the `--docker-host-build-output-dir` switch controls where the .NET Lambda project
# will be built. The .NET Lambda project templates default to having `--docker-host-build-output-dir`
# set in the aws-lambda-tools-defaults.json file to "bin/Release/lambda-publish".
#
# Alternatively Docker multi-stage build could be used to build the .NET Lambda project inside the image.
# For more information on this approach checkout the project's README.md file.
COPY "bin/Release/lambda-publish"  .
```

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

El archivo `aws-lambda-tools-defaults.json` se utiliza para especificar los valores predeterminados del asistente de implementación del Kit de herramientas para Visual Studio y la CLI de .NET Core. En la siguiente lista se describen los campos que puede configurar en el archivo `aws-lambda-tools-defaults.json`.
+ `profile`: establece tu AWS perfil.
+ `region`: establece la AWS región en la que se almacenan los recursos.
+ `configuration`: establece la configuración utilizada para publicar la función.
+ `package-type`: establece el tipo de paquete de implementación como una imagen de contenedor o archivo .zip.
+ `function-memory-size`: establece la asignación de memoria para la función en MB.
+ `function-timeout`: el tiempo de espera es la cantidad máxima de tiempo en segundos que una función de Lambda puede ejecutarse. Puede ajustarlo en incrementos de 1 segundo hasta un valor máximo de 15 minutos.
+ `docker-host-build-output-dir`: establece el directorio de salida del proceso de compilación que se correlaciona con las instrucciones del `Dockerfile`.
+ `image-command`: es un nombre completo para su método, el código que desea que ejecute la función de Lambda. La sintaxis es la siguiente: `{Assembly}::{Namespace}.{ClassName}::{MethodName}`. Para obtener más información, consulte [Firmas de controlador](https://docs.aws.amazon.com/lambda/latest/dg/csharp-handler.html#csharp-handler-signatures). Si se establece `image-command` aquí, este valor se rellena de forma automática en el asistente de publicación de Visual Studio más adelante. 

A continuación, se muestra un ejemplo de un aws-lambda-tools-defaults archivo .json creado mediante el blueprint.NET 8 (Container Image).

```
{
  "Information": [
    "This file provides default values for the deployment wizard inside Visual Studio and the AWS Lambda commands added to the .NET Core CLI.",
    "To learn more about the Lambda commands with the .NET Core CLI execute the following command at the command line in the project root directory.",
    "dotnet lambda help",
    "All the command line options for the Lambda command can be specified in this file."
  ],
  "profile": "default",
  "region": "us-west-2",
  "configuration": "Release",
  "package-type": "image",
  "function-memory-size": 512,
  "function-timeout": 30,
  "image-command": "AWSLambdaDocker::AWSLambdaDocker.Function::FunctionHandler",
  "docker-host-build-output-dir": "./bin/Release/lambda-publish"
}
```

### 3. Function.cs
<a name="w2aac15c45c16c17c21"></a>

El archivo `Function.cs` define las funciones de C\$1 que se expondrán como funciones de Lambda. `FunctionHandler` es la funcionalidad de Lambda que tiene lugar cuando se ejecuta la función de Lambda. En este proyecto, `FunctionHandler` llama a `ToUpper()` en el texto de entrada. 

## Publicación en Lambda
<a name="publish-to-lam"></a>

Las imágenes de Docker generadas por el proceso de compilación se cargan en Amazon Elastic Container Registry (Amazon ECR). Amazon ECR es un registro de contenedores de Docker completamente gestionado que facilita a los desarrolladores el almacenamiento, la administración y la implementación de imágenes de contenedores de Docker. Amazon ECR aloja la imagen, a la que Lambda hace referencia para proporcionar la funcionalidad Lambda programada cuando se invoca. 

**Para publicar su función en Lambda**

1. Desde el **Explorador de soluciones**, abra el menú contextual del proyecto (haga clic con el botón derecho) y, a continuación, seleccione **Publicar en AWS Lambda** para abrir la ventana **Cargar función de Lambda**.

1. Desde la ventana **Cargar función de Lambda**, haga lo siguiente:  
![\[Cargue la pantalla para publicar la función Lambda basada en imágenes en AWS\]](http://docs.aws.amazon.com/es_es/toolkit-for-visual-studio/latest/user-guide/images/lambda-upload-docker-03192024.png)

   1.  En **Tipo de paquete**, se ha seleccionado **Image** automáticamente como su **tipo de paquete** porque el asistente de publicación detectó un `Dockerfile` en su proyecto. 

   1. En **Nombre de la función**, introduzca un nombre para mostrar para la instancia de Lambda. Este nombre es el nombre de referencia que aparece tanto en el Explorador de AWS en Visual Studio como en la Consola de administración de AWS.

   1.  En **Descripción**, escriba el texto que se mostrará con la instancia en la Consola de administración de AWS.

   1. En **Comando de imagen**, introduzca una ruta completa al método que desee que ejecute la función de Lambda: **AWSLambdaDocker::AWSLambdaDocker.Function::FunctionHandler** 
**nota**  
Cualquier nombre de método que se introduzca aquí anulará cualquier instrucción del CMD en el Dockerfile. Introducir **el comando Image** es opcional solo SI su `Dockerfile` incluye un `CMD` para indicar cómo iniciar la función de Lambda.

   1. En **Repositorio de imagen**, introduzca el nombre de un Amazon Elastic Container Registry nuevo o existente. La imagen de Docker que crea el proceso de compilación se carga en este registro. La definición de Lambda que se publique hará referencia a esa imagen de Amazon ECR.

   1.  En **Etiqueta de la imagen**, introduzca una etiqueta de Docker para asociarla a su imagen en el repositorio. 

   1. Elija **Siguiente**.

1. En la página **Detalles avanzados de la función**, en **Nombre del rol**, elija un rol asociado a su cuenta. El rol se utiliza para proporcionar credenciales temporales para las llamadas a los servicios de Amazon Web Services realizadas por el código en la función. Si no tiene un rol, elija **Nuevo rol basado en la política AWS gestionada** y, a continuación, elija. **AWSLambdaBasicExecutionRole** 
**nota**  
Su cuenta debe tener permiso para ejecutar la ListPolicies acción de IAM o la lista de **nombres de rol** estará vacía.

1. Elija **Cargar **para iniciar el proceso de carga y publicación.
**nota**  
Se mostrará la página **Cargando función** durante la carga de la función. A continuación, el proceso de publicación crea la imagen en función de los parámetros de configuración, genera el repositorio de Amazon ECR si es necesario, carga la imagen en el repositorio y crea la Lambda que hace referencia al repositorio con esa imagen.   
Una vez cargada la función, se abre la página de **Función** y muestra la configuración de la nueva función de Lambda. 

1. Para invocar manualmente la función de Lambda, en la pestaña **Probar función**, escriba `hello image based lambda` en el campo de entrada de texto libre de la solicitud y, a continuación, seleccione **Invocar**. El texto, convertido a mayúsculas, aparecerá en **Respuesta**.   
![\[La pestaña Probar función de la página de visualización Función publicada tiene un botón para invocar manualmente el método de Lambda.\]](http://docs.aws.amazon.com/es_es/toolkit-for-visual-studio/latest/user-guide/images/lambda-invoke-docker-03192024.png)

1. Para ver el repositorio, en el **Explorador de AWS **, en **Amazon Elastic Container Service**, seleccione **Repositorios**.

   Puede volver a abrir **Función**: acceda en cualquier momento haciendo doble clic en la instancia implementada ubicada en el **Explorador de AWS **, debajo del nodo **AWS Lambda**.
**nota**  
**Si la ventana del AWS explorador no está abierta, puede acoplarla mediante **Ver** ->AWS Explorador**

1. Consulte las opciones de configuración adicionales específicas de la imagen en la pestaña **Configuración**. Esta pestaña ofrece una forma de anular los datos de `ENTRYPOINT`, `CMD` y `WORKDIR` que pueden haberse especificado en el Dockerfile. **Descripción** es la descripción que introdujo (de hacerlo) durante la carga o publicación.

## Eliminación
<a name="cleanup-lam"></a>

Si no va a seguir desarrollando con este ejemplo, recuerde eliminar la función y la imagen de ECR que se implementaron para que no se le facturen los recursos no utilizados de la cuenta. 
+ Las funciones se pueden eliminar haciendo clic con el botón derecho en la instancia implementada ubicada en el **Explorador de AWS **, debajo del nodo **AWS Lambda**. 
+ Los repositorios se pueden eliminar en el **Explorador de AWS **, desde **Amazon Elastic Container Service** -> **Repositorios**.

## Siguientes pasos
<a name="next-steps-lam"></a>

Para obtener información sobre cómo crear y probar imágenes de Lambda, consulte [Uso de imágenes de contenedor con Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-images.html).

Para obtener información sobre la implementación de imágenes de contenedores, sus permisos y la anulación de los valores de configuración, consulte [Funciones de configuración](https://docs.aws.amazon.com/lambda/latest/dg/configuration-images.html).