Configurar o acesso ao sistema de arquivos para funções do Lambda - AWS Lambda

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Configurar o acesso ao sistema de arquivos para funções do Lambda

É possível configurar uma função para montar um sistema de arquivos Amazon Elastic File System (Amazon EFS) em um diretório local. Com o Amazon EFS, o código da função pode acessar e modificar os recursos compartilhados de forma segura e com alta simultaneidade.

Função de execução e permissões de usuário

Se o sistema de arquivos não tiver uma política do AWS Identity and Access Management (IAM) configurada pelo usuário, o EFS usará uma política padrão, que concede acesso total a qualquer cliente que possa se conectar ao sistema de arquivos usando um destino de montagem do sistema de arquivos. Se o sistema de arquivos tiver uma política do IAM configurada pelo usuário, a função de execução da função precisa ter permissões elasticfilesystem.

Permissões da função de execução
  • sistema de arquivos elástico: ClientMount

  • elasticfilesystem: ClientWrite (não é necessário para conexões somente de leitura)

Essas permissões estão incluídas na política gerenciada do AmazonElasticFileSystemClientReadWriteAccess. Além disso, a função de execução deve ter as permissões necessárias para conectar à VPC do sistema de arquivos.

Quando você configura um sistema de arquivos, o Lambda usa as suas permissões para verificar os destinos de montagem. Para configurar uma função para se conectar a um sistema de arquivos, seu usuário precisa das permissões a seguir:

Permissões de usuário
  • sistema de arquivos elástico: DescribeMountTargets

Configurar um sistema de arquivos e ponto de acesso

Crie um sistema de arquivos no Amazon EFS com um destino de montagem em cada zona de disponibilidade à qual a função se conecta. Para performance e resiliência, use pelo menos duas zonas de disponibilidade. Por exemplo, em uma configuração simples, é possível ter uma VPC com duas sub-redes privadas em zonas de disponibilidade separadas. A função se conecta às duas sub-redes e um destino de montagem está disponível em cada uma delas. Verifique se o tráfego de NFS (porta 2049) é permitido pelos grupos de segurança usados pela função e pelos destinos de montagem.

nota

Ao criar um arquivo de sistemas, você escolhe um modo de performance que não pode ser alterado posteriormente. O modo Uso geral possui menor latência e o modo Máx. E/S oferece suporte a um throughput e IOPS máximo mais alto. Para obter ajuda na escolha, consulte Performance do Amazon EFS no Manual do usuário do Amazon Elastic File System.

Um ponto de acesso conecta cada instância da função ao destino de montagem correto para a zona de disponibilidade à qual ele se conecta. Para obter a melhor performance, crie um ponto de acesso com um caminho não raiz e limite o número de arquivos criados em cada diretório. O exemplo a seguir cria um diretório chamado my-function no sistema de arquivos e define o ID do proprietário como 1001 com permissões de diretório padrão (755).

exemplo configuração do ponto de acesso
  • Nome: files

  • ID do usuário: 1001

  • ID do grupo: 1001

  • Caminho: /my-function

  • Permissões: 755

  • ID de usuário do proprietário: 1001

  • ID de usuário do grupo: 1001

Quando uma função usa o ponto de acesso, ele recebe o ID de usuário 1001 e tem acesso total ao diretório.

Para obter mais informações, consulte os seguintes tópicos no Manual do usuário do Amazon Elastic File System:

Como conectar-se a um sistema de arquivos (console)

Uma função se conecta a um sistema de arquivos pela rede local em uma VPC. As sub-redes às quais a função se conecta podem ser as mesmas sub-redes que contêm pontos de montagem para o sistema e arquivos, ou sub-redes na mesma zona de disponibilidade que pode rotear o tráfego de NFS (porta 2049) para o sistema de arquivos.

nota

Se a função ainda não estiver conectada a uma VPC, consulte Como conectar as redes de saída aos recursos em uma VPC.

Como configurar o acesso ao sistema de arquivos
  1. Abra a página Funções do console do Lambda.

  2. Escolha uma função.

  3. Escolha Configuration (Configuração) e Files systems (Sistemas de arquivos).

  4. Em Sistema de arquivos, escolha Adicionar sistema de arquivos.

  5. Configure as seguintes propriedades:

    • Sistema de arquivos do EFS: o ponto de acesso de um sistema de arquivos na mesma VPC.

    • Caminho de montagem local: o local onde o sistema de arquivos está montado na função do Lambda, começando com /mnt/.

Definição de preço

O Amazon EFS cobra pelo armazenamento e pelo throughput, com taxas que variam de acordo com a classe de armazenamento. Para obter mais detalhes, consulte .Preço do Amazon EFS.

O Lambda cobra pela transferência de dados entre VPCs. Isso se aplica somente se a VPC da função for emparelhada com outra VPC em um sistema de arquivos. As taxas são as mesmas para a transferência de dados do Amazon EC2 entre VPCs na mesma região. Para obter detalhes, consulte Preço do Lambda.

Para obter mais informações sobre integração do Lambda com o Amazon EFS, consulteUso do Amazon EFS com o Lambda.

Configurar o acesso ao sistema de arquivos com a API do Lambda

Use as seguintes operações de API para conectar a função do Lambda a um sistema de arquivos:

Para conectar uma função a um sistema de arquivos, use o comando update-function-configuration. O exemplo a seguir conecta uma função chamada my-function a um sistema de arquivos com o ARN de um ponto de acesso.

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

É possível obter o ARN de um ponto de acesso do sistema de arquivos com o comando describe-access-points.

aws efs describe-access-points

A seguinte saída deverá ser mostrada:

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

Montar um sistema de arquivos do Amazon EFS em outra Conta da AWS

Você pode configurar uma função para montar um sistema de arquivos do Amazon EFS em outra Conta da AWS. Antes de montar o sistema de arquivos, você deve garantir o seguinte:

  • o emparelhamento da VPC deve ser configurado e as rotas apropriadas devem ser adicionadas às tabelas de rotas em cada VPC.

  • O grupo de segurança do sistema de arquivos do Amazon EFS que você deseja montar deve ser configurado para permitir acesso de entrada do grupo de segurança associado à sua função do Lambda.

  • As sub-redes devem ser criadas em cada VPC com as IDs de zona de disponibilidade (AZ) correspondentes.

  • Os nomes de host DNS devem ser ativados nas duas VPCs.

Para que sua função do Lambda acesse um sistema de arquivos do Amazon EFS em outra Conta da AWS, esse sistema de arquivos também deve ter uma política de sistema de arquivos que conceda permissão para sua função. Para saber como criar uma política de sistema de arquivos, consulte Creating file system policies no Guia do usuário do Amazon Elastic File System.

Veja a seguir um exemplo de política que dá às funções do Lambda em uma conta especificada permissão para realizar todas as ações de API em um sistema de arquivos.

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

O exemplo de política mostrado usa o caractere curinga (“*”) para conceder permissões para funções do Lambda na Conta da AWS especificada para realizar qualquer operação de API no sistema de arquivos. Isso inclui excluir o sistema de arquivos. Para limitar as operações que outras Contas da AWS podem executar em seu sistema de arquivos, especifique explicitamente as ações que você deseja permitir. Para obter uma lista de possíveis operações de API, consulte Ações, recursos e chaves de condição do Amazon Elastic File System.

Para configurar a montagem do sistema de arquivos entre contas, você usa a operação update-function-configuration da AWS Command Line Interface (AWS CLI).

Para montar um sistema de arquivos em outra Conta da AWS, execute o comando a seguir. Use seu próprio nome de função e substitua o nome do recurso da Amazon (ARN) pelo ARN do ponto de acesso do Amazon EFS para o sistema de arquivos que você deseja montar. LocalMountPath é o caminho pelo qual a função pode acessar o sistema de arquivos, começando com /mnt/. Certifique-se de que o caminho de montagem do Lambda corresponda ao caminho do ponto de acesso do sistema de arquivos. Por exemplo, se o ponto de acesso for /efs, o caminho de montagem do Lambda deverá ser /mnt/efs.

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 e AWS SAM

Você pode usar o AWS CloudFormation e o AWS Serverless Application Model (AWS SAM) para automatizar a criação de aplicações do Lambda. Para habilitar uma conexão do sistema de arquivos em um recurso AWS::Serverless::Function do AWS SAM, use a propriedade FileSystemConfigs.

exemplo template.yml: configuração do sistema de arquivos
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"

Você deve adicionar DependsOn para garantir que os destinos de montagem sejam totalmente criados antes que o Lambda seja executado pela primeira vez.

Para o tipo AWS::Lambda::Function do AWS CloudFormation, o nome da propriedade e os campos são os mesmos. Para ter mais informações, consulte Usar o AWS Lambda com o AWS CloudFormation.

Aplicações de exemplo

O GitHub repositório deste guia inclui um aplicativo de amostra que demonstra o uso do Amazon EFS com uma função Lambda.

  • efs-nodejs: uma função que usa um sistema de arquivos do Amazon EFS em uma Amazon VPC. Esse exemplo inclui uma VPC, um sistema de arquivos, destinos de montagem e ponto de acesso configurado para uso com o Lambda.