hmx-17の日記

技術ネタとかプライベート

AWS IoT GreenglassをRaspberry Pi 3にインストールする

AWS IoTの醍醐味(?) Greenglassを使うためにRaspberry Pi 3にインストールしていきます。

Greenglassを使うとGreenglassに関連付けたAWS IoTデバイスとGreenglassの間でLambdaスクリプトを実行することができ、データを整形したりした上でAWSのDynamoDBなどのサービスに投入することができます。また、GreenglassとAWS間の通信が途絶した場合でも、途絶した情報をGreenglassが保存していて通信が回復した時点で保存しているデータをAWSに送信する機能も付いています。

で、早速インストールします。基本はAWSのドキュメントに従っていれば構築できま………せん!
この通りにセットアップしてデプロイするとこんなメッセージが出ます

[2018-01-08T23:36:54.857+09:00][ERROR]-Runtime execution error: unable to start lambda container. container_linux.go:259: starting container process caused "process_linux.go:345: container init caused \"process_linux.go:286: setting cgroup config for ready process caused \\\"no such directory for memory.limit_in_bytes\\\"\""

ふぁーーー!?もしかしたら先駆者がいるかもしれないので落ち着いてググり……いらっしゃいました

$ sudo nano /boot/cmdline.txt

として末尾に cgroup_memory=1 を追記して再起動すると解決します。

これでAWS ConsoleでGreenglass用のHello Worldをデプロイすると上手く行きます。

自動起動このページを参考にして作りました。

[Unit]
Description=greengrass daemon
After=network.target

[Service]
ExecStart=/greengrass/ggc/core/greengrassd start
Type=simple
RestartSec=2
Restart=always
User=root
PIDFile=/var/run/greengrassd.pid

[Install]
WantedBy=multi-user.target

Mongoose OSでJavaScript IoTプログラミング

Mongoose OSを使うと簡単にAWS IoT(w/Greenglass)が使えるんだって!
ってことで前回はFlash方法を書きましたが……

ざっとプログラムの書き方でも。Mongoose OSのJavaScriptではNode.JSっぽい感じに書けるようで、GPIOピンの割り込みイベントを作るには以下のように書くようです。

let button = 4;
let message = "MQTT Pub";
let topic = "hello/world"; GPIO.set_button_handler(button, GPIO.PULL_UP, GPIO.INT_EDGE_NEG, 200, function() { let ok = MQTT.pub(topic, message, 1); print('Published:', ok, topic, '->', message); }, null);

これはGPIOピン4をbutton変数として定義し、GPIOがGNDに落ちた時の立ち下がりエッジを割り込みトリガーとするイベントの定義になっています。
200と定数がありますが、ここはチャタリングが発生しないようイベントの最低発火頻度をmsecで指定するようです。

イベントを定義している匿名関数では事前に指定したMQTTのBrokerのTopicにPubしてシリアルコンソールにメッセージを投げるようになっています。

その他については今後記述していきますが、とりあえず公式ドキュメントを見るとよいでしょう。

ESP8266でMongoose OSを触る

みんな大好きなESP8266で簡単にAWS IoT(Greenglass対応)に参加するべくMongoose OSをインストールしてAWS IoTにThing Deviceとして登録してみましょう。

Mongoose OSのサイト からmosを落としてきます。Windowsも対応してます。

Windows版のmosでは起動するとブラウザが立ち上がってくるので、ESP8266が接続されているCOMポートを選択してください。

ESP8266をUART Download Mode(IO0 => GND, IO2 => 3V3, IO15 => GND)に設定したらRSTをGNDに落として書き込みモードに入れます。mos側でESP8266のdemo-jsをFlashしてあげて、Flash Boot Mode(IO0 => 3V3以外は同じ)にして起動させてみます。無事起動するとTick Tockとコンソールに出るので、WiFiの設定を行います。

 

続いてAWSはMongooseのIDE側で使うAPI KeyをIAM側で作成します。

最低限以下のポリシーがあれば大丈夫です。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "iot:DescribeEndpoint",
                "iot:CreateThing",
                "iot:AttachThingPrincipal",
                "iot:AttachPrincipalPolicy",
                "iot:CreatePolicy",
                "iot:ListPolicies",
                "iot:CreateCertificateFromCsr"
            ],
            "Resource": "*"
        }
    ]
}

ゲットしたAPI KeyとSecretをMongoose OSのDevice Configから突っ込みます。

Provision with AWS IoTを押すと自動でThing Deviceとして登録されます。

Windows Hello for Business (WHFB) をやる。

前提

  • Windows Server 2012 R2以上のサーバが一つ以上
    (AD CS / スキーマアップグレード後のAD DS)
  • Windows Server 2016 のサーバが一つ
    (AD FS / AD DS(アップグレード用))
    (ラボ環境であれば2016のサーバが一つあればOK.)
  • Azure ADのテナントをつくる
    (Azure AD Premiumのライセンスが必要か不明)

というのを満たせばWindows Hello for Business(以下WHFB)のハイブリッド証明書構成を構築することが出来ます。
WHFBのキー信頼構成を行うとAD CSの構築は不要ですが、ドメインコントローラのどれか1台にWindows Server 2016 が必ず必要になります。

工程

工程は次のようになります

  • AD DSのインストール
    (Windows Server 2012の場合には2016スキーマへアップグレード)
  • AD DSの設定
  • AD CSのインストール
  • AD CSの設定
  • AD FSのインストール
  • AD FSの設定
  • AAD Connectorのインストール
  • AAD Connectorの設定
  • GPOの設定
  • Device Registrationの確認
  • ユーザごとのPIN設定

(そのうち続く)

ツッコミ

公開鍵と秘密鍵って? SSL通信に使う暗号方式【35日目】 - エンジニアの卵_level3

公開鍵暗号のキモが説明出来てないのでちょっと補足。

公開鍵暗号では、「公開鍵」で暗号化した文章は「公開鍵」では復号できず、「秘密鍵」のみで復号できます。
(厳密に言うと逆も出来るけど、基本的にはこの形が多い)

共通鍵暗号では同じ鍵を使用して暗号化と複合化が出来るようになっています。

確かSSL通信では証明書の検証に公開鍵暗号を使用し、通信では共通鍵暗号を使用しています。
(共通鍵の安全な鍵交換についてはここでは省略します)

VMWare vCenter 6.xのバックアップを取る

vCenter Virtual Applianceで何回もext3をすっ飛ばしてしまったのでなんとなくNTFSWindowsに変更した。
vCenter Virtual Appliance 6.5だとDBのバックアップができるけど、Windowsだとできないので....

vCenter Server Appliance/vCenter Server 6.0 vPostgres データベースのバックアップとリストア (2113661)
VMware Knowledge Base

こちらを参考にとりあえず設定。
後ほどAWS S3にアップロードするなどして対応しよう。

Azure ADからオンプレミスADのドメインを消す

AD FSの再構築の時にAAD Syncのケアを忘れていて再構築の憂き目にあったのでメモ

PowerShellで以下の手順で行う
   1 Connect-MsolService
AADのアカウント(onmicrosoft)でログイン

   2 Get-MsolDomain
AAD Syncで同期しているドメインを確認


   3 Get-MsolUser
現在のユーザ一覧を取得

  4 Get-MsolUser | Where {$_.UserPrincipalName -like "*example.local" } | Select UserPrincipalName | Remove-MsolUser
example.localドメインに属しているユーザを一括で削除


  5 Get-MsolUser | Select UserPrincipalName
削除を確認する


  6 Get-MsolGroup | Remove-MsolGroup
グループを削除する

 

  7 Get-MsolServicePrincipal | Select DisplayName
連動サービスを確認する


  8 Get-MsolServicePrincipal | Remove-MsolServicePrincipal
連動サービスを削除する


  9 Remove-MsolDomain -DomainName example.local
ドメインを削除する


  10 Get-MsolDomain
ドメインが削除されているか確認する

6,8についてはAADのサービスもまとめて削除していますが、削除するとExceptionが出て削除されないので問題無いです。

 

めちゃめちゃ参考にしたリンク

Azure Active Directoryを削除する。なんか消えないんすけど。 | 技術的な何か。