

支援終止通知：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)。

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

# 單元 6：存取其他 AWS 服務
<a name="module6"></a>

此進階模組會示範 AWS IoT Greengrass 核心如何與雲端中的其他 AWS 服務互動。它以[模組 5 ](module5.md)的流量光源範例為基礎，並新增 Lambda 函數來處理陰影狀態，並將摘要上傳至 Amazon DynamoDB 資料表。

![\[AWS IoT 連接到 AWS IoT Greengrass 核心，該核心連接到光源切換裝置和流量光源裝置陰影。流量光源裝置影子會連接到 Lambda 函數，該函數會連接到 DynamoDB 資料表。\]](http://docs.aws.amazon.com/zh_tw/greengrass/v1/developerguide/images/gg-get-started-089.5.png)


開始之前，請先執行 [Greengrass 裝置安裝](quick-start.md)指令碼，或確定您已完成[單元 1](module1.md) 和[單元 2](module2.md)。你也應該完成[單元 5](module5.md)。您不需要其他的元件或裝置。

此單元需約 30 分鐘完成。

**注意**  
此模組會在 DynamoDB 中建立和更新資料表。雖然大部分操作都很小，且屬於 Amazon Web Services 免費方案，但執行本模組中的一些步驟可能會導致您的帳戶產生費用。如需定價的資訊，請參閱 [DynamoDB 定價文件](https://aws.amazon.com/dynamodb/pricing/)。

**Topics**
+ [設定群組角色](config-iam-roles.md)
+ [建立並設定 Lambda 函式](create-config-lambda.md)
+ [設定訂閱](config_subs.md)
+ [測試通訊](comms-test.md)

# 設定群組角色
<a name="config-iam-roles"></a>

群組角色是您建立並連接至 Greengrass 群組的 [IAM 角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)。此角色包含部署 Lambda 函數 （和其他 AWS IoT Greengrass 功能） 用於存取 AWS 服務的許可。如需詳細資訊，請參閱[Greengrass 群組角色](group-role.md)。

您可以使用下列高階步驟，在 IAM 主控台中建立群組角色。

1. 建立允許或拒絕對一或多個資源執行動作的政策。

1. 建立使用 Greengrass 服務做為信任的實體的角色。

1. 將您的政策附加至角色。

然後，在 AWS IoT 主控台中，您將角色新增至 Greengrass 群組。

**注意**  
Greengrass 群組有一個群組角色。如果您要新增權限，可以編輯附加的政策或附加更多政策。

 

在本教學課程中，您會建立許可政策，允許在 Amazon DynamoDB 資料表上描述、建立和更新動作。接著，您要附加此政策至新的角色，並將該角色與您的 Greengrass 群組相關聯。

首先，建立客戶受管政策，在此模組中授予 Lambda 函數所需的許可。

1. 在 IAM 主控台的導覽窗格中，選擇**政策**，然後選擇**建立政策**。

1. 在 **JSON** 標籤上，用以下政策取代預留位置內容。此模組中的 Lambda 函數使用這些許可來建立和更新名為 的 DynamoDB 資料表`CarStats`。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "PermissionsForModule6",
               "Effect": "Allow",
               "Action": [
                   "dynamodb:DescribeTable",
                   "dynamodb:CreateTable",
                   "dynamodb:PutItem"
               ],
               "Resource": "arn:aws:dynamodb:*:*:table/CarStats"
           }
       ]
   }
   ```

------

1. 選擇 **Next: Tags** (下一步：標籤)，然後選擇 **Next: Review** (下一步：檢閱)。本教學課程並未使用任何標籤。

1. 在 **Name (名稱)** 中輸入 **greengrass\$1CarStats\$1Table**，然後選擇 **Create policy (建立政策)**。

    

   接著，建立一個使用此新政策的角色。

1. 在導覽窗格中，選擇**角色**，然後選擇**建立角色**。

1. 在**受信任的實體類型**下，選擇 **AWS  服務**。

1. 在**使用案例**下，**其他服務 AWS 的使用案例**選擇 **Greengrass**，選擇 **Greengrass**，然後選擇**下一步**。

1. 在**許可政策**下，選取新**greengrass\$1CarStats\$1Table**政策，然後選擇**下一步**。

1. 在**角色名稱**中，輸入 **Greengrass\$1Group\$1Role**。

1. 對於 **Description (說明)**，輸入 **Greengrass group role for connectors and user-defined Lambda functions**。

1. 選擇建**立角色**。

   現在，將該角色新增至您的 Greengrass 群組。

1. <a name="console-gg-groups"></a>在 AWS IoT 主控台導覽窗格的**管理**下，展開 **Greengrass 裝置**，然後選擇**群組 (V1)**。

1. 在 **Greengrass 群組**下，選擇您的群組。

1. 選擇**設定**，然後選擇**關聯角色**。

1. **Greengrass\$1Group\$1Role** 從角色清單中選擇，然後選擇**關聯角色**。

# 建立並設定 Lambda 函式
<a name="create-config-lambda"></a>

在此步驟中，您會建立 Lambda 函數來追蹤通過交通燈號的汽車數量。每次`GG_TrafficLight`陰影狀態變更為 時`G`，Lambda 函數都會模擬隨機傳遞的汽車數量 （從 1 到 20)。在每第三個`G`光線變更時，Lambda 函數會將基本統計資料傳送至 DynamoDB 資料表，例如最小值和最大值。

1. 在您的電腦上建立名為 `car_aggregator` 的資料夾。

1. 從 GitHub 上的 [TrafficLight](https://github.com/aws/aws-greengrass-core-sdk-python/tree/master/examples/TrafficLight) 範例資料夾中，將 `carAggregator.py` 檔案下載到 `car_aggregator` 資料夾。這是您的 Lambda 函數程式碼。
**注意**  
為了方便起見，此範例 Python 檔案會存放在 AWS IoT Greengrass 核心 SDK 儲存庫中，但不會使用 AWS IoT Greengrass 核心 SDK。

1. 如果您不是在美國東部 （維吉尼亞北部） 區域工作，請在下列行`region_name` AWS 區域 中開啟 `carAggregator.py`並變更為目前在 AWS IoT 主控台中選取的 。如需支援的 清單 AWS 區域，請參閱 [AWS IoT Greengrass](https://docs.aws.amazon.com/general/latest/gr/greengrass.html) 中的 *Amazon Web Services 一般參考*。

   ```
   dynamodb = boto3.resource('dynamodb', region_name='us-east-1')
   ```

1. 在[命令列](https://en.wikipedia.org/wiki/Command-line_interface)視窗中執行下列命令，以在 `car_aggregator` 資料夾中安裝[適用於 Python (Boto3) 的 AWS SDK](https://github.com/boto/boto3/blob/develop/README.rst)套件及其相依性。Greengrass Lambda 函數使用 AWS SDK 存取其他 AWS 服務。(Windows 平台請使用[提升權限的命令提示](https://technet.microsoft.com/en-us/library/cc947813(v=ws.10).aspx))。

   ```
   pip install boto3 -t path-to-car_aggregator-folder
   ```

   如此會產生類似如下的目錄清單：  
![\[目錄清單顯示 carAggregator.py 的螢幕擷取畫面。\]](http://docs.aws.amazon.com/zh_tw/greengrass/v1/developerguide/images/gg-get-started-095.png)

1. 將 `car_aggregator` 資料夾的內容壓縮成 `.zip` 檔案，其名為 `car_aggregator.zip`。(壓縮資料夾的內容，而非資料夾。) 這是您的 Lambda 函數部署套件。

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

   選擇**建立函數**。  
![\[Basic information (基本資訊) 區段，其中 Function name (函數名稱) 設為 GG_Car_Aggregator 和 Runtime (執行時間) 設為 Python 3.7。\]](http://docs.aws.amazon.com/zh_tw/greengrass/v1/developerguide/images/gg-get-started-095.5.png)

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. 選擇上傳，然後選擇您的`car_aggregator.zip`部署套件。然後選擇 **Save (儲存)**。

   1. <a name="lambda-console-runtime-settings-para"></a>在函數的**程式碼**索引標籤的**執行時間設定**下，選擇**編輯**，然後輸入下列值。
      + 針對**執行期**，選擇 **Python 3.7**。
      + 對於 **Handler (處理常式)**，輸入 **carAggregator.function\$1handler**。

   1. 選擇**儲存**。

1. 發佈 Lambda 函數，然後建立名為 的別名**GG\$1CarAggregator**。如需step-by-step說明，請參閱[發佈 Lambda 函數](create-lambda.md#publish-function-version)和在模組 3 （第 1 部分） 中[建立別名](create-lambda.md#create-version-alias)的步驟。

1. 在 AWS IoT 主控台中，將您剛建立的 Lambda 函數新增至您的 AWS IoT Greengrass 群組：

   1. 在群組組態頁面上，選擇 **Lambda 函數**，然後在**我的 Lambda 函數**下，選擇**新增**。

   1. 針對 **Lambda 函數**，選擇 **GG\$1Car\$1Aggregator**。

   1. 對於 **Lambda 函數版本**，選擇您發佈的版本別名。

   1. 針對 **Memory limit (記憶體限制)**，輸入 **64 MB**。

   1. 針對**固定**，選擇 **True**。

   1. 選擇**新增 Lambda 函數**。
**注意**  
您可以從舊版模組中移除其他 Lambda 函數。

# 設定訂閱
<a name="config_subs"></a>

在此步驟中，您會建立訂閱，讓 GG\$1TrafficLight 影子將更新的狀態資訊傳送至 GG\$1Car\$1Aggregator Lambda 函數。此訂閱是您在[模組 5](module5.md) 中建立訂閱的補充，在此模組中為必須。

1. 在群組組態頁面上，選擇**訂閱**索引標籤，然後選擇**新增**。

1. 在**建立訂閱**頁面上，執行下列動作：

   1. 針對**來源類型**，選擇**服務**，然後選擇**本機影子服務**。

   1. 針對**目標類型**，選擇 **Lambda 函數**，然後選擇 **GG\$1Car\$1Aggregator**。

   1. 針對 **Topic filter (主題篩選條件)**，輸入 **\$1aws/things/GG\$1TrafficLight/shadow/update/documents**。

   1. 選擇 **Create subscription** (建立訂閱)。

   此模組需要新訂閱和您在單元 5 中建立的[訂閱](config-dev-subs.md#module5-subscriptions)。

1. 請確定 Greengrass 協助程式正在執行，如 中所述[部署雲端組態到核心裝置](configs-core.md)。

1. <a name="console-actions-deploy"></a>在群組組態頁面上，選擇**部署**。

# 測試通訊
<a name="comms-test"></a>

1. 請在電腦上開啟兩個[命令列](https://en.wikipedia.org/wiki/Command-line_interface)視窗。如同[模組 5](module5.md) 所示，一個視窗用於 GG\$1Switch 用戶端裝置，另一個視窗用於 GG\$1TrafficLight 用戶端裝置。您會使用這些來執行在模組 5 中執行的相同命令。

   針對 GG\$1Switch 用戶端裝置執行下列命令：

   ```
   cd path-to-certs-folder
   python lightController.py --endpoint AWS_IOT_ENDPOINT --rootCA AmazonRootCA1.pem --cert switchCertId-certificate.pem.crt --key switchCertId-private.pem.key --thingName GG_TrafficLight --clientId GG_Switch
   ```

   針對 GG\$1TrafficLight 用戶端裝置執行下列命令：

   ```
   cd path-to-certs-folder
   python trafficLight.py --endpoint AWS_IOT_ENDPOINT --rootCA AmazonRootCA1.pem --cert lightCertId-certificate.pem.crt --key lightCertId-private.pem.key --thingName GG_TrafficLight --clientId GG_TrafficLight
   ```

   每 20 秒會切換更新陰影狀態為 G、Y 和 R，光源會顯示其新的狀態。

1. Lambda 函數的函數處理常式會在每第三個綠燈 （每三分鐘） 觸發，並建立新的 DynamoDB 記錄。在 `trafficLight.py` `lightController.py`和 執行三分鐘後，前往 AWS 管理主控台，然後開啟 DynamoDB 主控台。

1. 在 AWS 區域 功能表中選擇**美國東部 （維吉尼亞北部）。**這是 `GG_Car_Aggregator` 函數建立表格所在的區域。

1. 在導覽窗格中，選擇 **Tables (資料表)**，然後選擇 **CarStats** 資料表。

1. 選擇**檢視項目**以檢視資料表中的項目。

   您應該會看到一個具有基本統計資料的項目，在 cars 通過上 (每隔 3 分鐘)。您可能需要選擇重新整理按鈕來檢視資料表更新。

1. 如果測試不成功，您可以在 Greengrass 日誌中尋找故障診斷資訊。

   1. <a name="root-access-logs"></a>切換到根使用者和導覽至 `log` 目錄。存取 AWS IoT Greengrass 日誌需要根許可。

      ```
      sudo su
      cd /greengrass/ggc/var/log
      ```

   1. 檢查 `runtime.log` 是否有錯誤。

      ```
      cat system/runtime.log | grep 'ERROR'
      ```

   1. 檢查 Lambda 函數產生的日誌。

      ```
      cat user/region/account-id/GG_Car_Aggregator.log
      ```

      <a name="check-connection-info"></a> `lightController.py` 和 `trafficLight.py` 指令碼會將連線資訊存放在 `groupCA` 資料夾，系統會在與指令碼相同的資料夾建立這個資料夾。如果您收到連線錯誤，請確定`ggc-host`檔案中的 IP 地址符合核心的 IP 地址端點。

   如需詳細資訊，請參閱[故障診斷 AWS IoT Greengrass](gg-troubleshooting.md)。

基本教學課程至此已到尾聲。您現在應該了解 AWS IoT Greengrass 程式設計模型及其基本概念，包括 AWS IoT Greengrass 核心、群組、訂閱、用戶端裝置，以及在邊緣執行之 Lambda 函數的部署程序。

您可以刪除 DynamoDB 資料表和 Greengrass Lambda 函數和訂閱。若要停止 AWS IoT Greengrass 核心裝置與 AWS IoT 雲端之間的通訊，請在核心裝置上開啟終端機，並執行下列其中一個命令：
+ 若要關閉 AWS IoT Greengrass 核心裝置：

  ```
  sudo halt
  ```
+ 若要停止 AWS IoT Greengrass 協助程式：

  ```
  cd /greengrass/ggc/core/
  sudo ./greengrassd stop
  ```