Konfigurieren des Dateisystemzugriffs für Lambda-Funktionen - AWS Lambda

Konfigurieren des Dateisystemzugriffs für Lambda-Funktionen

Sie können eine Funktion konfigurieren, um eine Bindungsbereitstellung für ein Amazon-Elastic-File-System-(Amazon-EFS)-Dateisystem in einem lokalen Verzeichnis zu erstellen. Mit Amazon EFS kann Ihr Funktionscode auf freigegebene Ressourcen sicher und mit hoher Nebenläufigkeit zugreifen und diese ändern.

Ausführungsrolle und Benutzerberechtigungen

Wenn das Dateisystem keine benutzerkonfigurierte IAM-Richtlinie hat, verwendet EFS eine Standardrichtlinie, die jedem Client, der über ein Dateisystem-Mounting-Ziel eine Verbindung zum Dateisystem herstellen kann, vollen Zugriff gewährt. Wenn das Dateisystem eine benutzerkonfigurierte IAM-Richtlinie hat, muss die Ausführungsrolle Ihrer Funktion die richtigen elasticfilesystem-Berechtigungen besitzen.

Berechtigungen für die Ausführungsrolle
  • ElasticFileSystem:ClientMount

  • ElasticFileSystem:ClientWrite (nicht für schreibgeschützte Verbindungen erforderlich)

Diese Berechtigungen sind in der verwalteten Richtlinie AmazonElasticFileSystemClientReadWriteAccess enthalten. Darüber hinaus muss Ihre Ausführungsrolle die Berechtigungen, die für die Verbindung mit der VPC des Dateisystems erforderlich sind, besitzen.

Wenn Sie ein Dateisystem konfigurieren, werden Ihre Berechtigungen von Lambda verwendet, um Bindungsbereitstellung-Ziele zu überprüfen. Um eine Funktion für die Herstellung von Verbindungen mit einer VPC zu konfigurieren, benötigt Ihr IAM-Benutzer die folgenden Berechtigungen:

Benutzerberechtigungen
  • ElasticFileSystem:DescribeMountTargets

Konfigurieren eines Dateisystems und eines Zugriffspunkts

Erstellen Sie ein Dateisystem in Amazon EFS mit einem Bindungsbereitstellung-Ziel in jeder Availability Zone, zu der Ihre Funktion eine Verbindung herstellt. Verwenden Sie für Leistung und Ausfallsicherheit mindestens zwei Availability Zones. In einer einfachen Konfiguration könnten Sie beispielsweise eine VPC mit zwei privaten Subnetzen in separaten Availability Zones haben. Die Funktion verbindet sich mit beiden Subnetzen und ein Mount-Ziel ist in jedem verfügbar. Stellen Sie sicher, dass NFS-Datenverkehr (Port 2049) von den Sicherheitsgruppen erlaubt ist, die von den Funktionen und Mount-Zielen verwendet werden.

Anmerkung

Wenn Sie ein Dateisystem erstellen, wählen Sie einen Leistungsmodus, der später nicht geändert werden kann. Der Allzweckmodus hat eine geringere Latenz, und der Max I/O-Modus unterstützt einen höheren maximalen Durchsatz und IOPS. Hilfe bei der Auswahl finden Sie unter Amazon-EFS-Leistung im Amazon-Elastic-File-System-Benutzerhandbuch.

Ein Zugriffspunkt verbindet jede Instance der Funktion mit dem richtigen Mount-Ziel für die Availability Zone, mit der sie eine Verbindung herstellt. Um eine optimale Leistung zu erzielen, erstellen Sie einen Zugriffspunkt mit einem Nicht-Stammpfad und beschränken Sie die Anzahl der Dateien, die Sie in jedem Verzeichnis erstellen. Im folgenden Beispiel wird ein Verzeichnis mit dem Namen my-function auf dem Dateisystem erstellt und die Besitzer-ID auf 1001 mit Standardverzeichnisberechtigungen (755) festgelegt.

Beispiel Konfiguration von Zugriffspunkten
  • Name (Namefiles

  • Benutzer-ID1001

  • Gruppen-ID1001

  • Pfad/my-function

  • Berechtigungen755

  • Benutzer-ID des Eigentümers 1001

  • Gruppen-Benutzer-ID 1001

Wenn eine Funktion den Zugriffspunkt verwendet, erhält sie die Benutzer-ID 1001 und hat vollen Zugriff auf das Verzeichnis.

Weitere Informationen finden Sie in den folgenden Themen im Amazon-Elastic-File-System-Benutzerhandbuch:

Herstellen einer Verbindung mit einem Dateisystem (Konsole)

Eine Funktion stellt eine Verbindung mit einem Dateisystem über das lokale Netzwerk in einer VPC her. Die Subnetze, mit denen Ihre Funktion eine Verbindung herstellt, können dieselben Subnetze sein, die Mounting-Punkte für Ihr Dateisystem enthalten, oder Subnetze in derselben Availability Zone, die NFS-Datenverkehr (Port 2049) an das Dateisystem weiterleiten kann.

Anmerkung

Wenn Ihre Funktion noch nicht mit einer VPC verbunden ist, finden Sie weitere Informationen unter Konfigurieren einer Lambda-Funktion für den Zugriff auf Ressourcen in einer VPC.

So konfigurieren Sie den Zugriff auf Dateisysteme
  1. Öffnen Sie die Seite Funktionen der Lambda-Konsole.

  2. Wählen Sie eine Funktion aus.

  3. Wählen Sie Konfiguration und dann Dateisysteme.

  4. Wählen Sie unter Dateisystem die Option Dateisystem hinzufügen.

  5. Konfigurieren Sie die folgenden Eigenschaften:

    • EFS-Dateisystem – Der Zugriffspunkt für ein Dateisystem in derselben VPC.

    • Lokaler Bindungsbereitstellungspfad – Der Speicherort, an dem das Dateisystem für die Lambda-Funktion gemountet ist, beginnend mit /mnt/.

Preise

Amazon EFS erhebt Gebühren für Speicher und Durchsatz, mit Raten, die je nach Speicherklasse variieren. Details dazu finden Sie unter Amazon-EFS-Preise.

Lambda erhebt Gebühren für die Datenübertragung zwischen VPCs. Dies gilt nur, wenn die VPC Ihrer Funktion auf eine andere VPC mit einem Dateisystem gepeered wird. Die Preise sind die gleichen wie für die Amazon-EC2-Datenübertragung zwischen VPCs in derselben Region. Einzelheiten finden Sie unter Lambda – Preise.

Weitere Informationen zur Lambda-Integration in Amazon EFS finden Sie unter Verwenden von Amazon EFS mit Lambda.

Konfigurieren des Dateisystemzugriffs mit der Lambda-API

Verwenden Sie die folgenden API-Operationen, um Ihre Lambda-Funktion mit einem Dateisystem zu verbinden:

Um eine Funktion mit einem Dateisystem zu verbinden, verwenden Sie den Befehl update-function-configuration. Im folgenden Beispiel wird eine Funktion mit dem Namen my-function mit einem Dateisystems mit ARN eines Zugriffspunkts verbunden.

ARN=arn:aws:elasticfilesystem:us-east-2:123456789012:access-point/fsap-015cxmplb72b405fd aws lambda update-function-configuration --function-name my-function \ --file-system-configs Arn=$ARN,LocalMountPath=/mnt/efs0

Sie können den ARN des Zugriffspunkts eines Dateisystems mit dem Befehl describe-access-points abrufen.

aws efs describe-access-points

Die Ausgabe sollte folgendermaßen aussehen:

{ "AccessPoints": [ { "ClientToken": "console-aa50c1fd-xmpl-48b5-91ce-57b27a3b1017", "Name": "lambda-ap", "Tags": [ { "Key": "Name", "Value": "lambda-ap" } ], "AccessPointId": "fsap-015cxmplb72b405fd", "AccessPointArn": "arn:aws:elasticfilesystem:us-east-2:123456789012:access-point/fsap-015cxmplb72b405fd", "FileSystemId": "fs-aea3xmpl", "RootDirectory": { "Path": "/" }, "OwnerId": "123456789012", "LifeCycleState": "available" } ] }

AWS CloudFormation und AWS SAM

Sie können AWS CloudFormation und die AWS Serverless Application Model (AWS SAM) verwenden, um die Erstellung von Lambda-Anwendungen zu automatisieren. Verwenden Sie die Eigenschaft AWS SAM, um eine Dateisystemverbindung für eine AWS::Serverless::Function FileSystemConfigs-Ressource zu aktivieren.

Beispiel template.yml – Dateisystemkonfiguration
Transform: AWS::Serverless-2016-10-31 Resources: VPC: Type: AWS::EC2::VPC Properties: CidrBlock: 10.0.0.0/16 Subnet1: Type: AWS::EC2::Subnet Properties: VpcId: Ref: VPC CidrBlock: 10.0.1.0/24 AvailabilityZone: "us-west-2a" EfsSecurityGroup: Type: AWS::EC2::SecurityGroup Properties: VpcId: Ref: VPC GroupDescription: "mnt target sg" SecurityGroupIngress: - IpProtocol: -1 CidrIp: "0.0.0.0/0" FileSystem: Type: AWS::EFS::FileSystem Properties: PerformanceMode: generalPurpose AccessPoint: Type: AWS::EFS::AccessPoint Properties: FileSystemId: Ref: FileSystem PosixUser: Uid: "1001" Gid: "1001" RootDirectory: CreationInfo: OwnerGid: "1001" OwnerUid: "1001" Permissions: "755" MountTarget1: Type: AWS::EFS::MountTarget Properties: FileSystemId: Ref: FileSystem SubnetId: Ref: Subnet1 SecurityGroups: - Ref: EfsSecurityGroup MyFunctionWithEfs: Type: AWS::Serverless::Function Properties: Handler: index.handler Runtime: python3.9 VpcConfig: SecurityGroupIds: - Ref: EfsSecurityGroup SubnetIds: - Ref: Subnet1 FileSystemConfigs: - Arn: !GetAtt AccessPoint.Arn LocalMountPath: "/mnt/efs" Description: Use a file system. DependsOn: "MountTarget1"

Sie müssen den DependsOn hinzufügen, um sicherzustellen, dass die Bindungsbereitstellung-Ziele vollständig erstellt werden, bevor die Lambda zum ersten Mal ausgeführt werden.

Für den AWS CloudFormation AWS::Lambda::Function-Typ sind der Eigenschaftsname und die Felder identisch. Weitere Informationen finden Sie unter Verwenden von AWS Lambda mit AWS CloudFormation.

Beispielanwendungen

Das GitHub-Repository für dieses Handbuch enthält eine Beispielanwendung, die die Verwendung von Amazon EFS mit einer Lambda-Funktion veranschaulicht.

  • efs-nodejs – Eine Funktion, die ein Amazon-EFS-Dateisystem in einer Amazon VPC nutzt. Dieses Beispiel umfasst eine VPC, ein Dateisystem, Bindungsbereitstellung-Ziele und einen Zugriffspunkt, der für die Verwendung mit Lambda konfiguriert ist.