【AWS】勉強したことをまとめる

## VPC

- 仮想ネットワーク
- デフォルトではインターネットから隔離された領域
    



## サブネット

- VPCだとIPアドレスの範囲が広いので、サブネットで分割する
- パブリックサブネットとプライベートサブネットに分けることで、インターネットに接続する／インターネットから隠すサーバーをそれぞれ配置可能

## ルートテーブル

- 宛先IPアドレス
  - 0.0.0.0/0
    - デフォルトルート　
    - ルートテーブルに登録されているどのアドレスにも一致しない場合の経路
- VPCと各サブネットに対して設定できる
  - 作成時にVPCを割り当てる
  - 作成後、関連付けたいサブネットを指定できる
- 例）以下の場合、10.0.0.0/16宛てに送られてきた通信に対して自身のネットワークを返し、その他のアドレスからのアクセスはすべて破棄する

| 送信先      | ターゲット |
| ----------- | ---------- |
| 10.0.0.0/16 | local      |





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

- AWSでは、サブネットやインターネットゲートウェイ間ではルーターが動いている
- VPCとインターネットをつなげる仮想のルーター
- VPCにインターネットの出入り口を設けるのがインターネットゲートウェイ
- 作り方
  - インターネットゲートウェイを作成
  - VPCにアタッチする
- インターネットからアクセスがくる
→ルートテーブルによってインターネットゲートウェイにとばされる
→インターネットゲートウェイがアタッチされているVPCにとぶ



## EC2

- どのVPCの、どのサブネットに設置するか選択する
- 自動割り当てパブリックIP
  - インターネット経由でアクセスできる**グローバルIPアドレス**を割り当てるかどうかを選択できる
  - インターネットからアクセスできるようにしたいインスタンスの場合は、**有効**にする
- キャパシティ予約
  - AWSではアベイラビリティゾーンごとにリソースの上限が決まっている
  - リソースの上限を超えると、EC2インスタンスの起動ができなくなる
  - キャパシティ予約をしておくと、事前にリソースを確保しておいてくれる
  - ただし、キャパシティ予約をしていると、EC2インスタンスの実行の有無に関わらず料金が発生してしまう
- T2/T3型インスタンスの落とし穴
  - ベースライン
    - 普段使用できるライン
    - CPU使用率がベースライン（10％）を下回っていると、CPUクレジットがたまっていく
  - バーストモード
    - CPU使用率が10％を超えると、バーストモードになり、CPUが100％使えるようになる
    - バーストモードの間は溜めておいたCPUクレジットを使用する
    - CPUクレジットを使い切ると、バーストモードは終了。サーバーは過負荷になり、応答遅延や応答不可になる。


## セキュリティグループ
例：DB用のセキュリティグループを作成する
（Webサーバーからきた接続だけMySQLでDBに接続できるようにする）

＜インバウンド＞
- タイプ
    - MySQL/Aurora
        - MySQLからの接続を許可するようになる
- ソース
    - Webサーバーを指定する
        - Webサーバー個別のIPアドレスを指定
            - サーバーを複数台運用する際は面倒
        - セキュリティグループ指定
            - セキュリティグループ内のインスタンスから接続できるようになる
       



## ポート番号

- プログラムのアドレス

- IPアドレスでコンピューターにたどり着き、ポート番号によって更にその中で動いているたくさんのプログラムのうちどのサーバーに通信を行うか指定できる

## Apacheのインストール

- ルート権限

  ```
  sudo -s
  ```

- アプデ

  ```
  yum update -y
  ```

- インストール

  -  httpd,hphttpd： Apacheを 構成 する 実行 ファイル

  ```
  yum -y install httpd
  ```

- 起動

  - インストールしただけではApacheは起動しない

  ```
  systemctl start httpd.service
  ```

- ステータス確認

  - activeになっていればOK

  ```
  systemctl status httpd.service     
  ```

- プロセス(実行中のプログラム)を確認

  - psコマンド
    - OS内部で現在実行されているプロセス一覧を表示
  - オプション
    - a：端末を持つ全てのプロセスを表示
    - x：端末を持たない全てのプロセスを表示
    - u：CPUやメモリ使用率を併せて表示

  ```
  ps -axu
  ```

  ```
  ps -aux | grep httpd
  ```

- サーバー起動時にApacheも自動的に起動するよう設定

  - 現状ではサーバーの停止・再起動時にApacheが停止し、その後手動で起動が必要になる

  ```
  systemctl enable httpd.service
  ```

  
## Route53

- ネームサーバーの役割を持つ

- ドメイン名とIPアドレスの紐づけを管理

- タイプ

  - NSレコード
    - ドメインを管理するネーム
  - SOAレコード
    - ドメインのゾーンの管理情報

- digコマンド

  - DNSサーバに問い合わせることで、ドメイン名からIPアドレスを調べるコマンド（逆も可能）
  - オプション
    - -x IPアドレス：逆引きを行う
    - ns：ネームサーバを表示
    - +short：短い表示を行うかどうか（シンプルにネームサーバーだけを知りたいので付加）

  ```
  dig ドメイン名 ns +short
  ```

  ```
  dig -x IPアドレス 
  ```

- 設定
    - ドメイン名にアクセス→EC2インスタンス
        - 結果
            - 名前：ドメイン名
            - 値：インスタンスのIPアドレス
    - ドメイン名にアクセス→ロードバランサー→EC2インスタンス
        - 設定方法
            - チェックボックスを選択
            - エイリアス先にロードバランサーを指定
        - 結果
            - 名前：ドメイン名
            - 値：ロードバランサー


## RDS

- 設定グループ

  - パラメータグループ
    - RDSではDBの設定ファイルを直接編集できないので、その代わりにパラメータグループでDBの設定値を指定する
  - オプショングループ
    - RDSへの機能追加を制御
    - ex）プラグインの追加
  - サブネットグループ
    - RDSを起動させるサブネットを指定
    - 複数のサブネットを指定することで、マルチAZ構成を実現できる

- マルチAZ構成

  - 複数のアベイラビリティゾーンにまたがってRDSインスタンスを作成
  - マスター
    - 通常使用するDB
  - スレーブ
    - マスターをコピー（レプリケーション）したもの
    - マスターに問題が発生した場合、スレーブに自動的に切り替わる

- リードレプリカ

  - 複数のRDSインスタンスを立ち上げて、マスターと同期された読み込み専用のRDSインスタンスを起動すること

  - 以下のようにアプリケーションとDBのやりとりを役割分担することで、データベースの負荷を下げてパフォーマンスを向上させることができる

    - マスター（読み書きできる）：書き込み専用
    - リードレプリカ（読み取りできる）：読み込み専用

  - 自動バックアップ

    - 1日1回バックアップを自動取得（スナップショット）
    - スナップショットをもとにDBインスタンスを作成（リストア）

- スナップショットの取得
    ※手動で取得したスナップショットは自動では消えない！    
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2524160/9b9b96c5-ba0e-f97c-4a5d-71947f5c9208.png)

- EC2インスタンスからRDSに接続
    - インスタンスにSSH接続する
    - mysqlをインストールする

  ```
  sudo yum -y install mysql
  ```    

    - DBに接続する
        - -p:パスワード入力を求められる（平文で書かなくてよくなる）
        - ここでログインに使用するユーザー名とパスワードは、AWSでDBを作成するときにも作成できるし、mysqlに入った状態で新規に別のユーザーを作成することもできる
  ```
  mysql -h DBのエンドポイント -u ユーザー名 -p 
  ```    
    

    

  

### 教材

[ AWS：ゼロから実践するAmazon Web Services。手を動かしながらインフラの基礎を習得](https://www.udemy.com/course/aws-and-infra/)