

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

# 將 Lambda 函數匯入為元件 （主控台）
<a name="import-lambda-function-console"></a>

當您使用[AWS IoT Greengrass 主控台](https://console.aws.amazon.com/greengrass)建立 Lambda 函數元件時，您可以匯入現有的 AWS Lambda 函數，然後將其設定為建立在 Greengrass 裝置上執行的元件。

開始之前，請檢閱在 Greengrass 裝置上執行 Lambda 函數[的需求](https://docs.aws.amazon.com/greengrass/v2/developerguide/run-lambda-functions.html#run-lambda-functions-requirements)。

**Topics**
+ [

## 步驟 1：選擇要匯入的 Lambda 函數
](#import-lambda-console-choose-function)
+ [

## 步驟 2：設定 Lambda 函數參數
](#import-lambda-console-configure-function-parameters)
+ [

## 步驟 3：（選用） 指定 Lambda 函數支援的平台
](#import-lambda-console-configure-platforms)
+ [

## 步驟 4：（選用） 指定 Lambda 函數的元件相依性
](#import-lambda-console-configure-dependencies)
+ [

## 步驟 5：（選用） 在容器中執行 Lambda 函數
](#import-lambda-console-run-isolated)
+ [

## 步驟 6：建立 Lambda 函數元件
](#import-lambda-console-create-deploy)

## 步驟 1：選擇要匯入的 Lambda 函數
<a name="import-lambda-console-choose-function"></a>

1. 在[AWS IoT Greengrass 主控台](https://console.aws.amazon.com/greengrass)導覽功能表中，選擇**元件**。

1. 在**元件**頁面上，選擇**建立元件**。

1. 在**建立元件**頁面的**元件資訊**下，選擇**匯入 Lambda 函數**。

1. 在 **Lambda 函數**中，搜尋並選擇您要匯入的 Lambda 函數。

   AWS IoT Greengrass 會使用 Lambda 函數的名稱建立元件。

1. 在 **Lambda 函數版本**中，選擇要匯入的版本。您無法選擇 Lambda 別名，例如 `$LATEST`。

   AWS IoT Greengrass 會使用 Lambda 函數的 版本建立元件，做為有效的語意版本。例如，如果您的函數版本為 `3`，則元件版本會變成 `3.0.0`。

## 步驟 2：設定 Lambda 函數參數
<a name="import-lambda-console-configure-function-parameters"></a>

在**建立元件**頁面的 **Lambda 函數組態**下，設定下列參數以用於執行 Lambda 函數。

1. （選用） 新增 Lambda 函數訂閱工作訊息的事件來源清單。您可以指定事件來源，將此函數訂閱本機發佈/訂閱訊息和 AWS IoT Core MQTT 訊息。從事件來源接收訊息時，會呼叫 Lambda 函數。
**注意**  
若要將此函數訂閱其他 Lambda 函數或元件的訊息，請在部署此 Lambda 函數元件時部署[舊版訂閱路由器](legacy-subscription-router-component.md)元件。部署舊版訂閱路由器元件時，請指定 Lambda 函數使用的訂閱。

   在**事件來源**下，執行下列動作來新增事件來源：

   1. 針對您新增的每個事件來源，指定下列選項：
      + **主題** – 訂閱訊息的主題。
      + **類型** – 事件來源的類型。您可以從以下選項中選擇：
        + **本機發佈/訂閱** – 訂閱本機發佈/訂閱訊息。

          如果您使用 [Greengrass 核 v](greengrass-nucleus-component.md)2.6.0 或更新版本，以及 [Lambda Manager](lambda-manager-component.md) v2.2.5 或更新版本，則可以在指定此類型時使用**主題**中的 MQTT 主題萬用字元 (`+` 和 `#`)。
        + **AWS IoT Core MQTT** – 訂閱 AWS IoT Core MQTT 訊息。

          當您指定此類型時，您可以在**主題**中使用 MQTT 主題萬用字元 (`+` 和 `#`)。

   1. 若要新增另一個事件來源，請選擇**新增事件來源**並重複上一個步驟。若要移除事件來源，請選擇您要**移除**的事件來源旁的移除。

1. 針對**逾時 （秒）**，輸入非固定 Lambda 函數在逾時之前可執行的時間上限，以秒為單位。預設為 3 秒。

1. 針對**固定**，選擇是否固定 Lambda 函數元件。預設值為 **True**。<a name="lambda-function-lifecycle-type"></a>
   + 固定 （或長期） Lambda 函數會在 AWS IoT Greengrass 啟動時啟動，並在自己的容器中持續執行。
   + 非固定 （或隨需） Lambda 函數只會在接收工作項目時啟動，並在閒置達指定的閒置時間上限後結束。如果函數有多個工作項目，則 AWS IoT Greengrass Core 軟體會建立函數的多個執行個體。

1. （選用） **在其他參數**下，設定下列 Lambda 函數參數。
   + **狀態逾時 （秒）** – Lambda 函數元件將狀態更新傳送至 Lambda 管理員元件的間隔，以秒為單位。此參數僅適用於固定函數。預設值為 60 秒。
   + **最大佇列大小** – Lambda 函數元件的訊息佇列大小上限。Core AWS IoT Greengrass 軟體會將訊息存放在 FIFO （先進先出） 佇列中，直到可以執行 Lambda 函數來取用每個訊息為止。預設值為 1，000 則訊息。
   + **執行個體數目上限** – 非固定 Lambda 函數可同時執行的執行個體數目上限。預設值為 100 個執行個體。
   + **閒置時間上限 （秒）** – 在 AWS IoT Greengrass 核心軟體停止其程序之前，非固定 Lambda 函數可以閒置的時間上限，以秒為單位。預設值為 60 秒。
   + **編碼類型** – Lambda 函數支援的承載類型。您可以從以下選項中選擇：
     + **JSON**
     + **：二進位**

     預設值為 JSON。

1. （選用） 指定命令列引數清單，以在執行時傳遞至 Lambda 函數。

   1. 在**其他參數、程序引數**下，選擇**新增引數**。

   1. 針對您新增的每個引數，輸入您要傳遞至函數的引數。

   1. 若要移除引數，請選擇您要**移除**的引數旁的移除。

1. （選用） 指定 Lambda 函數在執行時可用的環境變數。環境變數可讓您儲存和更新組態設定，而不需要變更函數程式碼。

   1. 在**其他參數、環境變數**下，選擇**新增環境變數**。

   1. 針對您新增的每個環境變數，指定下列選項：
      + **索引鍵** – 變數名稱。
      + **值** – 此變數的預設值。

   1. 若要移除環境變數，請選擇您要**移除**的環境變數旁的移除。

## 步驟 3：（選用） 指定 Lambda 函數支援的平台
<a name="import-lambda-console-configure-platforms"></a>

所有核心裝置都有作業系統和架構的屬性。當您部署 Lambda 函數元件時， AWS IoT Greengrass Core 軟體會將您指定的平台值與核心裝置上的平台屬性進行比較，以判斷該裝置上是否支援 Lambda 函數。

**注意**  
您也可以在將 Greengrass 核元件部署至核心裝置時指定自訂平台屬性。如需詳細資訊，請參閱 [平台覆寫 Greengrass 核元件的參數](greengrass-nucleus-component.md#greengrass-nucleus-component-configuration-platform-overrides)。 [Greengrass 核](greengrass-nucleus-component.md)

在 **Lambda 函數組態下，其他參數、平台**會執行下列動作，以指定此 Lambda 函數支援的平台。

1. 針對每個平台，指定下列選項：
   + **作業系統** – 平台的作業系統名稱。目前，僅支援的值為 `linux`。
   + **架構** – 平台的處理器架構。支援的值如下：
     + `amd64`
     + `arm`
     + `aarch64`
     + `x86`

1. 若要新增另一個平台，請選擇**新增平台**並重複上一個步驟。若要移除支援的平台，請選擇您要**移除**之平台旁的移除。

## 步驟 4：（選用） 指定 Lambda 函數的元件相依性
<a name="import-lambda-console-configure-dependencies"></a>

元件相依性會識別函數使用的其他 AWS提供的元件或自訂元件。當您部署 Lambda 函數元件時，部署會包含要讓函數執行的這些相依性。

**重要**  <a name="import-v1-lambda-note"></a>
若要匯入您建立以在 AWS IoT Greengrass V1 上執行的 Lambda 函數，您必須為函數使用的功能定義個別元件相依性，例如秘密、本機陰影和串流管理員。將這些元件定義為[硬相依性](component-recipe-reference.md)，以便在相依性變更狀態時重新啟動 Lambda 函數元件。如需詳細資訊，請參閱[匯入 V1 Lambda 函數](set-up-v2-test-device.md#run-v1-lambda-functions)。

在 **Lambda 函數組態、其他參數、元件相依性**下，完成下列步驟以指定 Lambda 函數的元件相依性。

1.  選擇**新增相依性**。

1. 針對您新增的每個元件相依性，指定下列選項：
   + **元件名稱** – 元件名稱。例如，輸入 **aws.greengrass.StreamManager**以包含[串流管理員元件](stream-manager-component.md)。
   + **版本需求** – 識別此元件相依性的相容版本的 npm 樣式語意版本限制。您可以指定單一版本或一系列版本。例如，輸入 **^1.0.0** 指定此 Lambda 函數取決於串流管理員元件第一個主要版本中的任何版本。如需語意版本限制的詳細資訊，請參閱 [npm 轉換器計算器](https://semver.npmjs.com/)。
   + **類型** — 相依性的類型。您可以從以下選項中選擇：
     + **硬** – 如果相依性變更狀態，Lambda 函數元件會重新啟動。這是預設選擇。
     + **軟** – 如果相依性變更狀態，Lambda 函數元件不會重新啟動。

1. 若要移除元件相依性，請選擇元件相依性旁的**移除** 

## 步驟 5：（選用） 在容器中執行 Lambda 函數
<a name="import-lambda-console-run-isolated"></a>

根據預設，Lambda 函數會在 AWS IoT Greengrass Core 軟體內的隔離執行期環境中執行。您也可以選擇執行 Lambda 函數作為不隔離的程序 （即**無容器**模式）。

在 **Linux 程序組態**下，對於**隔離模式**，從下列選項中選擇 Lambda 函數的容器化：
+ **Greengrass 容器** – Lambda 函數會在容器中執行。這是預設選擇。
+ **無容器** – Lambda 函數執行為沒有任何隔離的程序。

如果您在容器中執行 Lambda 函數，請完成下列步驟來設定 Lambda 函數的程序組態。

1. 設定記憶體和系統資源的數量，例如磁碟區和裝置，以便可供容器使用。

   在**容器參數**下，執行下列動作。

   1. 針對**記憶體大小**，輸入您要配置給容器的記憶體大小。您可以指定記憶體大小，以 **MB** 或 **kB** 為單位。

   1. 對於**唯讀 sys 資料夾**，選擇容器是否可以從裝置`/sys`資料夾讀取資訊。預設值為 **False**。

1. （選用） 設定容器化 Lambda 函數可存取的本機磁碟區。當您定義磁碟區時， AWS IoT Greengrass 核心軟體會將來源檔案掛載到容器內的目的地。

   1. 在**磁碟區**下，選擇**新增磁碟區**。

   1. 針對您新增的每個磁碟區，指定下列選項：
      + **實體磁碟區** – 核心裝置上的來源資料夾路徑。
      + **邏輯磁碟區** – 容器中目的地資料夾的路徑。
      + **許可** – （選用） 從容器存取來源資料夾的許可。您可以從以下選項中選擇：
        + **唯讀** – Lambda 函數具有來源資料夾的唯讀存取權。這是預設選擇。
        + **讀寫** – Lambda 函數具有來源資料夾的讀寫存取權。
      + **新增群組擁有者** – （選用） 是否要將執行 Lambda 函數元件的系統群組新增為來源資料夾的擁有者。預設值為 **False**。

   1. 若要移除磁碟區，請選擇您要**移除**的磁碟區旁的移除。

1. （選用） 設定容器化 Lambda 函數可存取的本機系統裝置。

   1. 在**裝置**下，選擇**新增裝置**。

   1. 針對您新增的每個裝置，指定下列選項：
      + **掛載路徑** – 核心裝置上的系統裝置的路徑。
      + **許可** – （選用） 從容器存取系統裝置的許可。您可以從以下選項中選擇：
        + **唯讀** – Lambda 函數具有系統裝置的唯讀存取權。這是預設選擇。
        + **讀寫** – Lambda 函數具有來源資料夾的讀寫存取權。
      + **新增群組擁有者** – （選用） 是否要將執行 Lambda 函數元件的系統群組新增為系統裝置的擁有者。預設值為 **False**。

## 步驟 6：建立 Lambda 函數元件
<a name="import-lambda-console-create-deploy"></a>

設定 Lambda 函數元件的設定後，請選擇**建立**以完成建立新元件。

若要在核心裝置上執行 Lambda 函數，您可以將新元件部署至核心裝置。如需詳細資訊，請參閱[將 AWS IoT Greengrass 元件部署至裝置](manage-deployments.md)。