View a markdown version of this page

使用中繼資料端點 - AWS Lambda

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用中繼資料端點

Lambda 中繼資料端點是執行環境中的本機 HTTP API。它以簡單的 JSON 格式傳回中繼資料,包括環境執行所在的可用區域 (AZ) ID。使用它來路由至相同可用區資源,例如 Amazon ElastiCache 和 Amazon RDS,以降低延遲。您也可以使用它來實作 AZ 感知彈性模式。

注意

Web 函數會執行持久性 Web 伺服器,而不是每個呼叫處理常式。在應用程式啟動時讀取中繼資料端點一次並快取該值,或者如果您在請求內容中需要,則在每個請求中讀取。請勿擔任新的每次呼叫處理常式。對於多區域 Web 函數,端點會在提供請求 AWS 區域 的 內報告 AZ。

開始使用

Powertools for AWS Lambda 提供存取 Lambda 中繼資料端點的公用程式。公用程式會在第一次呼叫後快取回應。如需詳細資訊,請參閱 Powertools for AWS Lambda (TypeScript) 文件中的中繼資料。

由於 Web Functions 在 上執行Node.js,下列範例使用 Powertools for AWS Lambda 中繼資料公用程式,在伺服器啟動時讀取一次 AZ ID,並在程序的生命週期內快取它。執行下列 npm 命令來安裝 Powertools 套件和 Express:

npm install @aws-lambda-powertools/commons express

下列範例使用 Express進行說明。相同的方法適用於任何 Node.js Web 架構;請參閱 支援的 Web 架構。在啟動時讀取 AZ ID,並在處理請求時重複使用快取的值:

範例在啟動時以 Powertools 擷取 AZ ID (TypeScript)
import express from 'express'; import { getMetadata } from '@aws-lambda-powertools/commons/utils/metadata'; const app = express(); // Read the AZ ID once at startup and cache it for the life of the server. const { AvailabilityZoneID: azId } = await getMetadata(); // Lambda provides the address to bind in AWS_LAMBDA_HTTP_ENDPOINT ("host:port"). // The fallback applies only when running locally. const [host, port] = (process.env.AWS_LAMBDA_HTTP_ENDPOINT || 'localhost:3000').split(':'); app.get('/', (req, res) => { res.json({ azId }); }); app.listen(port, host, () => { console.log(`Server listening on ${host}:${port}, AZ: ${azId}`); });

您也可以直接呼叫中繼資料端點。Lambda 會在每個執行環境中自動設定 AWS_LAMBDA_METADATA_API和 AWS_LAMBDA_METADATA_TOKEN 環境變數,並在 Authorization標頭中包含具有承載方案的字符。如需端點 URL、請求和回應格式,以及錯誤回應,請參閱 使用 Lambda 中繼資料端點。

例如,從 讀取中繼資料伺服器地址,AWS_LAMBDA_METADATA_API並傳送已驗證的 GET 請求:

METADATA_ENDPOINT="http://${AWS_LAMBDA_METADATA_API}/2026-01-15/metadata/execution-environment" RESPONSE=$(curl -s -H "Authorization: Bearer ${AWS_LAMBDA_METADATA_TOKEN}" "$METADATA_ENDPOINT") AZ_ID=$(echo "$RESPONSE" | jq -r '.AvailabilityZoneID')

端點會傳回 application/json。例如:{"AvailabilityZoneID": "use1-az1"}。