Amazon DVA-C02: 無伺服器與 AWS Lambda — 學習指南
屬於 AWS Developer Associate DVA-C02 — 學習指南. 使用經過驗證的解答練習: Amazon 考試中心, 或參加限時模擬考試: ExamRoll.io.
版本、別名、層與封裝
Lambda 版本是程式碼與組態的不可變快照,透過 PublishVersion API 建立(例如
undefined
)。使用版本來提供可重現的發布,然後建立別名(
undefined
或
undefined
)作為穩定的指標,別名還可以帶有路由組態,以便在不同版本之間分配流量,實現漸進式部署。層(Layers)提供了一種共享通用原生函式庫或執行階段套件的方法;
undefined
讓您可以將相依套件(例如,已編譯的二進位檔)與您的函式套件分開附加,這樣建置檔更小,冷啟動也更快。在封裝方面,建議優先使用小型 zip 壓縮檔以進行快速部署(或對於較大的產物使用 S3 支援的上傳),當您需要大型二進位檔或自訂執行階段時,則採用容器映像檔;
undefined
undefined
會註冊儲存在 ECR 中的映像檔(容器映像檔支援更大的尺寸)。常見的陷阱包括將憑證寫死在環境變數中、超過部署套件的大小限制,以及忘記層是有版本且不可變的:更新相依套件需要發布一個新的層版本並更新函式組態。若要以程式化方式進行回滾,請更新別名以指向先前的版本(
undefined
),從而將營運衝擊降到最低。
執行環境、效能調校與冷啟動緩解
Lambda 的 CPU 會隨著記憶體擴展,因此改善 CPU 密集型工作負載通常是透過增加
undefined
設定(透過
undefined
)來完成,而不是調整一個獨立的 CPU 選項;使用 AWS X-Ray 和 CloudWatch 指標進行測量,以找到執行時間和成本之間的最佳平衡點。冷啟動受套件大小、初始化程式碼、VPC 網路的使用(ENI 附加延遲)和語言執行階段的影響;可以透過精簡初始化、將大型函式庫移至層、使用 Provisioned Concurrency(
undefined
)或使用具有優化進入點的容器映像檔來緩解。對於附加到 VPC 的函式,可透過使用 S3/DynamoDB 的 VPC 端點或 RDS Proxy 來避免冷啟動突增,以限制連線流失和 NAT Gateway 成本;確保 Lambda 執行角色包含
undefined
受管政策,且子網路有足夠的 IP 位址空間供 ENI 使用。注意同步逾時等陷阱:將函式逾時設定得比下游相依服務低,以確保外部呼叫者看到一致的失敗模型,並在重試時使用冪等性權杖,因為像 SQS、SNS 和 Kinesis 這類服務提供的是「至少一次」的交付語意。
VPC 存取、暫存儲存與安全控制
當您將 Lambda 放置在 VPC 中時,必須在函式組態上設定子網路 ID 和安全群組;函式接著會使用這些子網路中的 ENI,並需要網路路徑來連線到外部服務。若要在不使用 NAT 的情況下連線到 S3 或 DynamoDB,請建立 VPC 端點(S3 使用 Gateway 端點,許多服務則使用 Interface 端點)。對於資料庫,建議優先使用 RDS Proxy 來共用連線池,並減少突發性的連線建立。/tmp 目錄為執行環境提供暫存儲存空間,並在叫用期間可寫入;如果需要,可以設定較大的暫存儲存空間(
undefined
設定),但盡可能設計為無狀態函式。透過將機密儲存在 AWS Secrets Manager 或 Parameter Store (SSM) 中,並授予 Lambda 角色最小權限來保護機密;在冷啟動時使用
undefined
取得機密,或使用以函式
undefined
中指定的 KMS 金鑰加密的環境變數。常見的開發者陷阱包括缺少 VPC 端點導致逾時、在程式碼中嵌入明文金鑰,以及忘記有效率地輪換或快取機密,從而避免 Secrets Manager API 呼叫被節流。
事件整合、錯誤處理、本機測試與部署策略
Lambda 與許多事件來源原生整合:S3 事件通知、DynamoDB Streams、Kinesis、SQS 和 API Gateway。對於串流來源,應調整 batch size 和 parallelizationFactor,監控 IteratorAge,並處理部分失敗,因為 Lambda 會重試失敗的批次,若錯誤持續存在,可能會阻塞下游處理。對於非同步調用,使用 DLQ 或 Destinations 來捕獲失敗(透過 onFailure/onSuccess destinations 設定非同步調用)。當您寫回同一個 bucket 時,由 S3 觸發的函式必須透過檢查物件金鑰或使用物件標籤來防止遞迴調用。本機測試最好使用 AWS SAM CLI(sam build;sam local invoke;sam local start-api)或容器化的 Lambda 執行環境;單元測試可以使用 moto 或本機 mocking,但整合測試應在短暫的測試帳戶中對真實的 AWS 資源運行。部署應使用版本化的函式 + 別名,並透過 CodeDeploy 或帶有 RoutingConfig 的 UpdateAlias 進行流量轉移,以執行 canary 或 linear 部署;實作 PreTraffic 和 PostTraffic 掛鉤以進行驗證。常見的陷阱是忽略重試的冪等性、未處理部分的 BatchGetItem 回應(檢查 UnprocessedKeys),以及使用過於寬鬆的 IAM 角色來執行。
實務問題:使用案例情境
情境:PhotoSpot 公司運行一個 Python Lambda,用於處理上傳到 S3 的圖片、將中繼資料寫入 DynamoDB,並呼叫第三方圖片優化 API。此函式需要快速的冷啟動效能、安全的 API 憑證、安全的回滾機制,以及存取託管於 VPC 中的 RDS Proxy 以豐富中繼資料。
挑戰:為使用者可見的上傳減少冷啟動延遲、保護並輪換第三方 API 金鑰,並實現零停機的安全回滾和受控的流量轉移。
建議方法:
- 建構並發布不可變的版本:使用 AWS CLI 或 boto3 更新程式碼,然後執行
boto3.client('lambda').publish_version(FunctionName='PhotoProcessor'),並建立/更新別名boto3.client('lambda').update_alias(FunctionName='PhotoProcessor', Name='prod', FunctionVersion='7', RoutingConfig={'AdditionalVersionWeights': {'8': 0.1}})。 - 緩解冷啟動:為別名設定 Provisioned Concurrency
boto3.client('lambda').put_provisioned_concurrency_config(FunctionName='PhotoProcessor', Qualifier='prod', ProvisionedConcurrentExecutions=10),並將笨重的原生函式庫移至已發布的 layer (boto3.client('lambda').publish_layer_version)。 - 保護憑證:將第三方 API 金鑰儲存在 AWS Secrets Manager 中,授予 Lambda 角色最小權限,並在冷啟動時透過
boto3.client('secretsmanager').get_secret_value(SecretId=secret_arn)取得,而不是將密鑰嵌入程式碼或純文字環境變數中。 - VPC 與連線處理:將函式放置在帶有安全群組的私有子網路中,使用 RDS Proxy 存取資料庫以避免連線風暴,並為 S3 建立 VPC 端點,使圖片讀取不需要 NAT。
理由:使用版本和別名搭配流量轉移,可以透過重新指向別名來實現安全的推出和即時回滾。Provisioned Concurrency 和 layer 減少了初始化延遲,而 Secrets Manager 則集中管理憑證輪換並將密鑰暴露降至最低。RDS Proxy 和 VPC 端點透過減少連線流失和對 NAT 的依賴,降低了延遲和營運成本。
所有領域 · Amazon API Gateway 與應用程式整合 →
練習這些題目 → · 在 ExamRoll.io 上限時練習 →
Pass the whole exam — not just this question
You found this answer. Get every verified question and explanation in one place, and save hours of prep. Free to start.
通過考試 →