AWS Lambda 常見問答集

一般問題

使用 AWS Lambda 執行程式碼,不必佈建或管理伺服器。只需為使用的運算時間支付費用,一旦未執行程式碼,就會停止計費。有了 Lambda,您可以透過虛擬方式執行任何類型的應用程式或後端服務,全部免管理。只需上傳程式碼,Lambda 就會運用其高可用性來處理執行程式碼及擴展規模所需的各項工作。您可以將自己的程式碼設成可以從其他 AWS 服務自動觸發,或從任何 Web 或行動應用程式直接呼叫。

無伺服器運算可讓您建立和執行應用程式與服務,而無須擔心伺服器的問題。使用無伺服器運算,您的應用程式仍然在伺服器上執行,但所有伺服器管理工作都由 AWS 完成。AWS Lambda 是無伺服器運算的核心,讓您無須佈建或管理伺服器即可執行程式碼。

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

Amazon Web Services 提供一組運算服務以滿足各種需求。

Amazon EC2 具有多種執行個體類型以及自訂作業系統、網路和安全設定以及整個軟體堆疊的選項,可提供靈活性,讓您能夠將現有的應用程式輕鬆移到雲端。使用 Amazon EC2 時,您要負責佈建容量、監控機群的運作狀態和效能,並設計容錯能力和可擴展性。AWS Elastic Beanstalk 提供易用的服務供您部署和擴展 Web 應用程式,而您也可在使用這些服務時保有對基礎 EC2 執行個體的擁有權和完整控制權。Amazon EC2 Container Service 是一項可擴展的管理服務,支援 Docker 容器,並讓您在 Amazon EC2 執行個體受管的叢集上輕鬆執行分散式應用程式。

AWS Lambda 可輕鬆執行程式碼以回應事件,例如 Amazon S3 儲存貯體的變更、Amazon DynamoDB 表的更新,或您的應用程式或裝置產生的自訂事件。使用 Lambda 時,您不必佈建自己的執行個體;Lambda 會代您執行所有的操作和管理活動,包括容量佈建、監控叢集運作狀態、對基礎運算資源套用安全性修補程式、部署您的程式碼、在前端執行 Web 服務以及監控和記錄您的程式碼。您不需進行其他作業,AWS Lambda 即可讓程式碼易於擴展且高度可用。

AWS Lambda 提供了在雲端完成許多活動的簡易方式。例如,您可以使用 AWS Lambda 建構下列項目:可從 Amazon DynamoDB 擷取和轉換資料的行動後端、物件上傳到 Amazon S3 之後進行壓縮或轉換的處理常式、對某個 Amazon Web Services 所做 API 呼叫的稽核和報告功能,以及使用 Amazon Kinesis 減少伺服器串流資料的處理。

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

否。AWS Lambda 會代您運作該運算基礎架構,允許其執行運作狀態檢查、套用安全修補程式和執行其他例行維護。
每個 AWS Lambda 函數都在其獨立的隔離環境中執行,有自己的資源和檔案系統檢視。AWS Lambda 使用與 Amazon EC2 相同的技術,在基礎設施和執行級別上提供安全性和區隔。
AWS Lambda 將程式碼儲存在 Amazon S3 中並以靜態加密。AWS Lambda 在使用您的程式碼時執行額外的完整性檢查。

AWS Lambda 函數

您在 AWS Lambda 上執行的程式碼是以「Lambda 函數」的形式上傳。每個函數都有相關的組態資訊,例如其名稱、描述、進入點和資源要求。程式碼必須以「無狀態」樣式撰寫,也就是要假設其與基礎運算基礎設施無任何關係。本地檔案系統存取、子處理序和類似的項目可能不會超出要求的存留期,且任何持續狀態都應該儲存在 Amazon S3、Amazon DynamoDB、Amazon EFS 或另一個可用的網際網路儲存服務中。Lambda 函數可包含程式庫,甚至是原生程式庫。

為了改善效能,AWS Lambda 可以選擇保留您的函數執行個體,讓它重複使用於後續請求,而不是建立一個新副本。若要進一步了解 Lambda 如何重複使用函數執行個體,請參閱我們的文件。您的程式碼不應假設此操作會經常發生。

您可以為每個 Lambda 函數設定 512MB 至 10,240MB 之間的暫時性儲存,以 1MB 為增量。暫時性儲存在每個函數的目錄中均可使用。

每個函數都能免費使用 512MB 的儲存空間。使用超過 512MB 的暫時性儲存設定函數時,將會依據設定的儲存量和函數執行的時間計費,以 1 毫秒為增量來計量。相比之下,在美國東部 (俄亥俄) 區域,AWS Fargate 暫時性儲存價格為每 GB-小時 0.000111 USD,或每 GB-月 0.08 USD。美國東部 (俄亥俄) 的 Amazon EBS gp3 儲存磁碟區定價為每月-每 GB 0.08 USD。AWS Lambda 暫時性儲存定價為每 GB-秒 0.0000000309 USD,或每 GB-小時 0.000111 USD 和每 GB-月 0.08 USD。若要進一步了解,請參閱 AWS Lambda 定價

您可以在函數建立或更新期間,使用 AWS Lambda 主控台、AWS Lambda API 或 AWS CloudFormation 範本為每個 Lambda 函數設定其自己的暫時性儲存 (介於 512MB 和 10,240MB 之間,增量為 1MB)。
是。存放在暫時性儲存中的所有資料都使用 AWS 受管金鑰進行靜態加密。

您可以使用 AWS CloudWatch Lambda Insight 指標來監控暫時性儲存用量。要進一步了解,請參閱 AWS CloudWatch Lambda Insights 文件

如果您的應用程式需要耐用的持久性儲存,請考慮使用 Simple Storage Service (Amazon S3) 或 Amazon EFS。如果您的應用程式需要在單一函數叫用中存放程式碼所需的資料,請考慮使用 AWS Lambda 暫時性儲存作為暫時性快取。要進一步了解,請參閱在 Web 應用程式中選擇 AWS Lambda 資料儲存選項

是。但是,如果您的應用程式需要持久性儲存,請考慮使用 Amazon EFS 或 Simple Storage Service (Amazon S3)。當您為函數啟用佈建並行時,函數的初始化程式碼會在分配期間和每隔幾個小時執行一次,因為執行中的函數執行個體會被回收。您可以在執行個體處理請求後的日誌和追蹤中查看初始化時間。但是,即使執行個體從不處理請求,也會對初始化計費。這種佈建並行初始化行為可能會影響您的函數與存放在暫時性儲存中的資料的互動方式,即使您的函數不處理請求也是如此。要進一步了解佈建並行,請參閱相關文件

您可以在函數建立或更新期間,使用 AWS Lambda 主控台、AWS Lambda API 或 AWS CloudFormation 範本為每個 Lambda 函數設定其自己的暫時性儲存 (介於 512MB 和 10,240MB 之間,增量為 1MB)。
是。存放在暫時性儲存中的所有資料都使用 AWS 受管金鑰進行靜態加密。

您可以使用 AWS CloudWatch Lambda Insight 指標來監控暫時性儲存用量。要進一步了解,請參閱 AWS CloudWatch Lambda Insights 文件

透過讓函數保持無狀態,AWS Lambda 能盡快啟動所需的函數副本數,因而能視連入事件的速率而進行擴展。由於 AWS Lambda 的程式設計模式是無狀態的,因此您的程式碼可以透過呼叫其他 Web 服務 (例如 Amazon S3 或 Amazon DynamoDB) 來存取有狀態的資料。
是。AWS Lambda 可讓您使用一般的語言和作業系統功能,例如建立額外的執行緒和程序。分配給 Lambda 函數的資源 (包括記憶體、執行時間、磁碟和網路的使用),都必須透過其使用的所有執行緒/程序進行共享。您可以使用 Amazon Linux 支援的任何語言來啟動程序。
Lambda 嘗試盡可能不對一般的語言和作業系統活動施加限制,但仍有少數活動是停用的:AWS Lambda 封鎖入站網路連線、對外連線僅支援 TCP/IP 和 UDP/IP 通訊端,且封鎖 ptrace (偵錯) 系統呼叫。TCP 埠 25 的流量同樣也受到封鎖,以當做反垃圾郵件的措施。

如果您使用的是 Node.js 或 Python,可透過 AWS Lambda 主控台的程式碼編輯器為函數編寫程式碼,您可以在這裡編寫和測試函數,以及在與 IDE 類似的穩固環境中檢視函數執行的結果。前往主控台以開始使用

您也可以將程式碼 (以及任何相依程式庫) 封裝成 ZIP,並使用 AWS Lambda 主控台從您的本機環境上傳,或者指定 ZIP 檔案所在的 Amazon S3 位置。上傳的內容不得大於 50 MB (已壓縮)。您可以使用 AWS Eclipse 外掛程式以 Java 編寫和部署 Lambda 函數。您可以使用 Visual Studio 外掛程式以 C# 和 Node.js 編寫和部署 Lambda 函數。

您可以將程式碼 (以及任何相依程式庫) 封裝成 ZIP,並使用 AWS CLI 從您的本機環境上傳,或者指定 ZIP 檔案所在的 Amazon S3 位置。上傳的內容不得大於 50 MB (已壓縮)。瀏覽 Lambda 入門指南以開始使用。

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

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

您可以使用 Lambda API 或主控台,調整和保護與 Lambda 函數相關聯的資源。若要進一步了解,請參閱文件

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

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

若要進一步了解,請參閱 CloudWatch 指標的疑難排解。若要使用 Lambda 內建指標,AWS Lambda 將按照標準收費。

AWS Lambda 會與 Amazon CloudWatch Logs 自動整合,為每個 Lambda 函數建立一個日誌群組,並提供基本的應用程式生命週期事件日誌項目,包括記錄每次使用函數所耗用的資源。您可以在程式碼中輕鬆插入其他記錄陳述式。您還可以在 Lambda 函數中呼叫第三方記錄 API。若要進一步了解,請參閱 Lambda 函數的疑難排解。將採用 Amazon CloudWatch Logs 費率。

您不必擴展您的 Lambda 函數,AWS Lambda 會自動代您擴展。每當接收到函數的事件通知時,AWS Lambda 會在其運算機群中快速找到可用容量並執行您的程式碼。由於您的程式碼是無狀態的,AWS Lambda 可以視需要盡可能啟動許多函數副本,而不會有冗長的部署和組態延遲的情況。函數的擴展沒有基本限制。AWS Lambda 將動態分配容量以符合連入事件的速率。

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

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

執行記憶體或運算密集型工作負載的客戶,現在就可以針對其函式使用更多記憶體。較大型的記憶體函式可協助多執行緒應用程式提升執行速度,使他們成為資料和運算密集型應用程式 (例如,機器學習、批次和 ETL 任務、財務建模、基因組學、HPC 和媒體處理) 的理想選擇。
AWS Lambda 函數可以設定為每次執行最多 15 分鐘。您可以將逾時設定為 1 秒到 15 分鐘之間的任何值。

AWS Lambda 按使用量收費。如需詳細資訊,請參閱 AWS Lambda 定價頁面

是。除了在 Amazon EC2 和 AWS Fargate 上節省資金外,您還可以使用 Compute Savings Plans 在 AWS Lambda 上節省資金。Compute Savings Plans 針對「期間」、「佈建並行」和「期間 (佈建並行)」提供最高達 17% 的折扣。Compute Savings Plans 在 Lambda 帳單中不針對「請求」提供折扣。但是,您的 Compute Savings Plans 承諾仍適用於按正常費率計費的請求。

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

部署時間根據程式碼的大小而有所不同,但 AWS Lambda 函數一般在上傳後幾秒鐘內就能做好呼叫準備。
是。您可以加入自己的程式庫版本 (包括 AWS 開發套件),以使用與 AWS Lambda 預設版本不同的版本。

AWS Lambda 針對超過特定閾值的每月所需功能持續時間,提供折扣定價方案。分層定價適用於在 x86 和 Arm 架構上執行的功能。依據帳戶內同一區域、相同架構 (分別為 x86 或 Arm) 上所執行函數的彙總每月所需持續時間,套用 Lambda 定價方案。如果您在 AWS Organizations 中使用合併帳單,依據組織各帳戶同一區域、相同架構上所執行函數的彙總每月持續時間,套用 Lambda 定價方案。例如,如果您在美國東部 (俄亥俄) 區域執行 x86 Lambda 函數,對於每月前 60 億 GB-秒,每 GB-秒需支付 0.0000166667 美元,對於接下來的 90 億 GB-秒,每 GB-秒需支付 0.0000150000 美元,在該區域每月超過 150 億 GB-秒,每 GB-秒需支付 0.0000133334 美元。請求、佈建並行和佈建並行持續時間的定價保持不變。如需詳細資訊,請參閱 AWS Lambda 定價

是。您的每小時節省計畫承諾涵蓋的 Lambda 用量,按適用的 CSP 費率和折扣計費。此承諾未涵蓋的剩餘用量,將依據與您的每月彙總功能持續時間所屬等級相對應的費率計費。

使用 AWS Lambda 處理 AWS 事件

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

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

事件會以事件輸入參數的形式傳輸到 Lambda 函數中。對於事件在其中以批次處理方式到達的事件來源 (例如 Amazon SQS、Amazon Kinesis 和 Amazon DynamoDB Streams),根據您請求的批次大小,事件參數可能在單次呼叫中就包含多個事件。若要進一步了解 Amazon S3 事件通知,請瀏覽為 Amazon S3 事件設定通知。若要進一步了解 Amazon DynamoDB Streams,請瀏覽 DynamoDB Stream 開發人員指南。若要進一步了解如何使用 Amazon SNS 叫用 Lambda 函數,請瀏覽 Amazon SNS 開發人員指南。如需 Amazon Cognito 事件的詳細資訊,請瀏覽 Amazon Cognito。若要進一步了解 AWS 服務間的 AWS CloudTrail 日誌與稽核 API 呼叫,請參閱 AWS CloudTrail

您可以從 AWS Lambda 主控台中選擇一個函數,並將其與 Amazon S3 儲存貯體中的通知關聯。或者,您可以使用 Amazon S3 主控台並設定儲存貯體的通知以傳送到您的 AWS Lambda 函數。還可透過 AWS 開發套件和 CLI 提供此相同的功能。
透過訂閱與 DynamoDB 表相關的 DynamoDB Stream 的 Lambda 函數,您可以在 DynamoDB 表更新觸發 Lambda 函數。您可以使用 Amazon DynamoDB 主控台、AWS Lambda 主控台或 Lambda 的 registerEventSource API,將 DynamoDB Stream 與 Lambda 函數建立關聯。
您可以從 AWS Lambda 主控台選取一個 Lambda 函數,並將其與相同帳戶擁有的 Amazon Kinesis 串流建立關聯。還可透過 AWS 開發套件和 CLI 提供此相同的功能。
傳送到您的 AWS Lambda 函數的 Amazon Kinesis 和 DynamoDB Streams 記錄,將根據碎片進行嚴格序列化。這表示如果您將兩個記錄放在同一個碎片中,Lambda 保證先透過第一個記錄成功叫用 Lambda 函數,然後再透過第二個記錄叫用。如果第一個記錄叫用逾時,或者遇到其他錯誤,Lambda 將重試直到叫用成功 (或者記錄達到 24 小時期限),才會叫用下一個記錄。無法保證不同碎片之間記錄的排序,而且每個碎片的處理是同時進行的。

AWS Lambda 可讓您在碎片之類的單一邏輯分區中,對 Amazon Kinesis 或 Amazon DynamoDB Streams 中的資料執行以時間為基礎的彙總 (例如計數、最大值、總和、平均值等),所需時間很短暫 (最久為 15 分鐘)。這可讓您為以事件為基礎的應用程式輕鬆設定簡單的分析,而不會增加架構的複雜性,因為您的業務和分析邏輯可位於相同的函式中。Lambda 會根據事件的時間戳記,在最多 15 分鐘的輪轉時段進行彙總。Amazon Kinesis Data Analytics 可讓您建置更複雜的分析應用程式,來支援彈性的處理選項和強健的容錯能力,應用程式還可具備確切的一次性處理而不會重複,以及跨多個邏輯分區對整個資料串流執行分析。藉助 KDA,您就可以使用事件時間或處理時間,透過多種類型的彙總時段 (輪轉時段、交錯時段、移動時段、工作階段時段) 分析資料。
 

  AWS Lambda Amazon KDA
輪轉時段
交錯時段
移動時段
工作階段時段
擴充
聯合輸入和參考資料表
分割輸入串流
確切的一次性處理
時段上限 15 分鐘 無限制
彙總範圍 分區/碎片 串流
時間語意 事件時間 事件時間、處理時間
您可以從 AWS Lambda 主控台中選擇一個函數,並將其與 Amazon SNS 主題建立關聯。還可透過 AWS 開發套件和 CLI 提供此相同的功能。
您可以從 Amazon SES 主控台設定接收規則,讓 Amazon SES 將您的訊息傳送給 AWS Lambda 函數。透過 AWS 開發套件和 CLI 可使用此相同的功能。

首先要設定警示以傳送 Amazon SNS 通知。然後從 AWS Lambda 主控台中選擇一個 Lambda 函數,並將其與 Amazon SNS 主題建立關聯。若要進一步了解如何設定 Amazon CloudWatch 警示,請參閱 Amazon CloudWatch 開發人員指南

您可以從 AWS Lambda 主控台選擇要在任何資料集與 Amazon Cognito 身分集區同步時觸發的函數。還可透過 AWS 開發套件和 CLI 提供此相同的功能。請瀏覽 Amazon Cognito 了解使用 Amazon Cognito 跨多個使用者裝置分享和同步資料的詳細資訊。

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

AWS Lambda 的設計旨在幾毫秒內處理事件。在 Lambda 函數建立、更新後,或如果最近未使用,延遲狀況將立刻變得明顯。

上傳您要 AWS Lambda 執行的程式碼,並使用 AWS Mobile SDK 中的 AWS Lambda 開發套件,從行動應用程式叫用它。您可以直接 (同步) 呼叫來擷取或即時查看資料,也可以進行異步呼叫。您可以使用 Amazon API Gateway 定義自訂 API,並透過任何與 REST 相容的用戶端叫用 Lambda 函數。若要進一步了解 AWS Mobile SDK,請瀏覽 AWS Mobile SDK 頁面。若要進一步了解 Amazon API Gateway,請瀏覽 Amazon API Gateway 頁面。

您可以使用 Amazon API Gateway 定義自訂 RESTful API,透過 HTTPS 叫用 Lambda 函數。這可為您提供函數的端點,以回應 GET、PUT 和 POST 這類的 REST 呼叫。請參閱更多有關使用 AWS Lambda 搭配 Amazon API Gateway 的資訊。
當透過 AWS Mobile SDK 進行呼叫時,AWS Lambda 函數會自動取得透過 'context' 物件來呼叫的裝置與應用程式的深入資料。
當您的應用程式使用 Amazon Cognito 身分時,最終使用者可以使用各種公有登入供應商 (包括 Amazon、Facebook、Google) 和其他與 OpenID Connect 相容的服務來驗證自身。然後使用者身分便會自動加密並以 Amazon Cognito ID 的形式送給 Lambda 函數,並允許其存取 Amazon Cognito 中的使用者資料,或做為儲存的金鑰,以儲存和擷取 Amazon DynamoDB 或其他 Web 服務的資料。
AWS Lambda 與 Alexa 技術套件整合,Alexa 技術套件是自助服務 API、工具、文件和程式碼範例的集合,可讓您為 Alexa 輕鬆建立語音驅動功能 (或「技術」)。只要上傳您所建立的新 Alexa 技術的 Lambda 函數程式碼,AWS Lambda 就會以靜態方式執行程式碼回應 Alexa 語音互動,而且可替您自動管理運算資源。有關更多詳細資訊,請參閱 Alexa 技術套件文件。
對於 Amazon S3 儲存貯體通知和自訂事件,AWS Lambda 將在您的程式碼發生錯誤條件或是您超出服務或資源限制時,嘗試執行三次您的函數。對於 AWS Lambda 代您輪詢的已排序的事件來源 (例如 Amazon DynamoDB Streams 和 Amazon Kinesis Streams),Lambda 將在發生開發人員程式碼錯誤時繼續嘗試執行,直到該資料過期為止。您可以透過 Amazon Kinesis 和 Amazon DynamoDB 主控台以及 AWS Lambda 為您的函數產生的 Amazon CloudWatch 指標監控處理情況。您也可以根據錯誤或執行調節率來設定 Amazon CloudWatch 警示。

使用 AWS Lambda 建置應用程式

以 Lambda 為基礎的應用程式 (也稱為無伺服器應用程式) 是由事件觸發的函數組合而成。一般無伺服器應用程式包含一或多個由事件觸發的函數,像是上傳到 Amazon S3 的物件、Amazon SNS 通知或 API 動作。這些函數可以獨立使用或利用其他資源,像是 DynamoDB 表或 Amazon S3 儲存貯體。最基本的無伺服器應用程式就是一個函數。
您可以使用 AWS 無伺服器應用程式模型 (AWS SAM) 來部署和管理無伺服器應用程式。AWS SAM 是一種規格,用於指定在 AWS 上表示無伺服器應用程式的規則。這個規格與 AWS CloudFormation 現用的語法相符,而且在 AWS CloudFormation 中以一組資源類型 (稱為「無伺服器資源」) 的形式提供支援。AWS 客戶可透過這些資源輕鬆使用 CloudFormation,以現有的 CloudFormation API 設定和部署無伺服器應用程式。

您可以透過 AWS Serverless Application Repository,從 AWS community 開發人員、公司和合作夥伴發佈的無伺服器應用程式集合中選擇。找到應用程式之後,可以直接從 Lambda 主控台進行設定和部署。

您可以使用 AWS CodePipeline 和 AWS CodeDeploy 自動化無伺服器應用程式的發佈程序。CodePipeline 是一種持續交付的服務,讓您能夠將無伺服器應用程式所需的步驟模型化、視覺化和自動化。CodeDeploy 可為 Lambda 應用程式提供部署自動化引擎。CodeDeploy 可讓您根據已確立的最佳實務方法 (如早期開發測試和線性部署) 協調部署,並協助您建立必要的防護,以確定新部署的程式碼是否安全、穩定且可全面發布到生產環境。
 

若要進一步了解無伺服器 CI/CD,請參閱我們的文件

若要開始建置,請前往 AWS Lambda 主控台,並下載其中一個藍圖。所下載的檔案會包含一個 AWS SAM 檔案 (用於定義應用程式中的 AWS 資源),以及 .ZIP 檔案 (其中包含函數的程式碼)。之後,您可以使用 AWS CloudFormation 命令來封裝和部署您剛下載的無伺服器應用程式。如需詳細資訊,請參閱我們的文件

您可以使用 AWS Step Functions,以特定順序協調一系列 AWS Lambda 函數。您可以依序叫用多個 Lambda 函數,將函數的結果傳遞給另一個函數,也可以 (或者) 並行叫用多個函數,而 Step Functions 會在執行期間為您維護狀態。

您可以在 Lambda 函數執行角色新增 X-Ray 許可並將函數的 "tracing mode" 變更為 "active",以啟用 Lambda 函數的 AWS X-Ray 追蹤功能。 為 Lambda 函數啟用 X-Ray 之後,AWS Lambda 會將追蹤資訊發送到 X-Ray,這些資訊是關於 Lambda 服務叫用函數時所產生的開銷。這會提供您有關 Lambda 服務開銷、函數啟動時間和函數執行時間等等的洞見。此外,您還可以在 Lambda 部署套件中包含 X-Ray 開發套件來建立自己的追蹤片段、註解追蹤或檢視從 Lambda 函數發出的下游呼叫追蹤片段。X-Ray 開發套件目前可使用 Node.js 和 Java。若要進一步了解,請參閱 Lambda 應用程式的疑難排解。將採用 AWS X-Ray 費率。

是。Amazon RDS Proxy 是可管理連至關聯式資料庫的數千個並行連線的高可用性資料庫代理,您可使用此服務建立連線至關聯式資料庫的高度擴展且安全的無伺服器應用程式。RDS 代理目前支援 MySQL 和 Aurora 資料庫。您可以透過 Amazon RDS 主控台或 AWS Lambda 主控台,開始使用 RDS 代理。使用來自 RDS Proxy 之全受管連線集區的無伺服器應用程式,是根據 RDS Proxy 定價計費。

此規格根據 Apache 2.0 為開源,這可讓您和其他人將 AWS SAM 採納並融合到建置、部署、監控和管理工具之中,並提供有利於商業的授權。您可以在這裡存取 GitHub 上的 AWS SAM 儲存庫。

容器映像支援

AWS Lambda 可讓您將函式封裝和部署為容器映像。客戶可以利用容器工具的靈活性和對其的熟悉度,以及 AWS Lambda 的敏捷性和操作簡易性,來建置應用程式。
您可以從 AWS 為 Lambda 提供的基礎映像開始,或使用其中一個您偏好的社群或私有企業映像來開始。接著,只要使用 Docker CLI 來建置映像、上傳至 Amazon ECR,接著透過使用 AWS 管理主控台、AWS CLI、AWS SDK、AWS SAM 和 AWS CloudFormation 之類所有熟悉的 Lambda 界面和工具來建立該函式。
除了 Lambda 提供的映像外,您還可以將第三方 Linux 基礎映像 (例如 Alpine 或 Debian) 部署至 Lambda。AWS Lambda 會根據以下映像資訊清單格式支援所有映像:Docker Image Manifest V2 Schema 2 (與 Docker 1.10 版或更新版本搭配使用) 或 Open Container Initiative (OCI) 規格 (1.0 版和更新版本)。Lambda 支援的映像大小最高可達 10 GB。
AWS Lambda 提供客戶可擴充的各種基礎映像,且客戶也能夠使用其偏好的以 Linux 為基礎的映像,映像大小最高可達 10 GB。
您可以使用任何容器工具,只要其支援以下其中一種容器映像資訊清單格式:Docker Image Manifest V2 Schema 2 (與 Docker 1.10 版和更新版本搭配使用) 或 Open Container Initiative (OCI) 規格 (1.0 版和更新版本)。例如,您可以使用原生的容器工具 (例如,docker run、docker compose、Buildah 和 Packer),來將函式定義為容器映像,並將其部署至 Lambda。
除了 Lambda 分層和程式碼簽署以外,您都可以將所有現有 AWS Lambda 功能與部署為容器映像的函式搭配使用。在部署後,AWS Lambda 就會將映像視為不可變。客戶可以在建置程序期間,使用容器分層來包含相依性。
目前沒有。您的映像一旦部署至 AWS Lambda 後就不可改變。此服務不會修補或更新映像。然而,AWS Lambda 會為所有基於 Lambda 受管環境的支援執行階段發佈經過規劃的基礎映像。隨著對 AWS Lambda 受管執行階段所做的更新,系統會同時修補和更新這些已發佈的映像。您可以從 DockerHub 或 Amazon ECR Public 提取和使用最新的基礎映像、重新建置容器映像,並透過 Amazon ECR 部署至 AWS Lambda。這個功能可讓您在將映像部署至生產前,建置和測試已更新的映像和執行階段

使用 ZIP 封存和容器映像建立的函式之間的差異主要有三個:

  1. 使用 ZIP 封存建立的函式,具備的解壓縮程式碼套件大小上限為 250 MB,而使用容器映像建立的函式,映像大小上限為 10 GB。 
  2. Lambda 會使用 Amazon ECR 作為基礎程式碼儲存,適合定義為容器映像的函式,因此在將基礎映像從 ECR 刪除後,就可能無法叫用函式。 
  3. 系統會根據最新的執行階段安全性和錯誤修正,自動修補 ZIP 函式。定義為容器映像的函式是不可變的,而且客戶需要負責處理在此函式中封裝的元件。客戶可以利用 AWS 提供的基礎映像 (AWS 通常會定期更新基礎映像,以確保安全性和進行錯誤修正),搭配最新可用的修補程式。
沒有,AWS Lambda 會確保封裝為容器映像的函式效能描述檔與封裝為 ZIP 封存的函式效能描述檔相同,通常只需不到一秒的啟動時間。

封裝為容器映像並部署至 AWS Lambda 的函式無需額外費用。當您叫用部署為容器映像的函式時,需要為請求和執行持續時間支付標準費用。要進一步了解,請參閱 AWS Lambda 定價。 在 Amazon ECR 中存放容器映像,系統會以標準 ECR 價格向您收費。要進一步了解,請參閱 Amazon ECR 定價

Lambda 執行階段界面模擬器是 Lambda 執行階段 API 的代理,可讓客戶在本機測試封裝為容器映像的 Lambda 函式。這是一種輕量型的 Web 伺服器,可將 HTTP 請求轉換為 JSON 事件並模擬 Lambda 執行階段 API。這可讓您使用 cURL 和 Docker CLI 等熟悉的工具,在本機測試函式 (同時測試封裝為容器映像的函式)。這個功能也可簡化在其他運算服務上執行應用程式的過程。您可以在容器映像中納入 Lambda 執行階段界面模擬器,使其以原生方式接受 HTTP 請求,而不是接受部署至 Lambda 所需的 JSON 事件。此元件不會模擬 Lambda 的協調器或安全性和身份驗證組態。執行階段界面模擬器的開源在 GitHub 上。您可以透過在本機上下載並安裝此元件來開始。

執行 Lambda 服務中的 Lambda Runtime API 會接受 JSON 事件和傳回回應。Lambda 執行階段界面模擬器可讓封裝為容器映像的函式在本機測試期間,使用 cURL 之類的工具接受 HTTP 請求,並透過對函式而言是本機的相同界面來顯示這些請求。這可讓您使用 docker run 或 docker-compose up 命令,在本機測試 Lambda 應用程式。
您可以使用 Emulator,測試函式程式碼是否與 Lambda 環境相容、是否能順利執行和提供預期的輸出。例如,您可以透過不同的事件來源模擬測試事件。您也可以使用模擬器,根據 Lambda Extensions API 測試在容器映像中內建的擴充功能和代理程式。

客戶可以將執行階段界面模擬器新增為容器映像的進入點,或以附屬的形式封裝該模擬器,以確保容器映像現在會接受 HTTP 請求 (而不是 JSON 事件)。此舉可簡化在其他運算服務上執行容器映像所需的變更。客戶需負責其所選環境遵守所有安全性、效能和並行最佳實務。RIE 是在 AWS Lambda 提供的映像中預先封裝的功能,依預設可在 AWS SAM CLI 中使用。基礎映像供應商可使用此文件,為其基礎映像提供相同的體驗。

如果容器化應用程式滿足以下要求,您就可以將其部署至 AWS Lambda:

  1. 此容器映像必須實作 Lambda 執行階段 API。我們有一組開放原始碼的軟體套件 (執行階段界面用戶端 (RIC)),這些套件會實作 Lambda 執行階段 API,讓您可以順暢地將偏好的基礎映像擴展為與 Lambda 相容的映像。
  2. 容器映像必須能夠在僅唯讀檔案系統上執行。您的函式程式碼可以存取 512 MB 的可寫入 /tmp 目錄儲存。如果使用的映像需要可寫入的根目錄,請將其設定為寫入至 /tmp 目錄。
  3. 預設 Lambda 使用者可讀取執行函式程式碼所需的檔案。Lambda 會為預設 Linux 使用者定義最低權限的許可,以遵循安全性最佳實務。您需要驗證應用程式程式碼是否不須仰賴受其他 Linux 使用者限制的檔案,而即可執行。
  4. 這是以 Linux 為基礎的容器映像。

AWS Lambda Snapstart

針對延遲敏感應用程式,AWS 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 文件

是。您可以針對在 x86 和 Arm 架構上執行的函數設定 Lambda SnapStart。

否。目前無法使用 Amazon EFS 啟用 Lambda SnapStart。
否。目前無法啟用具有 512 MB 以上的更大暫時性儲存 (/tmp) 的 Lambda SnapStart。

是。如果程式碼假設狀態的唯一性,則需要評估程式碼對快照操作 (例如被複製和恢復) 的彈性。如需進一步了解 Lambda SnapStart 的不重複性考量,請參閱文件,以及相關部落格,了解使用 Lambda SnapStart 時 VM 快照的不重複性。

是。您可以在建立 (檢查點) 快照之前和使用執行時間勾點恢復快照之後,實作自己的軟體邏輯。如需進一步了解資訊,請參閱 Lambda SnapStart 文件

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

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

與所有 Lambda 函數一樣,持續時間費用適用於 SnapStart 函數。對於使用 SnapStart 的函數,持續時間包括執行時期載入所需的時間、執行時期勾點中執行的任何程式碼,以及建立快照副本以提供彈性時執行的初始化程式碼。

使用適用於 Python 和 .NET 的 Lambda SnapStart,只要函數處於作用中的狀態,函數快照就會保持作用中的狀態。若是 Java 函數,如果與發佈函數關聯的快照保持非作用中狀態超過 14 天,則會到期。

依預設,快照使用 Lambda 服務擁有和管理的客戶的不重複 AWS Key Management Service (KMS) 金鑰進行加密。客戶還可以使用客戶擁有和管理的 KMS 金鑰來加密快照。

Lambda SnapStart 允許的最長初始化持續時間與您為函數設定的執行逾時持續時間相符。函數的最大可設定執行超時限制為 15 分鐘。

佈建並行

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

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

你不必變更程式碼,就能使用佈建並行。此功能可無縫配合所有現有函數和執行階段使用。使用佈建並行時,Lambda 的叫用和執行模式並未改變。

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

佈建並行很適合用於建立對延遲敏感的應用程式,例如 Web 或行動後端、同步叫用 API,以及互動式微型服務。您可以根據應用程式獨特的需求,輕鬆配置適當的並行量。您可以增加高需求時段內的並行量,並在需求降低時減少並行量,或完全關閉並行。
如果函數並行達到配置的程度,後續的函數叫用就會符合一般 Lambda 函數的延遲和擴展特性。您可以將函數限制為僅向上擴展至配置的程度。這樣做可避免函數超出佈建並行的配置程度。此機制可避免在需求超出預期量時,應用程式內出現不樂見的變化。

由 Graviton2 處理器驅動的 AWS Lambda 函數

AWS Lambda 可讓您在 x86 或 Arm 處理器上執行您的函數。AWS Graviton2 處理器是由 Amazon Web Services 使用 64 位元 Arm Neoverse 核心所量身打造,以針對雲端工作負載提供提升的性價比。客戶可獲得與 AWS Lambda 相同的優勢,無需佈建或管理伺服器即可執行程式碼、自動擴展、高可用性,並且只需為取用的資源付費。
由 Graviton2 驅動的 AWS Lambda 函數使用 AWS 設計的 Arm 處理器架構,相較於在 x86 處理器上執行的函數,其各種無伺服器工作負載 (例如 Web 和行動後端) 提供高達 34% 的性價比、資料和串流處理。憑藉更低的延遲、高達 19% 的效能提升、20% 的成本降低,以及 AWS 目前可用的最高能效,Graviton2 函數可為任務關鍵型無伺服器應用程式提供動力。客戶可以針對 Graviton2 處理器設定現有函數和新函數。他們可將在 Graviton2 上執行的函數部署為 zip 檔案或容器映像。
您可以將函數的架構標誌設定為 ‘arm64’,透過 AWS 管理主控台、AWS Lambda API、AWS CLI 和 AWS CloudFormation 將函數設定為在 Graviton2 上執行。
以 x86 和 Arm 為基礎的函數之間沒有變化。只需透過 AWS 管理主控台、zip 檔案或容器映像上傳您的程式碼,AWS Lambda 即會在觸發時自動執行程式碼,而無需您佈建或管理基礎架構。
應用程式可包含在兩種架構上執行的函數。AWS Lambda 可讓您變更函數目前版本的架構 (‘x86_64’ 或 ‘arm64’)。一旦建立函數的特定版本,就無法變更架構。

Python、Java 和 Node 等解釋性語言通常不需要重新編譯,除非您的程式碼引用了使用架構特定元件的庫。在這些情況下,您需要提供針對 arm64 的庫。如需詳細資訊,請參閱開始使用 AWS Graviton 頁面。非解釋性語言需要將程式碼編譯為針對 arm64。雖然更現代化的編譯器將為 arm64 產生編譯程式碼,但您需要將其部署至以 arm 為基礎的環境中進行測試。若要進一步了解如何將 Lambda 函數與 Graviton2 結合使用,請參閱文件

否。每個函數版本只能使用一個容器映像。
是。層和延伸可針對 “x86_64” 或 “arm64” 相容架構。函數和層的預設架構為 “x86_64”。

在發佈時,客戶可使用 Python、Node.js、Java、Ruby、.Net Core、自訂執行時間 (provided.al2) 和 OCI Base 映像。若要進一步了解,請參閱 AWS Lambda 執行階段

相較於以 x86 為基礎的 Lambda 函數,由 AWS Graviton2 處理器驅動的 AWS Lambda 函數可便宜 20%。Lambda 免費方案適用於由 x86 和 Arm 架構驅動的 AWS Lambda 函數。

每個工作負載都是獨一無二的,建議客戶測試其函數,以確定能否看到性價比改進。為此,我們建議使用 AWS Lambda Power Tuning 工具。建議在測試您的工作負載以提高潛在的性價比時,從 Web 和行動後端、資料和串流處理開始。

Amazon EFS for AWS Lambda

使用 Amazon Elastic File System (Amazon EFS) for AWS Lambda,無論規模為何,客戶都能安全地讀取、寫入和保留大量資料,其採用的全受管彈性 NFS 檔案系統可隨需擴展,無須進行佈建或管理容量。過去,開發人員要在函數新增程式碼,將資料從 S3 或資料庫下載到本機臨時儲存,限制為 512 MB。使用 EFS for Lambda,開發人員不需要撰寫程式碼將資料下載到臨時儲存體來進行處理。

開發人員可以使用主控台、CLI 或 SDK,透過 EFS Access Point 輕鬆將現有 EFS 檔案系統連線至 Lambda 函數。首次叫用函數時,檔案系統將自動掛載並供函數程式碼使用。您可以參閱文件以進一步了解。

是。Amazon EFS 的掛載目標與 VPC 中的子網路相關。必須設定 AWS Lambda 函數才能存取該 VPC。
EFS for Lambda 非常適合用來建置機器學習應用程式或載入大型參考檔或模型、處理或備份大量資料、託管 Web 內容,或開發內部建立的系統。客戶還可以使用 EFS for Lambda 在 Step Functions 工作流程的有狀態微型服務架構中保留叫用之間的狀態,或者在無伺服器應用程式與執行個體或容器型應用程式之間共用檔案。
是。傳輸資料加密使用產業標準的 Transport Layer Security (TLS) 1.2 來加密 AWS Lambda 函數與 Amazon EFS 檔案系統間傳送的資料。
客戶可以佈建 Amazon EFS 進行靜態加密。靜態加密資料會在寫入時通透加密,並在讀取時通透解密,因此不需要修改您的應用程式。加密金鑰由 AWS Key Management Service (KMS) 管理,因此無須建置與維護安全金鑰管理基礎設施。

使用 Amazon EFS for AWS Lambda 無須額外付費。客戶只需支付 AWS Lambda 和 Amazon EFS 標準價格。在相同可用區域中使用 Lambda 和 EFS 時,不會向客戶收取資料傳輸費用。但是,如果他們使用 VPC 對等進行跨帳戶存取,則會產生資料傳輸費用。若要進一步了解,請參閱定價

否。每個 Lambda 函數只能存取一個 EFS 檔案系統。
是。Amazon EFS 支援 Lambda 函數、ECS 與 Fargate 容器和 EC2 執行個體。您可以共用相同檔案系統並使用 IAM 政策和存取點來控制每個函數、容器或執行個體可存取的項目。 

Lambda 函數 URL

是。可以使用函數 URL 設定 Lambda 函數,這是一個內建的 HTTPS 端點,可以使用瀏覽器、curl 和任何 HTTP 用戶端進行叫用。函數 URL 是一種開始建置 HTTPS 可存取函數的簡單方法。

您可以透過 AWS 管理主控台、AWS Lambda API、AWS CLI、AWS CloudFormation 和 AWS Serverless Application Model 來設定函數 URL。可以在您函數的 $LATEST 非限定版本或任何函數別名上啟用函數 URL。若要進一步了解設定函數 URL,請參閱文件

依預設,Lambda 函數 URL 受 IAM 授權保護。您可以選擇停用 IAM 授權以建立公有端點,或計劃實作自訂授權作為函數商業邏輯的一部分。
您可以透過導覽至 Lambda URL,使用 HTTP 庫從用戶端應用程式的程式碼,或使用 curl 從命令列,從 Web 瀏覽器輕鬆叫用您的函數。

是。可以在函數或函數別名上啟用 Lambda 函數 URL。如果未指定別名,依預設,URL 會指向 $LATEST。函數 URL 不能針對個別函數版本。

函數 URL 目前不支援自訂網域名稱。您可以建立 Amazon CloudFront 分佈和 CNAME,將自訂網域對應至 CloudFront 分佈名稱,以搭配函數 URL 使用自訂網域。然後,將要路由至函數 URL 的 CloudFront 分佈網域名稱對應為來源。
是,函數 URL 可用於叫用 VPC 中的 Lambda 函數。

使用函數 URL 無需額外收費。您只需支付 AWS Lambda 標準費用。若要進一步了解,請參閱 AWS Lambda 定價

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 事件的關聯以進行全球叫用。在這裡閱讀有關如何更新函數屬性的詳細資訊。

您的函數會自動觸發以回應下列 Amazon CloudFront 事件:

  • 檢視者請求 – 當網際網路上的最終使用者或裝置發出 HTTP(S) 請求給 CloudFront,且請求抵達最靠近該使用者的節點時,會發生此事件。
  • 檢視者回應 – 當節點上的 CloudFront 伺服器準備好回應發出請求的最終使用者或裝置時,會發生此事件。
  • 原始伺服器請求 – 當 CloudFront 節點伺服器的快取中尚未有請求的物件,且檢視者請求已準備好傳送到後端原始 Web 伺服器 (例如 Amazon EC2、Application Load Balancer 或 Amazon S3) 時,會發生此事件。
  • 原始伺服器回應 – 當邊緣上的 CloudFront 伺服器從後端原始 Web 伺服器收到回應時,會發生此事件。

不同之處在於 API Gateway 和 Lambda 都是區域服務。使用 Lambda@EdgeAmazon CloudFront,可讓您根據最終檢視者的位置跨多個 AWS 位置執行邏輯。

可擴展性和可用性

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 小時。
您可設定 Amazon SQS 佇列或 Amazon SNS 主題做為無效字母佇列。

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

安全和存取控制

您可以使用 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 定價頁面

以 Java 編寫的 AWS Lambda 函數

您可以使用 Maven 或 Gradle 這類標準工具編譯 Lambda 函數。您的建置程序應該與編寫依靠 AWS 開發套件的任何 Java 程式碼的建置程序相同。在原始檔案上執行 Java 編譯器工具,並在 classpath 包括 AWS 開發套件 1.9 或更新版本及轉移相依項。如需詳細資訊,請參閱我們的文件

Lambda 提供 Amazon Linux 的 openjdk 1.8 組建。

以 Node.js 編寫的 AWS Lambda 函數

是。您可以使用 NPM 套件和自訂的套件。在這裡進一步了解。

是。Lambda 的內建沙盒可讓您執行批次 (「殼層」) 指令碼、其他語言執行階段、公用程式常式以及可執行檔。在這裡進一步了解。

是。您上傳的 ZIP 檔案可包含任何靜態連結的原生模組,以及動態連結的模組,動態模組是用指向您的 Lambda 函數根目錄的根路徑編譯的。在這裡進一步了解。

是。您可以使用 Node.js 的 child_process 命令來執行包含在函數中的二進位程式碼,或任何可以從 Amazon Linux 看到函數的可執行檔。另外,還有多個包裝命令列二進位程式碼的 NPM 套件,如 node-ffmpeg。在這裡進一步了解。

若要部署以 Node.js 撰寫的 Lambda 函數,只要將 Javascript 程式碼和相依程式庫封裝成 ZIP。您可以從本機環境上傳 ZIP,或者指定 ZIP 檔案所在的 Amazon S3 位置。如需詳細資訊,請參閱我們的文件

以 Python 編寫的 AWS Lambda 函數

是。您可以使用 pip 安裝任何所需的 Python 套件。

以 C# 編寫的 AWS Lambda 函數

在 Solution Explorer 中選擇 "Publish to AWS Lambda",即可使用 Visual Studio IDE 建立 C# Lambda 函數。或者,您可以從已安裝 [# Lambda CLI 工具修補程式] 的 dotnet CLI 直接執行 "dotnet lambda publish" 命令,這會建立 C# 原始程式碼的 ZIP 檔,連同所有 NuGet 相依性及您自己的已發佈 DLL 組件,然後使用執行時間參數 "dotnetcore1.0" 自動將它上傳到 AWS Lambda。

以 PowerShell 編寫的 AWS Lambda 函數

PowerShell Lambda 部署套件是一個 ZIP 檔案,包含 PowerShell 指令碼、PowerShell 指令碼所需的 PowerShell 模組,以及託管 PowerShell Core 時所需的組件。您可以使用 AWSLambdaPSCore PowerShell 模組 (可以從 PowerShell Gallery 安裝) 建立您的 PowerShell Lambda 部署套件。

以 Go 編寫的 AWS Lambda 函數

透過 AWS CLI 或 Lambda 主控台,以 ZIP 檔案的形式上傳您的 Go 可執行成品,並選取 go1.x 執行時間即可。有了 Lambda,您就可使用 Go 的原生工具來建置及包裝程式碼。如需更多詳細資訊,請閱讀我們的文件。 

以 Ruby 編寫的 AWS Lambda 函數

要部署以 Ruby 撰寫的 Lambda 函數,請將 Ruby 程式碼和 gem 壓縮成 ZIP。您可以從本機環境上傳 ZIP,或者指定 ZIP 檔案所在的 Amazon S3 位置。

其他主題

您可以檢視這裡的受支援版本清單。

否,AWS Lambda 向該服務的所有使用者提供單一版本的作業系統和受管語言執行時間。您可以將自己的語言執行時間用在 Lambda 中。

AWS Lambda 與 AWS CloudTrail 互相整合。AWS CloudTrail 可記錄日誌檔案並將其傳送至描述帳戶 API 使用情況的 Amazon S3 儲存貯體。

您可以使用 Amazon Step Functions 來協調多個叫用的 Lambda 函數。您可以依序叫用多個 Lambda 函數,將一個函數的結果傳遞給另一個,或是並行叫用函數。如需詳細資訊,請參閱我們的文件

是,AWS Lambda 支援 Advanced Vector Extensions 2 (AVX2) 指令集。要進一步了解如何編譯應用程式程式碼,來將此指令集作為改善性能的目標,請參閱 AWS Lambda 開發人員文件。