Wie kann ich eine Ebene für meine Lambda-Python-Funktion erstellen?

Lesedauer: 3 Minute
0

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.

  1. Öffnen Sie die AWS-Serverless-Application-Repository-Konsole.
  2. Wählen Sie im Navigationsbereich Verfügbare Anwendungen aus.
  3. Wählen Sie Apps anzeigen, die benutzerdefinierte IAM-Rollen oder Ressourcenrichtlinien erstellen.
  4. Geben Sie im Suchbereich python-lambda-layer-creation ein.
  5. Wählen Sie die Funktion Python-Lambda-Layer-Creation.
  6. 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?

Wie integriere ich die neuste Version des AWS SDK for JavaScript mithilfe von Ebenen in meine Node.js-Lambda-Funktion?

AWS OFFICIAL
AWS OFFICIALAktualisiert vor einem Jahr