[PYTHON] Développer, exécuter et déployer AWS Lambda à distance à l'aide de lambda-uploader

Aperçu

Procédure d'installation et utilisation d'outils qui peuvent développer, exécuter et déployer lambda sur des machines distantes. Utilisez le pip [lambda-uploader] de python (https://github.com/rackerlabs/lambda-uploader).

environnement

installation de python

Vois ici python (pyenv + virtualenv) + mémo d'installation CentOS7

Installer lambda-uploader

$ pip install lambda-uploader

Installer car aws-cli est également utilisé

$ pip install awscli

Réglage initial

Enregistrez les informations d'identification AWS avec la commande suivante.

$  aws configure --profile dev

AWS Access Key ID [None]: {Your Access Key Id}
AWS Secret Access Key [None]: {Your Secret Access Key}
Default region name [None]: ap-northeast-1
Default output format [None]: json

Préparez les fichiers nécessaires

Créez un fichier avec la configuration de répertoire ci-dessous.

|- ~/lambda-uploader/
       |- bin/
          └ lambda-exec
       |- sample-api/ #Tout nom peut être utilisé Un répertoire pour chaque fonction lambda
          └ requirements.txt
          └ lambda.json
          └ index.py
          └ event.json

Il n'est pas nécessaire que ce soit cette configuration,

Ces quatre fichiers sont toujours requis pour chaque fonction et ces quatre doivent être dans la même hiérarchie.

~/lambda-uploader/bin/lambda-exec

Un script pour exécuter lambda dans un environnement distant. La commande aws étant longue, créez-la avec le contenu suivant afin qu'elle puisse être facilement exécutée.

#!/bin/bash

FUNCTION_NAME=$1
EVENT_JSON=$2

echo ${FUNCTION_NAME}
echo ${EVENT_JSON}

aws lambda invoke \
    --invocation-type RequestResponse \
    --function-name ${FUNCTION_NAME} \
    --payload file://${EVENT_JSON} \
    /tmp/lambda_outputfile.txt

echo ''
echo '[result]'
cat /tmp/lambda_outputfile.txt
echo ''

Accorder l'autorisation d'exécution

$ chmod +x ~/lambda-uploader/bin/lambda-exec

Ajoutez ce qui suit à bash_profile pour passer le PATH

$ vi ~/.bash_profile

export PATH=$PATH:"$HOME/lambda-uploader/bin"

Appliquer les modifications

$ source ~/.bash_profile

~/lambda-uploader/sample-api/requirements.txt

Un fichier contenant une liste de modules pip. Générez avec la commande suivante.

$ pip freeze > requirements.txt

~/lambda-uploader/sample-api/lambda.json

fichier de configuration lambda. Décrivez ici le nom de la fonction, etc.

{
  "name": "{Nom de la fonction lambda}",
  "description": "{Description de la fonction lambda}",
  "region": "ap-northeast-1",
  "handler": "index.lambda_handler",
  "role": "arn:aws:iam::123456789012:role/role-name",
  "timeout": 300,
  "memory": 128
}

handler signifie que la fonction lambda_handler de index.py est exécutée dans l'exemple ci-dessus.

Pour le rôle, définissez arn du rôle d'exécution de la fonction Lambda. Il est nécessaire de créer un rôle distinct à l'avance.

Pour référence, lorsque j'ai créé Lambda qui fonctionne avec API Gateway, SQS et SNS, j'ai donné les autorisations suivantes au rôle IAM.

~/lambda-uploader/sample-api/index.py

Créez une fonction Lambda. Vous trouverez ci-dessous un exemple qui ne fait que recevoir et renvoyer une demande POST.

# -*- coding:utf-8 -*-

def lambda_handler(event, context):
    text = '%s is %s years old.' %(event['name'], event['age'])
    return text

~/lambda-uploader/sample-api/event.json

Définit le contenu de la requête POST à effectuer lors du test. (Vide est OK pour tester les requêtes GET)

{
    "name" : "Michael",
    "age" : "30"
}

Déployer Lambda

Déployez la fonction lambda sur AWS. Accédez au répertoire contenant lambda.json, index.py, etc. et exécutez la commande deploy.

$ cd ~/lambda-uploader/sample-api

Déployer la commande

$ lambda-uploader

Exécuter la fonction Lambda

Exécutez la fonction lambda dans l'environnement distant. Il doit d'abord être déployé sur AWS pour fonctionner. Encore une fois, allez dans le répertoire où se trouvent lambda.json, index.py, etc. et exécutez-le.

$ cd ~/lambda-uploader/sample-api

Exécutez avec la commande suivante Spécifiez le nom de la fonction Lambda dans le premier argument et le fichier event.json dans le deuxième argument.

$ lambda-exec {Nom de la fonction Lambda} event.json

Si la réponse suivante est renvoyée, elle réussit.

sample-api
event.json
{
    "StatusCode": 200
}

[result]
"Michael is 30 years old."

c'est tout

référence

Déployer AWS Lambda Python avec lambda-uploader

Recommended Posts

Développer, exécuter et déployer AWS Lambda à distance à l'aide de lambda-uploader
Développer et déployer des API Python à l'aide de Kubernetes et Docker
Web scraping à l'aide d'AWS lambda
Récapitulatif si vous utilisez AWS Lambda (Python)
Exécutez Python selon la planification sur AWS Lambda
Tweet Récapitulatif WakaTime à l'aide d'AWS Lambda
Exécutez et consultez AWS Kinesis Firehose
J'ai comparé Node.js et Python lors de la création d'une miniature à l'aide d'AWS Lambda
[Python] J'ai écrit une API REST en utilisant AWS API Gateway et Lambda.
[AWS] Utilisation de fichiers ini avec Lambda [Python]
Publiez régulièrement sur Twitter en utilisant AWS lambda!
[AWS] Associez Lambda et S3 à boto3
[Python] Exécutez Headless Chrome sur AWS Lambda
Exécutez régulièrement des programmes Python sur AWS Lambda
Différences entre queryStringParameters et multiValueQueryStringParameters dans AWS Lambda
Version Amazon API Gateway et AWS Lambda Python