helloworlds

not a noun, it's a verb

【VR】Oculus GoをPCへミラーリングさせる(無線)

先日Oculus Goが家に届きました!

私が購入したのは、これ。

www.oculus.com

64GBの方を選びました。 俗に言うスタンドアローンというVR機器になるようです。

カートに入れて、購入完了して数時間で発送しますね!というメールがきました。 大体到着まで5日間ほどで手元に届きました。

「けっこうはやいな!」

中身を見てみるとけっこうシンプルにまとまっていました。 メガネを日頃かけている方でも安心。 メガネをかけている人用のアクセサリーみたいなのも付いていて、 スマホのアプリからOculusの設定をする時に、装着ムービーも丁寧に紹介されていました。

(※ わかりやすいように、画像を載せようかと思っていたのですが、この記事では割愛します。が、その分丁寧に書いてくつもりです! また、後日画像を掲載させていくかもしれません。合わせて詳細も追記していければと思います。)

ここから、"PCへのミラーリング"について順をおって説明します。 今回は以下の記事を参考にさせて頂きました!さっそく先人の方に感謝...!!

Oculus Goの画面をPCにWirelessでミラーリング表示する

準備

まず、色々準備が必要です。 すんなりいけば大丈夫ですが、私はある設定で少し詰まりました... スマホアプリの開発を経験されている方はけっこうすんなりいきそう...

では、まず環境から。 あくまで私の環境ですので、他の環境では試していません。随時、自分にあった環境の設定方法をググる必要があるかもしれません。

環境: Windows10 (デスクトップPC) ブラウザ: Chrome

1. スマホアプリと連携

iPhoneならApp Storeで、AndroidならPlayストアOculusというアプリをダウンロード。

ログインを行い(アカウントを作成する必要があります)、手順に従って連携完了まで行う。

1-2. 開発者モードにする

ミラーリングするにしても、Unityで開発を行うにしても Oculusに対して開発者モードに設定する必要があります。

まず、以下のURLへ移動しログインします。

https://dashboard.oculus.com

そうすると、「新しい団体の作成」という画面が表示されるかと思います。 任意の団体名を記入し、送信し、完了させます。

完了すると以下の画面が出てくるかと思います。

f:id:o21o21:20180531111157p:plain

一旦これでOKです。

スマホアプリに戻ります。

画面下部メニューの"設定" -> 接続しているOculus(シリアルナンバー付)をタップ

-> ”・・・その他の設定” -> "開発者モード" -> スイッチを"有効化" (青色にする)

これで完了です。

2. Android Studioをインストール

続いては、PCの方です。

色々調べてみると、ミラーリングするだけだったらadbコマンド (Android Debug Bridge)が使用できていれば問題なさそうです。 なので、既にAndroidの開発などをされている方は、不要かもしれません。 ここでは将来的にUnityでOculus Goを開発することを目的にしたいので、一気にAndroid Studioをインストールします。

公式: Android Studio概要

以下のURLに行って、ダウンロードします。

Download Android Studio and SDK Tools  |  Android Developers

f:id:o21o21:20180531114053p:plain

  1. ダウンロードした.exeを開きます。
  2. 特に指定がなければ全部デフォルトでインストール&Nextボタン押下で大丈夫です
  3. 全てのインストールが完了すると、Android Studioを起動します
  4. ウィンドウ下部にある、Configure -> SDK Manager を選択
  5. 左メニューAndroid SDKを押下し、タブSDK Platformを選択。
  6. API Level19以上のものにチェックを入れます
  7. タブSDK Toolsを押下し、LLDBGoogle USB Driverにもチェックを入れます
  8. ウィンドウ下部のOKを押下し、Component Installerが開かれインストールが開始されます

ここまでできたらウィンドウを閉じて大丈夫です。

3. adbコマンドを試す

Android StudioをインストールしてSDKもインストールできれば、 Windowsコマンドプロンプトadbコマンドが使用できているでしょう。

ここで、付属していたUSBケーブルとPCを接続します!

私の場合はここでadbコマンドが使用できず、 "’adb’は内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチファイルとして認識されていません"

と、出力...

「なんでやあああああぁぁ!!!」

とか言いながらググりました。

結果、環境変数のPATHが通っていないことが判明。 いつもやってんのに... 普段Windowsあんまり使わないから見落としてた。 (私の場合は早期に環境変数に気づきましたが、PATHがさらに間違っていたから時間とりましたww)

もしコマンドが使用できないなら、コントロールパネルを開いて、 システムとセキュリティ -> システム -> 左メニューのシステムの詳細設定 -> 詳細設定タブ環境変数(N) -> 環境変数PATHを選択して編集 -> 新規

ここで私は2つPATHに対して新規で追加。

C:\Users\ユーザ名\AppData\Local\Android\Sdk\platform-tools
C:\Program Files(x86)\Android\android-sdk\platform-tools

ちゃんとPATHがは自分で確認してください!! 上記のpathを参考にエクスプローラーからポチポチしていけば確認できかと思います。

そして、いざコマンド実行。

> adb devices
List of devices attached
xxxxxxxxxxxxxxxxxx        unauthorized

「NOOOOOOOOOぉぉぉぉぉ〜〜〜!!!」

なんか権限ないですやん...

まあ、ただadbコマンドは使用できていてOculusは認識しているっぽい。

ふむふむ

ってことは、どっかで権限を有効にしてやるかんじかなと、またググる

本来?というかAndroid端末であればどうやらUSBデバッグの許可の取り消しなるオプションがあるらしい。 ただ今回はOculusさんだぞ...

「どこを探してもない.... おおおおおおおおおお」

ってなってたらオキュラスのレンズから光が見えた!!!!www

USBデバッグの許可は、Oculusの画面から許可してあげる でしたwww

すげえバカでしたが、まあよしとする。

一応なのですが、adbサービスの再起動として、以下のコマンドを実行させます。

# 停止
> adb kill-server

# 起動
> adb start-server

ということで、もう一度デバイスの確認実行。

> adb devices

List of devices attached
xxxxxxxxxxxxxxxxxx        device

OK。

続いてOculusのIPを調べる。 無線LANなのでwlan数値を指定します。 ちなみにeth0は有線。

> adb shell ip addr show wlan0

出力された情報のinetの横にIPが確認できるかと思います。 おそらく192.168.xx.xxみたいに出てるかな?

adbでportを開放

portを開いていきます。 portの範囲は、5555~5585の範囲で奇数を指定したほうがよさそうです。 こちらがadb の仕組みです。

今回は公式で紹介されている通り5555で試します。

> adb tcpip 5555

これでUSBを介して、port5555でTCP/IP 接続をlistenするようにOculusを設定しました。

ここで、PCに接続しているOculusをUSBケーブルを抜きます

※ 接続切れている場合は、adb connect <IP>:5555 で接続にトライしてみてください。

Vysorの設定

ここまできたら、あとはVysor(バイザー)のインストールと設定のみです。

Vysorとは、ブラウザChromeで動くアプリケーションです。 スマホ画面をパソコンへミラーリングさせるアプリのようです。わたくし初見でした。

まず、ブラウザにインストールします。

Vysor - Chrome ウェブストア

すると、chrome://apps/ に追加されていると思います。

起動させます。

起動させたウィンドウ上部にOculusの接続が確認できていればOKです。 もし、確認できていなければ、Settingsの上にあるConnectボタンを押下。

コマンドプロンプトで確認したIPとportを指定して接続します。

これでOculus Goを開始すればミラーリングできているかと思います!!!!!

f:id:o21o21:20180601001606p:plain

自分では見えねえよってかんじですがww

Discordの画面共有で友人にみせてあげましたww

当人いわく、「画面見れてるよ!!! ただお前ほどの感動はない」

とのことでしたwww

やはりVRで見れないので、購入してVR体験してもいいかもしれませんね!!

次回は、Unityでのプロジェクト環境構築&作成考えています。

以上.

【AWS】boto3で扱うprofile

今回はAWSPythonを使用してなにかコードを記述するときに使用するprofileの扱い方についてです。

Pythonだとboto3をしようする場面がおおいと思います。

また、AWSサービスを利用するにあたって、1人(またはチームや部署、プロジェクト)でいくつかのcredential情報をしようするかと思います。

また会社によっては、1つのプロジェクト(システム)に複数人のcredential情報を使用して、自由にw開発しちゃってる場合も...

まあそれは組織や考え方で様々ですが、boto3において柔軟にcredential情報を扱う方法をメモしていきます。

boto3とは?

aws.amazon.com

簡単にPythonAWSサービスを容易に統合できるライブラリですね。

インストールも簡単です。

$ pip install boto3
$ pip3 install boto3

ここで抑えておきたいのは、低レベル / 高レベル インターフェイスということば。

AWSによると以下の認識でいいのかなと思います。

  • 低レベル: 実現したいことのために、細かい事を指定する (client)
  • 高レベル: 実現したい事だけ指定する (resource)

以下の公式ドキュメントでは、AWSサービスごとに使用できるクラスが記載されています。

Available Services — Boto 3 Docs 1.9.170 documentation

本題に入ります。

boto3を使用する際、AWSのクレデンシャル情報を如何にして取得するか確認してみます。

Credentials (クレデンシャル)の設定

わたしはいつもローカルで開発する際、.awsディレクトリにconfigとcredentialsというファイルを置いています。

そして、そこに記述しているprofile情報をpythonに渡していたりしますが、それがベストプラクティスなのか確認したいと思います。

credential情報の取得して、他には環境変数に設定しているのを取得したり、そのままコードのべた書きしたり(よろしくないですね笑)できますかね。

AWS的にはなにを推奨しているのか、

以下のドキュメントに記載してありました。

Credentials — Boto 3 Docs 1.9.170 documentation

ちょっとまとめてみると、

boto3がcredential情報を取得しにいく優先順位として以下になるようです。

  1. Passing credentials as parameters in the boto.client() method
  2. Passing credentials as parameters when creating a Session object
  3. Environment variables
  4. Shared credential file (~/.aws/credentials)
  5. AWS config file (~/.aws/config)
  6. Assume Role provider
  7. Boto2 config file (/etc/boto.cfg and ~/.boto)
  8. Instance metadata service on an Amazon EC2 instance that has an IAM role configured.

訳:

  1. boto.client()メソッドで、パラメータが設定される
  2. Sessionオブジェクトを生成して、パラメータが設定される
  3. 環境変数の設定
  4. ~/.aws/credentials での設定
  5. ~/.aws/config での設定
  6. AssumeRoleを使用 (AWS STS)
  7. Boto2の /etc/boto.cfg and ~/.boto の設定
  8. IAMロールが設定されているAmazon EC2インスタンスインスタンスメタデータサービス

ちょっとAWS STSはなるほど!ってかんじでしたが、大体予想通りの展開ですね。

ここからはチームや個人の方針に委ねられるかんじもしますが、

基本的には4や5が良さそうなかんじでしょうか。

2と4でもいけますかね。

仮にコンソール上で実行するようなものであれば、ファイル実行者に.aws/配下に設定されているprofile情報をオプションで入力させ、権限さえあれば実行できそうです。

環境変数でも場合によっては、悪くなさそう。

AWSコンソールのLambdaのメニューからなら環境変数を簡単に入力できますね。(もちろんそれを良しとして、きちんとLambdaへの権限が設定されていたりすればですが)

まとめ

実際きちんと公式を読むと推奨されている事柄が把握できました。

どんなツールでも向き不向きがあるように、できるだけ開発者の意図に沿った使い方ができれば後の運用や保守も少しは楽になりそうですね。

意外と見落としがちな点かもしれませんが、チームや組織、プロジェクトの方針を最初にバチッと決めておくと、

メンバーがハッピー(楽)に開発できそうです!

参考

【Python】datetimeでハマったこと...

今回はPythondatetimeというライブラリについてです。

ちょっと久々Pythonコードを書いていて、エラーがずーーーーっと出て、20分くらい「なんでやねん!」

ってなってたところがあるので、少しですがメモ程度に記事します。

※このモジュールの詳しい使い方はここでは説明しません。

まえおき

Pythonを書いたことがある人は1度は絶対に見たことがあるだろうdatetime

主に時間(日付など)に関するデータを扱うときに使用するかと思います。

今回、わたしも指定した期間の毎月1日を出力するコードを書いている時に使用しました。

このdatetimeには、3つの型があるようです。

  • datetime
  • date
  • time

ふむふむ、と。

エラー

まずテストでちょっとコードを書いてみました。

today = datetime.date.today()

まあ、なんてことないプログラムです。

それに続けてちょっとコード書いて実行したら....

AttributeError: 'method_descriptor' object has no attribute 'today'

「お?」

今日の日付すら出力できないありさまに。。。

前も同じコード書いてこともあるし、ググってもやはり問題はなさそう。

如何にしても駄目だったので、エラーをググってみたところ以下の質問がヒット。

https://teratail.com/questions/164127

理由

上記の質問での回答者の方が答えているように、

なんとdatetimeライブラリ、「ライブラリ名とクラス名が同じなんだ!」笑

よくpythonの日付処理の記事は目にしますが、importの仕方にわたしは問題がありました。

今回記述していた書き方は、こんなかんじ。

from datetime import datetime, date, timedelta

ちょっと違うプログラムで、こういう書き方をすることがあって、

(datetime.datetimeの下にもdateメソッドがあって、datetimeの下にもdateクラスがある...)

そこから持ってきていたからいつものimport datetimeこの書き方でなかった...

調べていると、2年前くらいにも同じこと調べた気がする...

まあ、コピペはいけませんがw、さすがにこれはdatetimeライブラリの作りが悪い!!!!

ってことにしたいです。笑

以上.

【インフラ】motdをカスタマイズ!!

少し投稿が止まってしまいました...

今回は小ネタ的な内容になります!

インスタンス(サーバー)にSSH接続した時に出る、格好いい文字!

こんなの↓

f:id:o21o21:20190524113903p:plain

ローカル環境構築してるときや、

開発において環境ごとになにか作業する時に、目立つmotd を設定していたほうがいいですよね! (まあ小ネタ的なかんじなので、しっかり接続方法を管理しておけばいいというのはおいておいて...)

なので、motd (Message Of The Day) の変更方法をメモがてら記事にしました。

※ OSによって若干の変更方法が違い場合もあるかと思いますが、大まかな手順をわかって頂けたらと思います!

今回のわたしのテスト環境としては、centOSのversion7です。

EPEL設定

$ yum install epel-release
$ yum update

次の手順でfigletというコマンドをインストールするのですが、centOSではデフォルトで

EPELリポジトリが設定されていないようなので、上記のコマンドを実行します。

figletをインストール

$ yum -y install figlet

確認してみる。

$ figlet Hello

 _   _      _ _       
| | | | ___| | | ___  
| |_| |/ _ \ | |/ _ \ 
|  _  |  __/ | | (_) |
|_| |_|\___|_|_|\___/ 
                      

おお、もうできました笑

あとは、適当に用途にあったメッセージをうまーく出力させるだけです。

出力させたら、motdファイルを変更します。

$ vim /etc/motd

# 確認してみる
$cat /etc/motd

これで文字が崩れたりしてなければ、次回以降このOSに接続した際に表示されるはずです。

色をつける

上記では、figletコマンド でやりましたが、こちらのサイトに行って、

そのままFontやら変えてコピペしても大丈夫です笑

ただ、Fontによってうまくいかない場合もありましたので、少し苦戦する場合もありそうです。

あと、日本語にも注意してくだいね!

まとめ

けっこう気になってる方も多いmotdについてでした。

まず私はこれを、「メッセージ オプ ザ デイ」というこも知りませんでした笑

また、他のファイルと合わせて、なにかOSの状態を表示させる方法なんていうのも思いつきますね!

(まあ、ただ接続時の時だから状態は、普通にコマンドで確認ですかねw)

それについては以下の記事が良さそうでした!

motdの設定をしてみた | bacchi.me

今回はちょっと薄い内容でしたが、、

また近いうちに更新できたらと思います、

以上.

【Grafana】Grafanaとは?簡単に調べてみた

今回はGrafanaについて記事を書きました。

まだ、私自身初心者ですので入門編という内容になります。

(どんなツールなの?ってかんじなので、内容は薄めです。)

f:id:o21o21:20190215112536p:plain

こちら、公式サイトです。

grafana.com

Grafanaとは??

いきなり公式ページより引用します。

Grafana allows you to query, visualize, alert on and understand your metrics no matter where they are stored. Create, explore, and share dashboards with your team and foster a data driven culture.

和訳すると、

Grafanaを使用すると、どこに格納されているかに関係なく、メトリクスのクエリ、視覚化、警告、および理解を行うことができます。ダッシュボードを作成し、調査し、そしてチームと共有し、データ駆動型の文化を育みます。

どうやらKibanaのような視覚化されたダッシュボードがイメージできるかと思います。

メトリクスなのでAWSのCloudwatchとかもイメージできますね。

では、そうしたサービスからの差別化(特徴)はどういったものがあるのでしょうか。

公式で紹介されている特徴を簡単にまとめていきたいと思います。

特徴

主な特徴は以下の6つが挙げられています。

  • Visualize
  • Alert
  • Unify
  • Open
  • Extend
  • Collaborate

簡単に視覚化ができること。ダッシュボードを見てみると、非常に中二病... じゃなくて、キレイな見た目をしています。個人的には、シンプルな見た目をしていると思います。

タブメニューや日付系がまとまっており、ゴチャゴチャしていないのもいいと思います。

もちろん、アラート機能もあってSlackなどのツールに通知を送信することも可能です。

AWSのCloudwatchやZabbixなどのデータソースを統一することができます。

その他プラグインが用意されていて、基本的になんでも実現しそうなツールであることがわかりましたw

どうやらAWSの料金も視覚化できるようです。

オープンソースなので基本無料。また、Grafana Cloudという有料のサービスもあって、現時点(2019.2)、スタンダードで$49/monthで利用可能なようです。

Grafana Cloudの方は、Grafana自体の安定性を保証してくれるようです。

24x7x365って書いてあるので、24時間365日Grafanaの面倒をも見てくれるようです。 用途によっては、かなり安く利用できる方なのではって思ってしましました。

Grafana Cloud: A fast, fully managed metrics platform | Grafana Labs

デモ

以下、公式にあるライブデモです。導入する前に確認してみるといいかもしれません。

play.grafana.org

ドキュメント

docs.grafana.org

ドキュメントに導入方法が載っています。

かなり簡単にインストールできるので1日で体感も可能ですね!

設定

ここでは設定の説明は割愛。

けっこう記事が出てくるのググればたくさん出てくることがわかりました。

公式にはリバースプロキシがある場合の設定なども載っていたので安心ですね!

http://blog.serverworks.co.jp/tech/2016/03/11/play-with-grafana-1/

あとは、チームや個人の意向によって構成が変わってくるので、いろいろ試してみてといったところでしょうか笑

以上.

【AWS】EC2&EBS メモ

EC2 (Amazon Elastic Compute Cloud)

参考と引用: Amazon EC2 とは - Amazon Elastic Compute Cloud

セキュリティグループ、IPの種類(EIP)は記述しない。

インスタンスとAMI

Amazonマシンイメージ(AMI) は、ソフトウェア構成を記録したテンプレート。

f:id:o21o21:20190207092927p:plain:h250:w250

インスタンス

1つのAMIから複数の異なるタイプのインスタンスを起動できる。

インスタンスタイプとは、本質的に、インスタンスに使用されるホストコンピュータのハードウェアを決定するもの。 インスタンスタイプは、インスタンス上で実行するアプリケーションやソフトウェアに必要なメモリの量と処理能力に応じて選択する。

インスタンスの一覧は以下。(インスタンスファミリーによる特徴も記載あり)

インスタンスタイプ - Amazon EC2 (仮想サーバー) | AWS

AWSアカウントでは、稼働できるインスタンスの数に制限がある

オンデマンドインスタンスの実行はインスタンスファミリーをまたいで最大で合計 20 個、リザーブインスタンスの購入は 20 個に制限されます。

インスタンスストレージ

インスタンスのルートデバイスには、インスタンスの起動に使用されるイメージが含まれる。

インスタンスストアボリュームと呼ばれるローカルストレージボリュームを含むことができて、 これはブロックデバイスマッピングによって起動時に設定できる。

しかし、マウントして使用することは可能だが、インスタンスが停止、失敗、終了するとボリュームのデータは失われる。 なので、一時データとして使用するのが最適である。永続的なデータは、S3かEBSボリュームに格納する必要がある。

AMI

AWSは、一般的な用途のためのソフトウェア設定を含む多くのAMIを公開している。

また、自身でAMIを作成することも可能である。

Webサーバー、関連する静的/動的コンテンツ(コード)は、AMIに含まれる。 新しいインスタンスをすばやく起動させるためには最適である。

すべてのAMIは以下からなる。

リージョン(region)とアベイラビリティゾーン(AZ)

f:id:o21o21:20190207111145p:plain:h250:w450

インスタンスを起動するときは、同じリージョン内にあるAMIを選択する。 別リージョンで起動させたい場合は、AMIを使用したいリージョンにコピーして使用することができる。

※ リージョン間でのデータ転送は料金がかかる。また、各AWSサービスにとって、グローバルサービスなのか、リージョン内サービスなのかは重要になってくる。

AZは、us-east-1aなどと表記される。

あるAWSアカウントのAZはap-northeast-1aで、別のAWSアカウントもap-northeast-1aだっとしても、 ap-northeast-1aは同じ場所にない場合もある。

こうしたアカウント間でのAZを調整したい場合、AZ IDを使用する必要がある。

最新のリージョンは随時変更されるので以下で確認。

AWS グローバルインフラストラクチャ | AWS

ルートデバイスボリューム

インスタンスを起動するときは、ルートデバイスボリュームに格納されているイメージを使用してインスタンスがブートされます。

引用: Amazon EC2 ルートデバイスボリューム - Amazon Elastic Compute Cloud

EC2サービスの開発当初はInstance-store backed(ルートデバイスinstance store)がすべてのAMIで採用されていたが、 EBS導入後(2009年後半)、AMIから起動されるインスタンスのルートデバイスが、EBSスナップショットから作成されるEBSスナップショットボリュームであるということになる。

現在、両方の方法を選択可能だが、推奨されるのは高速に起動できるEBS-backedになる。

インスタンスストア

インスタンスストアをルートデバイスに使用するインスタンスでは自動的に、インスタンスストアボリュームを利用できるようになり、そのボリュームの 1 つがルートデバイスボリュームとなります。

引用: Amazon EC2 ルートデバイスボリューム - Amazon Elastic Compute Cloud

インスタンスストアボリュームは、ホストコンピュータに物理的に接続されているディスクからストレージにアクセスする。

終了したり、障害がおきたインスタンスストアのインスタンスはバックアップできない。 スナップショット機能もないし他のEC2に付け替えもできないので、インスタンスストアのデータは複数のAZに分散させておくことが重要である。

  • 再起動(reboot)では消えない!

EBS

Amazon EBS をルートデバイスに使用するインスタンスには自動的に、Amazon EBS ボリュームがアタッチされます。Amazon EBS Backed インスタンスを起動するときに、AMI で参照されている Amazon EBS スナップショットごとに 1 つの Amazon EBS ボリュームが作成されます。

引用: Amazon EC2 ルートデバイスボリューム - Amazon Elastic Compute Cloud

EBSボリュームは、1つのインスタンスからデタッチして別のインスタンスにアタッチすることができる。

再起動後は、アタッチされているボリュームに格納されているデータに影響はない。

また、停止している時、デバッグなどの目的で別のインスタンスにルートボリュームをアタッチできる。

f:id:o21o21:20190207133232p:plain:h250:w350

サイズが最大16TiBで以下のタイプでボリュームを作成できる。

複数のボリュームを同じインスタンスにアタッチ可能。(1度に1つ)

ボリュームの詳細は以下公式ページで確認。

Amazon EBS ボリュームの種類 - Amazon Elastic Compute Cloud

aws.amazon.com

また、クラメソさんからもここに用途などかいてある。(2017年情報)

簡単に、以下の特徴がある。

タイプ 説明
gp2 起動ボリューム、低レイテンシを要求するアプリケーション、開発・テスト環境
io1 I/O性能に依存するNoSQLデータベースやリレーショナルデータベース
st1 ビッグデータ、DWH、ログデータ処理
sc1 スキャンする頻度が低いデータ
マグネティック データアクセス頻度が低い

EBS最適化ありの場合、通常のネットワークとは別にEBSが専用帯域を確保することになる。

EMS最適化をサポートしているインスタンスタイプ一覧。

(最大帯域幅(Mbps), 最大スループット(MB/秒, 128KB I/O), 最大IOPS(16KB I/O))

Amazon EBS – 最適化インスタンス - Amazon Elastic Compute Cloud

バースト

バーストとは、通常は低負荷だが一時的に高性能を出すこと。

バーストを使用するにあたって想定する場合は以下。

ベースライン性能以下の利用時にクレジットが蓄積され、バースト時に貯めたクレジットを消費する。

また、T2 Unlimitedというオプションを使用することで、バースト状態を維持継続することもできる。

f:id:o21o21:20190208102640p:plain:h250:w150

新しいT2 Unlimited – バーストを超え、高い性能を発揮 | Amazon Web Services ブログ

EC2の購入オプション

  • オンデマンド

スタンダードな時間課金型インスタンス

1年間または3年間の利用予約をすることで、割引がされる。

リザーブドインスタンス(RI)- Amazon EC2 | AWS

使われていないインスタンスに入札して格安利用

最大90%程度の大幅なコストカットが見込める

  • Dedicated Host

専用の物理サーバー

過去記事

o21o21.hatenablog.jp

【TCP/IP】マスタリングTCP/IP メモ

マスタリング TCP/IP 入門編(第5版)

マスタリングTCP/IP 入門編 第5版

o21o21.hatenablog.jp

ネットワーク基礎知識

スタンドアロンからネットワーク利用へ

従来、コンピュータは単体で使われていた。その利用形態を スタンドアロン という。

しかし、コンピュータが進化するにつれ複数で利用されるようになる。

コンピュータネットワークを、LANWAN などに分類することができる。

  • LAN

1つの建物や会社など、限られた狭い地域でのネットワーク

  • WAN

都市など、離れた地域のコンピュータやLAN同士を接続したネットワーク

初期のコンピュータネットワークは、プライベートなネットワークを構成していたが、 公共ネットワークとしてインターネットが利用されるようになる。

コンピュータとネットワーク発展の7つの段階

  • バッチ処理(Batch Processing) 1950年代
  • タイムシェアリングシステム(TSS) 1960年代
  • コンピュータ間通信 1970年代
  • コンピュータネットワークの登場 1980年代
  • インターネットの普及 1990年代
  • インターネット技術中心の時代 2000年代
  • 「単につなぐ」時代から「安全につなぐ」時代へ 2010年代

プロトコルとは

さまざまなプロトコルを体系的にまとめたものを、ネットワークアーキテクチャ ということがある。

現在は大きくの機器でTCP/IPが利用できるが、Novel社のIPX/SPX、Apple社のAppleTalkIBM社のSNAなどTCP/IP以外のネットワークアーキテクチャを利用した機器や環境もある。 また、LANで使用されていたIPX、SPXといったプロトコルもあります。

プロトコルが必要な理由

プロトコルは、コンピュータ同士がネットワークを利用して通信するために決められた 約束ごと という意味になる。

メーカーやOSが異なるコンピュータ同士でも、同じプロトコルを使えば互いに通信することができる。 つまり、両者(異なるコンピュータ、メーカーなど)は、同じプロトコルを理解し、処理しなければならないことになります。

パケット(Packet)交換

パケット交換 とは、大きなデータをパケットと呼ばれる単位に分割して送信する方法。

f:id:o21o21:20190129171823p:plain:h250:w350

大きなデータをいくつかのパケットに分ける場合、元のデータのどの部分だったのかを示す番号が書き込まれる。 受け取り側は、この番号を調べることで、小分けされていたデータから元のデータへと組み立てることが可能となる。

通信プロトコルでは、ヘッダ に書き込まれる情報や、その情報がをどのように処理するかを定めている。 つまり、コンピュータはプロトコルに従って、ヘッダを作成したり、ヘッダ内部を解読して処理を行っている。

プロトコルはどこの誰が決めたことが疑問ですが、これついては割愛する。 より詳しく知りたい場合は、ISO(国際標準化機構)やOSIIETFなどと調べればわかりそうです。 とりあえず、現状世界共通で標準化されているということです。

OSI参照モデル

機能 機能イメージ
7 アプリケーション層 特定のアプリケーションに特化したプロトコル
6 プレゼンテーション層 機器固有のデータフォーマットと、ネットワーク共通のデータフォーマットの交換 文字列や画像、音声などの情報の多い表現の違いを吸収。
5 セッション層 通信の管理。コネクションの確率/切断。 いつ切断して、いくつ張る?
4 トランスポート層 両端ノード間のデータ転送の管理。信頼性の提供。 データに抜けがないか
3 ネットワーク層 アドレスの管理と経路の選択。 どの経路で宛先まで届ける?
2 データリンク層 直接接続された機器間でのデータフレームの識別と転送。 フレームとビット列の変換
1 物理層 0と1を電圧の高低や光の点滅を変換。 ビット列と信号の変換

セッション層はコネクションを確立するタイミングやデータを転送するタイミングの管理をしているだけで、 実際にデータを転送する機能はありません。そして、トランスポート層では、データ転送の信頼性を保証する役割をもっています。 なので、実際データを相手に届ける処理は、ネットワーク層ということになります。

(しかし、TCP/IPでは、ネットワーク層トランスポート層が一緒に働くことでパケットを送信することになる。 理由は、データが途中で消失したり、順番が入れ替わったりする可能性があるからである。)

通信方式

ネットワークのデータの配送には、大きく コネクション型コネクションレス に分けることができる。

  • コネクション型

データの送信を開始する前に、送信ホストと受信ホスト間での回線を接続する。

コネクションの確立や切断処理はない。 なので、受信する側は、データを受け取ってないかどうかを常に確認する必要がある。

パケット交換について

現在のネットワークでは、大きく2つの 通信方法 が利用されています。

1つは、回線交換 です。

回線交換では、交換器 がデータの中継処理を行う。コンピュータは、交換機に接続され、交換期間は複数の通信回線で接続される。 1度コネクションが確立されると、コネクションが切断されるまで、その回線は占領される。 問題は、複数のコンピュータを接続し、相互にデータのやり取りを行おうとすると、特定のコンピュータが回線を占領してしまうことである。

そこで、回線に接続しているコンピュータが送信するデータを、複数の小包 に分けて、転送の順番を待つ行列に並べる方法が考え出された。

これを パケット交換 という。

小包みというのは、パケット のことで、細分化される。それぞれのパケットには、ヘッダ があり、そこには自分のアドレスや送信先のアドレスが書き込まれているので、 効率的にデータの送受信を行うことができる。

パケット交換では、ルーター(パケット交換機) によって通信回路が結ばれる。 ルーターの中には、バッファ と呼ばれる記憶領域がある。流れてきたパケットは、バッファに格納される。 パケット交換の場合、コンピュータやルーター間には通常 1つの回線 しかなく共有利用されるため、 ネットワークの混雑度によってパケットの到着間隔が左右される。

アドレスとは

通信の送信元と送信先は、アドレス によって特定される。

コンピュータ通信では、MACアドレスIPアドレスポート番号 などが利用される。電話では、電話番号がアドレスにあたる。 アドレスは通常、ユニーク(唯一) でなければならない。

アドレスは、その総数が多くなると階層性をとらなければなりません。

コンピュータ通信において、MACアドレスIPアドレスは、両方とも唯一性はあるものの、階層性はIPアドレスのみにある。

MACアドレスは、ネットワークインターフェイスカードごとに製造者識別子と製造者内の製品番号、製品のごとの連番が付けられている。 ユニークではあるが、どのネットワークインターフェイスカードが、世界中のどこで使用されるかは特定する手段はない。

なので、IPアドレスが必要になると考えることが可能です。

IPアドレスは、ネットワーク部ホスト部 という部分から構成されている。

f:id:o21o21:20190129171601p:plain

こうすることで階層性が成り立ち、組織やグループなどに接続しやすいようになっている。 また、MACアドレス転送表 を、IPアドレス経路制御表(ルーティングテーブル) を元にして通過点では行き先を特定していく。

ネットワークの構成要素

リピーター

リピーター は、OSI参照モデルの第1層物理層で、ネットワークを延長する機器 である。

ケーブル上を流れてきた電気や光の信号を受信し、増幅や波形の整形などする。 また、通信媒体を変換できるリピーターも存在する。同軸ケーブル光ファイバーの間の信号を変換する。

ブリッジ / レイヤ2スイッチ

ブリッジ は、OSI参照モデルの第2層データリンク層で、ネットワーク同士を接続する装置 である。

ルーター / レイヤ3スイッチ

ルーター は、OSI参照モデルの第3層ネットワーク層で、ネットワークとネットワークを接続して。パケットを中継する装置のこと である。

ルーターは、ネットワーク層のアドレスで処理を行う。(TP/IPであれば、IPアドレスになる) また、ルーターはネットワークの負荷も仕切ったり、セキュリティ機能も備えてたりする。

レイヤ4-7スイッチ

レイヤ4-7スイッチ は、OSI参照モデルトランスポート層〜アプリケーション層の情報に基いて配送処理を行う

イメージしやすいのは、ロードバランサーである。 負荷分散や音声通話のような即応性が求められる通信を優先したり、不正なアクセス防止のためのファイアウォールなどで利用される。

ゲートウェイ

ゲートウェイ は、OSI参照モデルトランスポート層〜アプリケーション層の階層で、データを交換して中継する装置のこと である。

レイヤ4-7スイッチのようにパケットを処理しデータの中継だけでなく、データを変換する役割があります。 (特にインターネットの電子メールと携帯電話の電子メールの交換するサービスは有名である。)

携帯電話による通信

一般的に携帯電話に電源を入れると、最寄りの 基地局 と通信が行われる。基地局には、契約しているキャリアの携帯電話用アンテナが設置されている。 基地局に集められた情報が エッジ(局舎) に集約され、エッジ間の基幹ネットワークに接続されているという構成は、インターネット接続と同様である。

TCP/IP 基礎知識

インターネットとは、全世界を接続しているコンピュータネットワークのこと。 インターネットのプロトコルといえばTCP/IP で、TCP/IPといえば インターネットプロトコル である。

f:id:o21o21:20190206115422p:plain:h250:w450

書籍や記事によって、TCP/IP階層モデルは4つだったり5つだったりすることもあるでしょう。 ここでは、4つに分けてモデルの図を書きました。

ネットワークインターフェイス

実際、最下位層には物理的にデータを転送してくれるハードを置いているす。このハードとは、電話回線やイーサネットのこと。(物理層)

ネットワークインターフェイス は、イーサネットなどのデータリンクを利用して通信するためのインターフェイスとなる階層である。

つまり、NICを動かすデバイスドライバとして考えても問題ない。

インターネット層

インターネット層 では、IPプロトコル が使用される。

IPプロトコルは、IPアドレスを元にパケットを転送する。

インターネット層トランスポート層 は、一般にホストOSに組み込まれていることを想定している。 よって、インターネットに接続されるすべてのホストやルーターは、必ずIPの機能を実装しなkればならない。

トランスポート層

トランスポート層 の最も重要な役割は、アプリケーションプログラム間の通信を実現すること。

コンピュータでは、複数のプログラムが同時に処理されているのは当たり前です。なので、どのプログラムが通信しているかを識別する必要があります。 アプリケーションのプログラムの識別には、ポート番号 があります。

アプリケーション層

(OSI参照モデルのセッション層,プレゼンテーション層,アプリケーション層は)アプリケーションプログラムの中で実現される。

パケットヘッダ

f:id:o21o21:20190206115101p:plain:h250:w350

各階層では、送信されるデータに対して、ヘッダ という情報が付与される。 その階層で必要とされる情報が組み込まれるので(送信元,送信先など)、プロトコルのための情報ということ。

例えば、トランスポート層ではTCPヘッダが付与され、インターネット層でIPヘッダが付与されるといった具合です。

データリンク

データリンク というとOSI参照モデルデータリンク層を指す場合もあるが、具体的な通信手段(イーサネット無線LANなど) を指してこの用語使う場合もある。

データリンク層プロトコルは、通信媒体で直接接続された機器k何で通信するための仕様を定めている。 通信媒体は、以下のようなものがある。

また、スイッチやブリッジ、リピーターが機器間で中継する場合もある。

実際に機器間の通信を行う場合、データリンク層物理層がともに必要になる。 データは2進数の0と1で表現されるが、実際の通信媒体でやり取りされるのは電圧の変化や光の点滅、電波の強弱など。 この2進数を変換させるのは、物理層の仕事になる。データリンク層は、単なる0と1の列でなく、フレーム というかたまりにまとめて相手の機器に伝える。

データリンクは、ネットワークの 最小単位 といってもいい。 インターネットによる通信は、細かくみるとデータリンクが集まったデータリンクの集合体とみることができる。 例えば、1つのリピーターを介して2つのケーブルで接続したとき(2つのデータリンクは)、 ネットワーク層からみると1つのネットワークで、物理層からみると2つのセグメント。

イーサネット

現在もっとも普及しているのが、Ethernet(イーサネット) である。

もともとは、Xerix社と旧DEC社が考案した通信方式で、Ethernet命名された。 その後、IEEE802.3委員会によって規格化され、フレームのフォーマットが異なる。なので、802.3Ethernetは、IEEE802.3委員会で規格化された方を指す。

制御の仕組みが単純まため、NICデバイスドライバが作りやすいという特徴がある。 LANの普及期に他のNICより安価で販売されていたことも、普及した理由の1つである。

Ethernetには、通信ケーブルや速度の違う多くの種類が存在する。

例、10BASE5

  • 10 -> 伝送速度
  • 5 -> 媒体

無線通信

無線通信ではk電波や赤外線、レーザー光線などで利用する。(ケーブルは不要)

以下、無線通信の種類。

分類 通信距離 規格化団体など 技術名称
短距離無線 数m 個別 RF-ID
無線PAN 10m前後 IEEE802.15 Bluetooth
無線LAN 100m前後 IEEE802.11 Wi-Fi
無線MAN 数km〜100km IEEE802.16,IEEE802.20 WiMAX
無線RAN 200km〜700km IEEE802.22
無線WAN - GSM,CDMA2000,W-CDMA 3G,LTE,4G

無線LAN IEEE802.11

IEEE802.11 は、無線LANプロトコル物理層とデータリンクリンク層の一部(MAC層)を定義した規格。

f:id:o21o21:20190206115140p:plain:h250:w550

VPN (Virtual Private Network)

IPネットワーク(インターネット)VPNを構築します。

MPLS は、ラベルと呼ばれる情報をIPパケットに付加して通信を制御します。 このラベルを、顧客ごとに異なるように設定し、MPLS網を通過するさいに、このラベルで宛先の判断を行う。 これにより、複数の顧客のVPNを1つのMPLS網上で区別し、保護されて閉じた形のプライベートなネットワークとして利用する。

IPプロトコル

TCP/IPの要 インターネット層。主に IPとICMP という2つのプロトコルから構成される。

OSI参照モデルネットワーク層に相当する。 終点ノード間の通信を実現する (end-to-end) ことが役割である。 データリンクを超えた通信をするためには、ネットワーク層が必要である。

※ ホスト(IPが付けられた機器)とルーター(IPが付けられていて経路制御を行う機器)を合わせて、ノード という。

2つのブロードキャスト

ローカルブロードキャスト とは、自分が属しているリンク内のブロードキャストのこと。

ダイレクトブロードキャスト とは、異なるIPネットワークへのブロードキャストには、ダイレクトブロードキャストアドレスを指定。

プライベートアドレス

インターネットの急速な普及により、IPアドレスが不足している。 そこで、すべてのルーターやホストにユニークなIPアドレスを割り当てることをやめて、必要なところに必要なだけ割り振るということにした。 しかし、個々のネットワークで好きなIPアドレスを割り振っていては、問題を引き起こす可能性がある。

そこで、プライベートアドレス が誕生した。

以下、プライベートアドレスの範囲。

範囲 クラス
10.0.0.0 〜 10.255.255.255 10/8 クラスA
172.16.0.0 〜 172.31.255.255 172.16/12 クラスB
192.168.0.0 〜 192.168.255.255 192.168/16 クラスC

この範囲外のIPアドレスは、グローバルIPアドレス になる。

プライベートIPアドレスは、当初、インターネットとの接続を考えない ネットワークで利用されていたが、 グローバルIPアドレスとプライベートIPアドレス間でアドレス交換をする NAT技術 が誕生した。

MTU

最大転送単位 (MTU) は、データリンクによって異なる。

IPはデータリンクの上位層にあって、データリンクのMTUの大きさに左右されることなく利用できなければならない。

参考

  • 引用: マスタリングTCP/IP 入門編 第5版

【Kali Linux】初期設定メモ

試した環境: version 2018.4

ホストとVirtualboxの仮想環境でのクリップボードの共有

  1. Virtualboxの対象環境を選択し、設定メニューを開く
  2. 一般 -> 高度 タブ -> クリップボードの共有 -> 自分の共有したい方法を選択

f:id:o21o21:20190201141502p:plain:h350:w550

KaliLinuxのTerminalでコピペ

上記の設定を行ってから(ホストのクリップボードの共有しないなら不要)、以下の設定をする。

  1. Terminalを起動
  2. Terminalタブ -> Preferences
  3. 左のメニューShortcuts -> Edit
  4. CopyPasteの項目で、実際入力して設定する

例えば、macならCopy: ⌘command + c にも設定可能

f:id:o21o21:20190201180514p:plain

それでも、効かない場合、Virtualboxの設定を見直す。

ホストキーの組み合わせを、右の⌘commandに設定する。

f:id:o21o21:20190201180354p:plain:h350:w450

再起動

  1. ウィンドウ右上のアイコン(↓)をクリック
  2. 電源マークを押して、Restartで再起動

f:id:o21o21:20190201135935p:plain

デスクトップ画像変更

  1. デスクトップの適当なところで右クリック
  2. Change Background
  3. デスクトップとロック画面を選んで、画像の変更

(デフォルトで何枚かwallpaper用は用意されていました。)

時間の設定

ターミナルで設定する方はこちら↓

 1. 日付時間確認
# date
2. コマンド実行
# dpkg-reconfigure tzdata
3. 設定ウィンドウが展開されるので、`Asia` Enterし、`Tokyo`Enter 
4. 再度dateコマンドで確認
# date
Fri Feb  1 14:07:05 JST 2019

設定UIから設定する方はこちら↓

f:id:o21o21:20190201181259p:plain

日本語&JSキーに対応させる

私の場合、ラップトップは英字なのでキーの操作で困ることはないのですが、 JSキー(日本語配列)の場合、キーの操作で不都合が起こるかと思います。

私は設定してないので、以下の記事を参考にしてみて下さい。

Kali Linux 2018.4 導入と日本語化 | セキュリティ | DoRuby