Wie kann ich eine Ebene für meine Lambda-Python-Funktion erstellen?
Ich möchte eine Ebene für meine AWS-Lambda-Python-Funktion erstellen.
Lösung
Die folgenden Anweisungen stellen eine Anwendung bereit, um eine Ebene zum Aufrufen einer Lambda-Python-Funktion zu erstellen.
- Öffnen Sie die AWS-Serverless-Application-Repository-Konsole.
- Wählen Sie im Navigationsbereich Verfügbare Anwendungen aus.
- Wählen Sie Apps anzeigen, die benutzerdefinierte IAM-Rollen oder Ressourcenrichtlinien erstellen.
- Geben Sie im Suchbereich python-lambda-layer-creation ein.
- Wählen Sie die Funktion Python-Lambda-Layer-Creation.
- Wählen Sie in den Python-Lambda-Layer-Creation-Anwendungseinstellungen die Option Ich bestätige, dass diese App benutzerdefinierte IAM-Rollen erstellt, und wählen Sie dann Bereitstellen aus.
Sie können eine Ebene erstellen, um Ihre Lambda-Funktion aufzurufen und eine Liste von Abhängigkeiten zu übergeben, die in den Metadaten der Ebene enthalten sind.
Im folgenden Beispiel werden Python-Lambda-Ebenen erstellt, die die Bibliotheken “requests” (neueste Version), “numpy” (Version 1.20.1) und “keyring” (Version >= 4.1.1) enthalten. Sie können die Lambda-Funktion mit einer Nutzlast aufrufen, die der folgenden ähnelt:
{ "dependencies": { "requests": "latest", "numpy": "== 1.20.1", "keyring": ">= 4.1.1" }, "layer": { "name": "a-sample-python-lambda-layer", "description": "this layer contains requests, numpy and keyring libraries", "compatible-runtimes": ["python3.6","python3.7","python3.8"], "license-info": "MIT" } }
Notieren Sie sich den ARN, um die Lambda-Python-Funktionsebene zu testen. Erstellen Sie dann einen AWS-CloudFormation-Stack mit einer YAML-Vorlage, die der folgenden ähnelt:
AWSTemplateFormatVersion: '2010-09-09' Parameters: Layer: Type: String Description: The ARN of the lambda function layer Resources: LambdaFunction: Type: AWS::Lambda::Function Properties: Code: ZipFile: | import json import requests import numpy as np def handler(event, context): try: ip = requests.get("http://checkip.amazonaws.com/") x = np.array([2,3,1,0]) except requests.RequestException as e: raise e return { "statusCode": 200, "body": json.dumps({ "array[0]": ("%s" % str(x[0])), "location": ip.text.replace("\n", "") }), } Handler: index.handler Runtime: python3.7 MemorySize: 128 Timeout: 30 Layers: - !Ref Layer Role: Fn::GetAtt: - LambdaExecutionRole - Arn LambdaExecutionRole: Description: Allow Lambda to connect function to publish Lambda layers Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Statement: - Effect: Allow Principal: Service: - lambda.amazonaws.com Action: sts:AssumeRole Path: / ManagedPolicyArns: - arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole # Policies: # - PolicyName: AllowPublishLambdaLayer # PolicyDocument: # Version: '2012-10-17' # Statement: # - Effect: Allow # Action: lambda:PublishLayerVersion # Resource: '*'
Führen Sie die Lambda-Python-Funktion aus. Beispiel für eine Antwort:
{ "statusCode": 200, "body": "{\"array[0]\": \"2\", \"location\": \"[your-outbound-ip-address]\"}" }
Hinweis: Diese Lambda-Funktion verwendet pip, um Abhängigkeiten zu verwalten, sodass die in der Lambda-Ebene enthaltenen Bibliotheken im Python-Paketindex-Repository existieren.
Beispiele für Python-Bibliotheken, die in der für die Abhängigkeiten und Ebenenattribute definierten Ebene enthalten sind, finden Sie unter pip install auf der **Pip-**Website.
Weitere Informationen finden Sie unter Erstellen und Freigeben von Lambda-Ebenen.
Ähnliche Informationen
Lambda-Funktionen mit Python entwickeln
Verwenden von Ebenen mit Ihrer Lambda-Funktion
Wie erstelle ich eine Lambda-Ebene mit einer simulierten Lambda-Umgebung mit Docker?
Relevanter Inhalt
- AWS OFFICIALAktualisiert vor 2 Jahren
- AWS OFFICIALAktualisiert vor einem Jahr
- AWS OFFICIALAktualisiert vor 2 Jahren
- AWS OFFICIALAktualisiert vor einem Jahr