【新機能】VPCのDNSでRFC1918範囲外のプライベートIPアドレス名前解決
先ほど情報収集をしていたところAWSから以下のような発表が出ているのを見つけました。
Announcing EC2 DNS Support for Non-RFC 1918 Address Ranges
要するに、
今まではRFC1918で定義されている範囲内のものしかVPC内のDNSサーバでは名前解決できなかったけど、
その範囲外でも特別な設定不要でできるようになったよ。
ということみたいです。
ちなみにRFC1918で定義されているプライベートIPアドレスは以下のもの。
- 10.0.0.0/8 (クラスA)
- 172.16.0.0/12(クラスB)
- 192.168.0.0/16(クラスC)
プライベート網のアドレス割当(RFC 1918) - JPNIC
私がこれまで関わったAWSのシステムはこの範囲内で済んでいたので困ったことはありませんでした。
あとこの範囲外だとVPCのDNSで名前解決できなかったということも初めて知りました。
試してみます。
今回は28.0.0.0/16というVPCを作成し、そのVPC内に適当なサブネット、ルーティング、セキュリティグループなどを設定し、 同一サブネット内にEC2インスタンスを2つ起動して、片方からもう片方のホスト名で名前解決できるか試します。
EC2インスタンス①:ip-28-0-1-103.ap-northeast-1.compute.internal
EC2インスタンス②:ip-28-0-1-254.ap-northeast-1.compute.internal
インスタンス①にSSHログイン後、以下コマンドを実行します。
[ec2-user@ip-28-0-1-103 ~]$ nslookup ip-28-0-1-254.ap-northeast-1.compute.internal Server: 28.0.0.2 Address: 28.0.0.2#53 ** server can't find ip-28-0-1-254.ap-northeast-1.compute.internal: NXDOMAIN
え。。できませんがwww 東京リージョンは未対応だっけ?
と思いドキュメントをよく見るが、わからず。
「DNSホスト名」設定が無効でした
凡ミスでした。VPCから「DNSホスト名」の設定を有効にしましょう。
改めてチャレンジ。
[ec2-user@ip-28-0-1-103 ~]$ nslookup ip-28-0-1-254.ap-northeast-1.compute.internal Server: 28.0.0.2 Address: 28.0.0.2#53 Non-authoritative answer: Name: ip-28-0-1-254.ap-northeast-1.compute.internal Address: 28.0.1.254
おおー!できたー
この機能を待ちわびていた人もいるんでしょうかね。
またひとつAWSを覚えました。
注意点
ドキュメントにもありますが、2016年10月以前に作成したVPCだとRFC1918範囲外のプライベートIPアドレスの名前解決ができないようです。 どうしてもやりたければサポートに連絡してね。とのことです。
Raspberry PiでLEDを制御する(Lチカ)
参考
http://qiita.com/toshihirock/items/880a43ff4a5506b629c5
前提
Raspberry Pi 2 +
(3でもいけるはず)
Raspberry PiにLEDを接続する
※Raspberry Piの電源が落ちている状態で実施すること。
ブレッドボードにLEDをさす。
(長い方の足が+になるのでどちらの足が長い方か覚えておく。)
※ブレッドボードの使い方は以下参照
http://bbradio.sakura.ne.jp/guide1/guide1.html
ジャンパーピンでRaspberry Piとつなぐ。
- 足が長い方とGPIO18
- 足が短い方とGround
※PIN配置は以下参照
コマンドでLEDを光らせる
Raspberry Piの電源を入れる。
GPIO18を使いますよ、と教えてあげる。
↓
出力
↓
使い終わったら解放。
まずは最初の状態を確認 $ ls -la /sys/class/gpio/ gpio18は表示されてないので準備できていない。 準備 $ echo 18 > /sys/class/gpio/export もっかい確認 $ ls -la /sys/class/gpio/ gpio18が出力されることを確認。 GPIO18を出力信号として利用することを書き込む $ echo out > /sys/class/gpio/gpio18/direction これで準備OK。 ON $ echo 1 > /sys/class/gpio/gpio18/value 光る! OFF $ echo 0 > /sys/class/gpio/gpio18/value 使い終わったらこのコマンド $ echo 18 > /sys/class/gpio/unexport 解放されたことを確認 $ ls -la /sys/class/gpio/ GPIO18がないことを確認
node.jsで制御する
node.jsのセットアップ方法は別エントリー参照。
sleepを使えるようにする。
$ npm install sleep
nodejsのコードを書く。
$ vi led.js
var fs = require('fs'); var sleep = require('sleep'); var pin = 18; fs.writeFileSync('/sys/class/gpio/export', pin); fs.writeFileSync('/sys/class/gpio/gpio' + pin + '/direction', 'out'); console.log("ON"); fs.writeFileSync('/sys/class/gpio/gpio' + pin + '/value', 1); sleep.sleep(5); console.log("OFF"); fs.writeFileSync('/sys/class/gpio/gpio' + pin + '/value', 0); fs.writeFileSync('/sys/class/gpio/unexport', pin);
実行
$ sudo node led.js