【新機能】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のシステムはこの範囲内で済んでいたので困ったことはありませんでした。
あとこの範囲外だとVPCDNSで名前解決できなかったということも初めて知りました。

試してみます。

今回は28.0.0.0/16というVPCを作成し、そのVPC内に適当なサブネット、ルーティング、セキュリティグループなどを設定し、 同一サブネット内にEC2インスタンスを2つ起動して、片方からもう片方のホスト名で名前解決できるか試します。

インスタンス①に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アドレスの名前解決ができないようです。 どうしてもやりたければサポートに連絡してね。とのことです。

docs.aws.amazon.com

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配置は以下参照

http://3.bp.blogspot.com/-Ku5ebiKuzUY/VQDt2QcUllI/AAAAAAAAASA/wh6XOwIBQDw/s1600/raspberrypi_gpio_pinassign.png

コマンドで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