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

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

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 nicht über eine vom Benutzer konfigurierte Richtlinie AWS Identity and Access Management (IAM) verfügt, verwendet EFS eine Standardrichtlinie, die jedem Client, der über ein Dateisystem-Mount-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
  • elastisches Dateisystem: ClientMount

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

Diese Berechtigungen sind in der verwalteten Richtlinie enthalten. AmazonElasticFileSystemClientReadWriteAccess 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 Benutzer die folgenden Berechtigungen:

Benutzerberechtigungen
  • elastisches Dateisystem: 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 Lambda-Funktionen Zugriff auf Ressourcen in einer Amazon VPC gewähren.

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/.

Preisgestaltung

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" } ] }

Mounten eines Amazon EFS-Dateisystems in einem anderen AWS-Konto

Sie können eine Funktion konfigurieren, um ein Amazon EFS-Dateisystem in einem anderen zu mounten AWS-Konto. Bevor Sie das Dateisystem einbinden, müssen Sie Folgendes sicherstellen:

  • VPC-Peering muss konfiguriert werden und den Routentabellen in jeder VPC müssen entsprechende Routen hinzugefügt werden.

  • Die Sicherheitsgruppe für das Amazon-EFS-Dateisystem, das Sie einbinden möchten, muss so konfiguriert sein, dass der eingehende Zugriff von der Sicherheitsgruppe, die Ihrer Lambda-Funktion zugeordnet ist, zugelassen wird.

  • In jeder VPC müssen Subnetze mit passenden Availability Zone (AZ)-IDs erstellt werden.

  • In beiden VPCs müssen DNS-Hostnamen aktiviert sein.

Damit Ihre Lambda-Funktion auf ein Amazon EFS-Dateisystem in einem anderen zugreifen kann AWS-Konto, muss dieses Dateisystem auch über eine Dateisystemrichtlinie verfügen, die Ihrer Funktion Berechtigungen erteilt. Informationen zum Erstellen einer Dateisystemrichtlinie finden Sie unter Erstellen von Dateisystemrichtlinien im Benutzerhandbuch zu Amazon Elastic File System.

Im Folgenden wird eine Beispielrichtlinie gezeigt, die Lambda-Funktionen in einem angegebenen Konto die Berechtigung gewährt, alle API-Aktionen in einem Dateisystem auszuführen.

{ "Version": "2012-10-17", "Id": "efs-lambda-policy", "Statement": [ { "Sid": "efs-lambda-statement", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::{LAMBDA-ACCOUNT-ID}:root" }, "Action": "*", "Resource": "arn:aws:elasticfilesystem:{REGION}:{ACCOUNT-ID}:file-system/{FILE SYSTEM ID}" } ] }
Anmerkung

Die gezeigte Beispielrichtlinie verwendet das Platzhalterzeichen („*“), um Lambda-Funktionen in der angegebenen Liste Berechtigungen zur Ausführung beliebiger API-Operationen im Dateisystem AWS-Konto zu gewähren. Dies beinhaltet das Löschen des Dateisystems. Um die Operationen einzuschränken, die andere an Ihrem Dateisystem ausführen AWS-Konten können, geben Sie die Aktionen an, die Sie explizit zulassen möchten. Eine Liste möglicher API-Operationen finden Sie unter Aktionen, Ressourcen und Bedingungsschlüssel für Amazon Elastic File System.

Um das kontenübergreifende Dateisystem-Mounten zu konfigurieren, verwenden Sie die Operation AWS Command Line Interface (AWS CLI)update-function-configuration.

Um ein Dateisystem in einem anderen zu mounten AWS-Konto, führen Sie den folgenden Befehl aus. Verwenden Sie Ihren eigenen Funktionsnamen und ersetzen Sie den Amazon-Ressourcenname (ARN) durch den ARN des Amazon-EFS-Zugangspunkts für das Dateisystem, das Sie einbinden möchten. LocalMountPath ist der Pfad, über dem die Funktion auf das Dateisystem zugreifen kann, beginnend mit /mnt/. Stellen Sie sicher, dass der Lambda-Einbindungspfad mit dem Zugangspunktpfad für das Dateisystem übereinstimmt. Wenn der Zugangspunkt beispielsweise /efs ist, muss der Lambda-Einbindungspfad /mnt/efs sein.

aws lambda update-function-configuration --function-name MyFunction \ --file-system-configs Arn=arn:aws:elasticfilesystem:us-east-1:222233334444:access-point/fsap-01234567,LocalMountPath=/mnt/test

AWS CloudFormation und AWS SAM

Sie können AWS CloudFormation und the AWS Serverless Application Model (AWS SAM) verwenden, um die Erstellung von Lambda-Anwendungen zu automatisieren. Verwenden Sie die FileSystemConfigs Eigenschaft, um eine Dateisystemverbindung AWS SAM AWS::Serverless::Function für eine 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.10 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 demonstriert.

  • 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.