Installationsverfahren und Verwendung von Tools, mit denen Lambda auf einem Remotecomputer entwickelt, ausgeführt und bereitgestellt werden kann. Verwenden Sie Pythons Lambda-Uploader Pip.
Siehe hier Python (pyenv + virtualenv) + CentOS7-Installationsnotiz
$ pip install lambda-uploader
Installieren Sie, da auch aws-cli verwendet wird
$ pip install awscli
Registrieren Sie die AWS-Anmeldeinformationen mit dem folgenden Befehl.
$ 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
Erstellen Sie eine Datei mit der folgenden Verzeichniskonfiguration.
|- ~/lambda-uploader/
|- bin/
└ lambda-exec
|- sample-api/ #Jeder Name kann verwendet werden Ein Verzeichnis für jede Lambda-Funktion
└ requirements.txt
└ lambda.json
└ index.py
└ event.json
Es muss nicht diese Konfiguration sein,
Diese vier Dateien werden immer für jede Funktion benötigt, und diese vier müssen sich in derselben Hierarchie befinden.
~/lambda-uploader/bin/lambda-exec
Ein Skript zum Ausführen von Lambda in einer Remote-Umgebung. Da der Befehl aws lang ist, erstellen Sie ihn mit den folgenden Inhalten, damit er problemlos ausgeführt werden kann.
#!/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 ''
Ausführungsberechtigung erteilen
$ chmod +x ~/lambda-uploader/bin/lambda-exec
Fügen Sie bash_profile Folgendes hinzu, um den PFAD zu übergeben
$ vi ~/.bash_profile
export PATH=$PATH:"$HOME/lambda-uploader/bin"
Änderungen übernehmen
$ source ~/.bash_profile
~/lambda-uploader/sample-api/requirements.txt
Eine Datei mit einer Liste von Pip-Modulen. Generieren Sie mit dem folgenden Befehl.
$ pip freeze > requirements.txt
~/lambda-uploader/sample-api/lambda.json
Lambda-Konfigurationsdatei. Beschreiben Sie hier den Funktionsnamen usw.
{
"name": "{Name der Lambda-Funktion}",
"description": "{Beschreibung der Lambda-Funktion}",
"region": "ap-northeast-1",
"handler": "index.lambda_handler",
"role": "arn:aws:iam::123456789012:role/role-name",
"timeout": 300,
"memory": 128
}
Handler bedeutet, dass die Funktion lambda_handler von index.py im obigen Beispiel ausgeführt wird.
Definieren Sie für die Rolle arn der Ausführungsrolle der Lambda-Funktion. Es ist notwendig, im Voraus eine separate Rolle zu erstellen.
Als Referenz habe ich beim Erstellen von Lambda, das mit API Gateway, SQS und SNS funktioniert, der IAM-Rolle die folgenden Berechtigungen erteilt.
~/lambda-uploader/sample-api/index.py
Erstellen Sie die Lambda-Funktion. Unten finden Sie ein Beispiel, das gerade eine POST-Anfrage empfängt und zurückgibt.
# -*- 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
Definiert den Inhalt der POST-Anforderung, die während des Tests gestellt werden soll. (Leer ist zum Testen von GET-Anforderungen in Ordnung.)
{
"name" : "Michael",
"age" : "30"
}
Stellen Sie die Lambda-Funktion in AWS bereit. Wechseln Sie in das Verzeichnis, in dem Sie lambda.json, index.py usw. haben, und führen Sie den Befehl deploy aus.
$ cd ~/lambda-uploader/sample-api
Befehl bereitstellen
$ lambda-uploader
Führen Sie die Lambda-Funktion in der Remote-Umgebung aus. Es muss zuerst auf AWS bereitgestellt werden, um ausgeführt zu werden. Wechseln Sie erneut in das Verzeichnis, in dem sich lambda.json, index.py usw. befinden, und führen Sie es aus.
$ cd ~/lambda-uploader/sample-api
Mit dem folgenden Befehl ausführen Geben Sie den Lambda-Funktionsnamen im ersten Argument und die Datei event.json im zweiten Argument an.
$ lambda-exec {Lambda-Funktionsname} event.json
Wenn die folgende Antwort zurückgegeben wird, ist sie erfolgreich.
sample-api
event.json
{
"StatusCode": 200
}
[result]
"Michael is 30 years old."
das ist alles
AWS Lambda Python mit Lambda-Uploader bereitstellen
Recommended Posts