この記事の目次
AWS IoTとは
AWS IoTとはIoTデバイスをAWSクラウドサービスに接続するサービスのことです。
AWS IoTは様々なIoTデバイスを接続でき、Raspberry Piもサポートされています。Raspberry PiをAWS IoTサービスを使用し接続することにより、AWSが提供しているクラウドサービスを利用できるようになります。
AWS IoTサービスのAWS IoT Coreを使用しRaspberry Piを管理します。AWS IoT Coreとはデバイスと安全にやり取りできるようにするクラウドサービスです。
AWS IoTポリシードキュメントを作成しよう
Raspberry PiがAWS IoTサービスと通信することを許可するためポリシーを作成します。
AWS IoTポリシーを作成するには以下の手順で行います。あらかじめAWSアカウントにログインしておいてください。
AWS IoT Coreの画面を開き左側のメニューから安全性->ポリシーと進み作成を選択します。名前フィールドにポリシー名、アクションフィールドに操作するアクション、リソースARNフィールドにデバイスを追加していきます。
ポリシー名は任意ですが個人を特定できるものは使用しないでください。アクションには以下のようなものがあります。Raspberry Piがプログラムを実行するときに必要な権限のアクションです。
iot:Connect
iot:Receive
iot:Publish
iot:Subscribe
リソースARNには*を指定します。セキュリティを高めたい場合は、クライアントARN(Amazon リソース名)を以下の形式で入力します。clientの例です。
arn:aws:iot:リージョン名:AWSアカウント名:client/デバイス名
許可チェックボックスをオンにします。
以上の値を入力したのち、作成をクリックします。これでRaspberry Piのプログラムの実行に必要なAWS IoTオペレーションを実行できるようにするポリシーが作成されました。
Raspberry Piのモノオブジェクトを作成しよう
AWS IoT に接続されたRaspberry PiをAWS IoTレジストリに入力します。
AWS IoTコンソールの左側のメニューから管理->モノと進みデバイスを作成します。作成を選択し単一のモノを作成するに進み、Thing Registryにデバイスを追加に進みます。
この画面ではデバイス名やモノのタイプやグループが設定できます。デバイス名は任意ですが後で変更できないため注意してください。
また、デバイス名は、暗号化されていない通信やレポートに表示されることがあるため個人が特定されるものは使用しないでください。
次を選択するとモノに証明書を追加の画面が表示されます。1-Click 証明書作成 (推奨)を選択し証明書を作成します。作成された証明書をダウンロードする画面に進みます。
ここで登録したデバイス証明書、パブリックキー、プライベートキーをダウンロードします。ファイルパスは以下のとおりにします。
デバイス証明書 device.pem.crt
プライベートキー private.pem.key
パブリックキー public.pem.key
またAWS IoTのルートCA証明書もダウンロードします。ルートCAファイルをダウンロードするには、AWS IoTダウンロードのルートCAリンクをクリックし、RSA 2048 ビットキー: Amazon Root CA 1証明書ファイルをダウンロードします。ファイルパスは以下とします。
ルートCA証明書 Amazon-root-CA-1.pem
証明書をダウンロードしたら有効化をクリックして証明書を有効にします。
先ほど作成したポリシーをこの証明書にアタッチします。安全性->証明書から証明書に先ほど作成したポリシーをアタッチします。モノにポリシーを追加するで、先ほど作成したポリシーを選択します。モノの登録を選択したら登録完了です。
新しく登録したThingオブジェクトがThingのリストに表示されるようになります。
最後にモノ詳細画面からHTTPSエンドポイントを保存しておきます。
Raspberry Pi側の設定をしサンプルアプリを実行しよう
Raspberry PiをAWS IoTに接続するためにRaspberry Pi側を設定します。ここではAWS IoT Device SDKの中にあるサンプルアプリpubsubを使用して接続を確認します。
以下を前提条件とします。ハードウェアはRaspberry Pi 3 Model B以上の最新モデル、オペレーティングシステムはRaspberry Pi OS(32ビット)以降、最新バージョンをおすすめします。
システムが最新か、AWS IoT Device SDKをインストールするのに必要なツールとライブラリがインストールされているかを確認します。
Raspberry Piのターミナルウィンドウで以下のコマンドを実行して、オペレーティングシステムを更新し、必要なライブラリをインストールします。
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install cmake
sudo apt-get install libssl-dev
AWS IoT デバイス SDK for PythonをインストールするためにGitをインストールする必要があります。Gitがインストールされていない場合は以下のコマンドでインストールします。
sudo apt-get install git
AWS IoT Device SDKをインストールします。今回はPythonを使用しますので、Python、開発ツール、Python用AWS IoTデバイスSDKをRaspberry Piにインストールします。
Python 用 AWS IoT デバイス SDKでは、Python v3.5 以降をインストールする必要があります。ターミナルウィンドウでPythonのバージョンを調べてください。またpip3がインストールされているかも調べてください。
AWS IoT Device SDK for Pythonをインストールし、サンプルアプリをダウンロードします。次のコマンドを実行します。
cd ~
python3 -m pip install awsiotsdk
git clone https://github.com/aws/aws-iot-device-sdk-python-v2.git
証明書ファイルをインストールします。ホームディレクトリにサブディレクトリcertsを作成しデバイス証明書、プライベートキー、 ルートCA証明書をインストールします。以下のようになっているか確認します。
デバイス証明書 ~/certs/device.pem.crt
プライベートキー ~/certs/private.pem.key
ルートCA証明書 ~/certs/Amazon-root-CA-1.pem
サンプルアプリを動作させるにはエンドポイントの情報が必要です。エンドポイントの値はAWS IoTコンソールの管理からモノ、Raspberry Piを選択して操作画面のHTTPSセクションに表示されています。
サンプルアプリを実行します。エンドポイントには先ほどの値を入力します。このアプリは、Raspberry PiがMQTTライブラリを使用して、MQTTメッセージを発行し、サブスクライブするものです。トピックtopic_1で、そのトピックに 10 件のメッセージを公開します。
cd ~/aws-iot-device-sdk-python-v2/samples
python3 pubsub.py –topic topic_1 –root-ca ~/certs/Amazon-root-CA-1.pem –cert ~/certs/device.pem.crt –key ~/certs/private.pem.key –endpoint エンドポイント
AWS IoTコンソールでメッセージが届いているか確認します。
Raspberry PiとAWS IoTを接続する手順を整理しよう
Raspberry PiとAWS IoTを接続する方法を説明しました。
以下の手順で接続できることを見てきました。
・AWS IoTでポリシーを作成する
・AWS IoTでモノを登録する
・Raspberry Pi側にSDKをインストールする
Raspberry PiをAWS IoTに接続することで、Raspberry Piで出力されたデータをAWSの各種サービスを通して、収集、加工、分析できるようになります。
この記事の監修者・著者

-
未経験からITエンジニアへのキャリアチェンジを支援するサイト「キャリアチェンジアカデミー」を運営。これまで4500人以上のITエンジニアを未経験から育成・排出してきました。
・AWS、salesforce、LPICの合計認定資格取得件数:2100以上(2023年6月時点)
・AWS Japan Certification Award 2020 ライジングスター of the Year 受賞
最新の投稿
- 2023年11月21日キャリア・転職ITエンジニアへのキャリアチェンジに多い理由は?
- 2023年11月20日キャリア・転職フリーターからの就職でおすすめの職業は?
- 2023年11月20日キャリア・転職経理へのキャリアチェンジ転職・志望動機は?
- 2023年11月20日キャリア・転職法務からのキャリアチェンジおすすめの業界は?