跳至主要內容

AWS Lambda

AWS Lambda 常見問答集

一般

全部開啟

    如需事件來源的完整清單,請參閱我們的文件

    AWS Lambda 原生支援 Java、Go、PowerShell、Node.js、C#、Python 和 Ruby 程式碼,並提供 Runtime API,讓您可以使用任何其他程式設計語言編寫功能。請閱讀我們的文件,了解如何使用 Node.jsPythonJavaRubyC#GoPowerShell

    每個 AWS Lambda 函數都在其獨立的隔離環境中執行,有自己的資源和檔案系統檢視。AWS Lambda 使用與 Amazon EC2 相同的技術,在基礎架構和執行等級上提供安全性和區隔。 若要進一步了解,請瀏覽文件

    AWS Lambda 將程式碼儲存在 Amazon S3 中並以靜態加密。AWS Lambda 在您的程式碼使用中時執行額外的完整性檢查。如果是資料庫密碼這類敏感資訊,我們建議您使用 AWS Key Management Service 的用戶端加密,將結果值以加密文字的形式存放在環境變數中。您需要在 AWS Lambda 函數程式碼中加入邏輯,以解密這些值。 若要進一步了解,請瀏覽文件

    透過讓函數保持無狀態,AWS Lambda 能盡快啟動所需的函數副本數,因而能視連入事件的速率而進行擴展。由於 AWS Lambda 的程式設計模式是無狀態的,因此您的程式碼可以透過呼叫其他 Web 服務 (例如 Amazon S3 或 Amazon DynamoDB) 來存取有狀態的資料。

    是。您可以透過 AWS Lambda 主控台、CLI 或軟體開發套件輕鬆建立和修改環境變數。若要進一步了解環境變數,請參閱文件

    如果是資料庫密碼這類敏感資訊,我們建議您使用 AWS Key Management Service 的用戶端加密,將結果值以加密文字的形式存放在環境變數中。您需要在 AWS Lambda 函數程式碼中加入邏輯,以解密這些值。

    是,您可以將任何程式碼 (架構、SDK、程式庫等) 封裝為 Lambda 層,並在多個函數之間輕鬆管理和共用它們。

    AWS Lambda 會自動代您監控 Lambda 函數,透過 Amazon CloudWatch 報告即時指標,包括請求總數、帳戶層級和函數層級並行用量、延遲、錯誤率和節流請求。您可以透過 Amazon CloudWatch 主控台或 AWS Lambda 主控台檢視每個 Lambda 函數的統計資料。您還可以在 Lambda 函數中呼叫第三方監控 API。
     

    若要進一步了解,請參閱 CloudWatch 指標的疑難排解。使用 Lambda 內建指標需支付 AWS Lambda 標準費用。

    在 AWS Lambda 資源模式中,您可以選擇想為函數分配的記憶體數量,並按 CPU 功率和其他資源的比例分配。例如,若是選擇 256 MB 記憶體,分配給 Lambda 函數的 CPU 功率大約是請求 128 MB 記憶體的兩倍,也是選擇 512 MB 記憶體時的一半。要進一步了解,請參閱我們的函數組態文件

    您可以將記憶體從 128 MB 設為 10,240 MB。

    AWS Lambda 函數可以設定為每次執行最多 15 分鐘。您可以將逾時設定為 1 秒到 15 分鐘之間的任何值。

    是。預設情況下,每個 AWS Lambda 函數都有單一的目前版本程式碼。Lambda 函數的用戶端可以呼叫特定版本或取得最新實作。請參閱有關 Lambda 函數版本控制的文件。

    AWS Lambda 可提供靈活部署選項:將函數封裝和部署為 .zip 封存檔案,您可以透過主控台、CLI 或 SDK 直接上傳,或作為容器映像檔上傳。這兩種方法都提供相同的執行環境、擴展和操作簡單性,讓您靈活選擇最適合您的工作流程的方法。

使用 AWS Lambda 處理 AWS 事件

全部開啟

    事件來源是 AWS 服務或開發人員建立的應用程式,用來產生可觸發 AWS Lambda 函數使其執行的事件。有些服務透過直接叫用雲端函數 (例如 Amazon S3) 向 Lambda 發佈這些事件。Lambda 也可以在未向 Lambda 發佈事件的其他服務中輪詢資源。例如,Lambda 可以從 Amazon Kinesis 串流或 Amazon SQS 佇列中提取記錄,並且對每個擷取的訊息執行 Lambda 函數。其他許多服務 (例如 AWS CloudTrail) 只要記錄到 Amazon S3 並使用 S3 儲存貯體通知觸發 AWS Lambda 函數,即可作為事件來源

    您可以透過 AWS Lambda 的調用 API,使用自訂事件調用 Lambda 函數。只有該函數的擁有者或該擁有者授予許可的另一個 AWS 帳戶才能叫用該函數。若要進一步了解,請瀏覽 Lambda 開發人員指南

    您可以使用 Amazon API Gateway 定義自訂 RESTful API,透過 HTTPS 叫用 Lambda 函數。這可為您提供函數的端點,以回應 GET、PUT 和 POST 這類的 REST 呼叫。請參閱更多有關使用 AWS Lambda 搭配 Amazon API Gateway 的資訊。

AWS Lambda Snapstart

全部開啟

    針對延遲敏感應用程式,AWS Lambda SnapStart 可以將啟動效能從幾秒鐘縮短至不到一秒。SnapStart 的運作方式是透過快照擷取函數的初始化記憶體 (和磁碟) 狀態,並快取此快照以進行低延遲存取。隨後調用函數時,Lambda 會從此預先初始化的快照 (而不是從頭開始初始化) 恢復執行環境,從而改善啟動延遲。為了提高彈性,Lambda 會維護快照的快取副本,並自動將軟體更新 (例如執行時期升級和安全性修補程式) 套用至其中。 若要進一步了解,請瀏覽文件

    Lambda SnapStart 是一個簡單的函數級組態,可使用 Lambda API、AWS 管理主控台、AWS 命令列介面 (CLI)、AWS SDK、AWS Cloud Development Kit (CDK)、AWS CloudFormation 和 AWS Serverless Application Model (SAM) 設定新函數和現有的函數。在您設定 Lambda SnapStart 時,此後發佈的每個函數版本都會受益於 Lambda SnapStart 提供的改善的啟動效能。若要進一步了解 Lambda SnapStart,請參閱文件

    Lambda SnapStart 是一種效能最佳化,可透過減少執行一次性初始化程式碼期間產生的可變延遲,協助函數實現更快的啟動速度。雖然 Lambda SnapStart 減少了啟動延遲,但它是一種盡力而為的最佳化,並不能保證消除冷啟動。如果您的應用程式對延遲要求嚴格,需要兩位數毫秒級啟動時間,建議您使用 PC。

    Lambda SnapStart 支援多個執行時期,包括 Java 11 (及更新版本)、Python 3.12 (及更新版本) 和 .NET 8 (以及更新版本)。執行時期的未來版本將在發佈後獲得支援。如需了解 Lambda 支援的所有執行時間,請參閱 Lambda 執行時間文件

    否。Lambda SnapStart 和 PC 不能在相同的函數上同時啟用。

    是。您可以設定 Lambda SnapStart 函數,以存取虛擬私有雲端 (VPC) 中的資源。如需有關如何使用 VPC 設定函數的詳細資訊,請參閱 Lambda 文件

    是的,您將在功能版本處於作用中狀態的期間內支付快取快照的費用,至少要支付 3 小時的費用,之後以每毫秒計費。價格依您分配給函數的記憶體量而定。每次 Lambda 還原快照來恢復執行環境時,系統也會向您收取費用,價格取決於您分配給函數的記憶體數量。若要進一步了解 SnapStart 定價,請瀏覽 AWS Lambda 定價

    SnapStart 定價不適用於支援的 Java 受管理執行時期,這些執行時期只能快取最多 14 天的快照。

佈建並行

全部開啟

    佈建並行可讓您更好地控制無伺服器應用程式的效能。啟用後,佈建並行功能可讓函數保持初始化及 Hyper 就緒狀態,從而在兩位數毫秒時間內做出回應。

    您可以透過 AWS 管理主控台、Lambda API、AWS CLI 和 AWS CloudFormation,在函數上配置並行。從佈建並行獲益最簡單的方式就是使用 AWS Auto Scaling。您可以使用應用程式 Auto Scaling 配置排程,或讓 Auto Scaling 依需求的變化即時自動調整佈建並行的程度。若要進一步了解佈建並行,請參閱文件

    佈建並行新增「佈建並行」定價方式,可讓函數保持初始化。啟用時,您需要按設定的並行數量和設定的時段付費。執行已配置佈建並行的函數時,您也必須支付請求和執行持續時間的費用。要進一步了解有關佈建並行的定價資訊,請參閱 AWS Lambda 定價

    佈建並行很適合用於建立對延遲敏感的應用程式,例如 Web 或行動後端、同步叫用 API,以及互動式微型服務。您可以根據應用程式獨特的需求,輕鬆配置適當的並行量。您可以增加高需求時段內的並行量,並在需求降低時減少並行量,或完全關閉並行。

Lambda@Edge

全部開啟

    Lambda@Edge 可讓您在全球 AWS 位置執行程式碼,不僅不需佈建或管理伺服器,更能以最少的網路延遲回應最終使用者。您只需將 Node.js 或 Python 程式碼上傳至 AWS Lambda,並設定要觸發的函數,以回應 Amazon CloudFront 請求 (確切時間點包括:檢視者請求抵達時、將請求轉送到原始伺服器或從原始伺服器收到請求時,以及在回應最終使用者之前)。收到索取內容的請求時,就能在全球各個 AWS 位置執行該程式碼,並根據全球的 CloudFront 請求數量加以擴展。如要進一步了解,請參閱我們的文件

    要使用 Lambda@Edge,您只需將程式碼上傳到 AWS Lambda,並關聯要觸發的函數版本以回應 Amazon CloudFront 請求。您的程式碼必須符合 Lambda@Edge 服務限制。Lambda@Edge 目前支援使用 Node.js 和 Python,透過 CloudFront 事件執行全球叫用。如要進一步了解,請參閱我們的文件

    Lambda@Edge 已針對分佈全球的最終檢視者最注重延遲的使用案例進行優化。決策所需的所有資訊應該都在 CloudFront 節點的函數和請求內。這表示您所尋找要根據使用者特性 (例如,地點、用戶端裝置等等) 決定如何提供內容的使用案例,現在可以在離使用者最近的地方執行和提供服務,無須傳送回集中化的伺服器。

    如果函數滿足 Lambda@Edge 服務需求和限制,您可以建立現有 Lambda 函數與 CloudFront 事件的關聯以進行全球叫用。在這裡閱讀有關如何更新函數屬性的詳細資訊。

可擴展性和可用性

全部開啟

    AWS Lambda 的設計目的是利用複寫和冗餘來為服務本身及其操作的 Lambda 函數提供高可用性。兩者都沒有維護時段或計劃停機時間。

    是。當您更新 Lambda 函數時會產生一個短暫的空窗期,時間通常不到 1 分鐘,而在此期間的請求將以舊版或新版函數來執行。

    否。AWS Lambda 設計成能夠平行執行大量的函數執行個體。不過,AWS Lambda 對於每個區域的每個帳戶設有並行執行數量的預設安全調節限制 (請參閱這裡以取得預設安全調節限制的相關資訊)。您也可以控制個別 AWS Lambda 函數的最高並行執行數,為關鍵函數保留一部分的帳戶並行限制,或者設定下游資源流量速率上限。

    如果您要提交請求以增加並行執行限制,可以使用 Service Quotas 來請求提高上限。

    當超出最大並行執行限制時,同步叫用的 AWS Lambda 函數將會傳回節流錯誤 (錯誤碼為 429)。異步叫用的 Lambda 函數可以承受合理範圍內的突發流量約 15 到 30 分鐘,但之後再進來的事件將因為節流而遭到拒絕。如果叫用的 Lambda 函數是用於回應 Amazon S3 事件,則遭到 AWS Lambda 拒絕的事件可能會由 S3 保留 24 小時並在此期間重試。除非 Lambda 函數成功或資料過期,否則來自 Amazon Kinesis Streams 和 Amazon DynamoDB Streams 的事件會一直重試。Amazon Kinesis 與 Amazon DynamoDB 串流會將資料保留 24 小時。

    預設最大並行執行限制會在帳戶層級套用。但是,您也可以對個別函數設定限制 (請造訪此處以取得有關預留並行的資訊)。

    每個同步叫用的 Lambda 函數可以每 10 秒以最多 1000 次並行執行的速率進行擴展。雖然 Lambda 的擴展速率適用於大多數使用案例,但特別適合流量突增可預測或不可預測的使用案例。例如,SLA 界定的資料處理需要可預測但快速的擴展來滿足處理需求。同樣,提供突發新聞文章或快閃銷售可能會在短時間內推動不可預測的流量層級。Lambda 的擴展速率可以促進此類使用案例,而無需額外的組態或工具。此外,並行擴展限制是函數層級限制,這意味著帳戶中的每個函數都會獨立於其他函數進行擴展。

    如果發生故障,同步叫用的 Lambda 函數會以例外狀況做為回應。非同步叫用的 Lambda 函數至少會重試三次。除非 Lambda 函數成功或資料過期,否則來自 Amazon Kinesis Streams 和 Amazon DynamoDB Streams 的事件會一直重試。Kinesis 和 DynamoDB Streams 會保留資料至少 24 小時。

    當超出非同步叫用的重試政策時,您可在放置事件的位置設定「無效字母佇列」(DLQ);沒有設定 DLQ 的事件會被拒絕。當超出串流調用的重試政策時,表示資料已經到期,因此會被拒絕。

    您可設定 Amazon SQS 佇列或 Amazon SNS 主題做為無效字母佇列。

安全和存取控制

全部開啟

    您可以使用 IAM 角色授予 Lambda 函數存取其他資源的許可。AWS Lambda 在執行您的 Lambda 函數時會擔任執行角色,因此您可以對該服務可使用的 AWS 資源保持完整且安全的控制。若要進一步了解角色,請瀏覽設定 AWS Lambda

    當您設定 Amazon S3 儲存貯體以傳送訊息到 AWS Lambda 函數時,將會建立一條授權存取的資源政策規則。請瀏覽 Lambda 開發人員指南,進一步了解資源政策與存取 Lambda 函數控制的相關資訊。

    存取控制是透過 Lambda 函數的角色來管理。您指派給 Lambda 函數的角色也決定了 AWS Lambda 可代表其輪詢的資源。若要進一步了解,請瀏覽 Lambda 開發人員指南

    存取控制可以透過 Lambda 函數的角色或佇列本身的資源政策設定進行管理。 如果兩種政策都存在,會套用兩個許可中限制較嚴格的許可。

    您可透過指定子網路與安全群組作為函數組態的一部分來啟用 Lambda 函數來存取 VPC 的資源。設定要存取特定 VPC 中資源的 Lambda 函數,預設無法存取網際網路。若要授與這些功能網際網路權限,請使用網際網路閘道。根據預設,Lambda 函數會透過 IPv4 與雙堆疊 VPC 的資源通訊。您可設定函數來透過 IPv6 存取雙堆疊 VPC 的資源。如需詳細資訊了解使用 VPC 設定的 Lambda 函數,請參閱使用 VPC 的 Lambda 私人網路

    AWS Lambda 的程式碼簽署提供信任和完整性控制項,可讓您驗證只有來自核准開發人員的未修改程式碼才會在您的 Lambda 函式中部署。您可以將 AWS Signer (一個全受管程式碼簽署服務) 用於數位簽署的程式碼成品,並將 Lambda 函式設定為在部署時驗證簽章。目前僅封裝為 ZIP 封存的函式可使用 AWS Lambda 的程式碼簽署。

    您可以使用簽署描述檔,透過 AWS Signer 主控台、Signer API、SAM CLI 或 AWS CLI,建立數位簽署程式碼成品。若要進一步了解,請參閱 AWS Signer 文件

    您可以透過 AWS 管理主控台、Lambda API、AWS CLI、AWS CloudFormation 和 AWS SAM,建立程式碼簽署組態,從而啟用程式碼簽署。程式碼簽署組態可協助您指定經核准的簽署描述檔,並設定是否在簽章檢查失敗時警告或拒絕部署。程式碼簽署組態可連接至個別 Lambda 函式,以啟用程式碼簽署功能。這類函式現在會在部署時開始驗證簽章。

    AWS Lambda 可在部署時執行以下簽章檢查:

    • 簽章損壞 - 程式碼成品在簽署後發生變更時,會發生此狀況。
    • 簽章不相符 - 程式碼成品遭未經核准的簽署描述檔簽署時,會發生此狀況。
    • 簽章過期 - 簽章超過設定的過期日時,會發生此狀況。
    • 簽章遭撤銷 - 簽署描述檔擁有者撤銷簽署任務時,會發生此狀況。

    若要進一步了解,請參閱 AWS Lambda 文件

    可以,您可以為現有函式啟用程式碼簽署,方法是將程式碼簽署組態連接至該函式。您可以使用 AWS Lambda 主控台、Lambda API、AWS CLI、AWS CloudFormation 和 AWS SAM 來實現此動作。

    使用 AWS Lambda 的程式碼簽署無需額外付費。您只需支付 AWS Lambda 標準費用。若要進一步了解,請參閱定價

進階監控功能

全部開啟

    為了在預設情況下為您提供簡化且增強的日誌體驗,AWS Lambda 提供進階日誌控制,例如能以 JSON 結構化格式原生擷取 Lambda 函數日誌、控制 Lambda 函數日誌的日誌層級篩選而無需變更程式碼,而且自訂 Amazon CloudWatch 日誌群組 Lambda 的日誌傳送。

    您可以 JSON 結構化格式擷取 Lambda 函數日誌,而無需使用自己的日誌庫。JSON 結構化日誌可讓您更輕鬆地搜尋、篩選和分析大量日誌項目。您可以控制 Lambda 函數日誌的日誌層級篩選,無需進行任何程式碼變更,進而可選擇 Lambda 函數所需的日誌詳細度等級,而無需在偵錯和疑難排解時篩選大量日誌。您也可以設定 Lambda 應將日誌傳送至哪個 Amazon CloudWatch 日誌群組,讓您更輕鬆將應用程式內多個函數日誌彙集到一個位置。您接著就可以將安全性、治理和保留原則套用到應用程式層級的日誌,不必分別套用至每個函數。

    您可以使用 AWS Lambda API、AWS Lambda 主控台、AWS CLI、AWS Serverless Application Model (SAM) 和 AWS CloudFormation,為 Lambda 函數指定進階日誌控制。若要進一步了解,請造訪啟動部落格文章以取得進階日誌控制,或參閱 Lambda 開發人員指南

    可以,您可以使用自己的日誌庫以 JSON 結構化格式產生 Lambda 日誌。為確保您的日誌庫能夠與 Lambda 的原生 JSON 結構化日誌功能順暢運作,Lambda 不會對您的函數產生的任何已經有 JSON 編碼的日誌進行雙重編碼。您也可以使用 Powertools for AWS Lambda 來擷取 JSON 結構化格式的 Lambda 日誌。

    在 Lambda 上使用進階日誌控制不需額外收費。Amazon CloudWatch Logs 將繼續向您收取擷取和儲存 Lambda 日誌的費用。如需日誌定價詳細資訊,請參閱 CloudWatch 定價頁面

    CloudWatch Application Signals 是一種應用程式效能監控 (APM) 解決方案,可讓開發人員和操作員輕鬆監控使用 Lambda 建置的無伺服器應用程式的運作狀態和效能。Application Signals 提供預先建置的標準化儀表板,以了解關鍵應用程式指標、相關的追蹤以及 Lambda 函數及其相依性之間的互動,所有這些都不需要開發人員手動檢測或程式碼變更。

    CloudWatch Logs Live Tail 是一項互動式日誌串流和分析功能,可提供對日誌的即時可見性,使 Lambda 函數的開發和疑難排解更為容易。這讓開發人員能夠即時快速測試和驗證程式碼或組態變更,加速使用 Lambda 建置應用程式時的作者測試部署週期 (也稱為「內部開發循環」)。Live Tail 體驗還能夠使操作員和 DevOps 團隊更高效地偵測和偵錯 Lambda 函數程式碼中的故障和關鍵錯誤,縮短疑難排解 Lambda 函數錯誤時的平均復原時間 (MTTR)。

AWS Lambda 耐久性函式

全部開啟

    當您需要在 Lambda 的熟悉程式設計模型中建構邏輯,並具備本地測試、IDE 整合以及您偏好的程式設計語言時,請使用 Lambda 耐久性函數。當您需要視覺化工作流程設計、跨團隊可見性、220 多個原生服務整合或零維護基礎架構時,請使用 AWS Step Functions。許多應用程式透過同時使用兩者而獲益。

    AWS Lambda 耐久性函數目前支援 JavaScript、TypeScript、Python 和 Java。進一步了解支援的執行時期

    是。雖然每次調用逾時保持 15 分鐘,但 Lambda 耐久性函數可以使用等待功能 (例如計時器、回呼和輪詢條件),在多次調用中暫停和恢復。當您以非同步方式調用耐久性函數時,耐久性執行逾時可延長至一年,從而實現人為核准工作流程、排程提醒和多天處理管道等使用案例。對於按需功能,暫停期間不會收取運算費用。

    執行逾時 (最多 1 年) 會決定執行可運行的時間。保留期限 (最多 90 天) 會決定在執行達到終端狀態後保留歷史記錄和檢查點資料的時長。保留不會影響正在運行的執行。請參閱耐久性函數組態

    否。對於隨需功能,當使用耐久性執行 SDK 的等待功能時,暫停期間不會收取運算費用。 如需詳細資訊,請參閱定價頁面開發人員指南

    您可以使用自動重試,將每個工作單元打包在一個步驟中。如果一個步驟在重試後失敗,處理程式碼可能會偵測錯誤並執行補償步驟,例如退款或釋放預約。由於每個完成的步驟都會建立檢查點 (包括補償),因此重試時不會重複已成功完成的工作。此模式可協助您建立可靠的多步驟程序,例如訂單履行或付款工作流程,而無需編寫自訂重試和狀態追蹤邏輯。

    執行狀態儲存在全受管內部狀態儲存區中。每個檢查點操作 (例如步驟或回呼) 最多可儲存 256 KB 資料。此限制適用於從操作中傳回的資料。在操作內處理的資料 (例如讀取和寫入大型 S3 物件) 不會計入此限制。如果操作需要傳回大量結果,您可以在 SDK 中設定自訂序列化程式,以將承載卸載至 Amazon S3 或 Amazon DynamoDB,並僅透過檢查點傳遞參考。

    Lambda 耐久性函數使用與標準 Lambda 函數相同的帳戶層級並行池。在等待期間釋放並行插槽,因此數千個執行可在不佔用並行的情況下等待。進一步了解 AWS Lambda 配額

    您可以將耐久性執行 SDK 用於支援的編程語言,從而在本機測試耐久性函數,而無需 AWS 憑證。AWS SAM CLI 還支援本機調用、回呼和耐久性執行管理,在部署前輕鬆開發和除錯。進一步了解測試耐久性函數