[Pour les débutants] Vous pouvez le faire à partir de zéro! Création d'API avec AWS SAM et sortie de documents Open API en Python

introduction

Auparavant, j'ai introduit le flux de création de documents OpenAPI et de génération automatique d'API à l'aide de l'outil Swagger. [Pour les super débutants] Vous pouvez l'essayer en 5 minutes! Création automatique de documents OpenAPI (Swagger3.0) - génération automatique d'API

Cette fois, en utilisant AWS SAM (Serverless Application Model), API Gateway + AWS Lambda Créez une API Web sans serveur de / jp / api-gateway /) et sortez le document OpenAPI. C'est la première fois que j'utilise AWS SAM. Je vais l'écrire pour pouvoir le faire à partir de zéro.

Qu'est-ce qu'AWS SAM?

AWS Serverless Application Model (SAM) est une infrastructure open source pour la création d'applications sans serveur. Vous pouvez représenter des fonctions, des API, des bases de données et des mappages de sources d'événements dans une syntaxe à description rapide. Avec seulement quelques lignes par ressource, vous pouvez définir n'importe quelle application et la modéliser à l'aide de YAML. Pendant le déploiement, SAM peut accélérer la construction d'applications sans serveur en convertissant et en étendant la syntaxe SAM à la syntaxe AWS CloudFormation.

Utilisez l'AWS SAM CLI pour commencer à créer des applications SAM. L'interface de ligne de commande SAM fournit un environnement d'exécution de type Lambda qui vous permet de créer, de tester et de déboguer localement des applications définies dans des modèles SAM. Vous pouvez également utiliser la CLI SAM pour déployer votre application sur AWS.

https://aws.amazon.com/jp/serverless/sam/

Cela semble être un cadre qui rend CloudFormation plus facile à utiliser dans les applications sans serveur. API Gateway, AWS Lambda, [DynamoDB]( Vous pouvez gérer https://aws.amazon.com/jp/dynamodb/) en une seule fois.

supposition

OS:Mac Compte AWS créé

Choses à faire

  1. Construction de l'environnement (pyenv, pipenv)
  2. Rendre l'AWS CLI disponible
  3. Activez l'AWS SAM CLI
  4. Essayez Hello World avec AWS SAM
  5. Sortie de la documentation OpenAPI

Construction de l'environnement (pyenv, pipenv)

1. Installez pyenv

$ brew install pyenv

Si vous ne pouvez pas utiliser la commande brew, installez Homebrew à partir de https://brew.sh/index_ja.html

2. Vérifiez la version de pyenv

$ pyenv --version
pyenv 1.2.15

3. Installez python 3.7.0 avec pyenv

$ pyenv install 3.7.0

4. Passez à la version installée avec pyenv

S'il est local, il sera reflété dans le répertoire courant, et s'il est global, il sera reflété dans l'ensemble.

$ pyenv global 3.7.0
$ pyenv local 3.7.0

5. Vérifiez si cela est reflété

$ pyenv versions
  system
* 3.7.0 (set by /Users/yusaku/.pyenv/version)

6. Installation de pipenv

$ brew install pipenv

7. Entrez dans l'environnement virtuel de pipenv

$ pipenv shell

Rendre l'AWS CLI disponible

1. Installez aws cli

$ pipenv install awscli

2. Vérifiez la version de aws cli

$ aws --version
aws-cli/1.16.294 Python/3.7.5 Darwin/19.0.0 botocore/1.13.30

3. Confirmation de l'ID de la clé d'accès et de la clé d'accès secrète

https://console.aws.amazon.com/iam/home?#/security_credentials Créez une clé d'accès depuis «Créer une nouvelle clé d'accès» dans «Clé d'accès (ID de clé d'accès et clé d'accès secrète)» et vérifiez l'ID de la clé d'accès et la clé d'accès secrète.

4. Paramètres awscli

Réglez avec les informations confirmées en 3. https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/cli-chap-welcome.html

$ aws configure
AWS Access Key ID [None]: XXXXXXXXXXXXXXXXXXXX
AWS Secret Access Key [None]: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Default region name [None]: ap-northeast-1
Default output format [None]: json

Activer l'interface de ligne de commande AWS SAM

1. Installez AWS SAM CLI

$ pipenv install aws-sam-cli

2. Vérifiez la version de l'AWS SAM CLI

sam --version
SAM CLI, version 0.34.0

Essayez Hello World avec AWS SAM

Cette fois, j'utiliserai python3.7 installé dans l'environnement pipenv.

1. Initialisation de l'application

$ sam init

	SAM CLI now collects telemetry to better understand customer needs.

	You can OPT OUT and disable telemetry collection by setting the
	environment variable SAM_CLI_TELEMETRY=0 in your shell.
	Thanks for your help!

	Learn More: https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-telemetry.html

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.5
	4 - go1.x
	5 - java11
	6 - dotnetcore2.1
	7 - nodejs10.x
	8 - nodejs8.10
	9 - nodejs6.10
	10 - python3.7
	11 - python3.6
	12 - python2.7
	13 - java8
	14 - dotnetcore2.0
	15 - dotnetcore1.0
Runtime: 10

Project name [sam-app]: AWSsam_test    

Allow SAM CLI to download AWS-provided quick start templates from Github [Y/n]: y

-----------------------
Generating application:
-----------------------
Name: AWSsam_test
Runtime: python3.7
Dependency Manager: pip
Application Template: hello-world
Output Directory: .

Next steps can be found in the README file at ./AWSsam_test/README.md

2. Créez l'application

$ cd AWSsam_test/
$ sam build

3. Déployez l'application

$ sam deploy --guided

À partir de la deuxième fois, sam deploy est OK.

4. Contrôle de fonctionnement

Essayez d'accéder à la sortie du point de terminaison dans 3.

$ curl https://hoge.hoge-api.ap-northeast-1.amazonaws.com/Prod/hello/
{"message": "hello world"}

bonjour le monde est de retour! Lorsque je me suis connecté à la console AWS et que j'ai regardé Lambda, API Gateway et Lambda ont été démarrés comme indiqué ci-dessous. スクリーンショット 2019-12-05 15.48.19.png

5. Essayez d'exécuter la fonction Lambda avec une légère modification

Changeons hello_world / app.py comme suit.

hello_world/app.py


import json

# import requests


def lambda_handler(event, context):
    return {
        "statusCode": 200,
        "body": json.dumps({
            "message": "hello Qiita",
            # "location": ip.text.replace("\n", "")
        }),
    }

Construisez et déployez.

$ sam build
$ sam deploy

Essayez d'accéder au point de terminaison.

$ curl https://hoge.hoge-api.ap-northeast-1.amazonaws.com/Prod/hello/
{"message": "hello Qiita"}

J'ai pu confirmer que les changements étaient reflétés.

Sortie de la documentation OpenAPI

Sélectionnez Amazon API Gateway dans la console AWS et sélectionnez l'API que vous avez déployée. L'écran suivant s'affiche: Cliquez sur l'étape et sélectionnez Exporter pour sortir la spécification Swagger ou le document de spécification OpenAPI au format json ou yaml. スクリーンショット 2019-12-06 9.24.16.png

en conclusion

Cette fois, j'ai créé une API REST avec AWS SAM et exporté le document de spécification OpenAPI. Au contraire, je souhaite importer la spécification OpenAPI et créer une API à l'aide d'AWS SAM. Il est présenté dans l'article suivant, mais cela ne semble pas si simple. .. https://dev.classmethod.jp/cloud/aws/serverless-swagger-apigateway/

référence

Tutorial: Deploying a Hello World Application https://dev.classmethod.jp/cloud/aws/aws-sam-simplifies-deployment/

Recommended Posts

[Pour les débutants] Vous pouvez le faire à partir de zéro! Création d'API avec AWS SAM et sortie de documents Open API en Python
Prise en compte du moment où vous pouvez faire du bon travail en 10 ans avec Python3 et Scala3.
Jusqu'à ce que vous puissiez installer Blender et l'exécuter avec python pour le moment
Si vous écrivez TinderBot en Python, elle peut le faire
Considérez ce que vous pouvez faire avec Python dans l'article Qiita
Python | Ce que vous pouvez faire avec Python
Vous pouvez le faire avec Python! Analyse structurale de cristaux colloïdaux bidimensionnels
Peut être fait en 5 minutes!? Créez une API de détection de visage avec Fast API et OpenCV et publiez-la sur Heroku
Vous devenez ingénieur en 100 jours - Jour 35 - Python - Ce que vous pouvez faire avec Python
Si vous les gars dans la cuisine de portée pouvez le faire avec une marge ~ ♪
Raisonnement causal et recherche causale par Python (pour les débutants)
~ Conseils pour les débutants de Python donnés avec amour par Pythonista ① ~
~ Conseils pour les débutants de Python donnés avec amour par Pythonista ② ~
[Introduction pour les débutants] Manipuler MySQL avec Python
Que faire si vous exécutez python sur IntelliJ et quittez avec une erreur
Janken Poi en Python pour les débutants (réponses et explications)
% Et str.format () en Python. Lequel utilisez-vous?
Recevoir des e-mails de Gmail et étiqueter avec Python3
Ce que vous pouvez et ne pouvez pas faire avec Tensorflow 2.x
Feuille de route d'apprentissage qui vous permet de développer et de publier des services à partir de zéro avec Python
Précautions lors de la saisie à partir de CSV avec Python et de la sortie vers json pour faire exe
Mettez Ubuntu dans Raspi, mettez Docker dessus et contrôlez GPIO avec python à partir du conteneur
[Pour les débutants] Résumé de l'entrée standard en Python (avec explication)
Ce que vous pouvez faire avec les statistiques de la bibliothèque Python standard
Installez CaboCha dans l'environnement Ubuntu et appelez-le avec Python.
[Pour les débutants] Statistiques de baseball dont on peut se souvenir en 33 minutes et 4 secondes et PyData ~ avec Yojima Steel