Configuración del acceso al sistema de archivos para las funciones de Lambda - AWS Lambda

Configuración del acceso al sistema de archivos para las funciones de Lambda

Puede configurar una función para montar un sistema de archivos Amazon Elastic File System (Amazon EFS) a un directorio local. Con Amazon EFS, el código de función puede acceder y modificar los recursos compartidos de forma segura y en alta concurrencia.

Permisos de usuario y rol de ejecución

Si el sistema de archivos no tiene una política de IAM configurada por el usuario, EFS utiliza una política predeterminada que otorga acceso completo a cualquier cliente que pueda conectarse al sistema de archivos mediante un destino de montaje del sistema de archivos. Si el sistema de archivos tiene una política de IAM configurada por el usuario, el rol de ejecución de la función debe tener los permisos de elasticfilesystem correctos.

Permisos de rol de ejecución
  • elasticfilesystem:ClientMount

  • elasticfilesystem:ClientWrite (no se necesita para conexiones de solo lectura)

Estos permisos se incluyen en la política administrada AmazonElasticFileSystemClientReadWriteAccess. Además, el rol de ejecución debe tener los permisos necesarios para conectarse a la VPC del sistema de archivos.

Cuando configura un sistema de archivos, Lambda utiliza sus permisos para verificar los destinos de montaje. Para configurar una función para conectarse a un sistema de archivos, su usuario de IAM necesita los siguientes permisos.

Permisos de usuario
  • elasticfilesystem:DescribeMountTargets

Configuración de un sistema de archivos y un punto de acceso

Cree un sistema de archivos en Amazon EFS con un destino de montaje en cada zona de disponibilidad a la que se conecte su función. Para obtener rendimiento y resistencia, utilice al menos dos zonas de disponibilidad. Por ejemplo, en una configuración simple, podría tener una VPC con dos subredes privadas en zonas de disponibilidad separadas. La función se conecta a ambas subredes y un destino de montaje está disponible en cada una. Asegúrese de que los grupos de seguridad utilizados por la función y los destinos de montaje permiten el tráfico NFS (puerto 2049).

nota

Cuando crea un sistema de archivos, elige un modo de rendimiento que no se puede cambiar más adelante. El modo Propósito general tiene menor latencia, y el modo E/S Max admite un rendimiento e IOPS máximos más altos. Para obtener ayuda sobre cómo elegir, consulte Rendimiento de Amazon EFS en la Guía del usuario de Amazon Elastic File System.

Un punto de acceso conecta cada instancia de la función con el destino de montaje correcto para la zona de disponibilidad a la que se conecta. Para obtener el mejor rendimiento, cree un punto de acceso con una ruta que no sea raíz y limite el número de archivos que crea en cada directorio. En el siguiente ejemplo se crea un directorio denominado my-function en el sistema de archivos y se establece el identificador de propietario en 1001 con permisos de directorio estándar (755).

ejemplo configuración de punto de acceso
  • Namefiles

  • ID de usuario: 1001

  • ID del grupo : 1001

  • Ruta/my-function

  • Permisos: 755

  • ID de usuario del propietario1001

  • ID de usuario de grupo1001

Cuando una función utiliza el punto de acceso, se le da el ID de usuario 1001 y tiene acceso completo al directorio.

Para obtener más información, consulte los siguientes temas en la Guía del usuario de Amazon Elastic File System:

Conexión a un sistema de archivos (consola)

Una función se conecta a un sistema de archivos a través de la red local en una VPC. Las subredes a las que se conecta la función pueden ser las mismas subredes que contienen puntos de montaje para el sistema de archivos, o subredes en la misma zona de disponibilidad que pueden enrutar el tráfico NFS (puerto 2049) al sistema de archivos.

nota

Si la función aún no está conectada a una VPC, consulte Configuración de una función Lambda para obtener acceso a los recursos en una VPC.

Para configurar el acceso al sistema de archivos
  1. Abra la página de Functions (Funciones) en la consola de Lambda.

  2. Elija una función.

  3. Elija Configuración y, a continuación, elija Sistemas de archivos.

  4. En Sistema de archivos, elija Agregar sistema de archivos.

  5. Configure las siguientes propiedades:

    • Sistema de archivos EFS: el punto de acceso para un sistema de archivos de la misma VPC.

    • Ruta de montaje local: la ubicación en la que se monta el sistema de archivos en la función de Lambda, empezando por /mnt/.

Precios

Amazon EFS tiene cargos por almacenamiento y rendimiento, con tarifas que varían según la clase de almacenamiento. Para obtener más información, consulte Precios de Amazon EFS.

Cargos de Lambda por transferencia de datos entre VPC. Esto solo se aplica si la VPC de su función está pegada a otra VPC con un sistema de archivos. Las tasas son las mismas que para la transferencia de datos de Amazon EC2 entre VPC de la misma región. Para obtener más información, consulte Precios de Lambda.

Para obtener más información sobre la integración de Lambda con Amazon EFS, consulte Uso de Amazon EFS con Lambda.

Configurar el acceso al sistema de archivos con la API de Lambda

Utilice las siguientes operaciones de API para conectar su función de Lambda a un sistema de archivos:

Para conectar una función a un sistema de archivos, utilice el comando update-function-configuration. En el siguiente ejemplo se conecta una función denominada my-function a un sistema de archivos con ARN de un punto de acceso.

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

Puede obtener el ARN del punto de acceso de un sistema de archivos con el comando describe-access-points.

aws efs describe-access-points

Debería ver los siguientes datos de salida:

{ "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 y AWS SAM

Puede utilizar AWS CloudFormation y AWS Serverless Application Model (AWS SAM) para automatizar la creación de aplicaciones de Lambda. Para habilitar una conexión de sistema de archivos en un recurso AWS::Serverless::Function de AWS SAM, utilice la propiedad FileSystemConfigs.

ejemplo template.yml: configuración del sistema de archivos
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"

Debe agregar el DependsOn para asegurarse de que los destinos de montaje se crean completamente antes de las ejecuciones de Lambda por primera vez.

Para el tipo AWS::Lambda::Function de AWS CloudFormation, el nombre de la propiedad y los campos son los mismos. Para obtener más información, consulte Uso de AWS Lambda con AWS CloudFormation.

Aplicaciones de muestra

El repositorio de GitHub para esta guía incluye una aplicación de ejemplo que demuestra el uso de Amazon EFS con una función de Lambda.

  • efs-nodejs: una función que utiliza un sistema de archivos de Amazon EFS en una Amazon VPC. Este ejemplo incluye una VPC, un sistema de archivos, objetivos de montaje y un punto de acceso configurados para su uso con Lambda.