[PYTHON] Développement AWS Lambda Mes meilleures pratiques

J'écrirai les meilleures pratiques de développement AWS Lambda que je pense avec le développement d'applications Web Java (JavaEE) comme compétence principale, et des conseils sur la création d'un environnement de développement.

J'ai une qualification JavaEE, donc je pense avoir des compétences en programmation, mais je travaille sur AWS Lambda depuis environ un mois. Pour les langages autres que java, le niveau est "Si vous lisez la référence, vous pouvez l'écrire comme ça".

Configuration du service

J'ai choisi l'architecture sans serveur d'API Gateway + Lambda + DynamoDB, en fonction de l'application à réaliser. J'ai essayé de me tenter de ne pas m'occuper du serveur.

Pour la gestion du code source, utilisez CodeCommit (git) et résumez-le sur AWS.

Sélection de la langue

Depuis mai 2017, les langages disponibles pour AWS Lambda sont C #, Node.js (JavaScript), Java et Python. De plus, la différence de version n'est pas incluse dans les options car il est reconnu que la différence de spécifications linguistiques n'est pas si grande.

Les critères de sélection sont basés sur la productivité du développement et la facilité de déploiement. (À mon avis)

--Premier de l'histoire du déploiement

Pour C # et Java, téléchargez le fichier binaire avec Zip (il existe également un fichier jar pour Java) ou placez-le dans S3. En plus de ce qui précède, Node.js et Python peuvent être modifiés directement à partir de la console de gestion. (Cela peut être fait parce que la langue est un interprète) Cependant, si Node.js et Python sont modulaires (division de fichiers), ils seront consolidés et téléchargés avec Zip.

Je pense que Node.js et Python sont supérieurs car il est facile de vérifier immédiatement le fonctionnement du codé.

Pour moi en tant que boutique Java, le traitement asynchrone de Node.js coûte beaucoup d'apprentissage. Dès que j'ai commencé à coder, je suis resté coincé dans l'enfer des rappels et je ne pouvais pas écrire de logique métier. C'était très stressant car je ne pouvais pas simplement écrire le processus simple consistant à renvoyer le résultat du traitement dans la fonction en tant que valeur de retour et à poursuivre le traitement de l'appelant.

Ainsi, après l'avoir utilisé pendant un mois, Python est un bon langage en termes de productivité et de déploiement.

Environnement de développement intégré (IDE)

Eclipse est le choix pour moi en tant que boutique Java

Il y a un package qui introduit Plugin for Python sur le site Pleiades auquel je suis toujours redevable, donc je vais l'utiliser. Si vous utilisez l'IDE, il est pratique que vous puissiez vérifier la syntaxe même dans le langage d'interprétation et exécuter le programme depuis l'IDE.

Vous pouvez également utiliser AWS Toolkit for Eclipse avec Eclipse. CodeCommit peut également être utilisé à partir de EGit d'Eclipse, vous évitant ainsi d'avoir à préparer d'autres outils.

Environnement d'exécution local

Si vous l'utilisez dans le cadre libre d'AWS, vous n'avez pas à vous en soucier, je pense que vous pouvez également créer un environnement d'exécution local et le développer sans hésitation.

Les travaux suivants sont nécessaires pour créer l'environnement.

~~ -Pleiades (pour Python) installation ~~ ~~ ⇒ Installer à partir d'ici (http://mergedoc.osdn.jp/) ~~

~~ -Introduction d'AWS Toolkit for Eclipse ~~ ~~ ⇒ Référence (http://docs.aws.amazon.com/ja_jp/toolkit-for-eclipse/v1/user-guide/setup-install.html) ~~

Corrigez la procédure d'installation ci-dessus pour Eclipse et AWS Toolkit for Eclipse. Si vous utilisez Pleiades personnalisé pour Python, vous ne pouvez pas installer le plug-in principal d'AWS Toolkit for Eclipse car il n'y a pas de JDT (outils de développement Java Eclipse).

Voici les étapes que j'ai réellement suivies:

--Introduction d'AWS Toolkit for Eclipse ⇒Référence (http://docs.aws.amazon.com/ja_jp/toolkit-for-eclipse/v1/user-guide/setup-install.html)

Placez le boto3 installé via Path afin qu'il puisse être référencé au moment de l'exécution. python path.png

--Introduction de DynamoDB Local Sélectionnez "Fenêtre" -> "Paramètres" dans Eclipse avec AWS Toolkit for Eclipse installé Installer à partir de l'outil de test local DynamoDB dynamodb local.png

En guise de mise en garde, Dynamo DB Local semble avoir une région fixe de us-east-1, il est donc nécessaire de faire correspondre la destination de connexion dynamodb côté programme.

Vous pouvez comprendre que us-east-1 est fixe car Region est ajouté au nom de fichier lorsque vous créez une table. us-east-1.png

Donc ~~, modifiez le code source de l'environnement local. ~~ ~~ * C'est un problème lorsqu'il est placé dans un environnement AWS, j'aimerais donc faire quelque chose à ce sujet. ~~ Ce problème a été résolu en utilisant des variables d'environnement. (Merci pour votre commentaire, wukann)

env.py


#Fichier décrivant les paramètres dépendants de l'environnement
import os
import boto3

if os.environ.get('EXEC_ENV') == 'TEST':
    #Changer le port de la connexion pour DynamoDB Local
    print('Environment is TEST')
    dynamodb = boto3.resource('dynamodb', region_name='us-east-1', endpoint_url="http://localhost:8001")
else:
    #Connexion lors de l'exécution sur AWS
    dynamodb = boto3.resource('dynamodb')

Après cela, nous allons créer un pilote pour exécuter la fonction AWS Lambda, mais comme l'entrée d'API Gateway sera au format JSON, écrivez un pilote qui transmet les paramètres d'entrée au format JSON.

conducteur de gestionnaire



#Dans la variable d'environnement pour renvoyer la connexion DynamoDB'TEST'L'ensemble
import os
os.environ['EXEC_ENV'] = 'TEST'

#Fonction testée
from xxx_function import xxx_function_handler

if __name__ == '__main__':
    event = {
        "body": "{\"param1\":\"aaaa\",\"param2\":\"bbbb\",\"param3\":\"cccc\"}"
    }
    result = xxx_function_handler(event ,None)

    logger.debug('result{}'.format(result))

Ceci complète l'environnement de développement et l'environnement d'exécution où le test unitaire peut être exécuté localement.

Recommended Posts

Développement AWS Lambda Mes meilleures pratiques
Meilleures pratiques pour les paramètres de développement à distance Raspeye
La fonction Lambda déploie les meilleures pratiques avec CircleCI + Lamvery
Mon meilleur document ici
Meilleures pratiques personnelles pour l'environnement de développement Python basé sur VS Code
Essayez les destinations AWS Lambda
[Python] Scraping dans AWS Lambda
L'implémentation la plus simple d'AWS Lambda
Découvrez les bonnes pratiques de cookiecutter-django
__version__ pièges et bonnes pratiques
Web scraping à l'aide d'AWS lambda
Bonnes pratiques pour la journalisation au format JSON sur AWS Lambda / Python
J'ai arrêté une instance à un moment précis à l'aide d'AWS Lambda