【初心者向け】AWSの基礎知識
【初心者向け】AWSの基礎知識:
AWSでRailsアプリをデプロイしたのですが、その時に必要だと思った知識を整理しました。
初心者向けの基礎的な内容を浅く紹介しています。
インターネットに接続する時に使う
IPアドレスを表記する時前半部分を
またネットワーク部とホスト部は以下の方法で区別されます。
クラスフルアドレスでは、クラスA~Cにおいて下記のようにネットワーク部とホスト部が区別されています。
クラスレスアドレスの場合、IPアドレスのネットワーク部とホスト部の境界が定まっていません。なので、サブネットマスクを使用し、32ビットあるIPアドレスのうち、ネットワーク部とホスト部がどこからどこまでの範囲なのかを示します。
AWSでは
VPCを作る時には、どのようなIPアドレス範囲を使うか指定します。
VPCを作ったら、それをさらにいくつかに分割して利用します。
分割したネットワークのことを
インターネットからアクセスすることを目的としたサブネットです。
ここにWebサーバーを設置してインターネットからアクセスできるようにします。
インターネットから直接接続できないようにしたサブネットです。
ここにはデータベースなどインターネットから隔離しておきたいものを設置します。
VPCであるサブネットをインターネットに接続するには、
これは「自分のネットワークにインターネット回線を引き込む」というイメージの作業になります。
ネットワークにデータを流すには
この設定を
この設定により宛先のIPアドレスを区別し、送信されたデータをどのネットワークに転送するかを決めることができます。
宛先アドレスを
AWSでは仮想サーバーは
作成した仮想サーバーのことを
インスタンスにはパブリックサブネットでし使用可能なプライベートIPアドレスを割り当てます。
しかしプライベートIPアドレスではインターネットに接続できません。
なのでインスタンスを起動する時にはパブリックIPアドレスを設定する必要があります。
インターネットではルーター同士が通信してルートテーブルの情報のやりとりをして、必要に応じて自動で更新するようにしています。
これはルーティングプロトコルという仕組みで実現されており、大きく分けて
AWSなどのある程度大きなネットワークはそのネットワークを管理する
EGPであhこのAS番号をやりとりして、
上記の EGP内部のルーターどうして情報のやりとりをします。
つまり、
TCP/IPで通信するサーバーなどの機器には、他のコンピューターと、データを送受信するためのデータの出入り口が用意されています。
これを
このポートのおかげで、1つのIPアドレスに対して、複数のアプリケーションが同時に通信できます。
住所でいうとネットワーク部が市町村、ホスト部がマンション名、ポートが部屋番号です。
その最も簡単な構造のものが、
パケットフィルタリングは、流れる
パケットフィルタリングは、IPアドレスとポート番号などパケットに付属する各種情報をみて、通過の可否を決めます。
実世界でのパケットフィルタリングを更生するのは、ルーターやサーバーもしくは専用のファイアーウォール機器です。
AWSでは、インスタンスに対して更生する
セキュリティーグループの設定には
前者が、
他の有名なWebサーバーである
CPUリソースを多く消費する動的コンテンツの処理スピードはApacheの方が速いと言われている
WebブラウザにパブリックIPアドレスを入力することで、Webサイトにアクセスできます。
しかし一般にWebサイトにアクセルする時には直接パブリックIPアドレスを入力することはほとんどありません。
なぜなら単なる数字であるIPアドレスは覚えずらいからです。
そのため、一般的には
TCP/IPでは、相手先を確認するのは、あくまでもIPアドレスです。
ドメイン名でアクセスする時も最終的にIPアドレスに変換して接続します。
その時に使われる仕組みが
IPアドレスとドメイン名を変換するのは
DNSのシステムは世界中に散らばったDNSサーバー群で構成され、それぞれのDNSサーバーは自分の担当する範囲でのみ、ドメインとIPアドレスの変換を行ないます。もし、担当する範囲外の名前解決が必要になった場合は、他のDNSサーバーへと処理を転送します。
Web通信では
HTMLをはじめとするWebサービスに必要とされる情報を伝達するためのルールです。
HTTPはクライアント・サーバ型のアーキテクチャで2者間で
リクエストは次の3つで構成されています。
リクエストラインは要求コマンドのことです
・要求したいホスト名
・ブラウザの種類
・対応言語
・Cookiの情報
・直前に見ていたページのURL
上記のようなものが含まれており多くの場合複数行に渡ります。
ヘッダーとボディは空行で区切られます。
レスポンスは次の3つで構成されます。
正常に修理すれば
多くの場合複数行に渡ります。
ヘッダーとボディは空行で区切られます。
上記で
上記で書いたWebサーバーではパブリックアドレスを割り当て、パブリックサブネットに配置しました。
パブリックサブネットはインターネットゲートウェイを経由してインターネットに接続されています。
つまりパブリックサブネットに配置したWebサーバーは、インターネットから
しかしシステムを構築するサーバー群の中には、インターネットから直接アクセスして欲しく無いものもあります。
データベースなどはその典型的な例です。
隠したいサーバーは
プライベートサブネットを構築することで、サーバーを隠すことができ、セキュリティを高められます。
Webアプリケーションに構築されるデータは
そしてデータベースと普段呼んでいいるものは下記のように分けられます。
これらを一般的にはデータベースと呼んでいます。
データベース管理システム(DBMS)を搭載したサーバーなどを
プライベートサブネットを構築したら、その中にデータベースサーバー構築します。
サーバーやOSの管理なしに、リレーショナルデータベース(RDB)を利用できます。主要なRDBMS製品と互換性があるため、既存のデータベースの移行も可能です。EC2よりも、さらに簡単にデータベースを運用できます。
認証部分を含めネットワーク上の通信がすべて暗号化されるため、安全に通信することができます。
SSHでは
ネットワークの世界では、データを暗号化したり、元に戻したりするために必要なデータを
このような管理の仕方を
ネットワーク上でやり取りされるデータは、公開鍵を使って暗号化すると対応する秘密鍵でしか復元できません。逆に、秘密鍵を使って暗号化すると、対応する公開鍵でしか復元できません。
Unicorn Workerというものを使ってリクエストに対応しており、サーバのダウンタイムなしでデプロイできます。
またUnicornは
そしてRubyアプリケーションとWebサーバーをつなぐための中間サーバーを
Rack Webサーバーを挟むことで、RubyアプリケーションなどをWebサーバー上で動作させることができます。
プライベートサブネットに配置したサーバーは、インターネットから接続できないため安全です。しかしインターネットと一切通信できないためサーバーのアップデートやソフトウェアのインストールの時不便です。この問題を解決するのが
NATは
NATはIPアドレスを変換する装置で、2つのネットワークインターフェースを持ちます。
片方のインターフェースには、一般に
プライベートサブネットに接続するホスト(サーバーやクライアント)が、インターネットにパケットを送信しようとした時、NATはパケットの送信元IPアドレスを自身のパブリックIPアドレスに置換します。こうすることで、送信元がプライベートIPアドレスではなくNATが持つパブリックIPアドレスに変わるため、インターネットに出ていくことができます。
パケットの送信元IPアドレスが置換されているので、接続先からはNATが接続してきているように見えます。そのため応答パケットは、このNATに戻ってきます。NAT戻ってきた応答パケットの宛先を、元のホストのIPアドレスに置換してプライベートサブネットに転送します。
このようにNATがIPアドレスを置換することによって、プライベートサブネットに存在するホストは、インターネットと通信するようになります。
NATを用いるとプライベートサブネットからインターネットサブネットに接続することができますが、逆にインターネットからサブネットの方向に接続できません。
そのため、サブネットにパブリックIPアドレスを割り当ててインターネットに通信を許すよりセキュリティーが高められます。
NATには2種類あります。
・IPアドレスだけを置換するもの(NAT)
・IPアドレスとポート番号の両方を置換するもの(NAPT)
どちらも一般的にNATと呼ばれます。
AWSでNATを構成する場合、次の2つの方法があります。
NATソフトウェアがあらかじめインストールされたAMIから起動したEC2インスタンスを使う方法です。
NATゲートウェイは、NAT専用に構成された仮想的なコンポーネントです。配置すサブネットを選ぶだけで構成できます。
今まで、AWSのを使うのに必要な基本的な知識をまとめてみましたが、ここではそのほかに調べたAWSのサービスをいくつか書こうと思います。
S3の一般的な使い方は、ファイルをS3に保存するストレージ機能を使うことです。
ファイルのバックアップや、ファイル処理の加工前、もしくは加工後のファイルを保存する、画像ファイルやCSSなどWebで使う静的なファイルをS3に置いて配信することができます。
S3は事前に保存容量を決める必要は無く、入れた分だけ課金されますので、ストレージの空きを気にする必要がありません。
実態はEC2やS3、RDSやなどをプロビジョニングするサービスです。
これはEC2やネットワークの存在を強く意識することなく、アプリケーションのデプロイと管理ができます。
以上で一通り調べたことをまとめ終わりました。
なにか間違っているところなどあればご指摘ください!
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
インターネットではルーター同士が通信してルートテーブルの情報のやりとりをして、必要に応じて自動で更新するようにしています。これはルーティングプロトコルという仕組みで実現されており、大きく分けて
EGPとIGPの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サーバーは、インターネットから
SSHやWebブラウザでアクセスできます。しかしシステムを構築するサーバー群の中には、インターネットから直接アクセスして欲しく無いものもあります。
データベースなどはその典型的な例です。
隠したいサーバーは
インタネットから接続できないサブネットに配置します。このサブネットが、プライベートサブネットです。プライベートサブネットを構築することで、サーバーを隠すことができ、セキュリティを高められます。
データベース
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やネットワークの存在を強く意識することなく、アプリケーションのデプロイと管理ができます。
まとめ
以上で一通り調べたことをまとめ終わりました。なにか間違っているところなどあればご指摘ください!
コメント
コメントを投稿