使用 Lambda 元数据端点
Lambda 元数据端点允许您的函数发现它们在哪个可用区 (AZ) 中运行,从而使您能够通过路由到 Amazon ElastiCache 和 Amazon RDS 端点等相同可用区资源来优化延迟,并实施可用区感知弹性模式。
端点通过执行环境中的本地主机 HTTP API 以简单 JSON 格式返回元数据,运行时和扩展程序均可访问。
开始使用
Powertools for AWS Lambda 提供了一个实用工具,用于在 Python、TypeScript、Java 和.NET 中访问 Lambda 元数据端点。该实用程序会在第一次调用后缓存响应,并自动处理 SnapStart 缓存失效。
使用 Powertools for AWS Lambda 元数据实用程序或直接调用元数据端点
了解可用区 ID
可用区 ID(例如 use1-az1)始终指所有 AWS 账户的相同物理位置,而可用区名称(例如 us-east-1a)可能映射到特定区域中每个 AWS 账户的不同物理基础设施。有关更多信息,请参阅跨账户一致性的可用区 ID。
将可用区 ID 转换为可用区名称:
要将可用区 ID 转换为可用区名称,请使用 Amazon EC2 DescribeAvailabilityZones API。要使用此 API,请将 ec2:DescribeAvailabilityZones 权限添加到函数的执行角色中。
API 参考
环境变量
Lambda 在每个执行环境中自动设置以下环境变量:
-
AWS_LAMBDA_METADATA_API–{ipv4_address}:{port}元数据服务器地址的格式(例如,169.254.100.1:9001)。 -
AWS_LAMBDA_METADATA_TOKEN–当前执行环境的唯一身份验证令牌。Lambda 在初始化时会自动生成此令牌。将其包含在所有元数据 API 请求中。
端点
GET http://${AWS_LAMBDA_METADATA_API}/2026-01-15/metadata/execution-environment
请求
必需的标头:
-
Authorization–来自AWS_LAMBDA_METADATA_TOKEN环境变量的令牌值,使用 Bearer 方案:Bearer <token>。这种基于令牌的身份验证提供了针对服务器端请求伪造 (SSRF) 漏洞的深度防御。每个执行环境在初始化时都会收到一个随机生成的唯一令牌。
响应
状态: 200 OK
Content-Type: application/json
Cache-Control: private, max-age=43200, immutable
响应在执行环境中不可更改。客户端应缓存响应并遵守 Cache-Control TTL。对于 SnapStart 函数,TTL 会在初始化期间降低,因此当执行环境可能位于不同的可用区时,客户端可以在还原后刷新元数据。如果使用 Powertools,缓存和 SnapStart 失效会自动处理。
Body:
{ "AvailabilityZoneID": "use1-az1" }
AvailabilityZoneID 字段包含运行执行环境的可用区的唯一标识符。
注意
在将来的更新中,可能会在响应中添加其他字段。客户端应忽略未知字段,并且在出现新字段时不会失败。
错误响应
-
401 未授权–
Authorization标头丢失或包含无效标记。验证您是否通过Bearer ${AWS_LAMBDA_METADATA_TOKEN}。 -
405 方法不允许–请求方法不是
GET。 -
500 内部服务器错误–服务器端处理错误。