AWS SAM CLI prend désormais en charge l'émulation locale de HttpApi, j'ai donc essayé de l'utiliser sur WSL2 Docker

introduction

Utilisez-vous l'AWS SAM CLI? En parlant de AWS SAM CLI, version officielle en juillet de cette année / whats-new / 2020/07 / annonce-aws-serverless-application-model-cli-general-available-production-use /) Bien que cela vient d'être fait, AWS Lambda peut tout faire, de l'émulation locale d'AWS Lambda à la construction de l'environnement. C'est un outil puissant pour l'utilisation.

Une telle interface de ligne de commande AWS SAM a été publiée aujourd'hui (30 octobre 2020) v1.7.0 Vous pouvez désormais émuler localement un environnement qui combine HttpApi et Lambda, comme illustré dans la figure ci-dessous.

httpapi.png

Il existe un support pour HttpApi depuis un certain temps

En fait, HttpApi est pris en charge depuis longtemps, et il a été publié le 5 décembre 2019 v0.37.0 J'ai pu le construire sur AWS au stade de. Document est également disponible, et il n'y a pas de problème si vous construisez simplement l'environnement. J'ai pu l'utiliser, mais l'émulation locale, qui est la principale caractéristique de SAM, était hors de portée.

Contrôle de fonctionnement

Déplaçons en fait l'émulation locale de HttpAPI.

Environnement d'exploitation

Construction de conteneurs de développement

Je ne veux pas l'installer localement, donc je vais le construire pour être complété dans Docker sur WSL2. Tout d'abord, créez un dossier de travail sur WSL et ouvrez-le avec VS Code. Entrez la commande dans le Power Shell.

wsl #Passer à WSL
mkdir /path/to/your/workspace/sam-sample #Créer un dossier de travail
code -r /path/to/your/workspace/sam-sample #Ouvrez votre dossier de travail avec VS Code

Cela ouvrira VS Code, puis ouvrira la palette de commandes avec Ctrl + Shift + p et créera un modèle pour votre conteneur de développement.

>Remote-Containers:Add Development Container Configuration Files...

image.png Sélectionnez Python 3 parmi eux.

"mounts": ["source=/var/run/docker.sock,target=/var/run/docker.sock,type=bind"],

Ouvrez l'environnement défini. Ouvrez la palette de commandes avec Ctrl + Maj + p et ouvrez l'environnement défini.

>Remote-Containers:Reopen in Container

image.png

Installation de l'interface de ligne de commande AWS SAM

root@***:/workspaces/sam-sample# pip3 install aws-sam-cli
root@***:/workspaces/sam-sample# sam --version
SAM CLI, version 1.7.0

Création de projet

Initialisez le projet avec la commande sam init.

root@***:/workspaces/sam-sample# sam init
Which template source would you like to use?
        1 - AWS Quick Start Templates
        2 - Custom Template Location
Choice: 1

Which runtime would you like to use?
        1 - nodejs12.x
        2 - python3.8
        3 - ruby2.7
        4 - go1.x
        5 - java11
        6 - dotnetcore3.1
        7 - nodejs10.x
        8 - python3.7
        9 - python3.6
        10 - python2.7
        11 - ruby2.5
        12 - java8.al2
        13 - java8
        14 - dotnetcore2.1
Runtime: 2

Project name [sam-app]: 

Cloning app templates from https://github.com/awslabs/aws-sam-cli-app-templates.git

AWS quick start application templates:
        1 - Hello World Example
        2 - EventBridge Hello World
        3 - EventBridge App from scratch (100+ Event Schemas)
        4 - Step Functions Sample App (Stock Trader)
        5 - Elastic File System Sample App
Template selection: 1

-----------------------
Generating application:
-----------------------
Name: sam-app
Runtime: python3.8
Dependency Manager: pip
Application Template: hello-world
Output Directory: .

Next steps can be found in the README file at ./sam-app/README.md

Le modèle pour Hello World est terminé. Dans cet état, il est toujours configuré pour utiliser le précédent RestAPI, alors modifiez-le un peu. Cela dit, tout ce que vous avez à faire est de changer la partie qui est Type: Api sur Type: HttpApi. image.png

Courir

Exécutez avec sam local start-api.

root@***:/workspaces/sam-sample# cd sam-app/
root@***:/workspaces/sam-sample/sam-app# sam local start-api -v /path/to/your/workspace/sam-sample/sam-app
Mounting HelloWorldFunction at http://127.0.0.1:3000/hello [GET]
You can now browse to the above endpoints to invoke your functions. You do not need to restart/reload SAM CLI while working on your functions, changes will be reflected instantly/automatically. You only need to restart SAM CLI if you update your AWS SAM template
2020-10-30 06:25:31  * Running on http://127.0.0.1:3000/ (Press CTRL+C to quit)

Vous pouvez voir que la fonction Lambda de / hello qui a été basculée sur Type: HttpApi plus tôt est reconnue.

Mounting HelloWorldFunction at http://127.0.0.1:3000/hello [GET]

Lorsque vous y accédez avec un navigateur, «bonjour le monde» s'affiche correctement et vous pouvez confirmer la prise en charge de «HttApi». image.png

À propos, l'option -v ajoutée au moment de sam local start-api est importante cette fois, alors soyez prudent car vous devez spécifier le chemin du projet sur l'hôte lors de l'exécution de l'AWS SAM CLI dans Docker. S'il vous plaît.

sam local start-api --help
...
  -v, --docker-volume-basedir TEXT
                                  Specifies the location basedir where the SAM
                                  file exists. If the Docker is running on a
                                  remote machine, you must mount the path
                                  where the SAM file exists on the docker
                                  machine and modify this value to match the
                                  remote machine.

Essayez avec une version antérieure

root@***:/workspaces/sam-sample/sam-app# pip3 install aws-sam-cli==1.6.2
root@***:/workspaces/sam-sample/sam-app# sam --version
SAM CLI, version 1.6.2
root@***:/workspaces/sam-sample/sam-app# sam local start-api -v /path/to/your/workspace/sam-sample/sam-app
Error: Template does not have any APIs connected to Lambda functions

Dans les versions précédentes, il n'était pas reconnu comme une API en premier lieu.

De côté

Le support HttpApi de la CLI AWS SAM que j'ai mentionné cette fois a contribué au PR de cette fonction. Je viens de faire connaître les fonctions manquantes pour le PR qui était à l'origine ouvert, mais j'étais vraiment nerveux parce que c'était ma première activité OSS. .. .. J'ai également appris à gérer un référentiel qui est commis par une personne non spécifiée appelée OSS, alors j'ai réalisé que les activités OSS sont importantes. Nous vous recommandons de ne pas hésiter à défier même ceux qui n'ont jamais fait d'activités OSS.

Recommended Posts

AWS SAM CLI prend désormais en charge l'émulation locale de HttpApi, j'ai donc essayé de l'utiliser sur WSL2 Docker
J'ai essayé de créer un environnement de WSL2 + Docker + VSCode
Connaître la commodité de Docker (-compose) maintenant (liste d'informations auxquelles j'ai fait référence lors de son utilisation)
J'ai essayé d'utiliser anakia + Jing maintenant
Exécutez l'AWS CLI sur Docker
Utilisation de Docker avec Windows10 Home WSL2
J'ai essayé d'utiliser Google HttpClient de Java