AWS 基礎

#前提
人間の脳は2日で73％を忘れると聞いて、何回も復習するため書いていきます。

#本題

#Webサーバーの構築

##EC2とは
AWSクラウド上の仮想サーバー
インスタンスとはEC2から立てられたサーバーのこと

###特徴
・数分で起動し、1時間または秒単位の従量課金
・サーバーの追加、削除、マシンスペック変更も数分で可能
・OSより上のレイヤについては自由に設定できる

##AMIとは
インスタンス起動に必要な情報が入ったOSのイメージ
サーバーのテンプレートのようなもの

###特徴
・AWSやサードパティがAMIを提供
・自前のカスタムAMIも作成可能
・カスタムAMIから何台でもEC2インスタンスを起動可能

##インスタンスタイプとは
サーバーのスペックを定義したもの

###概要
・インスタンスタイプにより、CPU、メモリ、ストレージ、ネットワーク帯域が異なる
・インスタンスタイプにより料金が異なる、スペックが高いほど料金も高い
・アクセス数などに応じて必要なスペックのあるインスタンスタイプを選択する

##ストレージとは
サーバーにくっつけるデータの保存場所
EC2のストレージには2種類ある

###EBS
・高い可用性と耐久性をもつストレージ
・他のインスタンスに付け替え可能
・EC2インスタンスをStop/TerminateしてもEBSは保持可能
・Snapshotを取得しS3に保存可能
・EBSの費用が別途発生
・OSやDBなど永続性と耐久性が必要なデータを置く

###インスタンスストア
・インスタンス専用の一時的なストレージ
・他のインスタンスに付け替えることができない
・EC2インスタンスをStop/Terminateするとクリアされる
・追加費用なし（無料）
・なくなってはいけないデータは置かない
・一時ファイル、キャッシュなど失われても問題がないデータを置く

通常だとEBSを使用することが多い

##サーバーにログインとは？
（離れた場所にある）サーバーに入って、自分のパソコンから操作すること

##SSHとは
サーバーと自分の目の前のパソコンをセキュアにつなぐサービスのこと
通信内容が暗号化された遠隔ログインシステム
EC2にログインするときはSSHを使用する

##公開鍵認証
誰でもサーバーに入れると困るので、サーバーの作成者本人だけがログインできるよう、EC2ではSSHログイン時に公開鍵認証を行なっている

###公開鍵認証とは
・サーバーへのログイン時に認証を行う仕組み
・ユーザー名とパスワードを使用した認証と比べ、よりセキュリティが高い
・公開鍵暗号（秘密鍵と公開鍵）を用いて認証を行う
・公開鍵はサーバーが保有、秘密鍵を持っているユーザーだけログイン可能
pemファイルが秘密鍵

##ポート番号
プログラムのアドレス
同一のコンピュータ内で通信を行うプログラムを識別するときに利用される

##ポート番号はどうやって決まっているのか
ポート番号を決める方法には2種類ある

###標準で決められている番号
・代表的なプログラムが使うポート番号はあらかじめ決められている
・ウェルノウンポート番号と呼ばれる
・ウェルノウンポート番号は0〜1023までのいずれかの整数値をとる
・接続元（クライアント）が接続先のポート番号を省略したときは、このウェルノウンポート番号が使用される

###動的に決まる番号
・サービスを提供する側（サーバー）はポート番号が決まっている必要があるが、接続元（クライアント）のポート番号は決まっていなくてもいい
・クライアントのポート番号は、OSが他のポート番号と被らないように、ランダムに決められる
・動的に割り当てられる番号は49142〜65535までのいずれかの整数値をとる

```
$ sudo lsof -i -n -P
```
<code>lsof</code>
どのポート番号でどのプログラムが待ち受けているか知るためのコマンド

<code>-i</code>
ネットワークソケットファイルを表示するオプション
サーバーの待機ポートとプロセスを一覧表示する

<code>-n</code>
IPアドレスをホスト名に変換しないオプション

<code>-P</code>
ポート番号をサービス名に変換しないオプション

・LISTEN
他のコンピュータから待ち受けているポート

・ESTABLISHED
相手と現在、通信中のポート

##ファイヤウォールとは
ネットワークを不正アクセスから守るため、通して良い通信だけを通して、それ以外は通さな機能の総称

###AWSにおけるファイアウォール
セキュリティグループがファイアウォールの役割を担っている

EC2インスタンスのパブリックIPは、起動・停止すると別のIPアドレスが割り当てられる
ElasticIPアドレスを使用するとIPアドレスを固定できる


#ドメイン登録（Route53）
IPアドレスは数字の列なので、人にとっては覚えにくい
そこで、ドメイン名を用いてWebサイトにアクセスできる

##ドメイン名の構造
ドメイン名はピリオドで区切られた構造をしている

##ドメインは誰が管理しているのか
ドメイン名全体はICANNが管理していて、トップレベルドメインごとにレジストリが管理
販売はレジストラとリセらが行う

###ICANN
ドメイン全体を管理

###レジストリ
・トップレベルドメインを管理
・レジストラに卸す
.jp
.com/.ne
.org

###レジストラ
・リセラに卸す
・一般消費者に販売
お名前.com
ゴンベエドメイン

###リセラ
・一般消費者に販売
Yahoo!ドメイン
ムームードメイン


##ドメインを購入すればWebサイトが見れる？
ドメインを購入するだけでは見れない
Webサイトを見れるようにするにはドメインとサーバー（IPアドレス）をDNSで紐づける必要がある

###DNSとは
・ドメイン名の管理システム
・ドメイン名をIPアドレスに変換する
・ネームサーバーとフルリゾルバの2つから構成されている

###ネームサーバー
・ドメイン名とそれに紐付くIPアドレスが登録されているサーバー
・ドメインの階層ごとにネームサーバーが配置され、そのネームサーバーが配置された階層のドメインに関する情報を管理する

###フルリゾルバ
・どのドメインに紐付くIPアドレスを教えてと問い合わせると、色々なネームサーバーに聞いてIPアドレスを調べて教えてくれるサーバー

###DNSはドメイン名とIPアドレス以外も管理している
ドメイン名とIPアドレスの紐付け一つ一つのことをリソースレコードと呼び、IPアドレス以外も管理している

##Route53とは
AWSのDNSサービス
ネームサーバーの役割を果たす

###特徴
・高可用性、SLA100％（稼働率のこと、Route53が落ちないよということをAWSが保証している）
・高速、エッジロケーションの中でもっとも近いロケーションから応答を返す（東京に１２箇所、大阪に１箇所）
・フルマネージドサービス、DNSサーバーの設計・構築・維持管理が不要（AWSが全部やってくれる）

###概念
・ホストゾーン
DNSのリソースレコードの集合
ゾーンファイルのようなもの
・レコードセット
リソースレコードのこと
・ルーティングポリシー
Route53がRecordSetに対してどのようにルーティングを行うかを決める
・ヘルスチェック
サーバーの稼働状況をチェック

##ルーティングポリシー
###シンプル
・レコードセットで事前に設定された値に基づいて、ドメインへの問い合わせに応答する
・最初はこちらを使用することが多い

###加重
・複数エンドポイント毎に設定された重みづけに基づいて、ドメインへの問い合わせに応答する
・提供リソースに差がある場合やABテスト時に使用

###レイテンシー
・リージョン間の遅延が少ない方のリソースへルーティングする
・マルチリージョンにリソースが存在する場合に使用

###位置情報
・クライアントの位置情報に基づいて、ドメインへの問い合わせに応答する
・コンテンツのローカライズや地域限定配信時に使用

###フェイルオーバー
・ヘルスチェックの結果に基づいて、利用可能なリソースへルーティングする
・障害発生時にSorryサーバーに簡単に切り替えられる

##RDSとは
フルマネージなリレーショナルデータベースのサービス
・構築の手間の軽減
・運用の手間の軽減
・AWSエンジニアによるデータベース設計のベストプラクティスを適用
...コア機能の開発に集中できる！！

###概要
・利用可能なエンジン
MySQL
PostgreSQL
Oracle
Microsoft SQL Server
Amazon Aurora
MariaDB

・各種設定グループ
DBパラメータグループ：DB設定値を制御
DBオプショングループ：RDSへの機能追加を制御
DBサブネットグループ：RDSを起動させるサブネットを制御

###特徴
・可溶性の向上
マルチAZを簡単に構築

・パフォーマンスの向上
リードレプリカを簡単に構築

・運用負荷の軽減
自動的なバックアップ
1日1回バックアップを自動取得（スナップショット）
スナップショットをもとにDBインスタンスを作成（リストア）

自動的なソフトウエアメンテナス
メンテナンスウィンドウで指定した曜日・時間帯にアップデートを自動実施

監視
各種メトリクスを60秒間隔で取得・確認可能