Redes
Você configura o acesso à rede para seu AWS Lambda MicroVMS associando recursos do Network Connector à sua MicroVM em runtime. Os conectores de rede são especificados quando você chama run-microvm e não podem ser alterados enquanto uma microVM está em execução.
Visão geral
Cada microVM pode ter configurações de rede independentes de entrada e saída.
-
Os conectores de rede de entrada permitem a conectividade de entrada. Os clientes se conectam a um endpoint HTTPS gerenciado pelo serviço e o Lambda encaminha o tráfego para as portas que você configurar na microVM. Os conectores de entrada são gerenciados pela AWS: você faz referência a eles pelo ARN ao executar uma microVM.
-
Os conectores de rede de saída permitem o tráfego de saída. Por padrão, as microVMs têm acesso público à internet. Em vez disso, você pode criar um conector de saída de VPC gerenciado pelo cliente para rotear o tráfego de saída pela sua VPC.
Um único conector pode ser reutilizado em várias microVMs. Esse é o padrão de uso pretendido.
Conectividade de entrada
Cada Lambda MicroVM pode ser acessada em um URL de endpoint HTTPS exclusivo, atribuído quando você chama run-microvm. Os clientes enviam solicitações para esse endpoint por HTTPS. O Lambda faz o roteamento de cada solicitação para uma porta dentro da sua microVM, onde sua aplicação a recebe.
Por padrão, as solicitações recebidas no endpoint são roteadas para a porta 8080 dentro da microVM. Para rotear para uma porta diferente, consulte Roteamento de portas.
Os seguintes protocolos são compatíveis com o endpoint de entrada:
-
HTTP/1.1
-
HTTP/2
-
WebSockets
-
gRPC
-
Eventos enviados pelo servidor (Server-Sent Events, SSE)
nota
O tráfego entre seu cliente e o endpoint da microVM é sempre criptografado com TLS. Sua aplicação pode atender a solicitações por HTTP ou HTTPS internamente.
Roteamento de portas
O Lambda seleciona a porta de destino dentro da sua microVM usando a seguinte ordem de prioridade:
-
Cabeçalho
X-aws-proxy-port: para solicitações HTTP padrão, inclua esse cabeçalho com o número da porta de destino. -
Subprotocolo WebSocket: se seu cliente WebSocket não puder definir cabeçalhos personalizados, especifique a porta de destino como um subprotocolo chamado
lambda-microvms.port.,em queNNé o número da porta. Você fornece subprotocolos ao abrir a conexão WebSocket. Para ver um exemplo, consulte Protocolos. -
Padrão (8080): se nenhum padrão for especificado, as solicitações serão roteadas para a porta 8080.
Importante
A porta de destino deve estar dentro das allowedPorts definidas no token de autenticação. Solicitações para portas não autorizadas recebem uma resposta 403 Forbidden.
Autenticação
Todas as solicitações ao endpoint de uma microVM exigem um token de autenticação válido no cabeçalho X-aws-proxy-auth. Você gera tokens usando create-microvm-auth-token. Cada token é uma string JWE (JSON Web Encryption) criptografada com o escopo definido para:
-
Uma microVM específica (identificada por ID).
-
Um conjunto de portas permitidas (porta única, intervalo ou todas as portas).
-
Um tempo de expiração (configurado na criação do token).
O exemplo a seguir cria um token e o usa para enviar uma solicitação autenticada:
aws lambda-microvms create-microvm-auth-token \ --microvm-identifiermicrovm-id\ --expiration-in-minutes 30 \ --allowed-ports '[{"port":8080}]'
curl 'https://microvm-endpoint' \ -H 'X-aws-proxy-auth:TOKEN' \ -H 'X-aws-proxy-port: 8080'
Para obter uma explicação completa sobre como criar tokens e se conectar a uma microVM, inclusive conexões WebSocket, consulte Conexão a uma microVM.
Respostas de erro
Os seguintes códigos de status HTTP são retornados pelo endpoint da microVM quando ele não consegue processar ou entregar uma solicitação à sua aplicação. Essas respostas vêm do endpoint, não da sua aplicação.
| Código | Status | Causa e resolução |
|---|---|---|
| 400 | Solicitação inválida | Solicitação malformada ou cabeçalho de porta ou subprotocolo WebSocket inválido. Verifique o formato. |
| 403 | Proibido | Token ausente, expirado ou inválido ou a porta solicitada não está em allowedPorts do token. Gere um novo token ou use uma porta permitida. |
| 429 | Muitas solicitações | Limite de taxa excedido (na conta ou por microVM). Novas tentativas com recuo exponencial. |
| 500 | Internal Server Error | Ocorreu um erro interno. Repetir a solicitação. |
| 502 | Gateway inválido | A aplicação não está respondendo ou a retomada automática não foi bem-sucedida no número máximo de novas tentativas de repetição. Consulte Retomada automática. |
Cabeçalhos de solicitação
O namespace do cabeçalho X-aws-proxy-* é reservado pelo Lambda para os metadados da solicitação, como o token de autenticação (X-aws-proxy-auth) e a porta de destino (X-aws-proxy-port). O Lambda remove os cabeçalhos X-aws-proxy-* antes de encaminhar a solicitação para a aplicação.
Largura de banda de solicitação/resposta
Cada Lambda MicroVM tem uma largura de banda de solicitação/resposta que escala linearmente com seu tamanho. Essa largura de banda se aplica a todo o tráfego realizado por meio do endpoint da microVM, tanto as solicitações de entrada quanto as respostas de saída.
| Tamanho da microVM (referência) | Largura de banda máxima |
|---|---|
| 0,5 GB, 0,25 vCPU | 1 MB/s (8 Mbps) |
| 1 GB, 0,5 vCPU | 2 MB/s (16 Mbps) |
| 2 GB, 1 vCPU | 4 MB/s (32 Mbps) |
| 4 GB, 2 vCPU | 8 MB/s (64 Mbps) |
| 8 GB, 4 vCPU | 16 MB/s (128 Mbps) |
Se houver maior latência de solicitações devido à saturação da rede, reduza a simultaneidade da solicitação ou o tamanho da carga útil ou selecione um tamanho maior de microVM para aumentar a largura de banda disponível.
Suporte a HTTP/2
O Lambda MicroVMS oferece suporte a HTTP/2 no endpoint de entrada. O Lambda negocia o protocolo por meio de ALPN (Application-Layer Protocol Negotiation) durante o handshake TLS, dá preferência para HTTP/2 e volta para HTTP/1.1. Um cliente compatível com HTTP/2 o usa automaticamente.
Para usar HTTP/2 entre o endpoint e sua aplicação dentro da microVM:
-
Sua aplicação fornece TLS: o Lambda negocia HTTP/2 com sua aplicação por meio do ALPN, voltando para HTTP/1.1 se o HTTP/2 não for compatível.
-
Sua aplicação fornece HTTP em texto simples: inclua o cabeçalho
X-aws-proxy-force-h2: trueem sua solicitação para usar HTTP/2 na conexão com sua aplicação.
Conectividade de saída
Por padrão, o Lambda MicroVMS tem acesso público à internet no caminho de saída. Para conectar microVMs com recursos em suas VPCs privadas, como RDS, ElastiCache, APIs internas e sistemas on-premises por meio do Direct Connect ou VPN, crie um Lambda Network Connector com sua configuração de VPC.
Ao usar a saída da VPC, o tráfego de saída está sujeito às regras do grupo de segurança e às ACLs de rede que regem o tráfego na sua VPC.
Trabalho com conectores de rede de saída
Os conectores de rede de saída fazem o roteamento do tráfego de saída de sua MicroVM pela sua VPC. Você cria um conector uma vez e, em seguida, faz referência a ele pelo ARN ao iniciar microVMs por meio do comando run-microvm.
Pré-requisitos
Antes de criar um conector de rede, você precisa de um perfil do IAM que permita ao Lambda criar interfaces de rede elásticas (ENIs) em sua VPC. A função requer as seguintes permissões:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "CreateENI", "Effect": "Allow", "Action": "ec2:CreateNetworkInterface", "Resource": [ "arn:aws:ec2:*:*:network-interface/*", "arn:aws:ec2:*:*:subnet/*", "arn:aws:ec2:*:*:security-group/*" ] }, { "Sid": "TagENI", "Effect": "Allow", "Action": "ec2:CreateTags", "Resource": "arn:aws:ec2:*:*:network-interface/*", "Condition": { "StringEquals": { "ec2:ManagedResourceOperator": "network-connectors.lambda.amazonaws.com" } } } ] }
Como criar um conector de rede
Crie um conector especificando as sub-redes da VPC, os grupos de segurança e o protocolo de rede (IPv4 ou DualStack):
aws lambda-core create-network-connector \ --name my-connector \ --configuration '{ "VpcEgressConfiguration": { "SubnetIds": ["subnet-xxx"], "SecurityGroupIds": ["sg-xxx"], "NetworkProtocol": "IPv4", "AssociatedComputeResourceTypes": ["MicroVm"] } }' \ --operator-role arn:aws:iam::123456789012:role/NetworkConnectorOperatorRole
Estados do conector de rede
Um conector deve estar no estado ACTIVE antes que você possa fazer referência a ele em run-microvm.
| Estado | Descrição |
|---|---|
PENDING |
O conector está sendo criado (as ENIs subjacentes estão sendo provisionadas). |
ACTIVE |
O conector está pronto para uso. |
INACTIVE |
O conector está temporariamente inativo. |
FAILED |
Falha no provisionamento ou na atualização. Verificar StateReason. |
DELETING |
O conector está sendo excluído; as ENIs estão sendo limpas. |
DELETE_FAILED |
Falha na exclusão. |
Executando uma microVM com um conector de rede
Faça referência ao ARN do conector ao executar uma microVM:
aws lambda-microvms run-microvm \ --image-identifier arn:aws:lambda:us-east-1:123456789012:microvm-image:my-microvm-image \ --egress-network-connectorsconnector-arn\ --idle-policy '{"maxIdleDurationSeconds":900,"suspendedDurationSeconds":1800,"autoResumeEnabled":false}'
nota
Antes de atualizar ou excluir um conector, certifique-se de que todas as microVMs que o usam tenham sido finalizadas. A modificação de um conector que esteja ativamente em uso pode causar problemas de conectividade de rede na execução de microVMs.