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.
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.
Déplaçons en fait l'émulation locale de HttpAPI.
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...
Sélectionnez Python 3
parmi eux.
Python 3
.
Ensuite, un modèle pour le conteneur de développement sera créé dans le dossier.
Étant donné que l'interface de ligne de commande AWS SAM utilise Docker, elle monte l'hôte docker.sock.
Ajoutez cette ligne à la même hiérarchie que name
et build
dans .devcontainer.json
."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
root@***:/workspaces/sam-sample# pip3 install aws-sam-cli
root@***:/workspaces/sam-sample# sam --version
SAM CLI, version 1.7.0
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
.
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».
À 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.
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.
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