LoginSignup
3
3

More than 5 years have passed since last update.

AWS IoTを用いたAmazon S3へのデータの蓄積

Posted at

前回の記事では、Armadillo-IoT G3(以下、Armadillo)よりAWS IoTへ接続する手順をご紹介しました。

この記事では、ストレージサービス「Amazon S3」へのデータの蓄積方法を記載します。

ルールの登録

AWS IoTでは、ルールに従ってデータを処理することができ、その処理の一つとして、Amazon S3へのデータの蓄積が行えます。

AWS IoTにデータを送信するためには、メッセージブローカーというサービスを使用します。

ここでは、データをメッセージ、メッセージを送信する動作をパブリッシュ、受信する動作をサブスクライブと呼びます。

また、サブスクライブするメッセージを振り分けるためにトピックというものが設定されます。

パブリッシュされたメッセージのうち、指定されたトピックのものを抽出するのがルールになります。

以下はその手順です。

  1. 左のペインからACTを選択し、作成をクリックします。

  2. ルールの名前と説明を入力します。

  3. ルールクエリステートメントを設定します。TEMPERATUREというトピックにパブリッシュするので、次の文字列を入力します: SELECT * FROM "TEMPERATURE"

  4. アクションの追加をクリックし、「Amazon S3バケットにメッセージを格納する」を選択します。

  5. 「新しいリソースを作成する」をクリックします。S3のコンソールが表示されますので、「バケットを作成する」を選択します。

  6. バケット名を入力します。これ以外の設定は変更しなくても問題ありません。

  7. 元のコンソールに戻り、プルダウンメニューの横の更新マークをクリックした後、先ほど作成したバケットをプルダウンメニューから選択します。

  8. キーに次の文字列を入力します: temperature-${timestamp()}.json

  9. 「新しいロールの作成」をクリックし、適当な名前を入力します。その後、「新しいロールの作成」をクリックします。

  10. プルダウンメニューの横の更新マークをクリックした後、先ほど作成したロールを選択します。

  11. アクションの追加をクリックし、元の画面に戻ります。その後、ルールの作成をクリックします。

ルールの登録はこれで完了です。

サンプルコードの実行

(Armadillo上での準備は、前回の記事をお読みください。)

AWSIoTディレクトリに、以下のコードを置いてください。

from AWSIoTPythonSDK.MQTTLib import AWSIoTMQTTClient
import datetime
import time

# Configure
rootCAPath = "Root CA path"
certificatePath = "Your certicifate key path"
privateKeyPath = "Your private key path"
thingName = "Name of your thing"
endPoint = "Your endpoint"

clientId = "AWSIoTGettingStarted"
port = 8883

tempFile = "/sys/class/thermal/thermal_zone1/temp"

# Create a client
client = AWSIoTMQTTClient(clientId)
client.configureEndpoint(endPoint, port)
client.configureCredentials(rootCAPath, privateKeyPath, certificatePath)

# Client configuration
client.configureAutoReconnectBackoffTime(1, 32, 20)
client.configureConnectDisconnectTimeout(10)
client.configureMQTTOperationTimeout(5)

# Connect to AWS IoT
client.connect()

# Publish message to AWS IoT
while True:
    try:
        fileHandler = open(tempFile)
        temp = str(int(fileHandler.read().strip()) / 1000.0)
        json = '{"date": "' + datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') + '", "temperature":"' + temp + '"}'
        client.publish("TEMPERATURE", json, 1)
        print("SUCCESS")
    except Exception as e:
        print(e)
    time.sleep(60 * 5)

前回と同じように、サンプルコード内に証明書等のパス、エンドポイントをご入力ください。

その後、サンプルコードを実行します。SUCCESSと表示されましたら、送信に成功しています。

もし例外が表示されましたら、送信に失敗しています。もう一度手順をご確認ください。

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3