

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# AWS Lambda Projet de base : création d'une image Docker
<a name="lambda-creating-project-docker-image"></a>

Vous pouvez utiliser le Toolkit for Visual Studio pour déployer votre AWS Lambda fonction sous forme d'image Docker. Avec Docker, vous avez plus de contrôle sur votre environnement d'exécution. Par exemple, vous pouvez choisir des environnements d'exécution personnalisés tels que .NET 8.0. Vous déployez votre image Docker de la même manière que n'importe quelle autre image de conteneur. Ce didacticiel est très similaire à [Tutorial : Basic Lambda](lambda-creating-project-in-visual-studio.md) Project, à deux différences près :
+ Un Dockerfile est inclus dans le projet.
+ Une autre configuration de publication est choisie.

*Pour plus d'informations sur les images de conteneurs Lambda, consultez la section [Packages de déploiement Lambda](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-package.html) dans le guide du développeur.AWS Lambda *

Pour plus d'informations sur l'utilisation de Lambda AWS Toolkit for Visual Studio, consultez la section [Utilisation des AWS Lambda modèles dans la AWS Toolkit for Visual Studio](lambda-index.md) rubrique de ce guide de l'utilisateur.

## Création d'un projet Lambda Visual Studio .NET Core
<a name="create-a-visual-studio-net-core-lam-project"></a>

Vous pouvez utiliser les modèles et les plans Lambda Visual Studio pour accélérer l'initialisation de votre projet. Les plans Lambda contiennent des fonctions prédéfinies qui simplifient la création d'une base de projet flexible.

**Pour créer un projet Lambda Visual Studio .NET Core**

1. Dans Visual Studio, développez le menu **Fichier**, développez **Nouveau**, puis choisissez **Projet**.

1. Dans la boîte de dialogue **Nouveau projet**, définissez les **listes déroulantes Langue**, **plate-forme** et **type de projet** sur « Tous », puis saisissez le **aws lambda** texte dans le champ **Rechercher**. Choisissez le modèle de **projet AWS Lambda (.NET Core - C\$1**).

1. Dans le champ **Nom du projet**, entrez**AWSLambdaDocker**, spécifiez l'**emplacement** de votre fichier, puis choisissez **Créer**.

1. Sur la page **Sélectionner un plan**, choisissez le plan **.NET 8 (image conteneur)**, puis choisissez **Terminer** pour créer le projet Visual Studio. Vous pouvez maintenant vérifier la structure et le code du projet.

## Révision des fichiers de projet
<a name="review-the-project-files"></a>

Les sections suivantes examinent les trois fichiers de projet créés par le plan **.NET 8 (Container Image)** :

1. `Dockerfile`

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

1. `Function.cs`

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

A `Dockerfile` exécute trois actions principales :
+ `FROM`: définit l'image de base à utiliser pour cette image. Cette image de base fournit le .NET Runtime, le runtime Lambda et un script shell qui fournit un point d'entrée pour le processus Lambda .NET.
+ `WORKDIR`: définit le répertoire de travail interne de l'image sous la forme`/var/task`.
+ `COPY`: copiera les fichiers générés par le processus de construction depuis leur emplacement local dans le répertoire de travail de l'image.

Les `Dockerfile` actions facultatives que vous pouvez spécifier sont les suivantes :
+ `ENTRYPOINT`: L'image de base inclut déjà un`ENTRYPOINT`, qui est le processus de démarrage exécuté au démarrage de l'image. Si vous souhaitez spécifier le vôtre, vous remplacez ce point d'entrée de base.
+ `CMD`: indique le code personnalisé AWS que vous souhaitez exécuter. Il attend un nom complet pour votre méthode personnalisée. Cette ligne doit être incluse directement dans le Dockerfile ou peut être spécifiée lors du processus de publication. 

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

Voici un exemple de Dockerfile créé par le plan .NET 8 (Container Image).

```
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>

Le `aws-lambda-tools-defaults.json` fichier est utilisé pour spécifier les valeurs par défaut de l'assistant de déploiement de Toolkit for Visual Studio et de la CLI .NET Core. La liste suivante décrit les champs que vous pouvez définir dans votre `aws-lambda-tools-defaults.json` fichier.
+ `profile`: définit votre AWS profil.
+ `region`: définit la AWS région dans laquelle vos ressources sont stockées.
+ `configuration`: définit la configuration utilisée pour publier votre fonction.
+ `package-type`: définit le type de package de déploiement sur une image de conteneur ou une archive de fichier .zip.
+ `function-memory-size`: définit l'allocation de mémoire pour votre fonction en Mo.
+ `function-timeout`: Le délai d'expiration est la durée maximale en secondes pendant laquelle une fonction Lambda peut être exécutée. Vous pouvez l'ajuster par incréments d'une seconde jusqu'à une valeur maximale de 15 minutes.
+ `docker-host-build-output-dir`: définit le répertoire de sortie du processus de construction qui est en corrélation avec les instructions du`Dockerfile`.
+ `image-command`: est le nom complet de votre méthode, le code que vous souhaitez faire exécuter par la fonction Lambda. La syntaxe est la suivante :`{Assembly}::{Namespace}.{ClassName}::{MethodName}`. Pour plus d'informations, consultez la section [Signatures du gestionnaire](https://docs.aws.amazon.com/lambda/latest/dg/csharp-handler.html#csharp-handler-signatures). Cette valeur est préremplie ultérieurement dans l'assistant de publication de Visual Studio. `image-command` 

Voici un exemple de aws-lambda-tools-defaults fichier .json créé par le plan .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>

Le `Function.cs` fichier définit les fonctions c\$1 à exposer en tant que fonctions Lambda. `FunctionHandler`Il s'agit de la fonctionnalité Lambda qui s'exécute lorsque la fonction Lambda s'exécute. Dans ce projet, `FunctionHandler` fait `ToUpper()` appel au texte saisi. 

## Publier sur Lambda
<a name="publish-to-lam"></a>

Les images Docker générées par le processus de création sont chargées sur Amazon Elastic Container Registry (Amazon ECR). Amazon ECR est un registre de conteneurs Docker entièrement géré que vous utilisez pour stocker, gérer et déployer des images de conteneurs Docker. Amazon ECR héberge l'image, à laquelle Lambda fait ensuite référence pour fournir la fonctionnalité Lambda programmée lorsqu'elle est invoquée. 

**Pour publier votre fonction sur Lambda**

1. Dans l'**explorateur de solutions**, ouvrez le menu contextuel du projet (cliquez avec le bouton droit de la souris), puis choisissez **Publier pour AWS Lambda** ouvrir la fenêtre **Upload Lambda Function**.

1. Sur la page **Upload Lambda Function**, procédez comme suit :  
![\[Écran de téléchargement pour publier la fonction Lambda basée sur des images vers AWS\]](http://docs.aws.amazon.com/fr_fr/toolkit-for-visual-studio/latest/user-guide/images/lambda-upload-docker-03192024.png)

   1.  Pour le **type de package**, **Image** il a été automatiquement sélectionné comme **type de package** car l'assistant de publication en a détecté un `Dockerfile` dans votre projet. 

   1. Dans **Nom de la fonction**, entrez un nom d'affichage pour votre instance Lambda. Ce nom est le nom de référence affiché à la fois dans l' AWS explorateur de Visual Studio et dans le AWS Management Console.

   1.  Pour **Description**, entrez le texte à afficher avec votre instance dans le AWS Management Console.

   1. Pour **Image Command**, entrez un chemin complet vers la méthode que vous souhaitez exécuter par la fonction Lambda : **AWSLambdaDocker::AWSLambdaDocker.Function::FunctionHandler** 
**Note**  
Tout nom de méthode saisi ici remplacera toute instruction CMD dans le Dockerfile. La saisie de **la commande Image** n'est facultative que SI vous `Dockerfile` incluez un `CMD` pour indiquer comment lancer la fonction Lambda.

   1. Pour **Image Repo**, entrez le nom d'un Amazon Elastic Container Registry nouveau ou existant. L'image Docker créée par le processus de génération est téléchargée dans ce registre. La définition Lambda publiée fera référence à cette image Amazon ECR.

   1.  Pour **Image Tag**, entrez une balise Docker à associer à votre image dans le référentiel. 

   1. Choisissez **Suivant**.

1. Sur la page **Détails des fonctions avancées**, dans **Nom du rôle**, choisissez un rôle associé à votre compte. Le rôle est utilisé pour fournir des informations d'identification temporaires pour tous les appels Amazon Web Services effectués par le code de la fonction. Si vous n'avez pas de rôle, choisissez **Nouveau rôle basé sur la politique AWS gérée**, puis choisissez **AWSLambdaBasicExecutionRole**. 
**Note**  
Votre compte doit être autorisé à exécuter l' ListPolicies action IAM, sinon la liste des **noms de rôle** sera vide.

1. Choisissez **Upload** pour démarrer les processus de téléchargement et de publication.
**Note**  
La page de la **fonction de téléchargement** s'affiche pendant le téléchargement de la fonction. Le processus de publication crée ensuite l'image en fonction des paramètres de configuration, crée le référentiel Amazon ECR si nécessaire, télécharge l'image dans le référentiel et crée le Lambda référençant ce dépôt avec cette image.   
Une fois la fonction chargée, la page **Function** s'ouvre et affiche la configuration de votre nouvelle fonction Lambda. 

1. **Pour appeler manuellement la fonction Lambda, dans l'onglet **Fonction de test**, entrez `hello image based lambda` dans le champ de saisie en texte libre de la demande, puis choisissez Invoke.** Votre texte, converti en majuscules, apparaîtra dans **Réponse**.   
![\[L'onglet Fonction de test de la page d'affichage des fonctions publiée contient un bouton permettant d'invoquer manuellement la méthode Lambda.\]](http://docs.aws.amazon.com/fr_fr/toolkit-for-visual-studio/latest/user-guide/images/lambda-invoke-docker-03192024.png)

1. Pour afficher le référentiel, dans l'**AWS explorateur**, sous **Amazon Elastic Container Service**, sélectionnez **Repositories.**

   Vous pouvez rouvrir la vue **Function :** à tout moment en double-cliquant sur votre instance déployée située dans l'**AWS explorateur** sous le **AWS Lambda**nœud.
**Note**  
Si la fenêtre de votre AWS explorateur n'est pas ouverte, vous pouvez l'ancrer via **Affichage** -> **AWS Explorateur**

1. Notez les options de configuration supplémentaires spécifiques à l'image dans l'onglet **Configuration**. Cet onglet permet de remplacer le `ENTRYPOINT``CMD`, et `WORKDIR` qui peut avoir été spécifié dans le Dockerfile. La **description** est la description que vous avez saisie (le cas échéant) lors du chargement/de la publication.

## Nettoyage
<a name="cleanup-lam"></a>

Si vous ne comptez pas poursuivre le développement avec cet exemple, pensez à supprimer la fonction et l'image ECR déployées afin de ne pas être facturée pour les ressources inutilisées de votre compte. 
+ Les fonctions peuvent être supprimées en cliquant avec le bouton droit sur votre instance déployée située dans l'**AWS explorateur** sous le **AWS Lambda**nœud. 
+ Les référentiels peuvent être supprimés dans l'**AWS explorateur** sous **Amazon Elastic Container Service** -> **Référentiels**.

## Étapes suivantes
<a name="next-steps-lam"></a>

Pour plus d'informations sur la création et le test d'images Lambda, consultez la section [Utilisation d'images de conteneurs avec Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-images.html).

Pour plus d'informations sur le déploiement d'images de conteneurs, les autorisations et le remplacement des paramètres de configuration, consultez la [section Configuration des fonctions](https://docs.aws.amazon.com/lambda/latest/dg/configuration-images.html).