【初心者向け】AWSの基礎知識

【初心者向け】AWSの基礎知識:

AWSでRailsアプリをデプロイしたのですが、その時に必要だと思った知識を整理しました。

初心者向けの基礎的な内容を浅く紹介しています。


IPアドレス

IPアドレスとは通信先を特定するための番号です。アドレスという名前通り住所のようなものです。

インターネットに接続する時に使うパブリックIPアドレスとインターネットで使わないプライベート IPアドレスがあります。


ネットワーク部とホスト部

IPアドレスを表記する時前半部分をネットワーク部後半部分をホスト部と言います。
ネットワーク部は同じネットワークに属する限りは、同じ値です。
ホスト部は割り当てたいサーバーやクライアント、ネットワーク機器に対する連番となります。

またネットワーク部とホスト部は以下の方法で区別されます。


クラスフルアドレス

クラスフルアドレスでは、クラスA~Cにおいて下記のようにネットワーク部とホスト部が区別されています。

数字がネットワーク部、Xがホスト部 
 
クラスA : 123.XXX.XX.XXX 
クラスB : 178.168.XXX.XX 
クラスC : 203.56.162.XXX 


クラスレスアドレス(サブネットマスク)

クラスレスアドレスの場合、IPアドレスのネットワーク部とホスト部の境界が定まっていません。なので、サブネットマスクを使用し、32ビットあるIPアドレスのうち、ネットワーク部とホスト部がどこからどこまでの範囲なのかを示します。
サブネットマスクではビット「1」でネットワーク部を表し、ビット「0」でホスト部を表します。

11111111.11111111.11111111.00000000 


VPC

AWSではVPCという領域を作るとそこに自由なネットワークを作れます。

VPCを作る時には、どのようなIPアドレス範囲を使うか指定します。


サブネット

VPCを作ったら、それをさらにいくつかに分割して利用します。

分割したネットワークのことをサブネットと言います。


パブリックサブネット

インターネットからアクセスすることを目的としたサブネットです。

ここにWebサーバーを設置してインターネットからアクセスできるようにします。


プライベートサブネット

インターネットから直接接続できないようにしたサブネットです。

ここにはデータベースなどインターネットから隔離しておきたいものを設置します。


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

VPCであるサブネットをインターネットに接続するには、インターネットゲートウェイを使います。

これは「自分のネットワークにインターネット回線を引き込む」というイメージの作業になります。


ルートテーブル

ネットワークにデータを流すにはルーティング情報と呼ばれる作業が必要です。

この設定をルートテーブルと呼びます。

この設定により宛先のIPアドレスを区別し、送信されたデータをどのネットワークに転送するかを決めることができます。

宛先アドレスをディスティネーションと呼びデータを転送するネットワークをターゲットと呼びます。


仮想サーバー

AWSでは仮想サーバーはEC2を使って作成します。

作成した仮想サーバーのことをインスタンスと言います。

インスタンスにはパブリックサブネットでし使用可能なプライベートIPアドレスを割り当てます。

しかしプライベートIPアドレスではインターネットに接続できません。

なのでインスタンスを起動する時にはパブリックIPアドレスを設定する必要があります。


EGPとIGP

インターネットではルーター同士が通信してルートテーブルの情報のやりとりをして、必要に応じて自動で更新するようにしています。

これはルーティングプロトコルという仕組みで実現されており、大きく分けてEGPIGPの2つから成り立っています。


EGP

AWSなどのある程度大きなネットワークはそのネットワークを管理するAS番号という番号を持っています。

EGPであhこのAS番号をやりとりして、どのネットワークの先に、どのネットワークが接続されているかを大まかにやりとりします。


IGP

上記の EGP内部のルーターどうして情報のやりとりをします。

つまり、詳細な情報のやりとりを行います。


ポート

TCP/IPで通信するサーバーなどの機器には、他のコンピューターと、データを送受信するためのデータの出入り口が用意されています。

これをポート(Port)と言います。

このポートのおかげで、1つのIPアドレスに対して、複数のアプリケーションが同時に通信できます。

住所でいうとネットワーク部が市町村、ホスト部がマンション名、ポートが部屋番号です。


ファイアーウォール

ファイアーウォール通してよいデータだけを通して、それ以外を遮断する機能のことです。

その最も簡単な構造のものが、パケットフィルタリングです。


パケットフィルタリング

パケットフィルタリングは、流れるパケット(データ)をみて通過の可否を決めす仕組みです。

パケットフィルタリングは、IPアドレスとポート番号などパケットに付属する各種情報をみて、通過の可否を決めます。


セキュリティーグループ

実世界でのパケットフィルタリングを更生するのは、ルーターやサーバーもしくは専用のファイアーウォール機器です。

AWSでは、インスタンスに対して更生するセキュリティーグループがこの機能を担当します。


インバウンドとアウトバウンド

セキュリティーグループの設定にはインバウンドアウトバウンドの2つがあります。

前者が、 外からインスタンスに接続する向き後者がこのインスタンスから外側に接続する向きです。


Webサーバー

Webサーバーとはクライアント(Webブラウザ)のリクエストを解釈し、そのリクエストに応じたデータをクライアントへ返す機能を持ったサーバーのことです。また、このやりとりはHTTPプロトコル上で行われます。ブラウザーは、ユーザーから入力されたURLを元にWebサーバーへ接続し、要求された情報を取得して画面に表示します。


Nginx

Nginx(エンジンエックス)とはオープンソースのWebサーバーです。

他の有名なWebサーバーであるApacheと比べ処理が軽く大量のリクエストを処理するのに向いている

CPUリソースを多く消費する動的コンテンツの処理スピードはApacheの方が速いと言われている


ドメイン

WebブラウザにパブリックIPアドレスを入力することで、Webサイトにアクセスできます。

しかし一般にWebサイトにアクセルする時には直接パブリックIPアドレスを入力することはほとんどありません。

なぜなら単なる数字であるIPアドレスは覚えずらいからです。

そのため、一般的にはwww.example.co.jpなどのドメイン名を使って、アクセスします。


DNS

TCP/IPでは、相手先を確認するのは、あくまでもIPアドレスです。

ドメイン名でアクセスする時も最終的にIPアドレスに変換して接続します。

その時に使われる仕組みがDNSです。DNSを用いて、あるドメイン名からIPアドレスを引き出すことを名前解決と言います。

IPアドレスとドメイン名を変換するのはDNSサーバーです。

DNSのシステムは世界中に散らばったDNSサーバー群で構成され、それぞれのDNSサーバーは自分の担当する範囲でのみ、ドメインとIPアドレスの変換を行ないます。もし、担当する範囲外の名前解決が必要になった場合は、他のDNSサーバーへと処理を転送します。


HTTP

Web通信ではHTTPという通信プロトコルが使われています。

HTMLをはじめとするWebサービスに必要とされる情報を伝達するためのルールです。

HTTPはクライアント・サーバ型のアーキテクチャで2者間でリクエストレスポンスをやりとりする方式を定めています。


リクエストの構成

リクエストは次の3つで構成されています。


リクエストライン

リクエストラインは要求コマンドのことです要求方法要求するURLが含まれる冒頭の1行です


ヘッダー

ヘッダーはブラウザから送信する追加情報です。

・要求したいホスト名

・ブラウザの種類

・対応言語

・Cookiの情報

・直前に見ていたページのURL

上記のようなものが含まれており多くの場合複数行に渡ります。


ボディ

ボディはHTMLフォーム(form要素)やAjaxなどで、POSTメソッドを利用してデータをサーバーに送信する時に利用されます。

ヘッダーとボディは空行で区切られます。


レスポンスの構成

レスポンスは次の3つで構成されます。


ステータスライン

ステータスラインはその要求の成否ほを返す冒頭の1行です。

正常に修理すれば200 OKというステータスが返されます。他には大まかに下記のようなステータスが返されます。

コード 意味
100番台 処理中
200番台 リクエスト成功
300番台 リダイレクト
400番台 クライアントエラー
500番台 サーバーエラー


ヘッダー

ヘッダーは追加情報を返すために利用されます。よく利用されるものとしてボディの種類を示すContent-Typeヘッダーやボディの長さを示すContent-Lengthヘッダーなどがあります。

多くの場合複数行に渡ります。


ボディ

ボディは要求されたURLに対するコンテンツです。HTMLのテキストや画像など、要求されたコンテンツデータそのものです。

ヘッダーとボディは空行で区切られます。


HTTPメソッド

HTTOメソッドとはコンテンツに対する操作コマンドのことです。多くの場合はGETや`POSTを使います。

メソッド 意味
GET リソースを取得する
POST リソースにデータを送信したり、子リソースを作成したりする
HEAD リソースのヘッダーの情報だけを得る(更新日時などステータスだけ取得したい時など用いる)
PUT リソースを更新したり、作成したりする
DELETE リソースを削除する
OPTIONS サーバーがサポートしているメソッドを取得する
TRACE 自分宛にリクエストメッセージを返してループバックする
CONNECT プロキシ動作のトンネル接続を変更する


プライベートサブネット

上記でプライベートサブネットについて簡単に書きましたが、ここではもう少し詳しく書こうと思います。


プライベートサブネットの利点

上記で書いたWebサーバーではパブリックアドレスを割り当て、パブリックサブネットに配置しました。

パブリックサブネットはインターネットゲートウェイを経由してインターネットに接続されています。

つまりパブリックサブネットに配置したWebサーバーは、インターネットからSSHWebブラウザでアクセスできます。

しかしシステムを構築するサーバー群の中には、インターネットから直接アクセスして欲しく無いものもあります。

データベースなどはその典型的な例です。

隠したいサーバーはインタネットから接続できないサブネットに配置します。このサブネットが、プライベートサブネットです。

プライベートサブネットを構築することで、サーバーを隠すことができ、セキュリティを高められます。


データベース

Webアプリケーションに構築されるデータはデータベース(DB)に格納されます。

そしてデータベースと普段呼んでいいるものは下記のように分けられます。

名前 説明
データベース(DB) データを入れる箱ですデータが入ります
リレーショナルデータベース(RDB) データベースの種類、データを表形式で扱うデータベース
データベースマネージメントシステム(DBMS) データベースを管理するシステム
リレーショナルデータベースマネージメントシステム (RDBMS) リレーショナルデータベースを扱うための道具
これらを一般的にはデータベースと呼んでいます。


データベースサーバー

データベース管理システム(DBMS)を搭載したサーバーなどをデータベースサーバーと呼びます。

プライベートサブネットを構築したら、その中にデータベースサーバー構築します。


RDS

RDSはAWSのフルマネージド型データベースサービス。

サーバーやOSの管理なしに、リレーショナルデータベース(RDB)を利用できます。主要なRDBMS製品と互換性があるため、既存のデータベースの移行も可能です。EC2よりも、さらに簡単にデータベースを運用できます。


SSH

SSHとはリモートコンピュータと通信するためのプロトコルです。

認証部分を含めネットワーク上の通信がすべて暗号化されるため、安全に通信することができます。

SSHでは公開鍵暗号を利用し、共通鍵を暗号化して鍵交換を行っています。かつ、通信自体は高速な共通鍵暗号を用いているため、速度低下を抑えています。


秘密鍵と公開鍵

ネットワークの世界では、データを暗号化したり、元に戻したりするために必要なデータをと呼んでいます。そのうち、全員に公開される鍵を公開鍵、自分以外知らない鍵を秘密鍵と言います。

このような管理の仕方を公開鍵暗号方式と言います。

ネットワーク上でやり取りされるデータは、公開鍵を使って暗号化すると対応する秘密鍵でしか復元できません。逆に、秘密鍵を使って暗号化すると、対応する公開鍵でしか復元できません。


アプリケーションサーバー

アプリケーションサーバーはWebサーバ-から受け取ったリクエストを受け取り、Javaやphp、Rubyなどのサーバーサイド・プログラムを実行し、そのデータを加工したり、データベースのデータを検索・加工した後、Webサーバーに応答を返すます。


Unicorn

Unicornは、Railsなどでつくられたアプリケーションを動かすアプリケーションサーバです。

Unicorn Workerというものを使ってリクエストに対応しており、サーバのダウンタイムなしでデプロイできます。

またUnicornは Rack Webサーバに分類されます。


Rack

RackとはRubyの様々なフレームワークとRubyを動かすための様々なWebサーバーの間を取り持つライブラリです。

そしてRubyアプリケーションとWebサーバーをつなぐための中間サーバーをRack Webサーバと言います。

Rack Webサーバーを挟むことで、RubyアプリケーションなどをWebサーバー上で動作させることができます。


NAT

プライベートサブネットに配置したサーバーは、インターネットから接続できないため安全です。しかしインターネットと一切通信できないためサーバーのアップデートやソフトウェアのインストールの時不便です。この問題を解決するのがNATです。

NATはプライベートサブネット⇨インターネットの向きの通信だけを許可します。


NATの仕組み

NATはIPアドレスを変換する装置で、2つのネットワークインターフェースを持ちます。

片方のインターフェースには、一般にパブリックIPアドレスを設定し、インターネットに接続可能な構成にしておきます。もうか途方のインターフェースにはプライベートIPを設定し、プライベートサブネットに接続します。

プライベートサブネットに接続するホスト(サーバーやクライアント)が、インターネットにパケットを送信しようとした時、NATはパケットの送信元IPアドレスを自身のパブリックIPアドレスに置換します。こうすることで、送信元がプライベートIPアドレスではなくNATが持つパブリックIPアドレスに変わるため、インターネットに出ていくことができます。

パケットの送信元IPアドレスが置換されているので、接続先からはNATが接続してきているように見えます。そのため応答パケットは、このNATに戻ってきます。NAT戻ってきた応答パケットの宛先を、元のホストのIPアドレスに置換してプライベートサブネットに転送します。

このようにNATがIPアドレスを置換することによって、プライベートサブネットに存在するホストは、インターネットと通信するようになります。

NATを用いるとプライベートサブネットからインターネットサブネットに接続することができますが、逆にインターネットからサブネットの方向に接続できません。

そのため、サブネットにパブリックIPアドレスを割り当ててインターネットに通信を許すよりセキュリティーが高められます。


NATの種類

NATには2種類あります。

・IPアドレスだけを置換するもの(NAT)

・IPアドレスとポート番号の両方を置換するもの(NAPT)

どちらも一般的にNATと呼ばれます。


NATインスタンスとNATゲートウエイ

AWSでNATを構成する場合、次の2つの方法があります。


NATインスタンス

NATソフトウェアがあらかじめインストールされたAMIから起動したEC2インスタンスを使う方法です。


NATゲートウェイ

NATゲートウェイは、NAT専用に構成された仮想的なコンポーネントです。配置すサブネットを選ぶだけで構成できます。


AWSのサービス

今まで、AWSのを使うのに必要な基本的な知識をまとめてみましたが、ここではそのほかに調べたAWSのサービスをいくつか書こうと思います。


S3

S3とはクラウド型のオブジェクトストレージサービスです。


オブジェクトストレージ

オブジェクトストレージとは、オブジェクト(ファイルなど)単位で出し入れが可能なストレージです。各地の物理的なデータセンターに分散して保存されていることで障害に強かったり、オブジェクト単位でのバージョンを残すことが出来ます。


ストレージ機能

S3の一般的な使い方は、ファイルをS3に保存するストレージ機能を使うことです。

ファイルのバックアップや、ファイル処理の加工前、もしくは加工後のファイルを保存する、画像ファイルやCSSなどWebで使う静的なファイルをS3に置いて配信することができます。

S3は事前に保存容量を決める必要は無く、入れた分だけ課金されますので、ストレージの空きを気にする必要がありません。


Elastic Beanstalk

Elastic Beanstalkはアプリケーションのデプロイ・管理サービスです。

実態はEC2やS3、RDSやなどをプロビジョニングするサービスです。

これはEC2やネットワークの存在を強く意識することなく、アプリケーションのデプロイと管理ができます。


まとめ

以上で一通り調べたことをまとめ終わりました。

なにか間違っているところなどあればご指摘ください!

コメント