Habilitar o acesso à Internet para funções do Lambda conectadas à VPC - AWS Lambda

Habilitar o acesso à Internet para funções do Lambda conectadas à VPC

Por padrão, as funções do Lambda são executadas em uma VPC gerenciada pelo Lambda que tem acesso à Internet. Para acessar recursos em uma VPC em sua conta, você pode adicionar uma configuração de VPC a uma função. A menos que a VPC tenha acesso à Internet, isso restringirá a função aos recursos dentro dessa VPC. Esta página explica como fornecer acesso à Internet às funções do Lambda conectadas à VPC.

Criar a VPC

O fluxo de trabalho Criar VPC cria todos os recursos de VPC necessários para que uma função do Lambda acesse a Internet pública usando uma sub-rede privada, inclusive sub-redes, gateway NAT, gateway da Internet e entradas na tabela de rotas.

Como criar a VPC
  1. Abra o console da Amazon VPC em https://console.aws.amazon.com/vpc/.

  2. No painel, escolha Criar VPC.

  3. Em Resources to create (Recursos a serem criados), escolha VPC and more (VPC e mais).

  4. Configurar a VPC

    1. Em Name tag auto-generation (Geração automática de tags de nome), insira um nome para a VPC.

    2. Em Bloco CIDR IPv4, é possível manter a sugestão padrão ou inserir o bloco CIDR exigido por sua aplicação ou rede.

    3. Se a sua aplicação se comunica usando endereços IPv6, escolha Bloco CIDR IPv6, Bloco CIDR IPv6 fornecido pela Amazon.

  5. Configurar as sub-redes

    1. Em Número de zonas de disponibilidade, escolha 2. Recomendamos pelo menos duas AZs para alta disponibilidade.

    2. Em Number of public subnets (Número de sub-redes públicas), escolha 2.

    3. Em Number of private subnets (Número de sub-redes privadas), escolha 2.

    4. É possível manter o bloco CIDR padrão para a sub-rede pública ou, alternativamente, expandir Personalizar blocos CIDR da sub-rede e inserir um bloco CIDR. Para obter mais informações, consulte Blocos CIDR de sub-rede.

  6. Em Gateways NAT, escolha 1 por zona de disponibilidade para melhorar a resiliência.

  7. Em Gateway da Internet somente de saída, escolha Sim se tiver optado por incluir um bloco CIDR IPv6.

  8. Em Endpoints da VPC, mantenha o valor padrão (Gateway do S3). Não há custo para essa opção. Para obter mais informações, consulte Tipos de endpoints da VPC para o Amazon S3.

  9. Em Opções de DNS, mantenha as configurações padrão.

  10. Escolha Criar VPC.

Configurar a função do Lambda

Como configurar uma VPC ao criar uma função
  1. Abra a página Funções do console do Lambda.

  2. Escolha a opção Criar função.

  3. Em Basic information (Informações básicas), para Function name (Nome da função), insira um nome para a função.

  4. Expanda Advanced settings (Configurações avançadas).

  5. Selecione Habilitar VPC e, em seguida, escolha uma VPC.

  6. (Opcional) Para permitir tráfego IPv6 de saída, selecione Permitir tráfego IPv6 para sub-redes de pilha dupla.

  7. Em Sub-redes, selecione todas as sub-redes privadas. As sub-redes privadas podem acessar a Internet por meio do gateway NAT. Conectar uma função a uma sub-rede pública não permite que ela tenha acesso à Internet.

    nota

    Se você selecionou Permitir tráfego IPv6 para sub-redes de pilha dupla, todas as sub-redes selecionadas deverão ter um bloco CIDR IPv4 e um bloco CIDR IPv6.

  8. Em Grupos de segurança, selecione um grupo de segurança que permita tráfego de saída.

  9. Escolha a opção Criar função.

O Lambda criará automaticamente um perfil de execução com a política AWSLambdaVPCAccessExecutionRole gerenciada pela AWS. As permissões nessa política são necessárias apenas para criar interfaces de rede elástica para a configuração da VPC, mas não para invocar a função. Para aplicar permissões com privilégios mínimos, você pode remover a política AWSLambdaVPCAccessExecutionRole do seu perfil de execução após criar a função e a configuração da VPC. Para ter mais informações, consulte Permissões obrigatórias do IAM.

Como configurar uma VPC para uma função existente

Para adicionar uma configuração de VPC a uma função existente, o perfil de execução da função precisa ter permissão para criar e gerenciar interfaces de rede elástica. A política AWSLambdaVPCAccessExecutionRole gerenciada pela AWS inclui as permissões necessárias. Para aplicar permissões com privilégios mínimos, você pode remover a política AWSLambdaVPCAccessExecutionRole do seu perfil de execução após criar a configuração da VPC.

  1. Abra a página Funções do console do Lambda.

  2. Escolha uma função.

  3. Escolha a guia Configuração e depois VPC.

  4. Em VPC, selecione Edit (Editar).

  5. Selecionar a VPC.

  6. (Opcional) Para permitir tráfego IPv6 de saída, selecione Permitir tráfego IPv6 para sub-redes de pilha dupla.

  7. Em Sub-redes, selecione todas as sub-redes privadas. As sub-redes privadas podem acessar a Internet por meio do gateway NAT. Conectar uma função a uma sub-rede pública não permite que ela tenha acesso à Internet.

    nota

    Se você selecionou Permitir tráfego IPv6 para sub-redes de pilha dupla, todas as sub-redes selecionadas deverão ter um bloco CIDR IPv4 e um bloco CIDR IPv6.

  8. Em Grupos de segurança, selecione um grupo de segurança que permita tráfego de saída.

  9. Escolha Salvar.

Testar a função

Use o seguinte exemplo de código para confirmar se a sua função conectada à VPC pode acessar a Internet pública. Se for bem-sucedido, o código retornará um código de status 200. Se não for bem-sucedido, o tempo-limite da função esgotará.

Node.js

Este exemplo usa fetch, que está disponível no runtime nodejs18.x e em versões posteriores.

  1. No painel Código-fonte no console do Lambda, cole o código a seguir no arquivo index.mjs. A função faz uma solicitação HTTP GET para um endpoint público e retorna o código de resposta HTTP para testar se a função tem acesso à Internet pública.

    Editor de código do console do Lambda.
    exemplo – Solicitação HTTP com async/await
    const url = "https://aws.amazon.com/"; export const handler = async(event) => { try { // fetch is available with Node.js 18 and later runtimes const res = await fetch(url); console.info("status", res.status); return res.status; } catch (e) { console.error(e); return 500; } };
  2. Escolha Implantar.

  3. Selecione a guia Testar.

    Guia Teste do console do Lambda.
  4. Escolha Testar.

  5. A função retorna um código de status 200. Isso significa que a função tem acesso de saída à Internet.

    Guia Teste do console do Lambda.

    Se a função não conseguir acessar a Internet pública, você receberá uma mensagem de erro como esta:

    { "errorMessage": "2024-04-11T17:22:20.857Z abe12jlc-640a-8157-0249-9be825c2y110 Task timed out after 3.01 seconds" }
Python
  1. No painel Código-fonte no console do Lambda, cole o código a seguir no arquivo lambda_function.py. A função faz uma solicitação HTTP GET para um endpoint público e retorna o código de resposta HTTP para testar se a função tem acesso à Internet pública.

    Editor de código do console do Lambda.
    import urllib.request def lambda_handler(event, context): try: response = urllib.request.urlopen('https://aws.amazon.com') status_code = response.getcode() print('Response Code:', status_code) return status_code except Exception as e: print('Error:', e) raise e
  2. Escolha Implantar.

  3. Selecione a guia Testar.

    Guia Teste do console do Lambda.
  4. Escolha Testar.

  5. A função retorna um código de status 200. Isso significa que a função tem acesso de saída à Internet.

    Guia Teste do console do Lambda.

    Se a função não conseguir acessar a Internet pública, você receberá uma mensagem de erro como esta:

    { "errorMessage": "2024-04-11T17:22:20.857Z abe12jlc-640a-8157-0249-9be825c2y110 Task timed out after 3.01 seconds" }

Se você já tiver uma VPC, mas precisar configurar o acesso público à Internet para uma função do Lambda, siga estas etapas. Este procedimento pressupõe que a VPC tenha pelo menos duas sub-redes. Se você não tiver duas sub-redes, consulte Criar uma sub-rede no Guia do usuário da Amazon VPC.

Verifique a configuração da tabela de rotas

  1. Abra o console da Amazon VPC em https://console.aws.amazon.com/vpc/.

  2. Escolha o ID da VPC.

    Lista de VPCs no console da VPC.
  3. Role para baixo até a seção Mapa de recursos. Anote os mapeamentos da tabela de rotas. Abra cada tabela de rotas mapeada para uma sub-rede.

    Seção de mapa de recursos do console da VPC
  4. Role para baixo até a guia Rotas. Examine as rotas para determinar se uma das opções a seguir é verdadeira. É necessário atender a cada um desses requisitos com uma tabela de rotas separada.

    • O tráfego vinculado à Internet (0.0.0.0/0 para IPv4, ::/0 para IPv6) é roteado para um gateway da Internet (igw-xxxxxxxxxx). Isso significa que a sub-rede associada à tabela de rotas é uma sub-rede pública.

      nota

      Se sua sub-rede não tiver um bloco CIDR IPv6, você verá somente a rota IPv4 (0.0.0.0/0).

      exemplo tabela de rotas de sub-rede pública
      Tabela de rotas de sub-rede pública com rota para o gateway da Internet
    • O tráfego vinculado à Internet para IPv4 (0.0.0.0/0) é roteado para um gateway NAT (nat-xxxxxxxxxx) associado a uma sub-rede pública. Isso significa que a sub-rede é uma sub-rede privada capaz de acessar a Internet por meio do gateway NAT.

      nota

      Se a sub-rede tiver um bloco CIDR IPv6, a tabela de rotas também deverá rotear o tráfego IPv6 direcionado à Internet (::/0) para um gateway da Internet somente de saída (eigw-xxxxxxxxxx). Se sua sub-rede não tiver um bloco CIDR IPv6, você verá somente a rota IPv4 (0.0.0.0/0).

      exemplo tabela de rotas de sub-rede privada
      Tabela de rotas de sub-rede privada com rota para o gateway NAT
  5. Repita a etapa anterior até ter revisado cada tabela de rotas associada a uma sub-rede em sua VPC e confirmar que tem uma tabela de rotas com um gateway da Internet e uma tabela de rotas com um gateway NAT.

    Se você não tiver duas tabelas de rotas, uma com uma rota para um gateway da Internet e outra com uma rota para um gateway NAT, siga estas etapas a fim de criar os recursos e as entradas da tabela de rotas ausentes.

Siga estas etapas para criar uma tabela de rotas e associá-la a uma sub-rede.

Para criar uma tabela de rotas personalizada usando o console da Amazon VPC
  1. Abra o console da Amazon VPC em https://console.aws.amazon.com/vpc/.

  2. No painel de navegação, escolha Route tables.

  3. Escolha Create Route Table (Criar tabela de rotas).

  4. (Opcional) Em Name (Nome), insira um nome para a tabela de rotas.

  5. Em VPC, escolha sua VPC.

  6. (Opcional) Para adicionar uma etiqueta, escolha Add new tag (Adicionar nova etiqueta) e insira a chave e o valor da etiqueta.

  7. Escolha Create Route Table (Criar tabela de rotas).

  8. Na guia Subnet Associations (Associações da sub-rede) selecione Edit subnet associations (Editar associações da sub-rede).

    Anexar um gateway da internet à VPC
  9. Marque a caixa de seleção para a sub-rede associada à tabela de rotas.

  10. SelecioneSave associations (Salvar associações).

Siga estas etapas para criar um gateway da Internet, anexá-lo à sua VPC e adicioná-lo à tabela de rotas da sua sub-rede pública.

Para criar um gateway da Internet
  1. Abra o console da Amazon VPC em https://console.aws.amazon.com/vpc/.

  2. No painel de navegação, escolha Internet gateways (Gateways da Internet).

  3. Escolha Criar gateway da Internet.

  4. (Opcional) Insira um nome para o gateway da Internet.

  5. (Opcional) Para adicionar uma tag, escolha Add new tag (Adicionar nova tag) e insira a chave e o valor da tag.

  6. Escolha Criar gateway da Internet.

  7. Escolha Anexar a uma VPC no banner na parte superior da tela, selecione uma VPC disponível e escolha Anexar gateway da Internet.

    Anexar um gateway da internet à VPC
  8. Escolha o ID da VPC.

    Página de detalhes do gateway da Internet
  9. Escolha o ID da VPC novamente para abrir a página de detalhes da VPC.

    Lista de VPCs filtrada
  10. Role para baixo até a seção Mapa de recursos e escolha uma sub-rede. Os detalhes sobre a sub-rede são exibidos em uma nova guia.

    Mapa de recursos do console da VPC com a lista de sub-redes.
  11. Escolha o link em Tabela de rotas.

    Link para a tabela de rotas na página de detalhes da sub-rede
  12. Escolha o ID da tabela de rotas para abrir a respectiva página de detalhes da tabela de rotas.

    Lista de tabelas de rotas filtrada
  13. Em Rotas, escolha Editar rotas.

    Lista de rotas com o botão Editar rotas
  14. Escolha Adicionar rota e, em seguida, insira 0.0.0.0/0 na caixa Destino.

    Adicionar destino para a nova rota
  15. Em Destino, selecione Gateway da Internet e, em seguida, escolha o gateway da Internet que você criou anteriormente. Se a sub-rede tiver um bloco CIDR IPv6, você também deverá adicionar uma rota para ::/0 ao mesmo gateway da Internet.

    Adicionar destino para a nova rota
  16. Escolha Salvar alterações.

Siga estas etapas para criar um gateway NAT, associá-lo a uma sub-rede pública e adicioná-lo à tabela de rotas da sua sub-rede privada.

Para criar um gateway NAT e associá-lo a uma sub-rede pública
  1. No painel de navegação, escolha Gateways NAT.

  2. Escolha Criar um gateway NAT.

  3. (Opcional) Insira um nome para o gateway NAT.

  4. Em Sub-rede, selecione uma sub-rede pública na sua VPC. (Uma sub-rede pública é uma sub-rede que tem uma rota direta para um gateway da Internet em sua tabela de rotas.)

    nota

    Os gateways NAT estão associados a uma sub-rede pública, mas a entrada da tabela de rotas está na sub-rede privada.

  5. Em ID de alocação de IP elástico, selecione um endereço IP elástico ou escolha Alocar IP elástico.

  6. Escolha Criar um gateway NAT.

Para adicionar uma rota ao gateway NAT na tabela de rotas da sub-rede privada
  1. No painel de navegação, escolha Sub-redes.

  2. Selecione uma sub-rede privada em sua VPC. (Uma sub-rede privada é uma sub-rede que não tem uma rota direta para um gateway da Internet em sua tabela de rotas.)

  3. Escolha o link em Tabela de rotas.

    Link para a tabela de rotas na página de detalhes da sub-rede
  4. Role para baixo e escolha a guia Rotas e Editar rotas

    Guia Rotas na página de detalhes da tabela de rotas
  5. Escolha Adicionar rota e, em seguida, insira 0.0.0.0/0 na caixa Destino.

    Adicionar destino para a nova rota
  6. Em Destino, selecione Gateway NAT e, em seguida, escolha o gateway NAT que você criou anteriormente.

    Adicionar destino para a nova rota
  7. Escolha Salvar alterações.

Siga estas etapas para criar um gateway da Internet somente de saída e adicioná-lo à tabela de rotas da sua sub-rede privada.

Como criar um gateway da Internet somente de saída para a VPC
  1. No painel de navegação, escolha Gateways da Internet somente de saída.

  2. Escolha Criar um Gateway da Internet somente de saída.

  3. (Opcional) Insira um nome.

  4. Selecione a VPC para a qual será criado um gateway de Internet somente de saída.

  5. Escolha Criar um Gateway da Internet somente de saída.

  6. Escolha o link em ID da VPC anexada.

    Página de detalhes do gateway da Internet somente de saída
  7. Escolha o link em ID da VPC para abrir a página de detalhes da VPC.

  8. Role para baixo até a seção Mapa de recursos e escolha uma sub-rede privada. Os detalhes sobre a sub-rede são exibidos em uma nova guia.

    Mapa de recursos do console da VPC com a lista de sub-redes.
  9. Escolha o link em Tabela de rotas.

    Link para a tabela de rotas na página de detalhes da sub-rede
  10. Escolha o ID da tabela de rotas para abrir a respectiva página de detalhes da tabela de rotas.

    Lista de tabelas de rotas filtrada
  11. Em Rotas, escolha Editar rotas.

    Lista de rotas com o botão Editar rotas
  12. Escolha Adicionar rota e, em seguida, insira ::/0 na caixa Destino.

    Adicionar destino para a nova rota
  13. Em Destino, selecione Gateway da Internet somente de saída e, em seguida, escolha o gateway que você criou anteriormente.

    Adicionar destino para a nova rota
  14. Escolha Salvar alterações.

Configurar a função do Lambda

Como configurar uma VPC ao criar uma função
  1. Abra a página Funções do console do Lambda.

  2. Escolha a opção Criar função.

  3. Em Basic information (Informações básicas), para Function name (Nome da função), insira um nome para a função.

  4. Expanda Advanced settings (Configurações avançadas).

  5. Selecione Habilitar VPC e, em seguida, escolha uma VPC.

  6. (Opcional) Para permitir tráfego IPv6 de saída, selecione Permitir tráfego IPv6 para sub-redes de pilha dupla.

  7. Em Sub-redes, selecione todas as sub-redes privadas. As sub-redes privadas podem acessar a Internet por meio do gateway NAT. Conectar uma função a uma sub-rede pública não permite que ela tenha acesso à Internet.

    nota

    Se você selecionou Permitir tráfego IPv6 para sub-redes de pilha dupla, todas as sub-redes selecionadas deverão ter um bloco CIDR IPv4 e um bloco CIDR IPv6.

  8. Em Grupos de segurança, selecione um grupo de segurança que permita tráfego de saída.

  9. Escolha a opção Criar função.

O Lambda criará automaticamente um perfil de execução com a política AWSLambdaVPCAccessExecutionRole gerenciada pela AWS. As permissões nessa política são necessárias apenas para criar interfaces de rede elástica para a configuração da VPC, mas não para invocar a função. Para aplicar permissões com privilégios mínimos, você pode remover a política AWSLambdaVPCAccessExecutionRole do seu perfil de execução após criar a função e a configuração da VPC. Para ter mais informações, consulte Permissões obrigatórias do IAM.

Como configurar uma VPC para uma função existente

Para adicionar uma configuração de VPC a uma função existente, o perfil de execução da função precisa ter permissão para criar e gerenciar interfaces de rede elástica. A política AWSLambdaVPCAccessExecutionRole gerenciada pela AWS inclui as permissões necessárias. Para aplicar permissões com privilégios mínimos, você pode remover a política AWSLambdaVPCAccessExecutionRole do seu perfil de execução após criar a configuração da VPC.

  1. Abra a página Funções do console do Lambda.

  2. Escolha uma função.

  3. Escolha a guia Configuração e depois VPC.

  4. Em VPC, selecione Edit (Editar).

  5. Selecionar a VPC.

  6. (Opcional) Para permitir tráfego IPv6 de saída, selecione Permitir tráfego IPv6 para sub-redes de pilha dupla.

  7. Em Sub-redes, selecione todas as sub-redes privadas. As sub-redes privadas podem acessar a Internet por meio do gateway NAT. Conectar uma função a uma sub-rede pública não permite que ela tenha acesso à Internet.

    nota

    Se você selecionou Permitir tráfego IPv6 para sub-redes de pilha dupla, todas as sub-redes selecionadas deverão ter um bloco CIDR IPv4 e um bloco CIDR IPv6.

  8. Em Grupos de segurança, selecione um grupo de segurança que permita tráfego de saída.

  9. Escolha Salvar.

Testar a função

Use o seguinte exemplo de código para confirmar se a sua função conectada à VPC pode acessar a Internet pública. Se for bem-sucedido, o código retornará um código de status 200. Se não for bem-sucedido, o tempo-limite da função esgotará.

Node.js

Este exemplo usa fetch, que está disponível no runtime nodejs18.x e em versões posteriores.

  1. No painel Código-fonte no console do Lambda, cole o código a seguir no arquivo index.mjs. A função faz uma solicitação HTTP GET para um endpoint público e retorna o código de resposta HTTP para testar se a função tem acesso à Internet pública.

    Editor de código do console do Lambda.
    exemplo – Solicitação HTTP com async/await
    const url = "https://aws.amazon.com/"; export const handler = async(event) => { try { // fetch is available with Node.js 18 and later runtimes const res = await fetch(url); console.info("status", res.status); return res.status; } catch (e) { console.error(e); return 500; } };
  2. Escolha Implantar.

  3. Selecione a guia Testar.

    Guia Teste do console do Lambda.
  4. Escolha Testar.

  5. A função retorna um código de status 200. Isso significa que a função tem acesso de saída à Internet.

    Guia Teste do console do Lambda.

    Se a função não conseguir acessar a Internet pública, você receberá uma mensagem de erro como esta:

    { "errorMessage": "2024-04-11T17:22:20.857Z abe12jlc-640a-8157-0249-9be825c2y110 Task timed out after 3.01 seconds" }
Python
  1. No painel Código-fonte no console do Lambda, cole o código a seguir no arquivo lambda_function.py. A função faz uma solicitação HTTP GET para um endpoint público e retorna o código de resposta HTTP para testar se a função tem acesso à Internet pública.

    Editor de código do console do Lambda.
    import urllib.request def lambda_handler(event, context): try: response = urllib.request.urlopen('https://aws.amazon.com') status_code = response.getcode() print('Response Code:', status_code) return status_code except Exception as e: print('Error:', e) raise e
  2. Escolha Implantar.

  3. Selecione a guia Testar.

    Guia Teste do console do Lambda.
  4. Escolha Testar.

  5. A função retorna um código de status 200. Isso significa que a função tem acesso de saída à Internet.

    Guia Teste do console do Lambda.

    Se a função não conseguir acessar a Internet pública, você receberá uma mensagem de erro como esta:

    { "errorMessage": "2024-04-11T17:22:20.857Z abe12jlc-640a-8157-0249-9be825c2y110 Task timed out after 3.01 seconds" }