Amazon EC2 を使用して仮想デバイスを作成する - AWS IoT Core

Amazon EC2 を使用して仮想デバイスを作成する

このチュートリアルでは、クラウドで仮想デバイスとして機能する Amazon EC2 インスタンスを作成します。

このチュートリアルを完了するには、AWS アカウント が必要です。アカウントをお持ちではない場合、続行する前に、AWS アカウント を設定する に記載されている手順を完了してください。

Amazon EC2 インスタンスをセットアップする

次の手順は、物理デバイスの代わりに仮想デバイスとして機能する Amazon EC2 インスタンスを作成する方法を示しています。

これが作成する最初の Amazon EC2 インスタンスの場合、「Amazon EC2 Linux インスタンスの開始方法」を参照してください。

インスタンスを起動するには
  1. Amazon EC2 コンソール (https://console.aws.amazon.com/ec2/) を開きます。

  2. 左側のコンソールメニューから [Instances] (インスタンス) セクションを展開し、[Instances] (インスタンス) を選択します。[Instances] (インスタンス) ダッシュボードから、右側の [Launch instances] (インスタンスの起動) を選択すると、基本設定のリストが表示されます。

  3. [Name and tags] (名前とタグ) セクションで、インスタンスの名前を入力し、オプションでタグを追加します。

  4. [Application and OS Images (Amazon Machine Image)] (アプリケーションと OS イメージ (Amazon マシンイメージ) ) セクションで、Amazon Linux 2 AMI (HVM) など、インスタンス用の AMI テンプレートを選択します。この AMI が「Free tier eligible」(無料利用枠対象) としてマークされていることに注意してください。

  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. インスタンスを起動することを知らせる確認ページが表示されます。インスタンスの表示を選択して確認ページを閉じ、コンソールに戻ります。

  9. インスタンス画面で、起動のステータスを確認できます。インスタンスの起動には短時間かかります。インスタンスを起動すると、その初期状態は pending です。インスタンスがスタートすると、その状態は running に変わり、公開 DNS 名を受け取ります。(公開 DNS (IPv4) 列が非表示の場合は、ページの右上隅にある 列の表示 / 非表示 (歯車のシェープをしたアイコン) を選択してから、公開 DNS (IPv4) を選択します。)

  10. インスタンスが接続できるようになるまで、インスタンスの準備が整うまでに数分かかる場合があります。インスタンスのステータスチェックが正常に終了したことを確認してください。この情報は [Status Checks] 列で確認できます。

    新しいインスタンスがステータスチェックに合格したら、次の手順に進み、それに接続します。

インスタンスに接続するには

Amazon EC2 コンソールからインスタンスを選択し、Amazon EC2 Instance Connect を使用して接続することを選択することにより、ブラウザベースのクライアントを使用してインスタンスに接続できます。Instance Connect はアクセス許可を処理し、正常な接続を提供します。

  1. Amazon EC2 コンソール (https://console.aws.amazon.com/ec2/) を開きます。

  2. 左のメニューで、[Instances] (インスタンス) を選択します。

  3. インスタンスを選択し、[Connect] を選択します。

  4. [Amazon EC2 Instance Connect][Connect] (接続) を選択します。

これで、新しい Amazon EC2 インスタンスにログインする Amazon EC2 Instance Connect ウィンドウができたはずです。

Git、Node.js をインストールして、AWS CLI を設定する

このセクションでは、Git と Node.js を Linux インスタンスにインストールします。

Git をインストールするには
  1. Amazon EC2 Instance Connect ウィンドウで、次のコマンドを使用してインスタンスを更新します。

    sudo yum update -y
  2. Amazon EC2 Instance Connectウィンドウで、次のコマンドを使用して Git をインストールします。

    sudo yum install git -y
  3. Git がインストールされているかどうか、および Git の現在のバージョンを確認するには、次のコマンドを実行します。

    git --version
Node.js をインストールするには
  1. Amazon EC2 Instance 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 Instance Connect ウィンドウで、このコマンドを使用して nvm を有効にします。

    . ~/.nvm/nvm.sh
  3. Amazon EC2 Instance Connect ウィンドウで、このコマンドを使用して、nvm を使用し、最新バージョンの Node.js をインストールします。

    nvm install 16
    注記

    Node.js の最新の LTS リリースがインストールされます。

    Node.js をインストールすると、Node Package Manager (npm) もインストールされるため、必要に応じて追加のモジュールをインストールできます。

  4. Amazon EC2 Instance 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 コンソールの [My Security Credentials] (セキュリティ認証情報) の下のアカウント情報で確認できます。

    Amazon EC2 Instance 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 に接続し、メッセージを発行、受信、およびサブスクライブすることを許可するポリシードキュメント。

Linux インスタンスで AWS IoT モノのオブジェクトを作成するには

AWS IoT に接続されたデバイスは、AWS IoT レジストリでモノのオブジェクトによって表されます。モノのオブジェクトは、特定のデバイスまたは論理エンティティを表します。この場合、モノのオブジェクトは仮想デバイス、つまりこの Amazon EC2 インスタンスを表します。

  1. Amazon EC2 Instance 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" }
Linux インスタンスで AWS IoT キーと証明書を作成してアタッチするには

create-keys-and-certificate コマンドを実行すると、Amazon ルート認証局によって署名されたクライアント証明書が作成されます。この証明書は、仮想デバイスの ID を認証するために使用されます。

  1. Amazon EC2 Instance Connectウィンドウで、証明書とキーファイルを保存するディレクトリを作成します。

    mkdir ~/certs
  2. Amazon EC2 Instance Connect ウィンドウで、このコマンドを使用して、Amazon 認証機関 (CA) 証明書のコピーをダウンロードします。

    curl -o ~/certs/Amazon-root-CA-1.pem \ https://www.amazontrust.com/repository/AmazonRootCA1.pem
  3. Amazon EC2 Instance 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 Instance Connect ウィンドウで、次のコマンドと、前のコマンドからの応答に含まれている certificateArn を使用して、作成したばかりの証明書にモノのオブジェクトをアタッチします。

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

    成功した場合、このコマンドは出力を表示しません。

ポリシーを作成してアタッチするには
  1. Amazon EC2 Instance 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 Instance 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 Instance Connectウィンドウで、次のコマンドを使用して、仮想デバイスの証明書にポリシーをアタッチします。

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

    成功した場合、このコマンドは出力を表示しません。

AWS IoT Device SDK for JavaScript をインストールする

このセクションでは、AWS IoT Device SDK for JavaScript をインストールします。これには、アプリケーションが AWS IoT およびサンプルプログラムと通信するために使用できるコードが含まれています。詳細については、「AWS IoT Device SDK for JavaScript GitHub repository」(Device SDK for JavaScript GitHub リポジトリ) を参照してください。

Linux インスタンスに AWS IoT Device SDK for JavaScript をインストールするには
  1. Amazon EC2 Instance Connect ウィンドウで、このコマンドを使用して、AWS IoT Device SDK for JavaScript リポジトリのクローンをホームディレクトリの aws-iot-device-sdk-js-v2 ディレクトリに作成します。

    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 for JavaScript の aws-iot-device-sdk-js-v2/samples/node ディレクトリにある pub-sub.js サンプルアプリケーションをインストールして実行します。このアプリケーションは、デバイス (Amazon EC2 インスタンス) が MQTT ライブラリを使用して MQTT メッセージを発行およびサブスクライブする方法を示します。pub-sub.js サンプルアプリケーションは、トピック、topic_1 をサブスクライブし、そのトピックに対して 10 個のメッセージを発行し、メッセージブローカーから受信したメッセージを表示します。

サンプルアプリケーションをインストールして実行するには
  1. Amazon EC2 Instance 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 Instance Connect] ウィンドウで、このコマンドを使用して AWS IoT から your-iot-endpoint を取得します。

    aws iot describe-endpoint --endpoint-type iot:Data-ATS
  3. Amazon EC2 Instance 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 コンソールでサンプルアプリケーションからのメッセージを表示する

AWS IoT コンソールMQTT テストクライアントを使用することで、サンプルアプリケーションメッセージがメッセージブローカーを通過するときにそれらを見ることができます。

サンプルアプリケーションによって発行された MQTT メッセージを表示するには
  1. 確認AWS IoT MQTT クライアントでデバイスの MQTT メッセージを表示する。これは、AWS IoT コンソールMQTT テストクライアントを使用して、メッセージブローカーを通過する MQTT メッセージを表示する方法を学ぶのに役立ちます。

  2. AWS IoT コンソールMQTT テストクライアントを開きます。

  3. トピックへのサブスクライブ」で、「topic_1」というトピックをサブスクライブします。

  4. Amazon EC2 Instance Connect ウィンドウで、サンプルアプリケーションを再度実行し、AWS IoT コンソールMQTT テストクライアントのメッセージを確認します。

    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」を参照してください。