AWSメモ

# AWSメモ

### 初期設定
AWSのアカウントを作成できる
料金アラート設定

###VPCネットワークを構築
 
- 全体像
  - パブリックサブネット（ワードプレス等）とはインターネットと通信できるサブネットのこと。一般的にブラウザで展開される申し込みフォームのWebサーバー等
  - プライベートサブネット(DB等)とはインターネットと通信できないサブネットのこと。


- AWSネットワークの概念
  - リージョンの選択 
  - リージョンによって使えるサービスが異なる(アメリカが機能大い、日本の場合は東京がおすすめ（通信が早い）)
  - アベイラビリティゾーン
    - 独立したデータセンターのこと
    - 複数設置されている
  - VPC
    - インターネット上に仮想ネットワークを作成できるサービス
    - とても重要なサービス
  - サブネット
    - VPCを細かく区切ったネットワーク


- ネットワークのIPアドレスを決める

  - IPアドレスとはインターネット上の住所
  - 一意性
  - 32ビットの整数値（２進数）→読みにくいので８ビットずつの4つの組みにわけ１０進数で表示
[2進数とは　パソコン初心者講座](https://www.pc-master.jp/words/2sinsu.html)
  - IPアドレスにはパブリックとプライベートがある
    - パブリックはインターネットに接続する際利用する。ICANNという団体が管理していて全て一意のアドレス
    - プライベートはインターネットで使用されないアドレス。範囲が決まっていて一意でなくても良い

  - IPアドレスの範囲
    - ネットワーク部・ホスト部（可変）に区分けすることで範囲を表現できる

- VPCを作成する
- サブネットを作成
- ルーティングを設定
  - ルーターを通じてネットワークがどのIPアドレスにあるかを管理
  - ルートテーブルは「宛先のIPアドレス」と「次のルーター（AWSではターゲット）」という書式で設定する
  - local→自身のネットワーク(インターネットに接続できない)
  - インターネットの接続にはインターネットゲートウェイの作成が必要
  - ルートテーブルは各サブネットに対して設定できる。 
  - サブネットやインターネットゲートウェイ間にはルーターが動いている


- ネットワーク設計で考慮すべきポイント



  - プライベートIPアドレス範囲から指定する
  - 作成後は変更できないので、大きめの設定（/28~/16、/16が推薦）
  - オンプレミスや他VPCのレンジと重複いないように気をつける。
  - 異なるシステムの場合はアカウントを分ける
  - 同一システムの各環境は、VPCとアカウントどちらを分けるか？→同一アカウントで、VPCとリージョンを分けるのがよい（どちらでもよい）

参考
[パブリックサブネットとプライベートサブネットの違い \| システム担当の教科書](https://josys-memo.com/public-private-subnet/)


### 【EC2】Webサーバーを構築
- EC2インスタンスを設置する

  - EC2とは
    - AWSクラウド上の仮想サーバー。インスタンスというのはEC2から立てられたサーバーの事。 
    - 特徴
      - 数分で起動し、１時間または秒単位の従量課金。
      - サーバーの追加・削除、マシンスペック変更も数分で可能。
      - OSより上のレイヤについては自由に設定できる。
    - 作成手順
      - AMIの選択
        - AMIとは
          - AmazonMachineImageの略。インスタンスに必要な情報が入ったOSのイメージ。  
      - インスタンスタイプの選択
        - インスタンスタイプとは
          - サーバーのスペックを定義したもの\- インスタンスタイプにより、料金が異なる
      - ストレージの追加
        - サーバーにくっつけるデータの保管場所。EC2のストレージには２種類ある。 
          - 1.EBS(高い可用性と耐久力を持つストレージ、他のインスタンスに付け替え可能、EC2インスタンスをStop/TerminateしてもEBSは保持可能、Snapshotを取得しS3に保存可能、EBSの費用が別途発生、OSやDBなどの永続性と耐久性が必要なデータを置く)
          - 2.インスタンスストア（インスタンス専用の一時的なストア、他のインスタンスに付け替えることができない、EC2インスタンスをStop/Terminateするとクリアされる、追加費用なし、なくなってはいけないデータは置かない、一時ファイル・キャッシュなどなど失われても問題ないデータを置く）


      - セキュリティグループの設定
      - SSHキーペアの設定


- SSHについて


  - サーバーにログインするとは
    - 離れたところにあるサーバーにはいって、自分のパソコンから操作すること
    - SSHでログインすると自分がまるでWebサーバーの目の前にいるかの様に自分のコンピューターからWebサーバーを操作できる。
    - SSHとは
      - サーバーにセキュアに接続する仕組み
      -　暗号化されている

- 公開会議認証について

  - 誰でもサーバーに入れると困るので、サーバーの作成者本人だけがログインできるよう、EC2ではSSHログイン時に公開鍵認証を行なっている
  - 公開鍵認証とは
    - サーバーへのログイン時に認証を行う仕組み。
    - ユーザー名とパスワード使用した認証と比べ、よりセキュリティが高い
    - 公開鍵暗号（秘密鍵と公開鍵）を用いて認証を行う。
    - 公開鍵はサーバーが保有。秘密鍵を持っているユーザーだけログイン可能。
  - 公開鍵暗号の「暗号」とは？
    - イメージは南京錠 


- SSHでECインスタンスに接続する
- ポート番号について

  - SSHでログインしてサーバーを操作できるのはなぜ？→ サーバー状でSSHぜつ族を受け入れコマンドを受け付けるプログラム（sshd）が動いているから
  - サーバーにはたくさん起動しているプログラムがSSHのリクエストを受け付けるがどうやって選別しているのか？→*ポート番号で選別している*
  - *ポート番号*はプログラムのアドレス。同一コンピューターで通信を行うプログラムを識別するときに利用される。
  - 例）SSH：22
  - どうやってポート番号を決めるか
    - 2つキメ方がある。
    - 1.標準で決められている番号
      - ウェルノウンポート番号
      - 代表的なプログラムが使うポート番号はあらかじめ決められている。
    - 2.動的に決められている番号
      - サーバーを提供する側（サーバー）はポート番号が決まっている必要があるが、クライアント側のポート番号は決まっていなくて良い
      - クライアントのポート番号は、OSが他のポート番号と被らない様にランダムに決める。

```

[ec2-user@ip-10-0-10-10 ~]$ sudo lsof -i -n -P
COMMAND   PID     USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
rpcbind  2689      rpc    6u  IPv4  16847      0t0  UDP *:111 
rpcbind  2689      rpc    7u  IPv4  16848      0t0  UDP *:736 
rpcbind  2689      rpc    8u  IPv4  16849      0t0  TCP *:111 (LISTEN)
rpcbind  2689      rpc    9u  IPv6  16850      0t0  UDP *:111 
rpcbind  2689      rpc   10u  IPv6  16851      0t0  UDP *:736 
rpcbind  2689      rpc   11u  IPv6  16852      0t0  TCP *:111 (LISTEN)
chronyd  2698   chrony    1u  IPv4  17108      0t0  UDP 127.0.0.1:323 
chronyd  2698   chrony    2u  IPv6  17109      0t0  UDP [::1]:323 
dhclient 2919     root    6u  IPv4  17829      0t0  UDP *:68 
dhclient 3036     root    5u  IPv6  18138      0t0  UDP [fe80::4ab:97ff:fe52:17c]:546 
master   3173     root   13u  IPv4  19031      0t0  TCP 127.0.0.1:25 (LISTEN)
sshd     3390     root    3u  IPv4  20731      0t0  TCP *:22 (LISTEN)
sshd     3390     root    4u  IPv6  20740      0t0  TCP *:22 (LISTEN)
sshd     4829     root    3u  IPv4 108709      0t0  TCP 10.0.10.10:22->114.191.10.30:51866 (ESTABLISHED)
sshd     4846 ec2-user    3u  IPv4 108709      0t0  TCP 10.0.10.10:22->114.191.10.30:51866 (ESTABLISHED)

```
(LISTEN)は待ち受けているポート
(ESTABLISHD)は通信中相手と通信中のポート 


- Apacheをインストールする

Apacheとは
- 世界中で使用されているWebサーバーソフトウェア
- サーバーのにApacheをインストールすることでWebサーバーとしての機能（レスポンス等）ができる

[Apacheとは？Webサーバーの仕組みと人気サーバーソフトを徹底解説 \| カゴヤのサーバー研究室](https://www.kagoya.jp/howto/rentalserver/apache/)
[アパッチ (Apache)とは｜「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典](https://wa3.i-3-i.info/word12465.html)

```
[ec2-user@ip-10-0-10-10 ~]$ sudo yum update -y

```
yumの更新
yum linuxのパッケージ管理ツール（インストールや更新等）
-y　はyesオプション。

```
[ec2-user@ip-10-0-10-10 ~]$ sudo yum -y install httpd
```
httpdはアパッチを構成する実行コマンド

```
[ec2-user@ip-10-0-10-10 ~]$ sudo systemctl start httpd.service
```

起動の確認

```
[ec2-user@ip-10-0-10-10 ~]$ sudo systemctl enable httpd.service
```
アパッチを自動起動設定する
- ファイアウォールを設定する

- ファイアウォールとは
  - ネットワークを不正アクセスから守る為に「通してよい通信だけを通して、それ以外は通さない」機能の略称。


### Elastic IPアドレスでIPアドレスを固定する

- ElasticIPアドレスとは
EC2インスタンスのパブリックIPは、起動・停止すると別のIPアドレスが割り当てられる。ElasticIPアドレスを利用すると、IPアドレスを固定できる。
- 特徴
  - そのインスタンスを削除するまでは、ずっとそのIPアドレスを使用することができる。
  - ElasticIPアドレスは、EC2に関連付けられていて、そのインスタンスが起動中であれば無料。逆に起動してなければ課金される。

### 【Route53】ドメインを登録する

#####構築するもの

ドメイン名でWebサーバーにアクセスできるようにする

##### ドメインについて

`www.example.co.jp`
`第4レベルドメイン.第3レベルドメイン.第2レベルドメイン.トップドメイン`

ドメインレベルに応じて各組織が管理している。

ドメイン名でアクセスできる理由

##### DNSについて

- DNSとはドメイン名をIPアドレスに変換するもの
- ネームサーバーとフルリゾバの2つから構成されている
  - ①ネームサーバー
    - ドメイン名とそれに紐づくIPアドレスが登録されているサーバー
    - ドメインの階層ごとにネームサーバーが配置され、そのネームサーバーが配置された階層のドメインに関する情報を管理する。
  - ②フルリゾバ(秘書の様なもの)
    - 「どのドメインに紐づくサーバーか教えて」とおい合わせると、色々なネームサーバーに聞いてIPアドレスを調べて教えてくれる。


##### Route53について

- Route53とは
  - AWSのDNSサービス。ネームサーバーの役割を果たす。
  - 重要概念
    - ホストゾーン
      - DNSのリソースレコードの集合。ゾーンファイルの様なもの
    - ルーティングポリシー
      - Route５３がRecordSetに対してどの様にルーティングを行うかを決める
      - シンプル、加重、レイテンシー、位置情報、フェイルオーバー等がある
    - ヘルスチェック
      - サーバーの稼働状況をチェック。

##### Route53でDNSを設定する

```
mbair:~ okadaatsuyoshi$ ssh -i ~/Desktop/aws-and-infra-ssh-key.pem ec2-user@52.196.118.157
```

ec2へログイン

```
[ec2-user@ip-10-0-10-10 ~]$ dig aws-and-infraa.work NS +short
```

で現在のネームサーバーを確認。
現在はデフォルトでお名前.comのネームサーバーになっているので変更する。


###【RDS】DBサーバーを構築する
 
##### RDSについて
 - AWSがフルマネージメントでDBの管理やってくれるので運用が楽。
 - 複数のアベイラビリティーゾーンにプライベートサブネットを作成することが推奨されている。

- RDSとは
  - フルマネージドなリレーショナルデータベース（いわゆるDB）のサービス。
  - メリット 
    - \- 構築の手間の軽減 \- 運用の手間の軽減 \- AWSエンジニアによるデータベース設計のベストプラクティスを適用 - ➡️コア機能の開発に注力できる
  - 各種設定グループ
    - DBパラメータグループ：DB設定値を制御
    - DBオプショングループ：RDSへの機能追加を制御
    - DBサブネットグループ：RDSを起動させるサブネットを制御
  - 特徴
    - 可用性の向上 
      - 複数のアベイラビリティゾーンを設定することで簡単にリスクを軽減
    - パフォーマンスの工場が楽
      - リードレプリカを簡単に構築
        - 書き込みようのマスターと読み込み用のリードレプリカを別々で作成できるので読み込みの速度が向上向上
    - 運用不可の軽減
      - 自動バックアップ（1日１回スナップショット）
      - リストア（スナップショットを元にDBインスタンスを作成）
      - 自動的なソフトウェアメンテナンス
        - メンテナンスウィンドウで指定した曜日・時間帯にアップデートを自動実施
        - 各種メトリクスを60秒間隔で取得・確認可能

##### プライベーサブネットを作成
##### RDSを設置
 
 RDSの作成準備
 - セキュリティグループの作成（EC2）
 - DBサブネットグループの作成
 - DBパラメータグループの作成
 - DBオプショングループの作成（機能を設定）



参考教材
https://www.udemy.com/course/aws-and-infra/