使用 Amazon 創建虛擬設備 EC2 - AWS IoT Core

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

使用 Amazon 創建虛擬設備 EC2

在本教學中,您將建立 Amazon EC2 執行個體做為雲端中的虛擬裝置使用。

若要完成此自學課程,您需要 AWS 帳戶。 如果您沒有,請先完成中所述的步驟,設定您的 AWS 帳戶然後再繼續。

設置一個 Amazon EC2 實例

以下步驟說明如何建立 Amazon EC2 執行個體,以代替實體裝置充當虛擬裝置。

如果這是您第一次建立 Amazon EC2 執行個體,您可能會發現 Amazon EC2Linux 執行個體入門中的指示會更有幫助。

啟動執行個體
  1. 在打開 Amazon EC2 控制台https://console.aws.amazon.com/ec2/

  2. 從左側的主控台功能表展開 Instances (執行個體) 區段,然後選擇 Instances (執行個體)。在 Instances (執行個體) 儀表板中,選擇右側的 Launch instances (啟動執行個體) 以顯示基本組態清單。

  3. Name and tags (名稱和標籤) 區段中,輸入執行個體的名稱,並選擇性地新增標籤。

  4. 在「應用程式和作業系統映像 (Amazon 機器映像檔)」區段中,選擇執行個體的AMI範本,例如 Amazon Linux 2 AMI (HVM)請注意,這標示AMI為「符合免費方案資格」。

  5. Instance Type (執行個體類型) 頁面中,您可以選取您執行個體的硬體組態。選取 t2.micro 類型,其預設為選取。請注意,此執行個體類型符合免費方案資格。

  6. Key pair (login) (金鑰對 (登入)) 區段中,從下拉式清單中選擇金鑰對名稱,或選擇 Create a new key pair (建立新金鑰對) 以建立新的金鑰對。建立新金鑰對時,請務必下載私密金鑰檔案並將其儲存在安全的地方,因為這是您下載並儲存的唯一機會。每次您連線至執行個體來啟動執行個體與對應的私有金鑰時,都需要提供您的金鑰對名稱。

    警告

    不要選取 Proceed without a key pair (不使用金鑰對而繼續) 選項。如果不使用金鑰對而啟動執行個體,就無法與它連線。

  7. Network settings (網路設定) 區段和 Configure storage (設定儲存區) 區段中,您可以保留預設設定。當您就緒後,選擇 Launch Instances (啟動執行個體)。

  8. 會有確認頁面讓您知道您的執行個體正在啟動。選擇 View Instances (檢視執行個體) 關閉確認頁面並返回主控台。

  9. 您可以在 Instances (執行個體) 畫面中檢視啟動狀態。啟動執行個體無須費時。當您啟動執行個體時,其初始狀態是 pending。執行個體啟動之後,其狀態會變更為,running且會收到公開DNS名稱。如果「公開」DNS (IPv4) 欄已隱藏,請選擇頁面右上角的「顯示/隱藏欄」(齒輪形圖示),然後選取「公開」DNS (IPv4)

  10. 執行個體可能需要幾分鐘的時間準備就緒讓您連線。確認您的執行個體是否已通過狀態檢查,您可以在 Status Checks (狀態檢查) 欄檢視此資訊。

    在新的執行個體通過其狀態檢查之後,請繼續下一個程序並連接至該執行個體。

連結到您的執行個體

您可以透過從 Amazon EC2 主控台選取執行個體,然後選擇使用 Amazon 執行個體 Connect 進行連線,使用瀏覽器型用戶端連線到EC2執行個體。Instance Connect 會處理許可並提供成功的連線。

  1. 在打開 Amazon EC2 控制台https://console.aws.amazon.com/ec2/

  2. 在左側選單中,選擇 Instances (執行個體)。

  3. 選取執行個體,然後選取 Connect (連線)

  4. 選擇 Amazon EC2 實例 ConnectConnect

您現在應該有一個登入新 Amazon EC2 執行個體的 Amazon EC2 執行個體 Connect 視窗。

安裝 Git,Node.js 並配置 AWS CLI

在本節中,您會在 Linux 執行個體上安裝 Git 和 Node.js。

安裝 Git
  1. Amazon EC2 執行個體 Connect 視窗中,使用下列命令更新執行個體。

    sudo yum update -y
  2. Amazon EC2 執行個體 Connect 視窗中,使用下列命令安裝 Git。

    sudo yum install git -y
  3. 若要檢查 Git 是否已安裝,以及 Git 的目前版本,請執行下列命令:

    git --version
安裝 Node.js
  1. Amazon EC2 執行個體 Connect 視窗中,使用下列命令安裝節點版本管理員 (nvm)。

    curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash

    nvm 可以安裝多種 Node.js 版本且允許您在各版本間進行切換,因此我們會使用 nvm 安裝 Node.js。

  2. 在您的 Amazon EC2 執行個體 Connect 視窗中,使用此命令啟用 nvm。

    . ~/.nvm/nvm.sh
  3. 在您的 Amazon EC2 執行個體 Connect 視窗中,使用 nvm 安裝最新版本的 Node.js,方法是使用此命令。

    nvm install 16
    注意

    這會安裝最新LTS版本的 Node.js。

    安裝 Node.js 時,系統會一併安裝節點套件管理工具 (npm),您可以視需要安裝額外的模組。

  4. Amazon EC2 執行個體 Connect 視窗中,使用此命令測試 Node.js 是否已正確安裝並執行。

    node -e "console.log('Running Node.js ' + process.version)"

    本教學課程需要 Node v10.0 或更新版本。如需詳細資訊,請參閱教學課程:在 Amazon EC2 執行個體上設定 Node.js

若要設定 AWS CLI

您的 Amazon EC2 實例預裝了 AWS CLI。 但是,您必須完成 AWS CLI 設定檔。如需如何設定的詳細資訊CLI,請參閱設定 AWS CLI.

  1. 下列範例顯示範本值。將它們取代為您自己的值。你可以找到這些值 AWS 控制台在您的帳戶信息下安全憑

    Amazon EC2 執行個體 Connect 視窗中,輸入以下指令:

    aws configure

    然後在顯示的提示中輸入來自您帳戶的值。

    AWS Access Key ID [None]: AKIAIOSFODNN7EXAMPLE AWS Secret Access Key [None]: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY Default region name [None]: us-west-2 Default output format [None]: json
  2. 你可以測試你的 AWS CLI 使用此命令進行配置:

    aws iot describe-endpoint --endpoint-type iot:Data-ATS

    如果您的 AWS CLI 配置正確,該命令應該從您的 AWS 帳戶.

建立 AWS IoT 適用於虛擬裝置的資源

本節說明如何使用 AWS CLI 直接在虛擬裝置上建立物件物件及其憑證檔案。這是直接在裝置上完成,以避免從另一台電腦將它們複製到裝置時可能造成的潛在複雜性。在本節中,您將為虛擬裝置建立下列資源:

  • 代表虛擬裝置的物件 AWS IoT.

  • 要驗證虛擬裝置的憑證。

  • 授權虛擬裝置連線的政策文件 AWS IoT,以及發佈、接收和訂閱訊息。

若要建立 AWS IoT Linux 實例中的東西對象

連接到的裝置 AWS IoT 由中的物件物件表示 AWS IoT 註冊表。「物件」代表特定的裝置或邏輯實體。在這種情況下,您的物件將代表您的虛擬設備,即此 Amazon EC2 實例。

  1. Amazon EC2 執行個體 Connect 視窗中,執行下列命令以建立物件物件。

    aws iot create-thing --thing-name "MyIotThing"
  2. 響JSON應應如下所示:

    { "thingArn": "arn:aws:iot:your-region:your-aws-account:thing/MyIotThing", "thingName": "MyIotThing", "thingId": "6cf922a8-d8ea-4136-f3401EXAMPLE" }
建立和貼附 AWS IoT Linux 執行個體中的金鑰和憑證

create-keys-and-certificate 命令會建立由 Amazon 根憑證授權機構簽署的用戶端憑證。此憑證用來驗證虛擬裝置的身分。

  1. Amazon EC2 執行個體 Connect 視窗中,建立用於存放憑證和金鑰檔案的目錄。

    mkdir ~/certs
  2. Amazon EC2 執行個體 Connect 視窗中,使用此命令下載 Amazon 憑證授權單位 (CA) 憑證的複本。

    curl -o ~/certs/Amazon-root-CA-1.pem \ https://www.amazontrust.com/repository/AmazonRootCA1.pem
  3. Amazon EC2 執行個體 Connect 視窗中,執行下列命令以建立私密金鑰、公開金鑰和 X.509 憑證檔案。此指令也會註冊並啟動憑證 AWS IoT.

    aws iot create-keys-and-certificate \ --set-as-active \ --certificate-pem-outfile "~/certs/device.pem.crt" \ --public-key-outfile "~/certs/public.pem.key" \ --private-key-outfile "~/certs/private.pem.key"

    回傳的結果如下所示。儲存 certificateArn,以便您可以在後續命令中使用它。您需要它,將您的憑證連接到您的物件,並在稍後的步驟中將政策連接到憑證。

    { "certificateArn": "arn:aws:iot:us-west-2:123456789012:cert/9894ba17925e663f1d29c23af4582b8e3b7619c31f3fbd93adcb51ae54b83dc2", "certificateId": "9894ba17925e663f1d29c23af4582b8e3b7619c31f3fbd93adcb51ae54b83dc2", "certificatePem": " -----BEGIN CERTIFICATE----- MIICiTCCEXAMPLE6m7oRw0uXOjANBgkqhkiG9w0BAQUFADCBiDELMAkGA1UEBhMC VVMxCzAJBgNVBAgEXAMPLEAwDgYDVQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBbWF6 b24xFDASBgNVBAsTC0lBTSEXAMPLE2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMxHzAd BgkqhkiG9w0BCQEWEG5vb25lQGFtYEXAMPLEb20wHhcNMTEwNDI1MjA0NTIxWhcN MTIwNDI0MjA0NTIxWjCBiDELMAkGA1UEBhMCEXAMPLEJBgNVBAgTAldBMRAwDgYD VQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBbWF6b24xFDAEXAMPLEsTC0lBTSBDb25z b2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMxHzAdBgkqhkiG9w0BCQEXAMPLE25lQGFt YXpvbi5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMaK0dn+aEXAMPLE EXAMPLEfEvySWtC2XADZ4nB+BLYgVIk60CpiwsZ3G93vUEIO3IyNoH/f0wYK8m9T rDHudUZEXAMPLELG5M43q7Wgc/MbQITxOUSQv7c7ugFFDzQGBzZswY6786m86gpE Ibb3OhjZnzcvQAEXAMPLEWIMm2nrAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAtCu4 nUhVVxYUntneD9+h8Mg9qEXAMPLEyExzyLwaxlAoo7TJHidbtS4J5iNmZgXL0Fkb FFBjvSfpJIlJ00zbhNYS5f6GuoEDEXAMPLEBHjJnyp378OD8uTs7fLvjx79LjSTb NYiytVbZPQUQ5Yaxu2jXnimvw3rrszlaEXAMPLE= -----END CERTIFICATE-----\n", "keyPair": { "PublicKey": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkEXAMPLEQEFAAOCAQ8AMIIBCgKCAQEAEXAMPLE1nnyJwKSMHw4h\nMMEXAMPLEuuN/dMAS3fyce8DW/4+EXAMPLEyjmoF/YVF/gHr99VEEXAMPLE5VF13\n59VK7cEXAMPLE67GK+y+jikqXOgHh/xJTwo+sGpWEXAMPLEDz18xOd2ka4tCzuWEXAMPLEahJbYkCPUBSU8opVkR7qkEXAMPLE1DR6sx2HocliOOLtu6Fkw91swQWEXAMPLE\GB3ZPrNh0PzQYvjUStZeccyNCx2EXAMPLEvp9mQOUXP6plfgxwKRX2fEXAMPLEDa\nhJLXkX3rHU2xbxJSq7D+XEXAMPLEcw+LyFhI5mgFRl88eGdsAEXAMPLElnI9EesG\nFQIDAQAB\n-----END PUBLIC KEY-----\n", "PrivateKey": "-----BEGIN RSA PRIVATE KEY-----\nkey omitted for security reasons\n-----END RSA PRIVATE KEY-----\n" } }
  4. Amazon EC2 執行個體 Connect 視窗中,使用下列命令和 certificateArn 在上一個命令的響應中。

    aws iot attach-thing-principal \ --thing-name "MyIotThing" \ --principal "certificateArn"

    如果成功,此命令不會顯示任何輸出。

建立並連接政策
  1. Amazon EC2 執行個體 Connect 視窗中,透過將此政策文件複製並貼到名為的檔案來建立政策檔案~/policy.json

    如果您沒有最愛的 Linux 編輯器,則可以使用此命令開啟 nano

    nano ~/policy.json

    policy.json 的政策文件貼入其中。輸入 ctrl-x 以結束 nano 編輯器並儲存檔案。

    policy.json 的政策文件內容

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Publish", "iot:Subscribe", "iot:Receive", "iot:Connect" ], "Resource": [ "*" ] } ] }
  2. Amazon EC2 執行個體 Connect 視窗中,使用下列命令建立政策。

    aws iot create-policy \ --policy-name "MyIotThingPolicy" \ --policy-document "file://~/policy.json"

    輸出:

    { "policyName": "MyIotThingPolicy", "policyArn": "arn:aws:iot:your-region:your-aws-account:policy/MyIotThingPolicy", "policyDocument": "{ \"Version\": \"2012-10-17\", \"Statement\": [ { \"Effect\": \"Allow\", \"Action\": [ \"iot:Publish\", \"iot:Receive\", \"iot:Subscribe\", \"iot:Connect\" ], \"Resource\": [ \"*\" ] } ] }", "policyVersionId": "1" }
  3. Amazon EC2 執行個體 Connect 視窗中,使用下列命令將政策附加到虛擬裝置的憑證。

    aws iot attach-policy \ --policy-name "MyIotThingPolicy" \ --target "certificateArn"

    如果成功,此命令不會顯示任何輸出。

安裝 AWS IoT 設SDK備 JavaScript

在本節中,您將安裝 AWS IoT SDK的裝置 JavaScript,其中包含應用程式可用來與之通訊的程式碼 AWS IoT 和示例程序。如需詳細資訊,請參閱 AWS IoT JavaScript GitHub 儲存庫SDK的裝置

若要安裝 AWS IoT Linux 執行個體 JavaScript 上的裝SDK置
  1. 在您的 Amazon EC2 執行個體 Connect 視窗中,複製 AWS IoT 使用此命令將 JavaScript 存aws-iot-device-sdk-js-v2儲庫設備SDK放入主目錄的目錄中。

    cd ~ git clone https://github.com/aws/aws-iot-device-sdk-js-v2.git
  2. 導覽至您在上述步驟中建立的 aws-iot-device-sdk-js-v2 目錄。

    cd aws-iot-device-sdk-js-v2
  3. 使用 npm 來安裝SDK.

    npm install

執行範例應用程式

以下各節命令假設您的金鑰和憑證檔案存放在虛擬裝置上,如下表所示。

憑證檔案名稱

檔案

檔案路徑

私有金鑰

~/certs/private.pem.key

裝置憑證

~/certs/device.pem.crt

根 CA 憑證

~/certs/Amazon-root-CA-1.pem

在本節中,您將安裝並運行在aws-iot-device-sdk-js-v2/samples/node目錄中找到的pub-sub.js示例應用程序 AWS IoT 用SDK於 JavaScript. 此應用程序顯示設備(您的 Amazon EC2 實例)如何使用該MQTT庫發布和訂閱MQTT消息。pub-sub.js 範例應用程式會訂閱主題 topic_1、將 10 則訊息發佈至該主題,以及在從訊息代理程式接收訊息時顯示這些訊息。

安裝並執行範例應用程式
  1. Amazon EC2 執行個體 Connect 視窗中,導覽至SDK建立的aws-iot-device-sdk-js-v2/samples/node/pub_sub目錄,然後使用這些命令安裝範例應用程式。

    cd ~/aws-iot-device-sdk-js-v2/samples/node/pub_sub npm install
  2. 在您的 Amazon EC2 實例 Connect 窗口中,獲取 your-iot-endpoint from AWS IoT 通過使用這個命令。

    aws iot describe-endpoint --endpoint-type iot:Data-ATS
  3. 在您的 Amazon EC2 執行個體 Connect 視窗中,插入 your-iot-endpoint 如所示並運行此命令。

    node dist/index.js --topic topic_1 --ca_file ~/certs/Amazon-root-CA-1.pem --cert ~/certs/device.pem.crt --key ~/certs/private.pem.key --endpoint your-iot-endpoint

範例應用程式:

  1. 連線到 AWS IoT Core 為您的帳戶。

  2. 訂閱訊息主題 topic_1,並顯示其收到關於該主題的訊息。

  3. 將 10 則訊息發佈至主題 topic_1

  4. 顯示類似下列內容的輸出:

    Publish received. topic:"topic_1" dup:false qos:1 retain:false {"message":"Hello world!","sequence":1} Publish received. topic:"topic_1" dup:false qos:1 retain:false {"message":"Hello world!","sequence":2} Publish received. topic:"topic_1" dup:false qos:1 retain:false {"message":"Hello world!","sequence":3} Publish received. topic:"topic_1" dup:false qos:1 retain:false {"message":"Hello world!","sequence":4} Publish received. topic:"topic_1" dup:false qos:1 retain:false {"message":"Hello world!","sequence":5} Publish received. topic:"topic_1" dup:false qos:1 retain:false {"message":"Hello world!","sequence":6} Publish received. topic:"topic_1" dup:false qos:1 retain:false {"message":"Hello world!","sequence":7} Publish received. topic:"topic_1" dup:false qos:1 retain:false {"message":"Hello world!","sequence":8} Publish received. topic:"topic_1" dup:false qos:1 retain:false {"message":"Hello world!","sequence":9} Publish received. topic:"topic_1" dup:false qos:1 retain:false {"message":"Hello world!","sequence":10}

若在執行範例應用程式時發生問題,請檢閱 疑難排解範例應用程式的問題

您也可以將 --verbosity debug 參數新增至命令列,以便範例應用程式顯示有關其正在做什麼的詳細訊息。這些資訊可能會提供您更正問題所需的協助。

檢視來自範例應用程式的訊息 AWS IoT 主控台

您可以查看示例應用程序的消息,當它們通過消息代理程序時,通過使用中的MQTT測試客戶端 AWS IoT 控制台

檢視範例應用程式所發佈的MQTT訊息
  1. 檢閱 檢視MQTT訊息 AWS IoT MQTT用戶端。這可協助您學習如何使用中的MQTT測試用戶端 AWS IoT 控制台以查看MQTT消息通過消息代理程序時的消息。

  2. 在中開啟MQTT測試用戶端 AWS IoT 控制台

  3. Subscribe to a topic (訂閱主題)中,訂閱主題,topic_1

  4. Amazon EC2 執行個體 Connect 視窗中,再次執行範例應用程式,然後在 MQTT AWS IoT 控制台

    cd ~/aws-iot-device-sdk-js-v2/samples/node/pub_sub node dist/index.js --topic topic_1 --ca_file ~/certs/Amazon-root-CA-1.pem --cert ~/certs/device.pem.crt --key ~/certs/private.pem.key --endpoint your-iot-endpoint

有關更多信息MQTT以及如何 AWS IoT Core 支援通訊協定,請參閱MQTT