AWS学習（メモ用）　後編

[前編の記事はこちらから]
(https://qiita.com/yossy2580/items/7aae5618530d76fd7aa7)
#RDSとは
フルマネージド(運用管理までやってくれる）なリレーショナルデータベースのサービスである。
コア機能開発に注力できるように設計されている。
データベースは外部に公開したくないので、プライベートサブネットに設置する。
##特徴
###可用性の向上
障害等があってもサービスが停止しないとういこと。
**マルチAZ**を簡単に構築できる
**マルチAZ**とは複数のアベイラビリティゾーンにまたがってRDSインスタンスを作成する。
その一つを**マスター**、もう一つを**スレーブ**という。
このスレーブはマスターをコピー（**レプリケーション**)したもの。
通常はマスターを使用して何か障害があった場合スレーブに切り替えてサービスを停止しないようにする。

###パフォーマンスの向上
**リードレプリカ**を簡単に構築できる。
書き込みはマスター、読み取りはリードレプリカにすることによってデータベースの負荷を下げてパフォーマンスの向上させることができる。

###保守・運用負荷の軽減
- 自動的バックアップ  
一日一回自動的に***スナップショット***と言われるバックアップを取得  
そのスナップショットを元にDBインスタンスを作成。
- 自動的にソフトウェアメンテナンス  
OSやデータベースのアップデートを指定した曜日や時間帯にアップデートしてくれる。
- 自動的に監視  
各種のメトリクスを60秒間隔で取得して、マネジメントコンソールで確認できる。

##使用可能なデータベース
- Amazon Aurora
- MySQL
- Oracle
- MariaDB
- Microsoft SQL Server
- PostgreSQL

**Amazon Aurora** とはAWSが開発したMySQL, PostgreSQLと互換性を持つRDBソフトウェア。

#Amazon S3とは

S3とは安価で耐久性の高いクラウドストレージサービス。
主に画像やcss,html,jsなどの静的ファイルを保存するために使用する
##特徴
- １G約3円という安価
- 99.999999999% と極めて高いデータ耐久性を持っている
- 容量無制限
- バケットやオブジェクトに対してアクセス制限できる

##バケットとオブジェクト
- **バケット**
オブジェクトの保存場所のこと
名前はグローバルでユニークなもの

- **オブジェクト**
データ本体のこと
S3が格納させるファイルで、URLが付与される
バケット内のオブジェクトは無制限

つまり、バケットという箱を作成して、そのバケット内にオブジェクトを入れるということ

##S3の流れ
下記の図を参照して、オブジェクトの保存・取得の流れ

保存はクライアントからサーバーに画像を含むデータをリクエストして、サーバーは受け取った画像をS3にアップロード。
取得はサーバーがクライアントにレスポンスとしてS3に保存されたオブジェクトを取得するための画像URLを含んだHTMLをファイルを返却、クライアントは埋め込まれた画像の数だけS3から取得する。


##CloudFrontとは
高速にコンテンツを配信するサービス
オリジンサーバー上にあるコンテンツを世界中にあるエッジロケーションにコピーしてそのエッジロケーションから配信を行う。
###特徴
- ユーザーから最も近いエッジサーバーから配信を行うので通信が高速。
- エッジサーバーでキャッシングするのでオリジンサーバーに負荷をかけない。

###S3と組み合わせるとどうなる？
S3のみの場合、ユーザーが直接S3にリクエストしてS3から配信されますが、
CloudFrontがある場合、CloudFrontがコンテンツをキャッシュとして保存して、そのキャッシュから配信されます。
それによって、S3からは直接通信しないのでS3の**負荷を軽減**、そしてキャッシュから配信されるので**高速に配信**されるというメリットがある。



#Route53とは
AWSのDNSサービスのことで、ネームサーバーの役割。
DNSとはドメイン名の管理システムのことでドメイン名をIPアドレスに変換する。
ネームサーバーとはドメイン名とそれに紐づくIPアドレスが登録されているサーバー。

##特徴
- 高可用性
- 最も近いロケーションから返すので高速
- DNSサーバーの設計・構築・管理する必要がない

##ホストゾーン
DNSのリソースコードの集合体。
ゾーンファイルみたいなもの

##レコードセット
リソースレコードのこと

##ルーティングポリシー
Route53がRoutesetに対してどのようにルーティングするか決める
最初は**シンプル**を使用することが多い

- シンプル  
レコードセットで事前に設定された値に基づいてドメインの問い合わせをする。

##ヘルスチェック
サーバー稼働状況のチェック

#IAMとは
IAMは、AWSのサービスを利用するユーザーに権限を管理するサービス。
AWSリソースを安全に操作するために、認証・許可の仕組みや、各AWSリソースに対して別々のアクセス権限をユーザーに提供できる。
料金は無料。

##特徴
もしユーザーのアクセスキーが漏洩したとき、そのアクセスキーが

- 一つのサービスに対して権限を保有しているユーザーか
- すべてのサービスに対して権限を保有しているユーザーか

どうかではリスクが大きく違う。

前者では仮に不正利用されたとしても、利用できるサービスは限られる。
しかし、後者ではすべてのサービスが不正利用されてしまうから。

##IAMのベストプラクティス
AWSの公式にセキュリティを重視したIAMの作り方が書かれています。

[IAM でのセキュリティのベストプラクティス](https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/best-practices.html)

AWSのサービスを使用する前におすすめします。
ここではいくつか挙げていきます。

- 個々人にIAMユーザーを作成する。

- ユーザーをグループに所属させ、グループ権限を与える

- 権限は最小にする

- ロールを使用する

- 不要な認証情報は削除


##ポリシー
アクセスを定義する。
アカウントや各種サービスに対して細かな操作権限を名前をつけて管理する。

例えばS3のポリシーは、AmazonS3FullAccessとAmazonS3ReadOnlyAccessがあるが、
AmazonS3FullAccessはS3サービスの利用に一切の制限がない権限でAmazonS3ReadOnlyAccessS3はサービスの利用は取得・表示のみの権限なので違う。

このように、**どのAWSサービスの、どのリソースに対して、どんな権限を付与するか**を定義する。

##ユーザー
ユーザーには**ルートユーザー**と**IAMユーザー**がある。

###ルートユーザー
AWSアカウントを作成してログインした時の初期のユーザー。
ルートユーザーはアカウントやサービスに対するすべての権限を保有しているので、先程書かれたIAMベストプラクティスに推薦されない。
したがって、ルートユーザーで基本的に操作しない。

###IAMユーザー
IAMユーザーを作成する権限を持ったユーザーによって作成されたユーザーのこと

##グループ
IAMユーザーの集合のこと
複数のユーザーに権限を付与することができ、作業を効率的にできる。
また、２つのグループを作ったとき、違う権限をもたせたり、同じ権限をもたせたりもできる。

##ロール
サービスとサービスの間の権限を管理する機能。
例えば、EC2インスタンスからS３バケットへオブジェクトを保存したいとき、このロールを使えばS3バケットのアクセス権限をEC２インスタンスに付与することができる。
基本的にAWSリソースに権限を付与するために使用する。