クラウドインフラ構築記

現在AWSの構築支援に携わっております。今注視しているのは、GKE、BigQuery、Google Dataflowなどサービスを展開しているGoolge Cloud Platformです。

先日のIoTハンズオンに参加しました。 #cmdevio

先日AWSモバイル/IoTサービス徹底攻略!!~Developers.IO Meetup番外編~に参加しました。

センサーからOpenBlock BX1 →SORACOM Air →AWS IoT→DynamoDBまで登録する流れをハンズオンで体験できました。

  • SIMの挿入取り出しがしずらい。OpenBlock BX1ではナノサイズではなく、フルサイズで
  • OpenBlock BX1の時刻は同期しておかないとログ収集がうまくいかない
  • root証明書等スペースがあるファイルだとAWS IoTの設定ができない

Raspberry Pi2 等でも同様な仕組みは作成できると思われるが、Open Block BX1は、AWS Mobile SDK/3Gモジュール/WebUIが組み込まれており、事前準備がかなり省けることが実感。

AWS IoTの設定ですが、ハンズオン時はManagement Consoleで行いましたが、CLIでもできます。以下CLIでのAWS IoTの設定になります。

Thingの登録

aws iot create-thing --thing-name bx1

登録されたThingsを確認します。1度作成したthing名を削除して再登録しても登録自体はエラーは出ませんが、list-things、Management Consoleで確認しても登録されません。

この件、先ほど確認したところ、削除したThingで再登録できるようになっていました。

aws iot list-things
aws iot describe-thing --thing-name bx1-demo --region ap-northeast-1

証明書、秘密鍵、公開鍵を作成します。証明書は後からでも取得可能ですが、秘密鍵、公開鍵は作成時しか取得できないので、保存は忘れずに。

aws iot create-keys-and-certificate --set-as-active > cert.json
cat cert.json | jq .keyPair.PublicKey -r > thing-public-key.pem
cat cert.json | jq .keyPair.PrivateKey -r > private-key.pemm

証明書上位方は下記より取得できます。

aws iot​ describe-certificate --certificate-id "your-certificate-id" --output text --query certificateDescription.certificatePem > cert.pem

root証明書をダウンロードしておきます。

wget https://www.symantec.com/content/en/us/enterprise/verisign/roots/VeriSign-Class%203-Public-Primary-Certification-Authority-G5.pem -O rootCA.pem

IoTポリシを作成します。

 vi policy.json
{
 "Version": "2012-10-17", 
 "Statement": [{
 "Effect": "Allow",
 "Action":["iot:*"],
 "Resource": ["*"]
 }]
}
aws iot create-policy --policy-name awsiot-handon-policy --policy-document file://policy.json

作成したポリシは以下で確認できます。

aws  iot get-policy --policy-name awsiot-handon-policy --region ap-northeast-1

先ほど作成されたポリシを証明書と紐付けます。

aws  iot attach-principal-policy --principal "certificateArn" --policy-name "awsiot-handon-policy"

Thingsも証明書に紐付けます。

aws iot attach-thing-principal --thing-name "bx1-demo" --principal "certificateArn"

certificateArnには、下記で確認することができます。

aws --profile target1 iot list-thing-principals --thing-name  bx1-demo --region ap-northeast-1

AWS IoTからどんなアクションを行うかRuleで設定します。
Rule設定用のjsonテンプレートから作成するのが一番いいかと思われます。下記はDynamoDBと連携する例にはなりますが、Kinesis、Firehose、S3、SQS、SNSなどとも連携が可能です。

aws  iot create-topic-rule --generate-cli-skeleton
vi rule.json
{
 "ruleName": "IoTHandsonRule2",
 "topicRulePayload": {
 "sql": "SELECT * FROM 'handson/device01'",
 "description": "",
 "actions": [
 {
 "dynamoDB": {
 "tableName": "IoTHandsonRawData",
 "roleArn" : "arn:aws:iam::XXXXXXXXXXXX:role/aws_iot_dynamoDB",
 "hashKeyField": "sensor",
 "hashKeyValue": "${topic(2)}",
 "rangeKeyField": "timestamp",
 "rangeKeyValue": "${timestamp()}"
 }
 }
 ],
 "ruleDisabled": false
 }
}
aws  iot create-topic-rule --cli-input-json file://rule.json

作成したRulesを確認します。

aws --profile target1 iot list-topic-rules --region ap-northeast-1

AWS IoTのEnd Pointは下記で確認することができます。

aws  target1 iot describe-endpoint --region ap-northeast-1

先日のAWSモバイル/IoTサービス徹底攻略!!IoTハンズオンの際は、AWS IoTのエンドポイントとして、data.iot.ap-northeast-1.amazonaws.comで行いましたが、nslookupで確認したところ、同じ送信先IPアドレスになっていますので、どちらを使ってもいけると思われます。

秘密鍵、公開鍵、証明書の削除は現時点では、Management Consoleから行えないので(Deactiveは可能)、削除する場合は、CLIで行う必要があります。

 

 

 

 

コメントは受け付けていません。