View a markdown version of this page

修改執行階段環境 - AWS Lambda

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

修改執行階段環境

您可以使用內部延伸項目來修改執行階段程序。內部延伸項目不是單獨程序,它們會作為執行時程序的一部分執行。

Lambda 提供特定語言環境變數,您可以進行設定,以便將選項和工具新增至執行時間。Lambda 還提供包裝函數指令碼,它允許 Lambda 將執行時間啟動委派給您的指令碼。您可以建立包裝程式指令碼來自訂執行階段啟動行為。

特定語言的環境變數

Lambda 支援僅限組態的方式,可透過下列特定語言的環境變數,在函數初始化期間預先載入程式碼:

  • JAVA_TOOL_OPTIONS - 在 Java 中,Lambda 支援此環境變數,以在 Lambda 中設定其他命令列變數。此環境變數可讓您指定工具的初始化,特別是在您使用 agentlib 或 javaagent 選項啟動原生或 Java 程式設計語言代理程式時。如需詳細資訊,請參閱 JAVA_TOOL_OPTIONS 環境變數。

  • NODE_OPTIONS - 可在 Node.js 執行期中使用。

  • DOTNET_STARTUP_HOOKS - 在 .NET Core 3.1 及更高版本中,此環境變數指定了 Lambda 可以使用的組件 (dll) 的路徑。

使用特定語言的環境變數是設定啟動屬性的慣用方式。

包裝函式指令碼

您可以建立包裝函數指令碼來自訂 Lambda 函數的執行時間啟動行為。使用包裝函式指令碼,您可以設定無法透過語言特定環境變數設定的組態參數。

注意

如果包裝函式指令碼未成功啟動執行時間程序,呼叫可能會失敗。

所有原生 Lambda 執行期均支援包裝程式指令碼。僅限作業系統的執行期 (provided 執行期系列) 不支援包裝程式指令碼。

當您為函數使用包裝函數指令碼時,Lambda 會使用您的指令碼啟動執行時間。Lambda 會向您的指令碼傳送解譯器的路徑,以及標準執行時間啟動的所有原始引數。您的指令碼可以延伸或轉換程式的啟動行為。例如,指令碼可以插入和更改引數、設定環境變數,或擷取指標、錯誤和其他診斷資訊。

您可以透過將 AWS_LAMBDA_EXEC_WRAPPER 環境變數的值設定為可執行二進位檔案或指令碼的檔案系統路徑來指定指令碼。

範例:建立包裝函數指令碼並用作 Lambda 層

在下面的例子中,您建立一個包裝函式指令碼來啟動與 -X importtime 選項的 Python 解譯器。當您執行函數時,Lambda 會產生日誌項目,以顯示每個匯入的匯入持續時間。

若要建立包裝函數指令碼並用作層
  1. 建立層的目錄:

    mkdir -p python-wrapper-layer/bin cd python-wrapper-layer/bin
  2. 在 bin 目錄中,將下列程式碼貼到名為 importtime_wrapper 的新檔案中。這是包裝函數指令碼。

    #!/bin/bash # the path to the interpreter and all of the originally intended arguments args=("$@") # the extra options to pass to the interpreter extra_args=("-X" "importtime") # insert the extra options args=("${args[@]:0:$#-1}" "${extra_args[@]}" "${args[@]: -1}") # start the runtime with the extra options exec "${args[@]}"
  3. 給予指令碼可執行的許可:

    chmod +x importtime_wrapper
  4. 為層建立 .zip 檔案:

    cd .. zip -r ../python-wrapper-layer.zip .
  5. 確認 .zip 檔案具有下列目錄結構:

    python-wrapper-layer.zip
    └ bin
        └ importtime_wrapper
  6. 使用 .zip 套件建立層。

  7. 使用 Lambda 主控台建立函數。

    1. 開啟 Lambda 主控台。

    2. 選擇建立函數。

    3. 在 函數名稱 中輸入文字。

    4. 針對執行時期,選擇最新支援的 Python 執行時期。

    5. 選擇建立函數。

  8. 將圖層新增到您的函式中。

    1. 選擇您的函數,然後選擇程式碼索引標籤 (如果尚未選取)。

    2. 向下捲動至層區段,然後選擇新增層。

    3. 針對層來源,選取自訂層,然後從自訂層下拉式清單中選擇您的層。

    4. 對於版本,選擇 1。

    5. 選擇新增。

  9. 新增包裝函數環境變數。

    1. 選擇組態索引標籤,然後選擇環境變數。

    2. 在 Environment variables (環境變數) 下,選擇 Edit (編輯)。

    3. 選擇 Add environment variable (新增環境變數)。

    4. 在 Key (索引鍵) 欄位,輸入 AWS_LAMBDA_EXEC_WRAPPER。

    5. 針對值,輸入 /opt/bin/importtime_wrapper (/opt/ + .zip 層的資料夾結構)。

    6. 選擇儲存。

  10. 測試包裝函數指令碼。

    1. 選擇測試標籤。

    2. 在測試事件下,選擇測試。您不需要建立測試事件 - 預設事件可運作。

    3. 向下捲動至日誌輸出。因為您的包裝函式指令碼使用 -X importtime 選項啟動 Python 解譯器,所以日誌會顯示每次導入所需的時間。例如:

      532 |           collections
      import time:        63 |         63 |           _functools
      import time:      1053 |       3646 |         functools
      import time:      2163 |       7499 |       enum
      import time:       100 |        100 |         _sre
      import time:       446 |        446 |           re._constants
      import time:       691 |       1136 |         re._parser
      import time:       378 |        378 |         re._casefix
      import time:       670 |       2283 |       re._compiler
      import time:       416 |        416 |       copyreg