Networking
您可以通过在运行时将网络连接器资源关联到 MicroVM,从而为您的 AWS Lambda MicroVMs 配置网络访问权限。网络连接器将在您调用 run-microvm 时指定,无法在 MicroVM 运行时更改。
概述
每个 MicroVM 都可以具有独立的入口(入站)和出口(出站)网络配置:
-
入口网络连接器用于实现入站连接。客户端会连接到一个由服务托管的 HTTPS 端点,Lambda 会将流量转发到您在 MicroVM 中配置的端口。入口连接器是由 AWS 托管的,您需要在运行 MicroVM 时通过 ARN 来引用。
-
出口网络连接器用于支持出站流量。MicroVM 会默认具有公共互联网访问权限。您可以改为创建客户自主管理型 VPC 出口连接器,通过您的 VPC 路由出站流量。
单个连接器可以在多个 MicroVM 中重复使用,这是预期的使用模式。
入站连接
每个 Lambda MicroVM 都可通过您在调用 run-microvm 时分配的唯一 HTTPS 端点 URL 进行访问。客户端会通过 HTTPS 向该端点发送请求。Lambda 会将每个请求路由到您的 MicroVM 内的端口,并且您的应用程序将在该端点接收该请求。
默认情况下,在该端点收到的请求会路由到 MicroVM 内的 8080 端口。要路由到其他端口,请参阅端口路由。
入站端点支持以下协议:
-
HTTP/1.1
-
HTTP/2
-
WebSocket
-
gRPC
-
服务器发送的事件(SSE)
注意
客户端和 MicroVM 端点之间的流量始终使用 TLS 进行加密。您的应用程序可在内部通过 HTTP 或 HTTPS 传输请求。
端口路由
Lambda 将按以下优先顺序选择 MicroVM 内的目标端口:
-
X-aws-proxy-port标头:对于标准 HTTP 请求,请包含此标头以及目标端口号。 -
WebSocket 子协议:如果您的 WebSocket 客户端无法设置自定义标头,请将目标端口指定为名称为
lambda-microvms.port.的子协议,其中NN是端口号。您需要在打开 WebSocket 连接时提供子协议。有关示例,请参阅协议。 -
默认(8080):如果以上两项均未指定,则请求会路由到 8080 端口。
重要
目标端口必须位于身份验证令牌中定义的 allowedPorts 范围内。向未获授权的端口发出的请求会收到 403 Forbidden 响应。
身份验证
对一个 MicroVM 端点的所有请求都需要在 X-aws-proxy-auth 标头中包含有效的身份验证令牌。您可以使用 create-microvm-auth-token 来生成令牌。每个令牌都是一个加密的 JWE(JSON Web 加密)字符串,其作用域为:
-
某个特定的 MicroVM(由 ID 标识)。
-
允许的端口集(单个端口、范围或所有端口)。
-
过期时间(在创建令牌时配置)。
以下示例会创建一个令牌并用来发送已通过身份验证的请求:
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'
有关创建令牌和连接到 MicroVM(包括 WebSocket 连接)的完整演示,请参阅连接到 MicroVM。
错误响应
当 MicroVM 端点无法处理或向您的应用程序传输请求时,将会返回以下 HTTP 状态代码。这些响应来自端点,而不是来自应用程序。
| 代码 | Status | 原因和解决方法 |
|---|---|---|
| 400 | Bad Request | 请求格式不正确,或者端口标头或 WebSocket 子协议无效。验证格式。 |
| 403 | 禁止 | 令牌缺失、已过期或无效;或者请求的端口不在令牌的 allowedPorts 中。生成新令牌,或使用允许的端口。 |
| 429 | 请求过多 | 已超出速率限制(账户级别或 MicroVM 级别)。使用指数回退进行重试。 |
| 500 | Internal Server Error | 出现内部错误。重试请求。 |
| 502 | Bad Gateway | 应用程序未响应,或自动恢复未在最大重试次数内成功。请参阅自动恢复。 |
请求标头
X-aws-proxy-* 标头命名空间由 Lambda 保留,用于请求元数据,例如身份验证令牌 (X-aws-proxy-auth) 和目标端口 (X-aws-proxy-port)。在将请求转发给您的应用程序之前,Lambda 会移除 X-aws-proxy-* 标头。
请求/响应带宽
每个 Lambda MicroVM 都有一个可随其大小线性扩缩的请求/响应带宽。此带宽适用于通过 MicroVM 端点的所有流量,包括入站请求和出站响应。
| MicroVM 大小(基准) | 最大带宽 |
|---|---|
| 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) |
如果由于网络饱和而导致请求延迟增加,请减少请求并发量或有效载荷大小,或者选择更大的 MicroVM 大小来增加可用带宽。
HTTP/2 支持
Lambda MicroVMs 支持入站端点上的 HTTP/2 流量。Lambda 在 TLS 握手期间通过 ALPN(应用程序层协议协商)来协商协议,并首选 HTTP/2,失败则回退到 HTTP/1.1。支持 HTTP/2 的客户端会自动使用此协议。
要在 MicroVM 内的端点和应用程序之间使用 HTTP/2,请执行以下操作:
-
您的应用程序提供 TLS:Lambda 会通过 ALPN 与您的应用程序协商 HTTP/2,如果不支持 HTTP/2,则会回退到 HTTP/1.1。
-
您的应用程序提供明文 HTTP:请在请求中包含
X-aws-proxy-force-h2: true标头,以便在与应用程序的连接上使用 HTTP/2。
出站连接
默认情况下,Lambda MicroVMs 在出口路径上具有公共互联网访问权限。要通过 Direct Connect 或 VPN 将 MicroVM 连接到 RDS、ElastiCache、内部 API 和本地系统等私有 VPC 中的资源,请使用您的 VPC 配置创建一个 Lambda 网络连接器。
使用 VPC 出口时,出站流量受用于管理 VPC 中流量的安全组规则和网络 ACL 约束。
使用出口网络连接器
出口网络连接器通过您的 VPC 路由来自 MicroVM 的出站流量。您只需一次创建连接器,然后在通过 run-microvm 命令启动 MicroVM 时使用 ARN 引用即可。
先决条件
在创建网络连接器之前,您需要拥有一个允许 Lambda 在您的 VPC 中创建弹性网络接口(ENI)的 IAM 角色。该角色需要以下权限:
{ "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" } } } ] }
创建网络连接器
通过指定您的 VPC 子网、安全组和网络协议(IPv4 或 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
网络连接器状态
连接器必须处于 ACTIVE 状态,然后才能在 run-microvm 中引用。
| 州 | 说明 |
|---|---|
PENDING |
正在创建连接器(正在预调配底层 ENI)。 |
ACTIVE |
连接器已准备就绪,可以使用。 |
INACTIVE |
连接器暂时处于非活动状态。 |
FAILED |
预调配或更新失败。检查 StateReason。 |
DELETING |
正在删除连接器;正在清理 ENI。 |
DELETE_FAILED |
删除失败。 |
使用网络连接器运行 MicroVM
在运行 MicroVM 时引用连接器 ARN:
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}'
注意
在更新或删除连接器之前,应确保所有使用该连接器的 MicroVM 都已终止。修改正在使用的连接器可能会导致运行 MicroVM 时出现网络连接问题。