

支援終止通知：2026 年 10 月 7 日 AWS 將停止 的支援 AWS IoT Greengrass Version 1。2026 年 10 月 7 日之後，您將無法再存取 AWS IoT Greengrass V1 資源。如需詳細資訊，請造訪[從 遷移 AWS IoT Greengrass Version 1](https://docs.aws.amazon.com/greengrass/v2/developerguide/migrate-from-v1.html)。

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

# 建立和封裝 Lambda 函數
<a name="create-lambda"></a>

本模組中的範例 Python Lambda 函數使用適用於 Python [AWS IoT Greengrass 的核心 SDK](lambda-functions.md#lambda-sdks-core) 來發佈 MQTT 訊息。

在此步驟中，您：
+ 將適用於 Python AWS IoT Greengrass 的核心 SDK 下載到您的電腦 （而非 AWS IoT Greengrass 核心裝置）。
+ 建立包含函數程式碼和相依性的 Lambda 函數部署套件。
+ 使用 Lambda 主控台建立 Lambda 函數並上傳部署套件。
+ 發佈 Lambda 函數的版本，並建立指向該版本的別名。

您必須將 Python 3.7 安裝在核心裝置上，才能完成此單元。

 <a name="create-lambda-procedure"></a>

1. <a name="download-ggc-sdk"></a> 從[AWS IoT Greengrass 核心開發套件](what-is-gg.md#gg-core-sdk-download)下載頁面，將適用於 Python 的 AWS IoT Greengrass 核心開發套件下載至您的電腦。

1. 解壓縮下載的套件，以取得 Lambda 函數程式碼和 SDK。

   此模組中的 Lambda 函數使用：
   + `examples\HelloWorld` 中的 `greengrassHelloWorld.py` 檔案。這是您的 Lambda 函數程式碼。每隔五秒鐘，函數便會從可能發佈的訊息中二選一發佈給 `hello/world` 主題。
   + `greengrasssdk` 資料夾。此為軟體開發套件。

1. 將 `greengrasssdk` 資料夾複製到包含 `greengrassHelloWorld.py` 的 `HelloWorld` 資料夾中。

1. 若要建立 Lambda 函數部署套件，請將 `greengrassHelloWorld.py`和 `greengrasssdk` 資料夾儲存至名為 的壓縮`zip`檔案`hello_world_python_lambda.zip`。`py` 檔案和 `greengrasssdk` 資料夾必須為在目錄的根內。  
![\[螢幕擷取畫面顯示 hello_word_python_lambda.zip 的壓縮內容。\]](http://docs.aws.amazon.com/zh_tw/greengrass/v1/developerguide/images/gg-get-started-017.png)

   在 UNIX 式系統 (包括 Mac 終端機) 上，可使用以下命令來封裝檔案和資料夾：

   ```
   zip -r hello_world_python_lambda.zip greengrasssdk greengrassHelloWorld.py
   ```
**注意**  
取決於您的發行版本，您可能需要先安裝 `zip` (例如透過執行 `sudo apt-get install zip`)。適用於您發行版本的安裝命令可能會有所不同。

   現在您已準備好建立 Lambda 函數並上傳部署套件。

1. 開啟 Lambda 主控台，然後選擇**建立函數**。

1. 選擇**從頭開始撰寫**。

1. 將您的函數命名為 **Greengrass\$1HelloWorld**，並將其餘的欄位設定如下：
   + 針對**執行期**，選擇 **Python 3.7**。
   + 對於**許可**，請保留預設設定。這會建立授予基本 Lambda 許可的執行角色。不會使用此角色 AWS IoT Greengrass。

   選擇 **Create function (建立函數)**。

1. 上傳您的 Lambda 函數部署套件：

   1. <a name="lambda-console-upload"></a>在**程式碼**索引標籤的**程式碼來源**下，選擇**從中上傳**。從下拉式清單中選擇 **.zip 檔案**。  
![\[從下拉式清單上傳，並反白顯示 .zip 檔案。\]](http://docs.aws.amazon.com/zh_tw/greengrass/v1/developerguide/images/lra-console/upload-deployment-package.png)

   1. 選擇**上傳**，然後選擇您的`hello_world_python_lambda.zip`部署套件。然後選擇 **Save (儲存)**。

   1. <a name="lambda-console-runtime-settings-para"></a>在函數的**程式碼**索引標籤的**執行時間設定**下，選擇**編輯**，然後輸入下列值。
      + 針對**執行期**，選擇 **Python 3.7**。
      + 對於 **Handler (處理常式)**，輸入 **greengrassHelloWorld.function\$1handler**。  
![\[「執行時間設定」區段，其中「執行時間」欄位設定為「Python 3.7」，而「Handler」欄位設定為「greengrassHelloWorld.function_handler".\]](http://docs.aws.amazon.com/zh_tw/greengrass/v1/developerguide/images/gg-get-started-023-2.png)

   1. <a name="lambda-console-save-config"></a>選擇 **Save** (儲存)。
**注意**  
 AWS Lambda 主控台上的**測試**按鈕不適用於此函數。 AWS IoT Greengrass 核心 SDK 不包含在 AWS Lambda 主控台中獨立執行 Greengrass Lambda 函數所需的模組。這些模組 （例如 `greengrass_common`) 會在部署到您的 Greengrass 核心之後提供給函數。

1. <a name="publish-function-version"></a>發佈 Lambda 函數：

   1. 從頁面頂端**的動作**選單中，選擇**發佈新版本**。  
![\[[操作] 功能表的螢幕擷取畫面反白顯示 [發行新版本]。\]](http://docs.aws.amazon.com/zh_tw/greengrass/v1/developerguide/images/gg-get-started-026.png)

   1. 針對 **Version description (版本描述)**，輸入 **First version**，然後選擇 **Publish (發佈)**。  
![\[螢幕擷取畫面的 [版本描述] 欄位設反白顯示 [第一個版本]和 [發佈] 按鈕。\]](http://docs.aws.amazon.com/zh_tw/greengrass/v1/developerguide/images/gg-get-started-027.png)

1. <a name="create-version-alias"></a>建立 Lambda 函數[版本的](https://docs.aws.amazon.com/lambda/latest/dg/versioning-aliases.html)[別名](https://docs.aws.amazon.com/lambda/latest/dg/configuration-aliases.html)：
**注意**  
Greengrass 群組可以依別名 （建議） 或版本參考 Lambda 函數。使用別名可讓您更輕鬆地管理程式碼更新，因為您不必在更新函數程式碼時變更訂閱資料表或群組定義。反之，您只需將別名指向新的函數版本。

   1. 從頁面頂端**的動作**選單中，選擇**建立別名**。  
![\[[操作] 功能表的螢幕擷取畫面設為 [建立別名]\]](http://docs.aws.amazon.com/zh_tw/greengrass/v1/developerguide/images/gg-get-started-028.png)

   1. 命名別名 **GG\$1HelloWorld**，將版本設定為 **1**（對應至您剛發佈的版本），然後選擇**儲存**。
**注意**  
AWS IoT Greengrass 不支援 **\$1LATEST** 版本的 Lambda 別名。

         
![\[建立名稱欄位設定為 GG_HelloWorld 且版本欄位設定為 1 的新別名的螢幕擷取畫面。\]](http://docs.aws.amazon.com/zh_tw/greengrass/v1/developerguide/images/gg-get-started-029.png)