スクリーンショット_2020-01-30_00

AWS習得編 Amazon Web Service 基礎からのネットワーク&サーバー構築 Chapter1

こちらの書籍について学んだことです。


Chapter1 システム構築をインフラから始めるには

インフラを知ることで自分で好きなように開発環境を整えられるようになる

課題が生じたときにアプリケーション開発の枠組みから出てシステム全体で対応できるようになるのも大きなメリット

たとえばリソース不足になったときにアプリケーションの最適化だけで解決するのではなく、スケールアップやスケールアウトなどのインフラ計画まで踏み込んだ包括的な対応ができるようになる


1-1 開発者がネットワークやサーバーを構築するメリット

ほとんどの開発現場でネットワーク管理者やサーバー管理者が、開発や運用のためのネットワークとサーバーを構築する。

できあがったサーバーのアカウント情報を頼りにログインして各種開発を行う。

適切なセキュリティを設定しなければ、侵入される恐れがある。

ネットワークやサーバーの負荷を正しく予測していなければ、十分なレスポンスを返せないかも知れない。

このような理由から、ネットワークやサーバーの技術は専門化され、アプリケーション開発者からはよくわからないものとなってしまった。

開発者は全体がどのように構成されているのかを知らない

いつも「誰かが作ったネットワークや誰かが作ったサーバー」を使って開発していたのでは、これらに関する知識が身につかない。

本番環境なら専門家に任せるべき。

開発する際のテスト環境ぐらいは、自分で作れるようになるべき。

本書は、「自分でネットワークやサーバーを構築できるようになること」を目指すもの。

ネットワークやサーバーなどのインフラ知識を身につけるメリット

①どこに問題があるのか切り分けられるようになり、障害に強くなる
②アプリケーション開発の枠組みをはみ出てシステム全体での幅広い対応ができるようになる

ソフトウェアしか知らないとソフトウェア的な対応しかできない。
インフラを知っておくとネットワークやサーバーを増強して対応することができる。

ネットワーク構成で、
「負荷がかかると弱い箇所」
「セキュリティ上問題が生じそうな箇所」
が分かることは、堅牢なシステムを作るのに欠かせない知識

1-2 ネットワークやサーバーを構築する

ネットワークやサーバーを構築する場合どのようにしたらいいか

■サーバーの構成
どのようなサーバーが必要なのかを考える。

Webサイトを提供するのであればWebサーバーが必要
データを保存する場合はデータベースサーバーが必要
メールを送受信するならメールサーバーが必要

実際には「Webサーバー」「データベースサーバー」「メールサーバー」というものがあるわけではない。

実際には、
「サーバーに対してWebの機能を提供するソフトウェアをインストールしたもの」がWebサーバー
「データベースの機能を提供するソフトウェアをインストールしたもの」がデータベースサーバー
「メールの送受信機能を提供するソフトウェアをインストールしたもの」がメールサーバー

そもそもサーバーというものが、LinuxやWindows Serverなど、サーバー用のOSをインストールしたコンピュータのことにすぎない。

「サーバーに、どのようなソフトウェアをインストールするのか」で、サーバーの役割が決まる。

ちなみに、サーバーに複数のソフトウェアをインストールすることもできる。
たとえば、「Webサーバーソフト」と「データベースソフト」の両方をインストールした場合は、Webサーバー兼データベースサーバーとなる。

サーバーを構築するのであれば次の知識が必要。

①サーバーOSのインストールや設定方法
②各ソフトウェアのインストールや設定方法

Webサーバーとして機能させたいのであれば、「Apache HTTP Server(以下Apache)」や「nginx」などのソフトウェアをインストールする。
データベースサーバーとして機能させたいのであれば、「MySQL」や「PostgreSQL」などのソフトウェアをインストールする。
メールサーバーとして機能させたいのであれば、「Sendmail」や「Postfix」などのソフトウェアをインストールする。

■ネットワークの構成

構築したサーバーはネットワークに接続しないと通信できない。
インターネットと接続可能なネットワークはTCP/IPプロトコルを使う
TCP/IPはTransmission Control Protocol/Internet Protocol

TCP/IPはそれぞれのサーバーに「IPアドレス」という番号を振る。
番号は決まった規則で割り当てる必要があり、適当に振っても通信できない。
インターネットに接続する場合、通常「ルーター」と呼ばれる機器を使用する。
インターネットではhttp://www.example.co.jp/のようなドメイン名でアクセスする。
ドメイン名はサーバーのIPアドレスに付与する、人間が理解しやすい名前のようなもの。
ドメイン名を使うために、「DNSサーバー」と呼ばれるサーバーの設定も必要。

ネットワークを構築するのであれば次の知識の習得が必要。

①IPアドレスに関する知識
IPアドレスをどのように定めるかと、ルーターを介したインターネットとのデータの流れをどのように制御するかの知識
②DNSサーバーに関する知識
ドメイン名とIPアドレスを結びつけるにはどのようにすればよいか、どのようなやり取りでドメイン名とIPアドレスが相互に変換されているか

■問題を解決するさまざまなツール

ネットワークやサーバーを構築する際、正しく設定されているか、どのようなデータが流れているかを確認する必要がある。
そのために、各種ネットワーク関連のコマンドや、流れるデータを覗き見するツールを使う。
ネットワーク関連のコマンド
ping
traceroute
telnet
nslookup
dig

流れるデータを覗き見る
ネットワークを流れる生のデータを見る場合は「Wiresharkなどのネットワークプロトコルアナライザ」
Webサイトの表示に利用されるHTTPプロトコルに限ったデバッグをする場合は「Webブラウザに付属のデバッグツール」

たとえばWebブラウザのデバッグツールを使って、どのようなデータが流れているのかを見ることができる。
トラブルだけでなく、アプリケーション開発でも、送受信されているデータが正しいかどうかを確認するときにも役立つ。

サファリのデバッグツールを使う場合は以下の手順を踏む
safari->環境設定->詳細->メニューバーに開発メニューを表示

webインスペクタからネットワークを開ける
右クリックとかでいろんな情報を表示できるようになる

1-3 WordPressでブログシステムを作る

本書はWordPressでブログシステムを作りながら「サーバーの構築」「ネットワークの構築」「問題を解決するツール」を説明してく。

利用するサーバーは「Webサーバー」と「DBサーバー」の2台

本来であれば、これらのサーバーはサーバー管理者によって既に構築されており、そのアカウントを使って以下を行う。
「WebサーバーにWordPressをインストールする」
「WordPressもインストールされた状態から始める」

しかし、本書では何もないところからサーバーやネットワークを構築する。

■「公開されたネットワーク」と「隠されたネットワーク」
本書で構築するネットワークは2つに分かれている。

「パブリックサブネット」
インターネットに公開

「プライベートサブネット」
インターネットに直接接続しないネットワーク

プライベートサブネットにDBサーバーを配置する

DBサーバーにはブログのデータを保存するが、インターネットから直接接続していたずらされるのを防ぐため、インターネットからは隠す。

■片方向からの接続だけを許すNAT

DBサーバーがまったくインターネットにアクセスできないのは困る。
ソフトウェアをインターネットからダウンロードしたりアップデートしたりできなくなるため。

そのためにあるのがNAT
Network Address Translationの略

内部だけで通用するアドレスを外部とも通信できるアドレスに変換する技術

NATを導入すると片方向だけの接続を許すことが実現できる。

DBサーバーからはインターネットに接続できるが、インターネットからDBサーバーには接続できないという環境を実現する。

ただし、DBサーバーから外部に通信した際の戻りの通信は通してくれる。
NATという仕組みによってDBサーバーは外部からソフトウェアを安全にダウンロードできるようになる。

1-4 物理的なネットワークとAWS

実際に構築するには「インターネットに接続された回線」と「各種サーバー」とそれらを接続するハブやルータやらなんやら、物理的な「モノ」が必要あり、手軽に試せない。

しかし、今はいい時代になった。

仮想的にネットワークやサーバーを構築できる。
そのためにあるものが、AWS

Amazon Web Service
アマゾンウェブサービス

AWS IS GOD

AWSを使ってこれらのネットワークやサーバーを構築する。

AWSでは、いくつかの特殊な用語を使う。
物理的な機器とAWSのサービスとの関係を簡単にまとめる。

■「リージョン」と「アベイラビリティーゾーン」

「リージョン」
AWSは本書の執筆時点で世界16箇所の分散されたデータセンター群で構成されている。
それぞれの地域に存在するデータセンター群のことを「リージョン(Region)」と呼ぶ。
バージニアリージョン、オレゴンリージョン、東京リージョンとか。

「アベイラビリティーゾーン」
それぞれのリージョンはさらに「アベイラビリティーゾーン(Availability Zone)」に分割されている。
略してAZとか言ったりする。

それぞれのアベイラビリティーゾーンは、物理的に距離が相当離された、独立したファシリティ(ネットワークや電源網などの設備)を用いている。
つまり、AZが災害受けて壊れても、他のAZが影響を受けない、耐障害性を高める概念。

サーバーやDB、ルーターなどを構築するときはどのリージョンのどのアベイラビリティーゾーンに作るのかを選ぶ。

AWSの
仮想的なネットワーク(Amazon Virtual Private Cloud(以下Amazon VPC))や
仮想的なサーバー(Amazon Elastic Compute Cloud(以下Amazon EC2)インスタンス)
を構築する場合
「どのリージョン?」
「どのAZ?」
を決める必要がある。

AWSを使って実運用する際は、
「エンドユーザーに近いリージョンを選ぶとレスポンスが良くなる」
「耐障害性を高めるために異なるAZに同じ構成のサーバーを立てて負荷分散する」
といろいろ考慮する必要がある。

AWSではデータセンター全停止などの大きな衝撃に備えて複数のAZに Amazon EC2インスタンスを配置して耐障害性を高めることを推奨している。

しかし本書では演習のやりやすさから、「東京リージョン」の1つのAZに全てのEC2インスタンスを配置する。

■「ネットワーク」と「Amazon VPC」
AWSではAmazon VPCと呼ばれる領域を作ると、そこに自由なネットワークを作れる。
Amazon VPCを作ったら、それをいくつかのネットワークに更に分割して利用する。
分割したネットワークのことを「サブネット」という。

サブネットの中には、「サーバー(Amazon EC2インスタンス)」を配置できる。

■「サーバー」と「Amazon EC2 インスタンス」
AWSではEC2を使ってサーバーを作る。
起動された各サーバーの個体は「インスタンス」と呼ばれる。
四角い箱で図示する。
インスタンスを作る時、「CPUのスペック」や「ディスクの容量」を決められる。

本書では実験なので契約してから1年間の無償利用範囲に含まれている「t2.micro」というインスタンスタイプを使う。


1-5 本書の流れ

本書はAWSを使ってWordPressによるブログシステムを構築しながらネットワーク技術やサーバー技術を習得していく。

次の章で構成されている。

Chapter2 ネットワークを構築する
システムの土台となるネットワークを設計する。
どのようなIPアドレスを割り当てるべきなのかについても検討する。
インターネット側から見える「パブリックサブネット」を構築する。

Chapter3 サーバーを構築する
Amazon EC2を使ってサーバーを構築する。
サーバーに対して設定するファイアウォールについても説明する。

Chapter4 Webサーバーソフトをインストールする
構築したサーバーにApacheをインストールし、Webサーバーとして構成する。
DNSを設定して、ドメイン名でアクセスできるようにする。

Chapter5 HTTPの動きを確認する
WebサーバーはHTTP(Hyper Text Transfer Protocol)というプロトコルを使って通信する。
デバッグツールを使い、実際にどのようなデータが送受信されているのかを覗き見する。

Chapter6 プライベートサブネットを構築する
インターネットからは見えない「プライベートサブネット」を作り、DBサーバーを配置する。

Chapter7 NATを構築する
構築したネットワークからインターネットに接続できるようにするためにNATを構築する。

Chapter8 DBを用いたブログシステムの構築
DBサーバーにMySQLをインストールする。
WebサーバーにWordPressをインストールする。

ブログシステムを完成させる。

Chapter9 TCP/IPによる通信の仕組みを理解する
おさらいする。
今後どういったことを学習すべきか。

----------------------------------------
あとで調べる欄

スケールアップ
既存サーバーの性能をアップ!(垂直)

スケールアウト
サーバーの数を増やす!(水平)

Wireshark
ネットワークアナライザソフトウェア


この記事が気に入ったらサポートをしてみませんか?