AWSのクラウドAIで顔画像情報を分析する

AWSの「Rekognition」サービスを使用して、顔画像の分析情報を取得してみました。
Raspberry Pi等のエッジデバイスで撮影した画像に対し、エッジではなくクラウド側で処理した場合に、どの程度ラグが出るのかを確認したいと考えた次第です。

「Rekognition」サービスについて

AWSが提供しているマネージドな視覚分析(画像分析)サービスです。顔画像をアップロードする、WebAPIとしてデータをPOSTする等データの受け渡しを行うことで、年齢、性別の他、多くの情報を分析してくれます(笑顔、表情、サングラス・顎鬚の有無など)。 また今回は使用していませんが、これ以外にも、画像データから次のような分析も可能です。

  • ラベル検出(物体検出)
  • 画像の節度(倫理的に不適切な画像をモザイク処理する)
  • 有名人の認識(似ている有名人を探す)
  • 顔の比較(複数の顔画像の類似性を示す)
  • イメージ内のテキスト(画像から文字を判定)← 現時点で日本語は未対応

AWS Rekognition(顔の分析)>

処理の流れ

全体構造を図示すると、以下のようになります。

① PCのカメラで顔を撮影し、OpenCVのカスケード分類器で顔を検出。
② 顔画像をAWSIoTCoreに送信(Publish)する。顔画像はBase64エンコード
③ ルールエンジンを使用して画像をBase64のままDynamoDBに登録。
④ テーブルのStreamでLambdaを起動。
⑤ LambdaでBase64をデコードしてRekognition(画像分析AI)に渡す。
JSONで認識結果が返却される。Lambdaでデータを取得。
⑦⑧ MQTTでPCに分析した結果を戻す(Publish)。
OpenCVで画面に分析結果文字を合成して、画面に表示。

処理結果

実際に実装してみた結果で、画像撮影 → 画面への分析結果表示までを何度か試してみました。
※実装方法については、こちらのGitHubをご確認ください。

<分析結果の画面表示イメージ>

画像の取得から、分析した情報を画面に表示するまでのタイムラグは、2秒~3秒 程度でした。

以下のGitHubにアニメーションGIFを掲載しています。
github.com

結論

応答速度は予想以上に早かったです。 運転時の画像判断といったミリ秒単位のアクションはできませんが、それ以外の用途であれば、十分使用に耐えうるレベルということがわかりました。

実装方式の補足

このような機能を実装する場合、データの受け渡し方法がいくつかあります。

  1. クライアント<jpg画像を保存>→(AWS SDK)→S3→lambda→Rekognition
  2. クライアント<jpg画像を保存>→(Web API)→Rekognition
  3. クライアント(AWS WebRTC SDK)→Kenesis Video Streams→Rekognition

今回は上記のいずれでもなく、ちょっと特殊な方法を実装してみました。

  クライアント<Base64 Encode>
   →(MQTT)→IoT Core
    → DynamoDB → Stream
     → lambda<Base64 Decode>
      → Rekognition

本来のベストプラクティスは「1」(動画なら3)であり、MQTTはパケットサイズ上限やデータ損失等の問題から、おそらく画像送信には向いていません。今回これを採用した理由は以下のような事情からです。

  • AWS SDK、Web APIと異なり、IAMのAccess Key や Secret Access Keyを使用せずに済む
  • 画像バイナリのデータ送受・変換方法を理解したかった(OpenCV→ndArray→jpg)
  • データの送受信ルートを1方式に絞りたかった

ESP32 EN(Reset) PINを使用した消費電力化

ESP32の動作検証について

最近、ESP32を本格的に動かす機会が増えたため、実践した部分を備忘として書き出していこうと思います。ESP32が何者かについては、割愛しますので、Wikipedia等の情報をご確認ください。
なお、自身はハードの専門家ではなく電子工作の知識も不十分。「動けばいいな」程度の知識しかなく、検証に使用したESP32もすでに2台がご臨終しました。検証サンプルをマネされる場合は自己責任でお願いします…。

ESP32のスリープモード

今回はESP32を電池やバッテリで駆動させる場合に、可能な限り電力を長持ちさせる「スリープモード」を調べました。
ESP32には、消費電力を抑えるための「スリープモード」が、大きく3種類存在します。

  • Modem-sleep mode :CPUの動作を維持したまま、非通信時にWiFi用のRF回路をオフにして電力をおさえる。WiFiとの接続は維持。
  • Ligth-sleep mode : 通信が行われないときにはWiFi用のRF回路をオフにし、CPUの実行をサスペンド。GPIOなどの入力情報をトリガーに何かを実行するのに向いている。
  • Deep-sleep mode : RTCのみの電源がオンでCPUは停止状態。復旧時に再起動されて、setup()から実行される。一定間隔(タイマー)で何かを実行するのに向いている。

電力消費仕様

上記の消費電力は、公式データシートの、以下の章に記載されています。

ポイントを要約すると、通常(『Active mode』)では 100mA 前後消費(WifiやBLE状況の使用状況に依存)する電力を、『Light-sleep mode』で動作させた場合は 0.8mA(125分の1)、『Deep-sleep mode』で動作させた場合は 0.15mA(666分の1) まで下げることができる、ということ。

サンプルPG

配線図

ソース(ESP32)

void setup() {
  // シリアル出力初期化
  Serial.begin(115200);

  // シリアル出力初期化
  Serial.println("Sleep!!");
  esp_deep_sleep_start();
  Serial.println("Wake?(on setup)"); // ← 出力されない
}

void loop(){
  // ダミー出力
  Serial.println("Wake?(on loop)"); // ← 出力されない
}

ここで照会するサンプルは、次のような動作をする。
リードスイッチは普段ONの(磁石が近づいている)状態が前提である。
このとき、プルアップによりEN(Reset)ピンへの入力はHIGHである。

  • ESP32は起動時にSetup()処理を行い、直後にDeepSleepに移行する。
  • DeepSleep中は、上表のとおり電力消費が最低に抑えられている。
  • リードスイッチが磁石から離れる(スイッチがOFFになる)と、EN(Reset)ピンへの入力がHIGH→LOWに変わる。
  • EN(Reset)ピンへの入力変化により、ハードウェアリセットがかかる。
  • 再度Setup()の処理が実行される。
  • その後、再度DeepSleepに移行する。

基本動作がDeepSleep状態であるため、相当に消費電力を抑えられるはずである。

Microsoft Azure Fundamentals (AZ-900) 合格記

Azure 資格合格

この度、Microsoftパブリッククラウド Azure の入門資格である、「AZ-900 Azure Fundamentals」に合格しました。今回は、その合格記を以下に記そうと思います。

f:id:camelrush:20220325224102p:plain

。。。AWSに比べると、あっさり目の認定証でした。。。

受験のきっかけ

パブリッククラウドでは、すでにAWSのSAA(Architect Associate)を持っていましたが、そちらとの違いを学んでおいた方がよかろうと思い、受講しました。

資格体系

Azureでは、下図のような資格体系が採られています。

f:id:camelrush:20220325232159p:plain

一番下の「基礎トレーニング」層に「AZ-900」があり、その上位にはAssociateレベルとして、次の3つがあります。

  • AZ-104 Azure Administrator
  • AZ-204 Azure Developer
  • AZ-500 Azure Security Engineer

さらにその上にはExpartレベルとして次の2つがあります。

  • AZ-304 Azure Solutions Architect
  • AZ-400 DevOpt Engineer

受験料(¥12,500/回 が完全無料に)

Microsoftの『Fundamentals: Azureの基礎 - 【AZ-900無料試験特典付き】』という、6時間(3時間✖️2日)のオンライン講義を受講するだけで、¥12,500/回の受験料が無料になります。
『受講』といっても構える必要はなく、指定時間にオンライン動画にアクセスしてを再生するだけでチケットがもらえるので、やらない手はないです。知らずにお金を払った人がかわいそう!

www.microsoft.com

対策

今回はUdemyで、以下の問題集を全てやり切りました。

www.udemy.com

私の場合、AWSパブリッククラウドの基礎を理解していたので、問題集の消化で対処できた感じです。クラウド未経験の方は、これと別にテキスト勉強など準備した方が良いかもしれません。

結果

スコアは700点満点中、871点 で合格となりました。

f:id:camelrush:20220325234504p:plain

受験当日の印象ですが、上のUdemyよりは内容は簡単だった印象です。戸惑ったのが、サービス名の改訂。Udemy「Azure Security Center」→試験「Microsoft Defender for Cloud」に変わっており、面食らいました。

余談

受験動機であったAWSとAzureの差異ですが、結局、あまりわかりませんでした。試験対策勉強に特化させてしまったので。サービス名称は違うけどほとんど同じかな、基礎の範疇では、と。
1点だけ、以下の点は違うと理解しました。

  • ✖️ AWS : コスト上限に達してもサービスは継続される(通知はくる)
  • ◯ Azure : コスト上限に達するとサービスが停止し、課金が止まる

万が一とはいえ、クラウド破産は怖い。リスクが抑えられるってのは、微妙にありがたいと思います。

MacBook Air M1 2020 レビュー

Mac Book Air 購入しました

一週間前の2021/12/12、MacBook を購入しました。 PCはMicrosoft一筋で生きてきた自分にとって、これがMacデビューとなります。
購入したのは以下の商品で、価格は¥137,280でした。

f:id:camelrush:20211219014845p:plain 上記のリンク ※ユニファイドメモリ8GB版が初期表示されます

購入してから1週間が経過したので、簡単なレビューを行いたいと思います。(このブログもMacBookから投稿しています)

購入目的

既存ノートPCの買い替え(ファンがうるさかった)

元々、持ち歩きには、3年前に購入したこちらのDynaBookを使用していました。2013年モデルなので、今から9年前のものになるんですが、薄型軽量、持ち歩きに便利で、ストレージも256SSD(MSATA)とそこそこ快速で、重宝してました。

f:id:camelrush:20211219020418p:plain

dynabook KIRA V832/W2, V632/W2(Core i7) 2013春モデル Webオリジナル ハードウェア仕様 |東芝ダイレクト

このPC、第3世代 Core i7ながら2Coreと非力なため、ちょっと重い処理が入っただけでファンが全開になります。
コロナ禍前はオープンカンファレンスなどによく参加していたのですが、ハンズオン中にファンがうるさく、リアルタイムでTwitterで書き込まれたことがありました(T-T

Macの操作・用語を理解したかった

昨今はブログやYoutubeから技術を学ぶ機会が多くなりましたが、操作方法やターミナルコマンドも、Mac依存の内容が多く出ています。また、ハンズオンセミナーに出ると、受講者の半分がMac使いということがあるため、情報共有に苦労することがありました。
こういうことは実践で学んだ方が早いと思い、この期にMacを導入した次第です。まぁ、異文化交流みたいなもんですね。英語を覚えるのに、まずは海外旅行に行ってみる、みたいな。

シンクライアントであればなんでも良い時代

最近は、クラウドクロスプラットフォーム化、Webアプリケーションが多勢であり、端末OSに依存しない時代です。
なので、ぶっちゃけシンクライアントの機能が果たせれば、WindowsだろうとMacだろうとRaspberryPiだろうとChromeBookだろうと、なんでもよかったわけです。逆にいうと、そういう用途を選択したためストレージも256GBモデルを選択しており、ParallelsWindowsと併用とかは、あまり考えていません。

レビュー

前評判が非常に高い

購入した「MacBook Air M1 2020」ですが、ネットで評価が非常に多く、特に以下の評価ポイントが高いようでした。

  1. 薄型軽量で持ち歩きやすい
  2. 電源持ちが非常に良い(フル充電で18時間程度持続)
  3. コストパフォーマンスが良い
  4. M1プロセッサ性能が高く動画編集もスムーズ

これらは私のような、にわかMacユーザだけではなく、従来からのMac信者(尊敬を込めて)の方々も、軒並み高い評価を出しています。

◎持ち歩きやすい

まだ家でしか使っていないため想像の範囲ですが、持ち歩きはそこそこしやすいと思っています。

  • 重量は前使用のDynaBookと同程度(1.4〜1.5Kg?)
  • USB Type-Cで映像出力可能。ポータブルモニタと相性◎
  • 単独使用ならバッテリがほとんど減らない

最近、これと別にポータブルモニタも購入したため、早くカフェでデュアルディスプレイとかしたいなーと思ってますw

◎静音・冷却性能が良い

一番気に入ったのが、ファンレスモデルのため使用時に音が全くしないこと、それでいて発熱もほとんど感じないことです。パームレストも常にひんやりとしており、冬の北海道だと、逆に温もりが恋しくなるほどですw
また、キーボードが打ちやすくタイピングに音がしないのもありがたい。隣で子供が寝ていても、安心してタイピングができます。

◯Magicパッドが使いやすい

最近のMacはノートにマウスをつけないんだなぁ、と思っていましたが、「つけない」のではなくて「いらない」ってのがわかりました。

特に、従来のWindowsと違って使用するのは「指2本でスクロール」「指2本タップで右クリック相当」です。これだけで「あ、マウスいらないや」と理解しました。ただ、この発想はWindowsの設定でも可能なのかも。今度調べてみようと思います。

▲キー配置に慣れない

特に次の2つです。

  • 「Command」キーが左下隅にないこと
  • 日本語⇔英語変換が別々のボタンであること

特に前者。「Command」ボタン(Windowsでいう「Ctrl」ボタン)が左下隅になく、そこにあるのが「↑」ロック(Windowsの「Caps」キー)なので、うっかり押してしまう、という問題。

f:id:camelrush:20211219023718p:plain

また、この「Command」ボタンと「C」「V」が近いので、コピペを押すのが難しいという問題がありますね。

▲ライブ変換に慣れない

使ってみて一番に違和感を感じたのが「ライブ変換」という機能。
Windowsの場合、ひらがな入力後、スペースや変換キーを押すことで明示的な漢字変換をしますが、Macではひらがなを入力している最中に、先頭文字からどんどん漢字変換されていきます。紹介者によってはこれが便利!という触れ込みをするんですが、先頭が変換されてしまうことによって、入力カーソルの位置が意図せず移動(戻ったり)するので、まだちょっと慣れないですね。

総評

結論でいうと、気に入りました。少なくともあと4〜5年は付き合っていけそうです。

まだ持ち歩いたりしていないため、▲は、全てキータイプに関連するものです。これらはWindowsユーザ向けに機能自体をOFFにしたり、設定を変更することもできそうですが、あえてMacの沼にハマっていこうと思いますw

AWS re:Invent 2021 ClassMethod Re:Growth を 見て

youtu.be

セキュリティ系アップデートまとめ

AWS Well-Architected フレームワークの柱が5本から6本に

  • サステナビリティの柱を追加
  • コスト最適化や、マネージドサービスを推進することで、エコ推進?

コンピュートサービスの進化を語る

新たなEC2ファミリの発表

1年ぶりにNitroに想いを馳せる

Nitroとはなんぞや

Nitroの発表内容

何が嬉しい?Amazon S3 Object ACL無効化

  • S3 Bucketに、Ownershipポリシー「BucketOwnerEnforced」を指定することで、これまで当該BucketにPushできなかったACL付与オブジェクトが、Push可能となる。(これまでは、一旦オブジェクトの所有者を、Bucketの所有者に切り替えてから入れる必要があった)
    f:id:camelrush:20211210020827p:plain

    ↓ なかなか秀逸な表現w
    f:id:camelrush:20211210015757p:plain

re:Inventのキーワードからみる将来

  • (未編集)

Amazon店舗体験記〜最新の「Just Walk Out」のここがすごかった〜

シアトルのAmazonショップ 照会

  • 店舗外観・内装
    f:id:camelrush:20211210021015p:plain f:id:camelrush:20211210020957p:plain
  • ショッピングカートに、コードスキャナと画面。 f:id:camelrush:20211210021216p:plain
  • 日本国内にも、これに近い感じのがある ↓ けど、↑ はスキャンが不要。どちらもバーコードをスキャンしているのは同じだけど、「スキャナに充てさせる」か、可能な限り「スキャナが拾いに行く」かの違い。やっていることは同じなんだけどね。
    gasket.bizright.co.jp
  • 以下の対比表を見て。
    f:id:camelrush:20211210022629p:plain
    DevIOカフェってなんだ?って思ってたら、ClassMethodさん、こんなことやってたのね…。しらんかった…。
    cafe.classmethod.jp

Amazon SageMaker周りのアップデート

Amazon DevOps Guru for RDSを5分でざっくり理解する

  • (未編集)

データ分析のトレンドと注目の新機能

  • (未編集)

Figma連携でReact UI Component自動生成!AWS Amplify Studio解説

  • (未編集)

AWS SDKAmazon CloudWatch関連アップデート

  • (未編集)

AWS Private 5Gについて今わかっていること

  • (未編集)

AWS re:Inventの10年を振り返る

  • (未編集)

クロージング

  • (未編集)

AWS EC2上でElasticSearch + Kibana環境を構築する

前置き

以前、Windows上で構築したElasticSearch+Kibana環境を、AWS EC2(Amazon Linux2)上に構築する。

本来、AWSには「Amazon OpenSearch」という、まさにこの2つのサーバ環境を備えたサービスが存在するのだけど、少し触った感じだと、構築した後にインスタンスの停止・再起動といったことができないようで、維持するのになかなの課金がかかるみたい。

近日、会社でIoTがらみの研修を開くことになったので、復習もかねて構築にトライすることにした。

今回の構築で分かったこと

安定的に動かすならば、EC2ファミリでは「t3.large」(メモリ8GB)以上がよい。

ElasticSearchサービスは、デフォルトで2GBのメモリを使用するらしく「t2.micro」(メモリ1GB)で起動すると、起動に失敗したり、途中からコマンドを受け付けなくなる。

ググると、jvmの設定変更を駆使して256MBで動かしている人もいたけど、あくまで検証作業なので、そこまでシビアに絞らんでもよいと判断しました。

事前準備

VPN / Subnet / EC2 作成

独立したVPN一つと、publicサブネットを一つ作成し、上にEC2を構築する。

種別 名前 IPアドレス
VPC biweb-dev-vpc 10.0.0.0/16
サブネット biweb-dev-pub-subnet1 10.0.32.0/20
EC2 biweb-dev-web 10.0.20.240/20
  • EC2を作成する前に、サブネットの「自動割当IP設定」を有効化する。
  • EC2作成時、セキュリティグループには、SSHアクセスだけを許可とする。Sourceは「マイIP」をクリックして自宅のIPからの要求だけ許可とする
  • EC2作成後、アクセス用のキーペアをダウンロードして保存しておく。
  • EC2作成後、パブリックIPv4アドレスが割当されていることを確認する。

自PCからのSSHアクセス

  • VPCメニューから、インターネットゲートウェイを作成(biweb-dev-igw)して、サブネット(biweb-dev-pub-subnet1)にアタッチする。
  • VPCメニューから、サブネットを選択し、作成したサブネットのルートテーブルに以下を加える。

    送信先 ターゲット
    0.0.0.0/0 (作成したIGW)
  • ローカルPCで「Tera Term」を起動して、「Host」に作成したEC2のパブリックIPv4アドレスを指定する。

    f:id:camelrush:20211020212657p:plain

  • OK押下後の認証画面で、以下の内容を設定してOKをクリック。

    • 「User name」に「ec2-user」(これは固定値)
    • 「Use RSA/~(略)~ key to log in [Private key file:]」に、ダウンロードしたキーを選択

    f:id:camelrush:20211020212903p:plain

  • 以下のとおり、ログインが成功すれば、準備OK。

    f:id:camelrush:20211020213315p:plain

必要ソフトのインストール

yumリポジトリ更新

$ sudo yum update -y

java8 OpenJDK

$ sudo yum install java-1.8.0-openjdk.x86_64

Elastic Searchインストール

以下を参照しつつ、RPMからのインストールを行う。

www.elastic.co

GPG-KEYをローカルリポジトリにインポートする

$ sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

※【補足】GPGの説明はこちらを参照

ElasticSearch RPMのrepoを所定フォルダに生成する

エディタはなんでもいいですが、今回は nano を使いました。

$ sudo nano /etc/yum.repos.d/elasticsearch.repo

elasticsearch.repo への記載内容は以下の通り。

[elasticsearch]
name=Elasticsearch repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=0
autorefresh=1
type=rpm-md

インストールコマンドを実行する

$ sudo yum install --enablerepo=elasticsearch elasticsearch
:
:
Installed:
  elasticsearch.x86_64 0:7.15.1-1

Complete!

外部アドレスからのアクセスを可能にする

以下のコマンドで設定ファイル「elasticsearch.yml」を開く。

$ sudo nano /etc/elasticsearch/elasticsearch.yml

以下の箇所に追記を行って、ファイルを保存。

# By default Elasticsearch is only accessible on localhost. Set a different
# address here to expose this node on the network:
#
#network.host: 192.168.0.1
network.host: 0.0.0.0   # ←ここを追記
discovery.type: single-node # ←ここを追記

また、同じファイルに対して最後の行に次の内容を設定しておく。

xpack.security.enabled: false

意図としては「セキュリティ機能を使用しない」というもの。本来はtrueとし、パスワード等を設定するのだが、今回はあえて使用しない。この設定を明示的にしないと、Kibana操作時に画面でやいのやいの言われる。

↓ やいのやいの の例

f:id:camelrush:20211104225632p:plain

システム起動時にElasticSearchを起動するようにする(systemd)

$ sudo /bin/systemctl daemon-reload
$ sudo /bin/systemctl enable elasticsearch.service

$ # (ちなみに、システムを 起動をやめさせたい場合は次のとおり)
$ sudo /bin/systemctl disable elasticsearch.service

動作確認

PCを再起動。

$ sudo shutdown -r now

再起動後、起動状態をチェックする

$ sudo systemctl | grep elastic
elasticsearch.service         loaded active running   Elasticsearch

以下のコマンドでサービス自体の起動を確認(デフォルトポートは 9200)

$ sudo curl http://localhost:9200
{
  "name" : "ip-10-0-23-98.ap-northeast-1.compute.internal",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "9RtovLuBTuyvlNjuMLLekg",
  "version" : {
    "number" : "7.15.1",
    "build_flavor" : "default",
    "build_type" : "rpm",
    "build_hash" : "83c34f456ae29d60e94d886e455e6a3409bba9ed",
    "build_date" : "2021-10-07T21:56:19.031608185Z",
    "build_snapshot" : false,
    "lucene_version" : "8.9.0",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}

同様に外部からのアクセスを確認。ブラウザで「http://[ip address]:9200/」にアクセスし、上と同じ表示がされればOK。

Kibanaインストール

以下を参照しつつ、RPMからのインストールを行う。

www.elastic.co

GPG-KEYをローカルリポジトリにインポートする

$ sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

↑ ここはElasticSearchと同じレポジトリなので実施不要

Kibana RPMのrepoを所定フォルダに生成する

$ sudo nano /etc/yum.repos.d/kibana.repo

kibana.repo への記載内容は以下の通り。

[kibana-7.x]
name=Kibana repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md

インストールコマンドを実行する

$ sudo yum install kibana 
:
:
Installed:
  kibana.x86_64 0:7.15.1-1

Complete!

外部アドレスからのアクセスを可能にする

以下のコマンドで設定ファイル「kibana.yml」を開く。

$ sudo nano /etc/kibana/kibana.yml

以下の箇所に追記を行って、ファイルを保存。

# To allow connections from remote users, set this parameter to a non-loopback $
# server.host: "localhost"
server.host: "0.0.0.0"   # ← ここを追記

システム起動時にKibanaを起動するようにする(systemd)

$ sudo /bin/systemctl daemon-reload
$ sudo /bin/systemctl enable kibana.service

動作確認

PCを再起動。

$ sudo shutdown -r now

再起動後、起動状態をチェックする

$ sudo systemctl | grep kibana
kibana.service         loaded active running   Kibana

以下のコマンドでサービス自体の起動を確認(デフォルトポートは 5601)

$ sudo curl http://localhost:5601

↑ 特にエラーなど、何もでなければ、おそらく(笑) 問題なし。 ブラウザで「http://[ip address]:5601/」にアクセスし、下の画面が表示がされればOK。

f:id:camelrush:20211027000040p:plain

あとがき

なんとか構築にはこぎつけました。所要、14時間程度。冒頭で書いたメモリ不足に気づくまで、4~5時間かかってしまったが、まずまずの進捗。次回は、Raspberry PiからのMQTTデータを流し込んで、Kibanaでのグラフ表示を実現します。

HDD、分解してみた

「HDDは、20世紀末から存在するコンピュータ向けのストレージであり、円盤状の磁気ディスクに、スライド式のヘッドを当てることにより、情報の記録、読み取りを行っている」

今回はそんなHDDを、実際に分解して内部構造を調べてみたので、その内容について書いてみたいと思います。

分解の儀

必要な工具

今回のHDDでは、精密ドライバ(トルクスドライバ)のT5、T6を使用しました。

犠牲

生贄の羊は、TOSHIBA製 MK6465GSX(640GB)。

f:id:camelrush:20211016190213j:plain f:id:camelrush:20211016184708j:plain

ジャンクPCから取り外したもので、ノートPCに取り付けたところ不良があるのか、BIOS起動時にディスクエラーが表示されます。使っていても微妙な異音がするので、継続使用を諦め、今回犠牲になってもらいました。

外装の撤去

まずは外装を取り外します。トルクスドライバで表と裏を取り外したところ。

f:id:camelrush:20211016190744j:plain f:id:camelrush:20211016190730j:plain

読み出しヘッド部分

円盤横についている、5cm弱の小さな部品が読み出しヘッドのようですね。薄い鉄が3層重ねられており、うまくスライドするように、プラスチック(白)のガイドもあるようです。

f:id:camelrush:20211016190841j:plain

取り出すとこんな感じ。

f:id:camelrush:20211017005234j:plain

ディスク部分

読み出しヘッドを取り出すと、2枚の円盤が見えました。何枚が入っているのかが、以前から不思議だったんですが、2枚だけなんですね。てっきり、超薄型で10枚程度入っているのかと思ってたので、ちょっと拍子抜けしました。

f:id:camelrush:20211017005305j:plain

2枚のディスクを、中央の突起部分(モータ)で回すようになっています。残念ながら、このモーター部分の解体まではできませんでした。

f:id:camelrush:20211017005336j:plain

全バラ結果

最終的には、以下の部品に分類されます。細かいネジが結構ありますね。

f:id:camelrush:20211017013322j:plain

後で見たら

以下に全部書いてありました。Wikipediaってすごいね、ってオチでしたw

ja.wikipedia.org

初めてのHDD

HDDに初めて触れたのは、1988年(中学2年)頃だったと思う。田舎町で電器屋を営んでいた父が、20MBのHDDを家に持ち込んできた。当時の価格は20万円。今では信じられないが、当時は1万円/1MBという価格設定だった(1GBじゃなくて1MBだよ。)インターフェイスもUSBではなくて、SCSI-1という幅20cm弱ある大き目のコネクタだったのを覚えてます。 今から30年以上前の話なので、内部の作りもここまでコンパクトにはなってなかったんだろうなぁと…、今では想像しかできませんが…。