Tagbangers Blog

Opsチーム研修 AWSでのネットワーク構築について

はじめまして、9月から入社しました山崎です。

前職ではGoogle Cloud Platformを利用したWebアプリの

フロント側の開発やデータ整備を行っていました。

好きな食べ物はカレーです。

学生時代、大鍋を買ってきて真夏に1週間分のカレーを作って胃腸を壊したくらい大好きです。

 

カレーは悪くなってしまいましたがカレーは悪くありません。

ぜんぶ夏が悪いのです。

 

さて、今週は運用保守がメインのOpsチームで、

AWSを利用したインフラの開発について研修を行いましたので、

学習した事を以下にまとめたいと思います。

 

AWSでネットワークを構築するのに必要な言葉

VPC
 AWS上に構築する仮想ネットワークそのものです。

サブネット
 VPCを細かく分割したネットワーク VPCのIP範囲の中でのみ作成可能です。


EC2
 サブネット内に作成する仮想サーバ 負荷に応じてオートスケールの設定が可能です。


ロードバランサー

 紐づけたサーバーの負荷に応じてトラフィックを振り分けてくれます。

 オンプレ環境では(DNSラウンドロビンのような形式と比べて)構築運用が比較的難しい

 と言われていましたが、AWSではカレーにルーを入れるかの如く簡単に設置ができます。

 仮想化されているので物理的に全く離れたアベイラビリティゾーン(AZ)間でロードバランシングしてくれる上、

 異なるAZにある複数のサブネットに紐付ければ、仮にAZ全体が落ちても

 落ちていないAZ上の同じロードバランサーがロードバランシングを続けてくれます。

 私が死んでも代わりはいるもの です。

 これもスケールアウトとスケールインが可能ですが、

 予め負荷がかかる事が予想される場合は暖気申請という手続きを行い、

 インスタンスを増やしておくような対応も可能なようです。


ルートテーブル

 一般的にいうルーティングテーブルとほぼ同じ事と思われます。

 トラフィックをどのサーバーに割り振るかを判定して流してくれます。


インターネットゲートウェイ

 VPCと外部のインターネットをつなげてくれます。

 無いと外からアクセスできない引きこもりネットワークになる模様です。


サブネットマスク

 今回の研修での最大のハマりポイントです。

 サブネットマスクの存在自体は子供の頃からなんとなく知ってはいて、

 計算の方法も「なんかANDとればどこのネットワークに所属してるかわかるんちゃうの」程度の曖昧な認識はあったのですが、

 実際自分で構築してみた所、サブネットが複数作れず無事死亡しました。

 先輩社員から色々とフォローを受けてわかったのは、「10.0.0.0/27」の場合、

 

 00001010.00000000.00000000.00000000 の内、上から27bitまではネットワーク部を示しますよ との事

 00001010.00000000.00000000.00000000  ←黒字がホスト部、赤字がネットワーク部


 残った黒字の5桁の範囲は10進数でいうと0~31の32パターンの値があるので、

 「10.0.0.0/27」は、「10.0.0.0~10.0.0.31」までをネットワークとして切り取りますよ の意味みたいですね。

 連続した複数のサブネットを作る場合は、更に「10.0.0.32/27」のような指定をする必要があります。

 0~31は1つ目のサブネットが使用中のため。(ここの意味が分かっていなかった)

  

 ただし、通常のネットワークと同じく、アドレスの最小値と最大値はそれぞれ

 ネットワークアドレス、ブロードキャストアドレスとして使用不可です。

 さらにAWSの制限として、

 .1~.3はAWS側で使用する(ルータやDNSサービスやら予約済みIPなどらしい)ので、

 合計5つのIPが使用できません。

 なので、「10.0.0.0/27」は、全部で32-5=27個のIPを設定可能です。

 

SSH接続したりSCPでファイルをアップロードするコマンドを作っておく

今回AWSをさわったのは初めてなのですが、

実はMacそのものがほぼ初めての経験だったりします。

なので、前職ではゴリゴリのWindowsユーザだった私は

「と、とりあえずC:\workとか作ってPATH通してコマンド作らなきゃ」

と思ったわけです。


まずはそれ以前の問題として、そもそもMacのディレクトリ構造がよくわかっていないので早速調べてみました。

 

結果としてわかったのは、

Cドライブとかそんなものは存在しない!

です。

 

愕然としました。絶望しました。もうWindowsに戻りたい。

ご飯も喉を通らず心の中でカレーを飲みます。

 

じゃあ絶対パスはどうやって書けば良いんだ・・・。という疑問が当然湧いてきます。

調べると、「/Users/yamazaki/Desktop/」とかこんな感じみたいですね。

簡単でした。Macバンザイでした。

というかLinuxもよく考えればそういうアクセス方法でした。

ドライブレターとかを指定するという概念はもしかしてWindows特有なのかもしれません。

 

ディレクトリの仕組みがわかった所で早速「/Users/yamazaki/」の下あたりに「shortcut」フォルダを作ります。

ちなみにWindowsと同じく、ファインダーから「Command+Shift+N」で新しいディレクトリを作れる事も確認しました。

もちろんターミナルからmkdirコマンドが使用可能なのもWindowsと同様で、大変ありがたい事です。

 

取り敢えずPATHを通す

さて、次に作成した「/Users/yamazaki/shortcut」にPATHを通します。

調べた所、PATHを通す方法は軽く3種類以上あります。

 

PATH通すだけで!?

 

環境変数設定する画面に全部並べておいてよ!です。

元Windowsユーザー的にはビビリまくりです。

 

設定ファイルに書く方法としては、「.bash_profile」と「.bashrc」に

書き込む方法があるようです。


「.bash_profile」・・・ログイン時に読み込まれる

「.bashrc」・・・ターミナルの起動時に読み込まれる


という違いがあるようなのですが、今回は取り敢えず

調べたサイトを参考に、「/.bash_profile」に書き込む事にします。

 


。。


。。。

 

うん。無い。

 

何度どこを探してもそんなファイルはありません。

心の中でカレーを飲み飲み調べると、

どうやら必要に応じてユーザが作成するファイルのようです。

 

早速vi恐怖症の私はAtomをインストールして新規にファイルを作成します。

(その後EC2に保存されているファイルを編集する必要に迫られ止む無く「:wq」だけは覚えました)


PATH=$PATH:/Users/yamazaki/shortcut/

 

を追加し、ターミナルから「source ~/.bash_profile」を実行して設定を読み込みなおします。

ついでにターミナルを一旦全て終了してから再度起動します。

これでshortcutディレクトリにPATHが通った・・・はず。


あとはコマンドを書いて保存して実行するだけ

Windowsで作成するコマンドプロンプトのバッチは.batや.comという拡張子でしたが、

Macでは.commandという拡張子のようです。

書いておいてなんですが、後から拡張子はなくともコマンドは呼び出せる事がわかったので、

今回の研修中はいちいち拡張子はつけませんでした。

 

テキストエディタで、実行したいコマンド(群)を書いて、shortcutフォルダに配置します。

私の場合は、EC2のインスタンスにアクセスするためのSSHコマンドを書きました。

後は、好きな場所からターミナルでコマンドのファイル名を叩けば、

細かいコマンドいらずでどこからでもSSH接続可能になります。

ただし、既存のコマンドと間違っても被らないよう、ファイル名をローマ字にするなどの工夫が必要です。

後で意味不明なエラーに悩まされないために、念の為。

 

SCPコマンドでファイルをアップロードしたい場合は、

実行時に$1~$9に引数の文字列が渡ってくるようなので、

それを利用すれば引数にファイル名を当てる事で対応可能です。

 

また、インストール済みのアプリケーションへのエイリアスを、

先程作成したshortcutフォルダに配置しておく事で、

どこからでも好きなアプリケーションを呼び出す事が可能になります。

 

以上、今週はまだまだ書ききれない程色々学習した事があったのですが、

来週は新規開発を行うDevチームでの学習内容を書いてみようと思います。

 

そろそろ季節の変わり目でしょうか。まだ早いでしょうか。

体調など崩されませんようお過ごしください!