Azure SQL Database Edge は、x64 ならびに ARM64 のデバイス上で動作させることができる、コンテナーの SQL Server となります。
(SQL Server は、2016 以降は x86 は提供していないため、SQL Database Edge も x64 のみとなります)
SQL Database Edge を稼働させるための準備として、RaspberryPi 4B (ラズベリーパイ4 / ラズパイ4) を購入したので、下準備として Docker と IoT Edge ランタイムを動作させるまでの方法をメモとして残しておきたいと思います。
IoT 関連は全く触ってきておらず、ラズパイを使うのも初めてに近いので、そもそもとして間違っていることがあるかもしれません (
ベース環境の準備
RaspberryPi 4 の OS としては Raspbian Buster を使用することが多いのでしょうかね。
Raspbian Buster ですが、armhf (x86) 版での提供となっているようです。
SQL Database Edge には、ARM64 の OS が必要となりますので、この種類の OS を準備する必要があります。
海外では、SQL Database Edge のデモが何回も行われており、SQL Database Edge on Arm Device の動画で使用されているデモ環境が紹介されています。
このスペックですが、CPU /メモリのスペックについては、ラズパイ4 の 4GB モデルと同じかと思います。
以前は、ROCK64 をデモデバイスとして使用していたようですが、最近はラズパイ 4 なのでしょうかね。
このデモでは OS に Ubuntu を使用しているということなので、今回もそれに倣って Ubuntu で環境の構築を行います。
RaspberryPi 向けの Ubuntu については、ARM/RaspberryPi / Install Ubuntu Server on a Raspberry Pi 2, 3 or 4 からダウンロードすることができます。
19.10.1 の ARM64 版のイメージ (ubuntu-19.10.1-preinstalled-server-arm64+raspi3.img) を使用してみたのですが、このイメージは SD カードに書き込めばすぐに起動することができました。
(現時点の、IoT Edge のサポートは Ubuntu 16.04 / 18.04 になりますので、18.04 を入れたほうがチュートリアルをこなしやすいと思いますが)
今回、イメージの書き込みには Win32 Disk Imager を使用しました。
SD カードにイメージを書き込み、RaspberryPi に差し込み起動します。
初期ユーザーである ubuntu (パスワードも ubuntu) でログインして、新しいパスワードを入力すれば、ベース環境の準備は完了です。
SSH でつなげるはずですので、以降の作業はリモートで可能となります。
19.10 という古いイメージの時には ラズパイ 4 の 4GB (1/2 かずあき) モデルでは、メモリのサイズを変更しないと USB を認識しないというような問題がありました。
- [メモ]ラズパイ4B(4GB): Ubuntu 19.10 (arm64) で USBが動かない、の対応
- Bug #1848790: USB not working under arm64 on Pi4
- Fix for Raspberry Pi 4 4GB model’s USB Ports not Working on Ubuntu 19.10
そのため、「/boot/firmware/usercfg.txt」に「total_mem=3072」を記載して、メモリを低い状態で起動して初期のセットアップを USB キーボードで実施してから、設定を戻して SSH で接続して作業をするというような方法か、パッチ適用済みのパッケージを適用してカーネルをアップデートする必要がありました。
現在提供されている 19.10.1 であれば、メモリサイズの変更 / パッチの適用を行わなくても USB を認識しますので、最新のイメージを使用していれば問題はないかと。
Docker のインストール
Docker をインストールする際には、https://github.com/docker/docker-install や、Get Docker Engine – Community for Ubuntu で記載されている作業を実施するのが一般的な導入方法でしょうか。
curl -fsSL https://get.docker.com -o get-docker.sh sh get-docker.sh
moby エンジン(実稼働環境でサポートされているコンテナーランタイム) でインストールする場合は、コンテナー ランタイムをインストールする で記載されている方法を使用します。
Ubuntu 18.04 であれば、Microsoft キーとソフトウェア リポジトリ フィードを登録する で、リポジトリを構成すれば、MS のリポジトリ経由で Moby ランタイムをインストールすることができます。
ラズパイ 4 で Kubernetes タワーも作りたいので、今回は Docker エンジン (IoT Edge の実運用環境では非推奨) を、k8s の v1.16.0 がサポートしている 18.09 をインストールしておこうと思います。
Ubuntu 19.10 を使用した場合、現時点では「get-docker.sh」ではリポジトリ内にリリースファイルがないということで、インストールできないようなので手動でインストールしていきます。
手動でのインストールについては Docker on Raspberry Pi が参考になります。
ARM64 版については https://download.docker.com/linux/debian/dists/buster/pool/stable/arm64/ でパッケージを確認できますので、ここから必要となるバージョンをインストールします。
wget https://download.docker.com/linux/debian/dists/buster/pool/stable/arm64/containerd.io_1.2.6-3_arm64.deb wget https://download.docker.com/linux/debian/dists/buster/pool/stable/arm64/docker-ce-cli_18.09.9\~3-0\~debian-buster_arm64.deb wget https://download.docker.com/linux/debian/dists/buster/pool/stable/arm64/docker-ce_18.09.9\~3-0\~debian-buster_arm64.deb sudo dpkg -i containerd.io_1.2.6-3_arm64.deb sudo dpkg -i docker-ce-cli_18.09.9\~3-0\~debian-buster_arm64.deb sudo dpkg -i docker-ce_18.09.9\~3-0\~debian-buster_arm64.deb sudo usermod -a -G docker $USER sudo reboot
インストールが終わって docker コマンドが使用できるようになったら、Hello World を実行して動作確認をしてみます。
docker run --rm hello-world
正常に動作しましたので、Docker の準備はこれで完了です。
IoT Edge ランタイムのインストール
Azure SQL Database Edge は、Azure IoT Edge の IoT Edge モジュールとして起動されますので、作成した環境に IoT Edge ランタイムをインストールします。
現時点では、IoT Edge ランタイムがサポートしている Ubuntu Server は 16.04 / 18.04 となっており、今回使用した 19.10 は現時点ではサポート対象となっていませんが、今回は動けばいいやということでとりあえず入れます。
(そして動きました)
最初に試したときは、libssl がインストールされていなくてエラーになっていたので、ひとまず IoT Edge ランタイムのインストールと合わせてインストールしています。
wget http://launchpadlibrarian.net/413028781/libssl1.0.0_1.0.2g-1ubuntu4.15_arm64.deb sudo dpkg -i libssl1.0.0_1.0.2g-1ubuntu4.15_arm64.deb curl https://packages.microsoft.com/config/ubuntu/18.04/multiarch/prod.list > ./microsoft-prod.list sudo cp ./microsoft-prod.list /etc/apt/sources.list.d/ curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg sudo cp ./microsoft.gpg /etc/apt/trusted.gpg.d/ sudo apt-get update sudo apt-get -y install iotedge
ここまでの作業が終われば セキュリティ デーモンを構成する で接続文字列の設定の作業を実施すれば IoT ハブとの通信ができるようになっているかと思います。
この後、SQL Database Edge を実際に試すためには、早期導入プログラム (EAP : Early Adoption Program) の承認を得てから、Azure SQL Database Edge のドキュメント の Azure SQL Database Edge プレビューのデプロイ の内容に従って展開を行うことになります。
[…] https://blog.engineer-memo.com/2019/12/07/raspberrypi-4b-%e3%81%a7-docker-%e3%81%a8-iot-edge-%e3%83%… […]
【後で読みたい!】RaspberryPi 4B で Docker と IoT Edge ランタイムを起動するための準備 | Tak's Bar
8 12月 19 at 16:30