AWS SAM Utilisation de la AWS boîte à outils - AWS Cloud9

AWS Cloud9 n'est plus disponible pour les nouveaux clients. Les clients existants de AWS Cloud9 peuvent continuer à utiliser le service normalement. En savoir plus

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 SAM Utilisation de la AWS boîte à outils

Le AWS kit d'outils fournit un support pour les applications sans serveur. À l'aide du AWS kit d'outils, vous pouvez créer des applications sans serveur contenant des AWS Lambdafonctions, puis les déployer sur une AWS CloudFormation pile.

Création d'une application sans serveur

Cet exemple montre comment utiliser le AWS Toolkit pour créer une application sans serveur. Pour plus d'informations sur l'exécution et le débogage des applications sans serveur, consultez Test et débogage des applications sans serveur.

Les conditions préalables nécessaires à la création d'une application sans serveur sont les suivantes : AWS SAM CLIet. AWS CLI Ils sont inclus avec AWS Cloud9. S'il n' AWS SAM CLIest pas installé ou s'il est obsolète, vous devrez peut-être exécuter une installation ou une mise à niveau. Pour obtenir des instructions sur l'installation AWS SAM CLI, voir Installation du AWS SAM CLI et pour des instructions sur la mise à niveau du AWS SAM CLI, voir Mise à niveau du AWS SAM CLI.

Création d'une application sans serveur à l'aide de la boîte à outils AWS

Cet exemple montre comment créer une application sans serveur avec le AWS Toolkit en utilisant le AWS Serverless Application Model (AWS SAM).

  1. Dans l'AWS explorateur, ouvrez le menu contextuel (clic droit) du nœud Lambda, puis choisissez Create Lambda Application. SAM

    Note

    Vous pouvez également sélectionner l'icône du menu située en face de l'en-tête AWS: Explorer, puis choisir Create Lambda Application SAM.

  2. Choisissez le moteur d'exécution de votre SAM application. Pour cet exemple, choisissez nodejs12.x.

    Note

    Si vous sélectionnez l'un des environnements d'exécution avec « (Image) », votre application est de type package Image. Si vous sélectionnez l'un des environnements d'exécution sans « (Image) », votre application est de type Zip. Pour plus d'informations sur la différence entre les types de packages Image et Zip, consultez Packages de déploiement Lambda dans le guide du développeur AWS Lambda .

  3. Choisissez l'un des modèles suivants pour votre appli sans serveur :

    • AWS SAM Hello World : modèle de base doté d'une fonction Lambda qui renvoie le message classique « Hello World ».

    • AWS Exemple d'application Step Functions : exemple d'application qui exécute un flux de travail de négociation d'actions. Les Steps Functions orchestrent les interactions des fonctions Lambda impliquées.

  4. Choisissez l'emplacement de votre nouveau projet. S'il est disponible, vous pouvez sélectionner un dossier d'espace de travail existant. Sinon, recherchez un autre dossier. Si vous choisissez Select a different folder (Sélectionner un autre dossier), une boîte de dialogue s'affiche pour vous permettre de sélectionner un emplacement de dossier.

  5. Saisissez le nom de votre nouvelle application. Pour cet exemple, utilisez my-sam-app-nodejs. Une fois que vous avez appuyé sur Entrée, le AWS kit d'outils met quelques instants à créer le projet.

Lorsque le projet est créé, vous pouvez afficher les fichiers de votre application dans la fenêtre Environnement. Trouvez-le dans la fenêtre Explorer.

Capture d'écran montrant les environnements d'exécution disponibles pour les SAM applications.

Test et débogage des applications sans serveur

Vous pouvez utiliser le AWS kit d'outils pour configurer la façon de déboguer des applications sans serveur et de les exécuter localement dans votre environnement de développement. Vous pouvez déboguer une application sans serveur définie par un modèle AWS Serverless Application Model (AWS SAM). Ce modèle utilise une YAML syntaxe simple pour décrire les ressources telles que les fonctionsAPIs, les bases de données et les mappages de sources d'événements qui constituent une application sans serveur.

Pour en savoir plus sur le AWS SAM modèle, reportez-vous à l'anatomie du AWS SAM modèle dans le Guide du AWS Serverless Application Model développeur.

Vous pouvez également déboguer rapidement les applications sans serveur qui n'ont pas été validées dans un SAM modèle.

Vous commencez à configurer le comportement de débogage en utilisant des actions intégrées pour identifier une fonction éligible AWS Lambda . Pour utiliser l'infrastructure définie par le SAM modèle, utilisez l'action en ligne dans le fichier YAML formaté correspondant. Pour tester la fonction directement sans le modèle, utilisez le lien contextuel du gestionnaire Lambda dans le fichier d'application.

Note

Dans cet exemple, nous déboguons une application qui utilise JavaScript. Mais vous pouvez utiliser les fonctionnalités de débogage disponibles dans le AWS Toolkit avec les langages et environnements d'exécution suivants :

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

  • Python — 3.7, 3.8, 3.9, 3.10 (les applications sans serveur Python 2.7 et 3.6 peuvent être exécutées mais ne peuvent pas être déboguées par le AWS Toolkit.)

Votre choix de langage affecte également la façon dont les liens contextuels indiquent les gestionnaires Lambda éligibles. Pour de plus amples informations, veuillez consulter Exécution et débogage des fonctions sans serveur directement à partir du code.

Utilisation SAM de modèles pour exécuter et déboguer des applications sans serveur

Pour les applications exécutées et déboguées à l'aide d'un SAM modèle, un fichier YAML formaté décrit le comportement de l'application et les ressources qu'elle utilise. Si vous créez une application sans serveur à l'aide du AWS Toolkit, un fichier nommé template.yaml est automatiquement généré pour votre projet.

Dans cette procédure, utilisez l'exemple d'application qui a été créé dans Création d'une application sans serveur.

Pour utiliser un SAM modèle pour exécuter et déboguer une application sans serveur

  1. Pour afficher les fichiers de votre application, qui composent votre application sans serveur, accédez à la fenêtre Environnement.

  2. Dans le dossier de l'application (par exemple, my-sample-app), ouvrez le template.yaml fichier.

  3. Pour template.yaml, sélectionnez Edit Launch Configuration (Modifier la configuration du lancement).

    Un nouvel éditeur affiche le fichier launch.json qui fournit une configuration de débogage avec des attributs par défaut.

  4. Modifiez ou confirmez les valeurs des propriétés de configuration suivantes :

    • "name" : saisissez un nom convivial à afficher dans le champ déroulant Configuration dans la vue Run (Exécuter).

    • "target" : vérifiez que la valeur est "template". Ainsi, le SAM modèle est le point d'entrée de la session de débogage.

    • "templatePath" – Saisissez un chemin relatif ou absolu pour le fichier template.yaml.

    • "logicalId"— Assurez-vous que le nom correspond à celui spécifié dans la section Ressources du SAM modèle. Dans ce cas, il s'agit de HelloWorldFunction de type AWS::Serverless::Function.

    Pour plus d'informations sur ces entrées et sur d'autres entrées dans le fichier launch.json, consultez Options de configuration pour le débogage d'applications sans serveur.

  5. Si la votre configuration de débogage vous convient, enregistrez launch.json. Ensuite, cliquez sur le bouton vert « play » à côté RUNpour démarrer le débogage.

    Note

    Si votre SAM application ne s'exécute pas, consultez la fenêtre de sortie pour voir si l'erreur est due à l'impossibilité de créer une image Docker. Vous devrez peut-être libérer de l'espace disque dans votre environnement.

    Pour de plus amples informations, veuillez consulter Erreur lors de l'exécution SAM des applications localement dans le AWS Toolkit car l' AWS Cloud9 environnement ne dispose pas de suffisamment d'espace disque.

    Lorsque les sessions de débogage démarrent, le DEBUGCONSOLEpanneau affiche les résultats de débogage et affiche toutes les valeurs renvoyées par la fonction Lambda. Lors du débogage SAM d'applications, le AWS Toolkit est sélectionné comme canal de sortie dans le panneau de sortie.

    Note

    Pour les utilisateurs Windows, si une erreur de montage Docker se produit au cours de ce processus, vous devez actualiser les informations d'identification de vos lecteurs partagés dans Docker Settings (Paramètres Docker). Une erreur de montage Docker peut se présenter comme suit.

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

Exécution et débogage des fonctions sans serveur directement à partir du code

Lorsque vous testez l' AWS SAM application, vous pouvez choisir d'exécuter et de déboguer uniquement la fonction Lambda. Excluez les autres ressources définies par le SAM modèle. Cette approche implique d'utiliser une action en ligne pour identifier les gestionnaires de fonction Lambda dans le code source qui peut être directement appelé.

Les gestionnaires Lambda détectés par des liens contextuels dépendent du langage et de l'environnement d'exécution que vous utilisez pour votre application.

Language/Environnement d'exécution Conditions d'identification des fonctions Lambda par des liens contextuels

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

La fonction de recherche dispose des fonctions suivantes :
  • Il s'agit d'une fonction exportée avec jusqu'à trois paramètres.

  • Elle comporte un fichier package.json dans son dossier parent dans le dossier de l'espace de travail.

Python (3.7, 3.8, 3.9 et 3.10)

La fonction de recherche possède les fonctions suivantes :
  • Il s'agit d'une fonction de niveau supérieur.

  • Elle comporte un fichier requirements.txt dans son dossier parent dans le dossier de l'espace de travail.

Pour exécuter et déboguer une application sans serveur directement à partir du code de l'application

  1. Pour afficher les fichiers de votre application sans serveur, accédez au dossier de l'application en choisissant l'icône de dossier à côté de l'éditeur.

  2. Dans le dossier de l'application (par exemple, my-sample-app), développez le dossier des fonctions (dans cet exemple, hello-world) et ouvrez le app.js fichier.

  3. Dans l'action en ligne qui identifie une fonction de gestionnaire Lambda éligible, sélectionnez Add Debug Configuration. Si l'option de configuration add debug (ajouter le débogage) n'apparaît pas, vous devez activer les lentilles de code. Pour activer les lentilles de code, consultez Activer les lentilles de code du AWS Toolkit .

    Accédez à l'option Ajouter une configuration de débogage dans l'action en ligne d'un gestionnaire de fonction Lambda.
  4. Sélectionnez le moteur d'exécution sur lequel votre SAM application s'exécute.

  5. Dans l'éditeur du fichier launch.json, modifiez ou confirmez les valeurs des propriétés de configuration suivantes :

    • "name" – Saisissez un nom convivial pour le lecteur.

    • "target" – Vérifiez que la valeur est "code" afin qu'un gestionnaire de fonction Lambda soit directement appelé.

    • "lambdaHandler" – Saisissez le nom de la méthode dans votre code que Lambda appelle pour exécuter votre fonction. Par exemple, pour les applications dans JavaScript, la valeur par défaut estapp.lambdaHandler.

    • "projectRoot" – Saisissez le chemin du fichier d'application qui contient la fonction Lambda.

    • "runtime" : saisissez ou confirmez un environnement d'exécution valide pour l'environnement d'exécution Lambda (par exemple, "nodejs.12x").

    • "payload" – Choisissez l'une des options suivantes pour définir la charge utile d'événement à fournir à votre fonction Lambda comme entrée :

      • "json": paires JSON clé-valeur formatées qui définissent la charge utile de l'événement.

      • "path" : chemin du fichier utilisé comme charge utile d'événement.

  6. Si vous êtes satisfait de la configuration de débogage, cliquez sur la flèche verte à côté RUNpour démarrer le débogage.

    Lorsque les sessions de débogage démarrent, le DEBUGCONSOLEpanneau affiche les résultats de débogage et affiche toutes les valeurs renvoyées par la fonction Lambda. Lors du débogage SAM d'applications, AWS Toolkit est sélectionné comme canal de sortie dans le panneau de sortie.

    Note

    Si Docker est mentionné dans les messages d'erreur, consultez cette note.

Exécution et débogage des ressources Amazon API Gateway locales

Vous pouvez exécuter ou déboguer les ressources locales de AWS SAM API Gateway spécifiées danstemplate.yaml. Pour ce faire, exécutez une configuration de AWS Cloud9 lancement de type=aws-sam avec leinvokeTarget.target=api.

Note

APIGateway prend en charge deux types deAPIs. Ils sont REST et HTTPAPIs. Cependant, la fonctionnalité API Gateway associée au AWS Toolkit ne prend en charge que RESTAPIs. Ils HTTP APIs sont parfois appelés « API Gateway V2 »APIs.

Pour exécuter et déboguer les ressources de API passerelle locales
  1. Choisissez l'une des approches suivantes pour créer une configuration de lancement pour une ressource de AWS SAM API passerelle :

    • Option 1 : consultez le code source du gestionnaire (plus précisément, un fichier .js, .cs ou .py) dans votre projet AWS SAM , passez la souris sur le gestionnaire Lambda et choisissez Add Debug Configuration (Ajouter une configuration de débogage). Si l'option n'apparaît pas, activez les lentilles de code. Pour activer les lentilles de code, consultez Activer les lentilles de code du AWS Toolkit .). Ensuite, dans le menu, choisissez l'élément marqué API Événement.

    • Option 2 Modifiez launch.json et créez une configuration de lancement à l'aide de la commande suivante.

      { "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. Dans le menu déroulant en regard du bouton Run (Exécuter), choisissez la configuration de lancement (appelée myConfig dans l'exemple précédent).

  3. (Facultatif) Ajoutez des points d'arrêt à votre code de projet Lambda.

  4. Cliquez sur le bouton Exécuter en regard du bouton vert « exécuter ».

  5. Consultez les résultats dans le volet de sortie.

Configuration

Lorsque vous utilisez la valeur de propriété invokeTarget.target api, la boîte à outils modifie la validation et le comportement de la configuration de lancement pour prendre en charge un champ 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": {} }

Remplacez les valeurs dans l'exemple comme suit :

invokeTarget.logicalId

Une API ressource.

path

Le API chemin demandé par la configuration de lancement (par exemple,"path": "/hello").

Il doit s'agir d'un API chemin valide résolu à partir du template.yaml chemin spécifié parinvokeTarget.templatePath.

httpMethod

Utilisez l'un des verbes suivants : « delete », « get », « head », « options », « patch », « post » et « put ».

payload

La JSON charge utile (HTTPcorps) à envoyer à la demande avec la même structure et les mêmes règles que le champ lambda.payload.

payload.pathpointe vers un fichier contenant la JSON charge utile.

payload.jsonspécifie une JSON charge utile en ligne.

headers

Carte facultative de paires nom-valeur. Utilisez-le pour spécifier HTTP les en-têtes à inclure dans la demande.

"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

(Facultatif) Utilisez cette chaîne pour définir la valeur querystring de la requête (par exemple, "querystring": "abc=def&ghi=jkl").

aws

Comment les informations de AWS connexion sont fournies. Pour plus d'informations, consultez le tableau des propriétés de connexion AWS (aws) dans Options de configuration pour le débogage d'applications sans serveur.

sam

Comment AWS SAM CLI crée l'application. Pour plus d'informations, consultez les propriétés AWS SAM CLI (» sam «) dansOptions de configuration pour le débogage d'applications sans serveur.

Synchronisation d'une application sans serveur

Cet exemple montre comment synchroniser l'application sans serveur créée dans la rubrique précédente (Création d'une application sans serveur) AWS avec l'utilisation du AWS Toolkit for Visual Studio Code.

Prérequis

  • Veillez à choisir un nom de compartiment Amazon S3 unique au niveau mondial.

  • Assurez-vous que les informations d'identification que vous avez configurées incluent l'accès en lecture/écriture approprié aux services suivants : Amazon S3, AWS CloudFormation AWS Lambda, et Amazon API Gateway.

  • Pour les applications avec un type de déploiementImage, assurez-vous de disposer à la fois d'un nom de compartiment Amazon S3 unique au monde et d'un ECR référentiel Amazon URI à utiliser pour le déploiement.

Synchronisation d'une application sans serveur

  1. Dans la fenêtre de l'AWS explorateur, ouvrez le menu contextuel (clic droit) du nœud Lambda et sélectionnez Sync SAM Application.

  2. Choisissez le Région AWS vers lequel déployer.

  3. Choisissez le fichier template.yaml à utiliser pour le déploiement.

  4. Saisissez le nom d'un compartiment Amazon S3 que ce déploiement peut utiliser. Le compartiment doit se trouver dans la région dans laquelle vous effectuez le déploiement.

    Avertissement

    Le nom de compartiment S3 doit être unique parmi tous les noms de compartiment existants dans Amazon S3. Ajoutez un identifiant unique au nom donné dans l'exemple suivant ou choisissez un autre nom.

  5. Si votre application sans serveur inclut une fonction avec un type de packageImage, entrez le nom d'un ECR référentiel Amazon que ce déploiement peut utiliser. Le compartiment doit se trouver dans la région dans laquelle vous effectuez le déploiement.

  6. Saisissez un nom pour la pile déployée : soit un nouveau nom de pile, soit un nom de pile existant.

  7. Vérifiez le succès du déploiement dans l'onglet Boîte à outils AWS de la console.

    Si une erreur se produit, un message contextuel apparaît dans la partie inférieure droite.

    Dans ce cas, vérifiez le texte dans l'onglet Boîte à outils AWS pour plus de détails. Voici un exemple de détails d'erreur.

    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.

    Dans cet exemple, l'erreur s'est produite, car le compartiment Amazon S3 n'existait pas.

Une fois le déploiement terminé, votre application figure dans AWS Explorer. Consultez Appel de fonctions Lambda distantes pour savoir comment appeler la fonction Lambda qui a été créée dans le cadre de l'application.

Suppression d'une application sans serveur à partir du cloud AWS

La suppression d'une application sans serveur implique la suppression de la AWS CloudFormation pile que vous avez précédemment déployée dans le AWS cloud. Notez que cette procédure ne supprime pas votre répertoire d'application de votre hôte local.

  1. Ouvrez AWS Explorer.

  2. DansAWS Explorer, développez la région contenant l'application déployée à supprimer, puis développez AWS CloudFormation.

  3. Ouvrez le menu contextuel (clic droit) pour le nom de la AWS CloudFormation pile correspondant à l'application sans serveur que vous souhaitez supprimer. Choisissez ensuite Delete CloudFormation Stack.

  4. Pour confirmer la suppression de la pile sélectionnée, choisissez Supprimer.

Si la suppression de la pile réussit, le AWS Toolkit supprime le nom de la pile de la AWS CloudFormation liste dans AWS Explorer.