【 Cloud 】透過 Azure Kubernetes Service 將 Azure IoT Hub 所接收到的數據存入 Azure Digital Twins 再透過 Azure Event Hub 將警示資訊傳送到 Azure Indoor Map

【 Cloud 】透過 Azure Kubernetes Service 將 Azure IoT Hub 所接收到的數據存入 Azure Digital Twins 再透過 Azure Event Hub 將警示資訊傳送到 Azure Indoor Map
Photo by Colin Watts / Unsplash

學習目標

  • 如何透過 Azure Kubernetes ServiceAzure IoT Hub 所接收到的數據存入 Azure Digital Twins 再透過 Azure Event Hub 將警示資訊傳送到 Azure Indoor Map

前置準備作業

流程

---2022-02-23---7.44.49

  1. 建立 Azure Maps Accounts Service
  2. 透過 Creator 建立 Azure Indoor Map
  3. 建立 Feature State
  4. 透過 Azure Maps Indoor Maps module 取得 Feature ID
  5. 建立 Azure Digital Twin Service
  6. 透過 Azure Digital Twins Explorer 上傳 DTDL 到 Azure Digital Twins
  7. 透過 Azure Digital Twins Explorer 建立 Twin 並初始化 Temperature 為 168
  8. 建立 Azure IoT Hub 與 Device ID 並取得 Device Connection String
  9. 將程式透過 Azure Container Registry 部署到 Azure Kubernetes Service 以將 Azure IoT Hub 所取得的數據傳到 Azure Digital Twin
  10. 建立與設定 Azure Event Hub
  11. 將程式透過 Azure Container Registry 部署到 Azure Kubernetes Service 以將 Azure Digital Twins 的警示資訊傳送到 Azure Indoor Map
  12. 在 Azure Digital Twins 中建立 Endpoint 讓 Event Hub 連結至 Azure Digital Twins,再建立 Event Route 將對應的更新事件傳送至 Endpoint
  13. 撰寫隨機產生溫度數據的程式並將數據傳送到 Azure IoT Hub
  14. 透過 Azure Digital Twins Explorer 查看所建立的 Twin 裡的 Temperature 是否有更新
  15. 透過 Azure Maps Indoor Maps module 查看所對應的 Feature ID 是否有更新

目錄結構

  • 本範例目錄結構如下
└── aks-deploy-adt-map
    ├── adt_to_map
    │   ├── app.js
    │   ├── package-lock.json
    │   └── package.json
    ├── docker-manifests
    │   ├── Dockerfile-ADT-To-Map
    │   └── Dockerfile-Hub-To-ADT
    ├── hub_to_adt
    │   ├── adtService.js
    │   ├── app.js
    │   ├── package-lock.json
    │   └── package.json
    ├── kube-manifests
    │   ├── 01-Deployment-Hub-To-Adt.yml
    │   └── 02-Deployment-Adt-To-Map.yml
    └── pnp
        ├── package-lock.json
        ├── package.json
        └── send.js

建立 Azure Maps Service

Step 1. 登入到 Azure

  • 請在終端機輸入下方指令
    az login
    

Step 2. 建立 Azure 資源群組

  • 請在終端機輸入下方指令
    az group create --name ResourceGroupName --location Region
    
    • 修改指令中的 ResourceGroupName 成唯一且可識別的名稱。

    • 修改指令中的 Region 請輸入資源部署於何處。

      • 可輸入 az account list-locations -o table 指令查看可用區域
    • 本範例使用指令如下

      az group create --name adtToMap --location eastus2
      

      ---2022-02-22---11.11.11


Step 3. 建立 Azure Maps Account

  • 請在終端機輸入下方指令
    az maps account create --kind Gen2 --account-name MapAccountName --resource-group ResourceGroupName --sku G2
    
    • 修改指令中的 MapAccountName 成唯一且可識別的名稱。

    • 修改指令中的 ResourceGroupNameStep 2 的名稱。

    • 本範例使用指令如下

      az maps account create --kind Gen2 --account-name adtToMap --resource-group adtToMap --sku G2
      

      ---2022-02-22---11.12.48


Step 4. 建立 Creator

  • 請在終端機輸入下方指令

    az maps creator create --location eastus2 --storage-units 1 --account-name MapAccountName --creator-name CreatorName --resource-group ResourceGroupName
    
    • 修改指令中的 MapAccountNameStep 3 的名稱。

    • 修改指令中的 CreatorName 成唯一且可識別的名稱。

    • 修改指令中的 ResourceGroupNameStep 2 的名稱。

    • 本範例使用指令如下

      az maps creator create --location eastus2 --storage-units 1 --account-name adtToMap --creator-name adtToMapCreator --resource-group adtToMap
      

      ---2022-02-22---11.14.48


Step 5. 取得 Azure Map Primary Key

  • 請在終端機輸入下方指令
    az maps account keys list --name MapAccountName --resource-group ResourceGroupName
    
    • 修改指令中的 MapAccountNameStep 3 的名稱。

    • 修改指令中的 ResourceGroupNameStep 2 的名稱。

    • 本範例使用指令如下

      az maps account keys list --name adtToMap --resource-group adtToMap
      

      ---2022-02-22---11.15.52

透過 Creator 建立 Azure Indoor Map

Step 1. 請透過下方教學網頁的步驟取得 Conversion IDDataset IDTileset ID


Step 2. 本範例執行完 Step 1 的結果如下

---2022-02-22---11.26.06

建立 Feature State

Step 1. 設定 Style 樣式

  • 在本地端電腦建立 Number-Style-Rules.json 的檔案並輸入以下內容
    • Number-Style-Rules.json 設定檔說明

      • Style 的名稱設定為 temperature01type 設為 number,其數值的範圍與對應的顏色設定如下 :
      Temperature 顏色
      0 ~ 19 紅色 ( #e71313 )
      20 ~ 39 藍色 ( #3f0feb )

Step 2. 透過瀏覽器開啟設定頁面


Step 3. 輸入相關資訊

---2021-12-23---9.20.07

  • Azure Map Primary Key 欄位請輸入 建立 Azure Maps Service 段落中 Step 5 所取得的 Azure Map Primary Key
  • Dataset ID 欄位請輸入 透過 Creator 建立 Azure Indoor Map 段落中 Step 1 所取得 Dataset ID
  • 點選 匯入 JSON 按鈕選擇 Step 1 的檔案

Step 4. 設定 Style

  • 點選 設定 Style 按鈕

---2021-12-23---9.31.05

  • 執行完結果
    • 請紀錄 Stateset ID 的結果值

---2022-02-22---11.29.05

透過 Azure Maps Indoor Maps module 取得 Feature ID

Step 1. 透過瀏覽器開啟執行頁面

網址為 https://archerhuang.github.io/Azure-Indoor-Map-Tools/Indoor-Map/


Step 2. 輸入相關資訊

---2021-12-23---9.39.32

  • Azure Map Primary Key 欄位請輸入 建立 Azure Maps Service 段落中 Step 5 所取得的 Azure Map Primary Key
  • Tileset ID 欄位請輸入 透過 Creator 建立 Azure Indoor Map 段落中 Step 1 所取得 Tileset ID
  • Stateset ID 欄位請輸入 建立 Feature State 段落中 Step 4 所取得 Stateset ID
  • 當輸入完成後點選 顯示 Map 按鈕

---2022-02-22---11.33.08


Step 3. 顯示 Map 結果

  • 結果顯示

---2021-12-23---9.41.27

  • 請 Zoom In 地圖
    • 點選各房間可取得對應的 Feature ID,本範例點選左上角的房間以取得對應的 Feature IDUNIT61

---2021-12-23---9.42.40

建立 Azure Digital Twin Service

Step 1. 開啟 Azure Digital Twin

  • 在上方搜尋框輸入 digital twin 並點選下方 Azure Digital Twins 的搜尋結果

---2021-12-23---9.45.42-1


Step 2. 建立 Azure Digital Twin

  • 點選左上角的 + Create

---2021-12-23---9.47.30


Step 3. 輸入相關資訊

---2021-12-23---9.48.45

  • Subscription 欄位選擇所要使用的訂閱。
  • Resource group 欄位輸入此 Digital Twins 所要歸屬的群組。
  • Resource Name 欄位輸入一個可識別的名稱,本範例使用 adtToMap
  • Region 欄位請選擇 Digital Twins 服務所要位於的資料中心。
  • 勾選 Assign Azure Digital Twins Data Owner Role 欄位。
  • 當輸入完成後點選 Review + create

---2021-12-23---9.50.53


Step 4. 建立服務

  • 確認資訊正確則點選 Create

---2021-12-23---9.51.48


Step 5. 點選 Go to resource

---2021-12-23---9.53.10


Step 6. 取得 Host name

---2021-12-23---9.54.16

透過 Azure Digital Twins Explorer 上傳 DTDL 到 Azure Digital Twins

Step 1. 在本地端電腦建立 device.json 的 DTDL 檔案並填入下方資料


Step 2. 開啟 Azure Digital Twins Explorer

  • 點選所建立的 Azure Digital Twins > 再點選 Overview > 點選上方的 Open Azure Digital Twins Explorer (preview)

---2021-12-23---9.59.39

  • 如開啟 Azure Digital Twins Explorer 出現 RestError: Unauthorizedright permissions 的錯誤訊息,請稍後幾分鐘再重新點選 Azure Digital Twins Explorer

---2021-12-24---7.30.27
---2021-12-24---8.01.38

  • 如過幾分鐘後點選 Azure Digital Twins Explorer 還是出現上述問題,請確認 Azure Digital Twins Data Owner 是否有指派
    • 點選左側的 Access control (IAM) > 再點選 Check access 頁籤 > 再點選 View my access > 確認 Role 中是否有指派 Azure Digital Twins Data Owner 角色

---2021-12-24---7.34.18

  • 如未指派 Azure Digital Twins Data Owner 角色
    • 點選左側的 Access control (IAM) > 再點選 Add role assignment
      ---2021-12-24---7.46.12

    • 點選 Azure Digital Twins Data Owner > 再點選 Next
      ---2021-12-24---7.47.46

    • Assign access to 欄位點選 User, group, or service principalMembers 欄位點選 + Select members,並選擇成員後點選 Select
      ---2021-12-24---7.48.46
      ---2021-12-24---7.54.31
      ---2021-12-24---7.55.24

    • 以上資訊輸入完成後點選 Review + assign
      ---2021-12-24---7.56.49
      ---2021-12-24---8.03.26

    • 再次確認 Azure Digital Twins Data Owner 角色

      • 點選左側的 Access control (IAM) > 再點選 Check access 頁籤 > 再點選 View my access > 確認 Role 中是否有指派 Azure Digital Twins Data Owner 角色
        ---2021-12-24---7.34.18
    • 指定 Azure Digital Twins Data Owner 角色完再稍後幾分鐘重新點選 Azure Digital Twins Explorer 即可正常使用。


Step 3. 上傳 DTDL

  • 點選 Upload a Model 按鈕

---2021-12-23---10.04.44

  • 選擇 Step 1 所建立的 device.json 檔案並點選 打開

---2021-12-23---10.06.34

  • 上傳完成

---2021-12-23---10.07.07

透過 Azure Digital Twins Explorer 建立 Twin 並初始化 Temperature 為 168

Step 1. 建立 Twin

  • 點選 ... > 再點選 Create a Twin

---2021-12-23---10.08.12

  • New Twin name 欄位請輸入 透過 Azure Maps Indoor Maps module 取得 Feature ID 段落 Step 3 所取得的 Feature ID > 再點選 Save

---2021-12-23---10.09.34

---2021-12-23---10.11.50

  • 建立完成

---2021-12-23---10.12.24


Step 2. 初始化

  • 點選所建立的 Twin

---2021-12-23---10.12.24--

  • 新增初始化數字 168

---2021-12-23---10.14.10

---2021-12-23---10.15.07

  • 點選儲存按鈕

---2021-12-23---10.16.05

---2021-12-23---10.17.01

  • 初始化成功

---2021-12-23---10.17.52

建立 Azure IoT Hub、Device ID 並取得 Device Connection String

Step 1. 在上方搜尋框輸入 iot hub 關鍵字並點選 IoT Hub 的搜尋結果

---2021-11-25---3.20.00


Step 2. 點選 + Create

---2021-11-25---3.21.56


Step 3. 輸入相關資訊

---2021-11-25---3.23.09

  • Subscription 欄位選擇所要使用的訂閱。
  • Resource group 欄位輸入此 IoT Hub 所要歸屬於的群組。
  • IoT Hub Name 欄位輸入一個可識別的名稱,本範例使用 adtToMap
  • Region 欄位擇此 IoT Hub 要建置於哪個資料中心。
  • 當輸入完成後點選 Review + create

---2021-12-23---10.22.38


Step 4. 建立服務

  • 確認資訊正確則點選 Create

---2021-12-23---10.23.19


Step 5. 點選 Go to resource

---2021-12-23---10.26.30


Step 6. 取得 IoT Hub 中的 Device Connection String

  • 點選 Devices > + Add Device

---2021-12-23---10.28.22

  • 輸入相關資訊
    • Device ID 欄位請輸入 透過 Azure Maps Indoor Maps module 取得 Feature ID 段落 Step 3 所取得的 Feature ID,本範例為 UNIT61
    • 當輸入完成後點選 Save

---2021-12-23---10.30.16

  • 點選所建立的 Device

---2021-12-23---10.32.31

  • 取得 Device Connection String
    • 點選 Primary Connection String 右側的複製按鈕

---2021-12-23---10.33.21

將程式透過 Azure Container Registry 部署到 Azure Kubernetes Service 以將 Azure IoT Hub 所取得的數據傳到 Azure Digital Twin

Step 1. 取得 Azure IoT Hub 中 Event Hub 的名稱與 Event Hub 的 Connection String

  • 進入到所建立的 Azure IoT Hub > 點選左側的 Built-in endpoints
    ---2022-02-22---1.31.50
    • Event Hub-compatible name 中的值為 Event Hub名稱
    • Event Hub-compatible endpoint 中的值為 Event HubConnection String

Step 2. 進行初始化

  • 請在專案目錄中建立 hub_to_adt 資料夾並透過終端機切換路徑到 hub_to_adt 資料夾中並輸入下方指令
    npm init -y
    

Step 3. 安裝套件

  • 請在終端機輸入下方指令
    npm i @azure/event-hubs @azure/identity axios dotenv
    

Step 4. 撰寫 adtService.js 程式

  • hub_to_adt 資料夾中建立 adtService.js 檔案後再輸入以下程式

Step 5. 撰寫 app.js 程式

  • hub_to_adt 資料夾中建立 app.js 檔案後再輸入以下程式
    • 請修改 第 6 行 中的 請輸入 ADT Host name建立 Azure Digital Twin Service 段落中 Step 6 所取得的 Host name

Step 6. 在 hub_to_adt 資料夾中建立 .env 檔案

  • 請在 .env 檔案加入以下內容
    EVENTHUB_NAME="Event Hub 的名稱"
    CONSUMER_GROUP_NAME="$Default"
    EVENTHUB_CONNECTION_STRING="Event Hub 的連接字串"
    
    • 請修改上方 Event Hub 的名稱Step 1 所取得 Event Hub-compatible name 中的值。
    • 請修改上方 Event Hub 的連接字串Step 1 所取得 Event Hub-compatible endpoint 中的值。

Step 7. 在 hub_to_adt 資料夾中建立 .dockerignore 檔案

  • 請在 .dockerignore 檔案加入以下內容
    .DS_Store
    node_modules
    /dist
    

Step 8. 建立 Hub To ADTDockerfile

  • 在專案目錄中建立 docker-manifests 資料夾並在此資料夾中建立 Dockerfile-Hub-To-ADT 的檔案再輸入以下內容

Step 9. 建立 Azure Container Registry ( ACR )

  • 請在終端機輸入下方內容
    az acr create -n AcrName -g ResourceGroupName --sku SkuLevel --admin-enabled true
    
    • 請修改指令中的 AcrName 成唯一且可識別的名稱。

    • 請修改指令中的 ResourceGroupName建立 Azure Maps Service 段落中 Step 2 所建立的 Azure 資源群組。

    • 請修改指令中的 SkuLevel 為可選 BasicStandardPremium

    • 本範例使用如下

      az acr create -n containerforaks -g adtToMap --sku Basic --admin-enabled true
      

      ---2022-02-22---2.01.53


Step 10. 取得 Azure Container Registry 的 Login Server URL

  • 請在終端機輸入下方內容
    az acr list -o table -g ResourceGroupName
    
    • 請修改指令中的 ResourceGroupName建立 Azure Maps Service 段落中 Step 2 所建立的 Azure 資源群組。

    • 本範例使用如下

      az acr list -o table -g adtToMap
      

      ---2022-02-22---2.03.13


Step 11. 建立 Docker Image

  • 請在終端機切換路徑到專案目錄再輸入下方內容
    docker build -t AcrUrl/ImageName:Tag -f docker-manifests/Dockerfile-Hub-To-ADT .
    
    • 請修改指令中的 AcrUrlStep 10 所取得的 URL。

    • 請修改指令中的 ImageName 為可識別的名稱。

    • 請修改指令中的 Tag 為版號。

    • 本範例使用如下

      docker build -t containerforaks.azurecr.io/hub-to-adt:0.1 -f docker-manifests/Dockerfile-Hub-To-ADT .
      

      ---2022-02-22---2.06.12


Step 12. 查看本地端 Image

  • 請在終端機輸入下方內容

    docker images
    

    ---2022-02-22---2.07.10


Step 13. 登入到 Azure Container Registry

  • 請在終端機輸入下方內容
    az acr login --name AcrName
    
    • 請修改指令中的 AcrNameStep 9 所建立的名稱。

    • 本範例使用如下

      az acr login --name containerforaks
      

      ---2022-02-22---2.08.15


Step 14. 上傳 Image 到 Azure Container Registry

  • 請在終端機輸入下方內容
    docker push AcrUrl/ImageName:Tag
    
    • 請修改指令中的 AcrUrlStep 10 所取得的 URL。

    • 請修改指令中的 ImageNameStep 11 的名稱。

    • 請修改指令中的 TagStep 11 的版號。

    • 本範例使用如下

      docker push containerforaks.azurecr.io/hub-to-adt:0.1
      

      ---2022-02-22---2.12.11


Step 15. 查看 Azure container registry

  • 透過瀏覽器開啟 https://portal.azure.com/ 並登入成功之後於上方搜尋框輸入 container registry 再點選 Container registries 的結果

---2022-02-21---7.53.16

  • 選擇所建立的 registry

---2022-02-21---7.55.06

  • 點選左側的 Repositories

---2022-02-21---7.55.39

  • 點選所上傳的 Image

---2022-02-22---2.12.44

---2022-02-22---2.12.53


Step 16. 建立 Azure Kubernetes Service

  • 請在終端機輸入下方內容
    az aks create -g ResourceGroupName -n AksName
    
    • 請修改指令中的 ResourceGroupName建立 Azure Maps Service 段落中 Step 2 所建立的 Azure 資源群組。

    • 修改指令中的 AksName 成唯一可識別的名稱。

    • 本範例使用如下

      az aks create -g adtToMap -n aks-adt-test
      

      ---2022-02-22---3.50.28


Step 17. 取得 Azure Kubernetes Service Credential

  • 請在終端機輸入下方內容
    az aks get-credentials --resource-group ResourceGroupName --name AksName
    
    • 請修改指令中的 ResourceGroupName建立 Azure Maps Service 段落中 Step 2 所建立的 Azure 資源群組。

    • 修改指令中的 AksName 請輸入 Step 16 所建立的名稱。

    • 本範例使用如下

      az aks get-credentials --resource-group adtToMap --name aks-adt-test
      

      ---2022-02-22---3.51.46


Step 18. 設定 Azure Kubernetes Service 與 Azure Container Registry 連結

  • 請在終端機輸入下方內容
    az aks update -n AksName -g ResourceGroupName --attach-acr AcrName
    
    • 修改指令中的 AksName 請輸入 Step 16 所建立的名稱。

    • 請修改指令中的 ResourceGroupName建立 Azure Maps Service 段落中 Step 2 所建立的 Azure 資源群組。

    • 修改指令中的 AcrName 請輸入 Step 9 所建立的名稱。

    • 本範例使用如下

      az aks update -n aks-adt-test -g adtToMap --attach-acr containerforaks
      

      ---2022-02-22---3.55.25


Step 19. 建立 Deployment 的 YAML

  • 請在專案目錄中建立 kube-manifests 資料夾並在此資料夾中建立 01-Deployment-Hub-To-Adt.yml 檔案,其內容如下
    • 請修改 第 18 行 中的 AcrUrlStep 10 所取得的 URL。
    • 請修改 第 18 行 中的 ImageNameStep 11 的名稱。
    • 請修改 第 18 行 中的 TagStep 11 的版號。
    • 本範例使用如下

Step 20. 部署 Application

  • 請在終端機輸入下方內容
    kubectl apply -f kube-manifests/01-Deployment-Hub-To-Adt.yml
    

---2022-02-22---4.00.56


Step 21. 啟用 Identity

  • 在搜尋框輸入 vmss > 再點選 Virtual machine scale sets 的結果

---2022-02-22---4.02.29

  • 點選所建立的資源

---2022-02-22---4.03.52

  • 點選左側的 Identity

---2022-02-22---4.05.17

  • 點選 On > 點選上方 Save > 點選 Yes

---2022-02-22---4.08.44

---2022-02-22---4.10.17

  • 點選 Azure role assignments

---2022-02-22---4.13.04

  • 點選 + Add role assignment (Preview)

---2022-02-22---4.14.39

  • 輸入相關資訊
    ---2022-02-22---4.16.05

    • Scope 欄位請選擇使用範圍。
    • Subscription 欄位請選擇所要使用的訂閱。
    • Role 欄位請選擇 Azure Digital Twins Data Owner
    • 以上資訊選擇完成後點選 Save
      ---2022-02-22---4.17.02
  • 設定完成

---2022-02-22---4.19.09

建立與設定 Event Hub

Step 1. 建立 Event Hub

  • 在搜尋框輸入 event hub > 再點選 Event Hubs 的結果

---2022-02-22---2.28.15


  • 點選 + Create

---2022-02-22---2.29.58


  • 輸入相關資訊
    ---2022-02-22---2.32.35
  • Subscription 欄位選擇所要使用的訂閱。
  • Resource group 欄位請輸入此服務所要歸屬於的群組。
  • Namespace name 欄位請輸入一個可識別的名稱,本範例使用 k8s-adt-event-hub
  • Location 欄位請選擇服務所要位於的資料中心。
  • Pricing tier 欄位請選擇服務的等級。
  • Throughput Units 欄位請選擇所要使用的 Unit。
  • 當輸入完成後點選 Review + create。

---2022-02-22---2.35.29


  • 確認資訊正確後再點選 Create

---2022-02-22---2.36.42


  • 點選 Go to resource

---2022-02-22---2.38.23


  • 點選左側的 Event Hubs 以建立 Event Hub

---2022-02-22---2.39.58


  • 點選上方的 + Event Hub

---2022-02-22---2.41.36


  • 輸入 Event Hub 的名稱後按 Create
    • 本範例使用 adt-to-map

---2022-02-22---2.43.04


  • 建立完成畫面

---2022-02-22---2.44.22


  • 點選所建立的 Event Hub

---2022-02-22---3.07.35


  • 點選左側的 Shared access policies 再點選上方的 + Add

---2022-02-22---3.10.47


  • 輸入相關資訊
    • Policy name 欄位請輸入唯一且可識別的名稱,本範例使用 adt-to-map-policy
    • 點選 Manage
    • 以上資訊輸入完成後再點選 Create
      ---2022-02-22---3.27.41

  • 點選所建立的 Policy

---2022-02-22---3.30.55


  • 取得 Connection string–primary key

---2022-02-22---3.33.33

將程式透過 Azure Container Registry 部署到 Azure Kubernetes Service 以將 Azure Digital Twins 的警示資訊傳送到 Azure Indoor Map

Step 1. 初始化

  • 請在專案目錄中建立 adt_to_map 資料夾並透過終端機切換路徑到 adt_to_map 資料夾中並再輸入下方指令
    npm init -y
    

Step 2. 安裝套件

  • 請在終端機輸入下方指令
    npm i @azure/event-hubs axios dotenv
    

Step 3. 撰寫 app.js 程式

  • adt_to_map 資料夾中建立 app.js 檔案後再輸入以下程式
    • 請修改 第 9 行 中的 STATESET_ID建立 Feature State 段落中 Step 4 中取得的 Stateset ID
    • 請修改 第 10 行 中的 MAP_PRIMARY_KEY建立 Azure Maps Service 段落中 Step 5 取得 Azure Map Primary Key

Step 4. 在 adt_to_map 資料夾中建立 .env 檔案

  • 請在 .env 檔案加入以下內容
    EVENTHUB_NAME="Event Hub 的名稱"
    CONSUMER_GROUP_NAME="$Default"
    EVENTHUB_CONNECTION_STRING="Event Hub 的連接字串"
    
    • 請修改 Event Hub 的名稱建立與設定 Event Hub 段落中 Step 1 所建立的 Event Hub 名稱。
    • 請修改 Event Hub 的連接字串 的等號右邊輸入 建立與設定 Event Hub 段落中 Step 1 所取得的 Connection string–primary key

Step 5. 在 adt_to_map 資料夾中建立 .dockerignore 檔案

  • 請在 .dockerignore 檔案加入以下內容
    .DS_Store
    node_modules
    /dist
    

Step 6. 建立 ADT To MapDockerfile

  • docker-manifests 資料夾中建立 Dockerfile-ADT-To-Map 的檔案再輸入以下內容

Step 7. 建立 Docker Image

  • 請在終端機切換路徑到專案目錄再輸入下方內容
    docker build -t AcrUrl/ImageName:Tag -f docker-manifests/Dockerfile-Hub-To-ADT .
    
    • 請修改指令中的 AcrUrl將程式透過 Azure Container Registry 部署到 Azure Kubernetes Service 以將 Azure IoT Hub 所取得的數據傳到 Azure Digital Twin 段落中 Step 10 所取得的 URL。

    • 請修改指令中的 ImageName 為可識別的名稱。

    • 請修改指令中的 Tag 為版號。

    • 本範例使用如下

      docker build -t containerforaks.azurecr.io/adt-to-map:0.1 -f docker-manifests/Dockerfile-ADT-To-Map .
      

      ---2022-02-22---6.39.52-1


Step 8. 查看本地端 Image

  • 請在終端機輸入下方內容

    docker images
    

    ---2022-02-22---6.40.27-1


Step 9. 上傳 Image 到 Azure Container Registry

  • 請在終端機輸入下方內容
    docker push AcrUrl/ImageName:Tag
    
    • 請修改指令中的 AcrUrl將程式透過 Azure Container Registry 部署到 Azure Kubernetes Service 以將 Azure IoT Hub 所取得的數據傳到 Azure Digital Twin 段落中 Step 10 所取得的 URL。

    • 請修改指令中的 ImageNameStep 7 的名稱。

    • 請修改指令中的 TagStep 7 的版號。

    • 本範例使用如下

      docker push containerforaks.azurecr.io/adt-to-map:0.1
      

      ---2022-02-22---6.45.07-1


Step 10. 查看 Azure container registry

  • 透過瀏覽器開啟 https://portal.azure.com/ 並登入成功之後於上方搜尋框輸入 container registry 再點選 Container registries 的結果

---2022-02-21---7.53.16

  • 選擇所建立的 registry

---2022-02-21---7.55.06

  • 點選左側的 Repositories

---2022-02-21---7.55.39

  • 點選所上傳的 Image

---2022-02-22---6.45.52-1

---2022-02-22---6.46.15-1


Step 11. 建立 Deployment 的 YAML

  • 請在 kube-manifests 資料夾中建立 02-Deployment-Adt-To-Map.yml 檔案,其內容如下
    • 請修改 第 18 行 中的 AcrUrl將程式透過 Azure Container Registry 部署到 Azure Kubernetes Service 以將 Azure IoT Hub 所取得的數據傳到 Azure Digital Twin 段落中 Step 10 所取得的 URL。
    • 請修改 第 18 行 中的 ImageNameStep 7 的名稱。
    • 請修改 第 18 行 中的 TagStep 7 的版號。
    • 本範例使用如下

Step 12. 部署 Application

  • 請在終端機輸入下方內容
    kubectl apply -f kube-manifests/02-Deployment-Adt-To-Map.yml
    

---2022-02-22---6.47.06-1

在 Azure Digital Twins 中建立 Endpoint 讓 Event Hub 連結至 Azure Digital Twins,再建立 Event Route 將對應的更新事件傳送至 Endpoint

Step 1. 回到所建立的 Azure Digital Twins

---2021-12-23---1.22.57


Step 2. 建立 Endpoint

  • 點選左側的 Endpoints > 再點選上方的 + Create an endpoint

---2021-12-23---1.25.24

  • 輸入相關資訊
    • Name 輸入一個可識別的名稱
      • 本範例使用 map-endpoint
    • Endpoint type 欄位請選擇 Event Hub
    • Subscription 欄位請選擇所要使用的訂閱。
    • Event hub namespace 欄位請選擇 建立與設定 Event Hub 段落中所建立的 Namespace name
    • Event Hub 欄位請選擇 建立與設定 Event Hub 段落中所建立的 Event Hub
    • Authorization rule 欄位請選擇 建立與設定 Event Hub 段落中所建立的 Policy name
    • 以上資訊輸入完成後點選 Save

---2021-12-23---1.28.28

---2022-02-22---7.33.25

  • 建立完成

---2022-02-22---7.34.22


Step 3. 建立 Event Route

  • 點選左側的 Event routes > 再點選上方的 + Create an event route

---2021-12-23---1.32.37

  • 輸入相關資訊
    • Name 欄位請輸入一個可識別的名稱
      • 本範例使用 map-route
    • Endpoint 欄位請選擇 Step 2 所建立的 Endpoint
    • Event types 欄位請選擇 Twin Update
    • 以上資訊輸入完成後點選 Save

---2021-12-23---1.34.17

---2021-12-23---1.36.20

  • 建立完成

---2021-12-23---1.39.06

撰寫隨機產生溫度數據的傳送程式

Step 1. 初始化專案

  • 在專案目錄中建立 pnp 資料夾並在終端機中切換路徑到此資料夾再輸入下方指令
    npm init -y
    

Step 2. 安裝套件

  • 在終端機輸入下方指令
    npm i dotenv azure-iot-device-mqtt azure-iot-device
    

Step 3. 撰寫程式

  • 建立一個名為 send.js 的程式,其程式如下 :

Step 4. 於設定檔新增資訊

  • 在剛才所建的 .env 設定檔中新增下方資訊
    IOT_HUB_DEVICE_CONNECTION_STRING="Device 的連接字串"
    
    • 請修改上方的 Device 的連接字串建立 Azure IoT Hub、Device ID 並取得 Device Connection String 段落中 Step 6 取得 Device Connection String

Step 5. 執行 send.js

  • ① 開啟終端機再切換工作路徑到剛才所建立 send.js 程式的地方
  • ② 執行下方指令
    node send.js
    

---2022-02-22---7.44.13

透過 Azure Digital Twins Explorer 查看所建立的 Twin 中的 Temperature 是否有更新

Step 1. 透過 Azure Digital Twins Explorer 進行驗證

  • 點選 Azure Digital Twins Explorer 右上方的 Run Query

---2021-12-23---1.48.14

  • 查詢結果
    • Temperature 的數值已從 168 變為所上傳的數值 5

---2022-02-22---7.44.50

透過 Azure Maps Indoor Maps module 查看所對應的 Feature ID 是否有更新

Step 1. 所選定的 Feature ID 因 Temperature 的狀態變為 5 而房間顏色變成紅色

Temperature 顏色
0 ~ 19 紅色 ( #e71313 )
20 ~ 39 藍色 ( #3f0feb )

---2022-02-23---10.01.05

AKS 測試與驗證

Step 1. 查看 Pods

  • 請在終端機輸入下方內容
    kubectl get pods
    

---2022-02-23---10.02.21


Step 2. 查看 hub-to-adt 的資訊

  • 請在終端機輸入下方內容
    kubectl logs -f Pod-Name
    
    • 請修改上方指令中的 Pod-NameStep 1 所顯示 hub-to-adt 的名稱。

    • 本範例使用的指令如下

      kubectl logs -f hub-to-adt-deployment-678d458ff9-qq6v7
      

      ---2022-02-23---10.10.34


Step 3. 查看 adt-to-map 的資訊

  • 請在終端機輸入下方內容
    kubectl logs -f Pod-Name
    
    • 請修改上方指令中的 Pod-NameStep 1 所顯示 adt-to-map 的名稱。

    • 本範例使用的指令如下

      kubectl logs -f adt-to-map-deployment-5bb9dd6b7c-2kfg5
      

      ---2022-02-23---10.11.09


Step 4. 進入 hub-to-adt 的 Pod 中

  • 請在終端機輸入下方內容
    kubectl exec -it Pod-Name sh
    
    • 請修改上方指令中的 Pod-NameStep 1 所顯示 hub-to-adt 的名稱。
    • 本範例使用的指令如下
      kubectl exec -it hub-to-adt-deployment-678d458ff9-qq6v7 sh
      

Step 5. 進入 adt-to-map 的 Pod 中

  • 請在終端機輸入下方內容
    kubectl exec -it Pod-Name sh
    
    • 請修改上方指令中的 Pod-NameStep 1 所顯示 adt-to-map 的名稱。
    • 本範例使用的指令如下
      kubectl exec -it adt-to-map-deployment-5bb9dd6b7c-2kfg5 sh
      

Step 6. 查看 Deployment

  • 請在終端機輸入下方內容
    kubectl get deployment
    

---2022-02-23---10.02.50

刪除所建立的資源與服務

Step 1. 刪除 Application

  • 請在終端機輸入下方內容
    kubectl delete -f kube-manifests/
    

---2022-02-23---10.13.57


Step 2. 刪除所建立的相關資源

  • 請在終端機輸入下方指令
    az group delete -n ResourceGroupName
    
    • 修改指令中的 ResourceGroupName 請輸入 建立 Azure Maps Service 段落中 Step 2 所建立的名稱。

    • 本範例使用如下

      az group delete -n adtToMap
      

      ---2022-02-23---10.15.48

GitHub

List of blogs