一般問題

問:什麼是 AWS Lambda?

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

問:什麼是無伺服器運算?

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

問:哪些事件可以觸發 AWS Lambda 函數?

請參閱我們的文件以取得事件來源的完整清單。

問:何時應該使用 AWS Lambda?何時又該使用 Amazon EC2?

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

問:AWS Lambda 支援哪些語言?

AWS Lambda 支援以 Node.js (JavaScript)、Python、Java (與 Java 8 相容) 和 C# (.NET Core) 編寫的程式碼。您的程式碼可包含現有的程式庫,甚至是原生程式庫。請閱讀我們的文件,了解如何使用 Node.jsPythonJavaC#

問:我是否能存取執行 AWS Lambda 所在的基礎設施?

否。AWS Lambda 會代您運作該運算基礎設施,允許其執行運行狀況檢查、套用安全性修補程式和執行其他例行維護。

問:AWS Lambda 如何隔離我的程式碼?

每個 AWS Lambda 函數都在其獨立的隔離環境中執行,有自己的資源和檔案系統檢視。AWS Lambda 使用與 Amazon EC2 相同的技術,在基礎設施和執行級別上提供安全性和區隔。

問:AWS Lambda 如何保護我的程式碼安全?

AWS Lambda 將程式碼儲存在 Amazon S3 中並以靜態加密。AWS Lambda 在使用您的程式碼時執行額外的完整性檢查。

問:哪些 AWS 區域可使用 AWS Lambda?

請參閱 AWS 全球基礎設施區域表

AWS Lambda 函數

問:什麼是 AWS Lambda 函數?

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

問:AWS Lambda 是否會重複使用函數執行個體?

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

問:如果我需要在磁碟上為 AWS Lambda 函數提供暫存空間,應該怎麼做?

每個 Lambda 函數在自己的 /tmp 目錄中都有 500 MB 的非持久性磁碟空間。

問:為什麼 AWS Lambda 函數必須是無狀態的?

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

問:我是否可在 AWS Lambda 函數程式碼中使用執行緒和程序?

是。AWS Lambda 可讓您使用一般的語言和作業系統功能,例如建立額外的執行緒和程序。分配給 Lambda 函數的資源 (包括記憶體、執行時間、磁碟和網路的使用),都必須透過其使用的所有執行緒/程序進行共享。您可以使用 Amazon Linux 支援的任何語言來啟動程序。

問:AWS Lambda 函數程式碼有哪些限制?

Lambda 嘗試盡可能不對一般的語言和作業系統活動施加限制,但仍有少數活動是停用的:AWS Lambda 封鎖入站網路連線、對外連線僅支援 TCP/IP 通訊端,且封鎖 ptrace (偵錯) 系統呼叫。TCP 埠 25 的流量同樣也受到封鎖,以當做反垃圾郵件的措施。

問:如何使用 Lambda 主控台建立 AWS Lambda 函數?

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

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

問:如何使用 Lambda CLI 建立 AWS Lambda 函數?

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

問:AWS Lambda 是否支援環境變數?

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

問:是否可在環境變數存放敏感資訊?

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

問:如何管理 AWS Lambda 函數?

您可以使用 AWS Lambda 主控台中的儀表板輕鬆列出、刪除、更新和監控您的 Lambda 函數。您還可以使用 AWS CLI 和 AWS 開發套件來管理您的 Lambda 函數。請瀏覽 Lambda 開發人員指南進一步了解相關資訊。

問:如何監控 AWS Lambda 函數?

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

請瀏覽故障診斷 CloudWatch 指標進一步了解相關資訊。若要使用 Lambda 內建指標,AWS Lambda 將按照標準收費。

問:如何對 AWS Lambda 函數進行故障診斷?

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

問:如何擴展 AWS Lambda 函數?

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

問:如何將運算資源指定給 AWS Lambda 函數?

在 AWS Lambda 資源模式中,您可以選擇想為函數分配的記憶體數量,並按 CPU 功率和其他資源的比例分配。例如,若是選擇 256 MB 記憶體,分配給 Lambda 函數的 CPU 功率大約是請求 128 MB 記憶體的兩倍,也是選擇 512 MB 記憶體時的一半。您可以設定記憶體大小範圍在 128 MB 到 3 GB 之間,以 64 MB 的增量遞增。

問:AWS Lambda 函數可以執行多久的時間?

對 AWS Lambda 進行的所有呼叫必須在 300 秒內完成執行。預設逾時為 3 秒,但您可以將逾時設定為 1 到 300 秒之間的任何值。

問:使用 AWS Lambda 函數如何收費?

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

問:AWS Lambda 是否支援版本控制?

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

問:上傳我的程式碼後,AWS Lambda 函數需要準備多久才能進行呼叫?

部署時間根據程式碼的大小而有所不同,但 AWS Lambda 函數一般在上傳後幾秒鐘內就能做好呼叫準備。

問:是否可使用我自己的支援程式庫版本?

是,您可以加入自己的程式庫版本 (包括 AWS 開發套件),以使用與 AWS Lambda 預設版本不同的版本。

使用 AWS Lambda 處理 AWS 事件

問:什麼是事件來源?

事件來源是 AWS 服務或開發人員建立的應用程式,用來產生可觸發 AWS Lambda 函數使其執行的事件。有些服務透過直接叫用雲端函數 (例如 Amazon S3) 向 Lambda 發佈這些事件。Lambda 也可以在未向 Lambda 發佈事件的其他服務中輪詢資源。例如,Lambda 可以從 Kinesis 串流中提取記錄並為串流中的每則訊息執行 Lambda 函數。

只要登入 Amazon S3 並使用 S3 儲存貯體通知觸發 AWS Lambda 函數,其他許多服務 (例如 AWS CloudTrail) 就可以做為事件來源。

問:哪些事件來源可用於 AWS Lambda?

請參閱我們的文件以取得事件來源的完整清單。

問:如何在 AWS Lambda 中表示事件?

事件會以事件輸入參數的形式傳輸到 Lambda 函數中。對於以批次方式到達事件的事件來源,例如 Amazon Kinesis 和 Amazon DynamoDB Streams,事件參數可以在單一呼叫中包含多個事件,這取決於您請求的批次大小。若要進一步了解 Amazon S3 事件通知的資訊,請瀏覽 Configuring Notifications for Amazon S3 Events。若要進一步了解 Amazon DynamoDB Streams,請瀏覽 DynamoDB Stream 開發人員指南。若要進一步了解如何使用 Amazon SNS 叫用 Lambda 函數,請瀏覽 Amazon SNS 開發人員指南。如需 Amazon Cognito 事件的詳細資訊,請瀏覽 Amazon Cognito。如需 AWS CloudTrail 日誌與稽核 AWS 服務 API 呼叫的詳細資訊,請參閱 AWS CloudTrail

問:如何讓 AWS Lambda 函數針對 Amazon S3 儲存貯體的變更做出回應?

您可以從 AWS Lambda 主控台中選擇一個函數,並將其與 Amazon S3 儲存貯體中的通知關聯。或者,您可以使用 Amazon S3 主控台並設定儲存貯體的通知以傳送到您的 AWS Lambda 函數。還可透過 AWS 開發套件和 CLI 提供此相同的功能。

問:如何讓 AWS Lambda 函數針對 Amazon DynamoDB 表的變更做出回應?

透過訂閱與 DynamoDB 表相關的 DynamoDB Stream 的 Lambda 函數,您可以在 DynamoDB 表更新觸發 Lambda 函數。您可以使用 Amazon DynamoDB 主控台、AWS Lambda 主控台或 Lambda 的 registerEventSource API,將 DynamoDB Stream 與 Lambda 函數建立關聯。

問:如何使用 AWS Lambda 函數處理 Amazon Kinesis 串流中的記錄?

您可以從 AWS Lambda 主控台選取一個 Lambda 函數,並將其與相同帳戶擁有的 Amazon Kinesis 串流建立關聯。還可透過 AWS 開發套件和 CLI 提供此相同的功能。

問:AWS Lambda 如何處理來自 Amazon Kinesis Streams 和 Amazon DynamoDB Streams 的資料?

傳送到您的 AWS Lambda 函數的 Amazon Kinesis 和 DynamoDB Streams 記錄,將根據碎片進行嚴格序列化。這表示如果您將兩個記錄放在同一個碎片中,Lambda 保證先透過第一個記錄成功叫用 Lambda 函數,然後再透過第二個記錄叫用。如果第一個記錄叫用逾時,或者遇到其他錯誤,Lambda 將重試直到叫用成功 (或者記錄達到 24 小時期限),才會叫用下一個記錄。無法保證不同碎片之間記錄的排序,而且每個碎片的處理是同時進行的。

問:如何使用 AWS Lambda 函數回應 Amazon Simple Notification Service (SNS) 傳送的通知?

您可以從 AWS Lambda 主控台中選擇一個函數,並將其與 Amazon SNS 主題建立關聯。還可透過 AWS 開發套件和 CLI 提供此相同的功能。

問:如何使用 AWS Lambda 函數回應 Amazon Simple Email Service (SES) 傳送的電子郵件?

您可以從 Amazon SES 主控台設定接收規則,讓 Amazon SES 將您的訊息傳送給 AWS Lambda 函數。透過 AWS 開發套件和 CLI 可使用此相同的功能。

問:如何使用 AWS Lambda 函數回應 Amazon CloudWatch 警示?

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

問:如何使用 AWS Lambda 函數回應由 Amazon Cognito 管理的使用者或裝置資料的變更?

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

問:我的應用程式如何直接觸發 AWS Lambda 函數?

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

問:叫用 AWS Lambda 函數以回應事件會有多少延遲?

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

問:如何使用 AWS 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 頁面。

問:如何透過 HTTPS 叫用 AWS Lambda 函數?

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

問:AWS Lambda 函數如何自訂發出請求的裝置與應用程式行為?

當透過 AWS Mobile SDK 進行呼叫時,AWS Lambda 函數會自動取得透過 'context' 物件來呼叫的裝置與應用程式的深入資料。

問:AWS Lambda 函數如何根據應用程式最終使用者的身分對其行為進行個人化?

當您的應用程式使用 Amazon Cognito 身分時,最終使用者可以使用各種公有登入供應商 (包括 Amazon、Facebook、Google) 和其他與 OpenID Connect 相容的服務來驗證自身。然後使用者身分便會自動加密並以 Amazon Cognito ID 的形式送給 Lambda 函數,並允許其存取 Amazon Cognito 中的使用者資料,或做為儲存的金鑰,以儲存和擷取 Amazon DynamoDB 或其他 Web 服務的資料。

問:如何使用 AWS Lambda 建立 Alexa 技術?

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 社群開發的現有無伺服器應用程式?

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

問:如何自動化無伺服器應用程式的部署?

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

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

問:如何開始建置無伺服器應用程式?

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

問:如何協調多個 AWS Lambda 函數之間的呼叫?

您可以使用 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。請瀏覽 Troubleshooting Lambda-based applications 以進一步了解。將採用 AWS X-Ray 費率。

問:AWS SAM 如何獲得授權?

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

Lambda@Edge

問:什麼是 Lambda@Edge?

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

問:如何使用 Lambda@Edge?

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

問:何時應使用 Lambda@Edge?

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

問:是否可部署現有的 Lambda 函數以進行全球叫用?

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

問:哪些 Amazon CloudFront 事件可用來觸發函數?

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

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

問:AWS Lambda@Edge 與在 Amazon API Gateway 後方使用 AWS Lambda 有何不同?

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

可擴展性和可用性

問:AWS Lambda 函數的可用性如何?

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

問:當我變更程式碼或其設定時,是否還能使用 AWS Lambda 函數?

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

問:一次可執行的 AWS Lambda 函數數量是否有限制?

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

如果您想提交請求以提高調節限制,請瀏覽我們的支援中心,按一下 "Open a new case" 並傳送提高服務限制的請求。

問:如果帳戶超出並行執行的預設節流限制,會出現什麼情況?

當超出調節限制時,同步叫用的 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 函數在處理事件時發生故障,會出現什麼情況?

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

問:如果 Lambda 函數叫用耗盡可用的政策,會發生什麼事?

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

問:哪些資源可設定為 Lambda 函數的無效字母佇列?

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

安全和存取控制

問:如何允許我的 AWS Lambda 函數存取其他 AWS 資源?

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

問:如何控制哪些 Amazon S3 儲存貯體可以呼叫哪些 AWS Lambda 函數?

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

問:如何對 AWS Lambda 函數可以輪詢哪個 Amazon DynamoDB 表或 Amazon Kinesis 串流進行控制?

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

問:是否能使用我的 AWS Lambda 函數存取 Amazon VPC 幕後的資源?

是。您可以存取 Amazon VPC 幕後的資源。

問:如何啟用和停用 Lambda 函數的 VPC 支援?

若要啟用 VPC 支援,您需要在單一 VPC 中指定一或多個子網路和安全群組做為函數組態的一部分。若要停用 VPC 支援,您需要更新函數組態並為子網路和安全群組指定一個空的清單。您可使用 AWS API、CLI 或 AWS Lambda 管理主控台變更這些設定。

問:單一 Lambda 函數是否可以存取多個 VPC?

否。Lambda 函數只能存取單一 VPC。如果指定多個子網路,它們必須位於同一個 VPC 中。您可以讓多個 VPC 建立對等關係以連接到其他 VPC。

問:VPC 中的 Lambda 函數是否也能夠存取網際網路和 AWS 服務端點?

設定要存取特定 VPC 中資源的 Lambda 函數,預設無法存取網際網路。如果您需要存取外部端點,則必須在 VPC 中建立 NAT 以轉送這個流量,並設定安全群組允許這個傳出流量。

以 Java 編寫的 AWS Lambda 函數

問:如何編譯 AWS Lambda 函數 Java 程式碼?

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

問:Lambda 用來執行函數的 JVM 環境為何?

Lambda 提供 Amazon Linux 的 openjdk 1.8 組建。

以 Node.js 編寫的 AWS Lambda 函數

問:我是否可將套件與 AWS Lambda 搭配使用?

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

問:是否可在以 Node.js 編寫的 AWS Lambda 函數中執行其他程式?

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

問:是否可將原生模組與以 Node.js 編寫的 AWS Lambda 函數搭配使用?

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

問:是否能使用以 Node.js 編寫的 AWS Lambda 執行二進位程式碼?

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

問:如何部署以 Node.js 編寫的 AWS Lambda 函數?

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

以 Python 編寫的 AWS Lambda 函數

問:我是否可將 Python 套件與 AWS Lambda 搭配使用?

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

以 C# 編寫的 AWS Lambda 函數

問:如何以 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。

其他主題

問:AWS Lambda 支援哪些版本的 Amazon Linux、Node.js、Python、JDK、.NET Core、開發套件和其他程式庫?

您可以查看這裡的受支援版本清單。

問:我是否能更改 Amazon Linux 或任何語言執行時間的版本?

否,AWS Lambda 向該服務的所有使用者提供單一版本的作業系統和語言執行時間。

問:如何記錄和稽核對 AWS Lambda API 所做的呼叫?

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

問:如何協調多個 Lambda 函數之間的呼叫?

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

進一步了解 AWS Lambda 定價

瀏覽定價頁面
準備好開始使用了嗎?
註冊
還有其他問題嗎?
聯絡我們