【AWS】AWS関連用語を一言でまとめる

# 執筆中

# 用語
### AWSとは
- クラウド上でサーバーやネットワークを構築するためのサービス

> サーバーやネットワークはサービスの中の一つ

### インフラ
- サーバーやネットワーク

### インフラを構築
- ネットワークを構成し、サーバーをネットワークに接続する

### サーバー
- サービスを提供するコンピューター

> WebサーバーやDBサーバーなど呼び名は複数あるが役割によって呼び名が異なるだけ

### ネットワーク
- 複数のコンピューターをつないで、データを送受信できるようにする

### rootユーザー

- 全権限を持つユーザー

### IAMユーザー

- 作業用ユーザー。作業者毎にIAMを作成し、権限を割り振り、操作に制限をつける

### Cloud Trail

- 操作ログを記録するサービス

> デフォルトで90日保存

### リージョン

- AWSの各サービスが提供されている地域

> リージョンによって使えるサービスが異なる

### アベイラビリティゾーン

- 各リージョン内にある**独立した**データセンター

> 物理的に距離がある → 災害対策

### VPC

- AWS上に仮想ネットワークを作成できるサービス

### サブネット

- VPCを細かく分割したネットワーク

> 分割のメリット
>> - Webサーバーはインターネットに接続させたいけど、DBサーバーは隔離したいなどのケースにセキュリティ上強くなる

### パブリックサブネット

- インターネットから接続できるサブネット

### プライベートサブネット

- インターネットから接続できないサブネット

### VPC基本設計
![VPC基本設計.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562358/65b0c1c8-6d7c-abc6-e739-273e217fa910.png)

> 複数のアベイラビリティゾーンそれぞれにサブネットを作成、サーバーを配置することで冗長性を高める(災害に強いインフラ)

### ビット
- 0か1か。コンピュータデータの最小単位。

### バイト
- 8ビットで1バイト

### IPアドレス

- ネットワーク上の機器(VPCやパブリック)を識別するためのインターネットの住所。

![IPアドレス.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562358/3d8e9594-c23d-d15a-9f5d-9cc5e2e2f6e4.png)

### パブリック(グローバル)IPアドレス

- インターネットに接続する際に使用するIPアドレス

> ルーターを介して割り当てられるIPアドレス。同じルーター(wi-fiルーター)を使っていれば同じパブリックIPアドレスになる。

### プライベート(ローカル)IPアドレス

- インターネットで使用されないIPアドレス

> ルーターを介して<font color="PaleVioletRed">デバイス毎</font>に割り当てられる(一意な)IPアドレス。
社内LANの構築などに使用。

![IPアドレス(改).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562358/31f2b0a5-14fb-350a-a366-45c96e4fe134.png)

### CIDRブロック

- VPC全体のIPアドレスの範囲をCEDR表記で指定

### テナンシー

- 物理ハードウェア(Server)を専用するオプション

> 専用にするとEC2の料金が割高になったりするらしい

### ルーター

- IPアドレスがどのデバイスに紐づいているのか、どのネットワークに所属しているのかを管理しているデバイス

### ルーティング

- サブネットをインターネットに接続するための設定

### ターゲット

- 次のルーター(管理しているルーター名)

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

- VPCやパブリックとインターネットをつなげる仮想のルーター

### EC2

- AWSが提供する仮想サーバー

### インスタンス

- EC2から立てられた1つのサーバー

### AMI

- インスタンス起動に必要な情報が入ったOSイメージ

> AMIのおかげで自分でOSをインストールする必要がなくなる

### インスタンスタイプ

- インスタンスのスペックを定義したもの

> - CPU、メモリ、ストレージ、ネットワーク帯域がセットになっているパックで、インスタンスファミリー、インスタンス世代、インスタンスサイズから構成される

### インスタンスファミリー

- どういう特徴をもったインスタンスか

> CPUの最適化、メモリの最適化、価格の最適化など各特徴をもつ

### インスタンス世代

- 数値が大きくなるほど世代が高い

> 世代が高いほど高性能

### インスタンスサイズ

- CPU、メモリ、ネットワークのキャパシティによって分類される

### ストレージ

- サーバーにくっつけるデータの保存場所

> EBSとインスタンスストアの2種類

### SSH

- 通信内容が暗号化された遠隔ログインシステム

> サーバーと自分の目の前のパソコンをセキュアにつなぐサービス

### SSHでログイン

- 物理的に離れている場所にあるサーバーに入って、自分のパソコンから操作できるようにする

> 基本的にサーバーにログインする時は通信が暗号化されているSSHを使う

### SSHログイン(初回)

```:ターミナル
$ chmod 600 xxxxxxxxxxxx.pem
$ ssh -i xxxxxxxxxxxx.pem ec2-user@パブリックIPアドレス
```

`chmod 600 xxxxxxxxxxxx.pem`
→ 権限の上書き

`ssh -i xxxxxxxxxxxx.pem ec2-user@パブリックIPアドレス`
→ 秘密鍵を使って指定のIPアドレスへsshログイン

### sshd

- ユーザーからのコマンドを受け付けるプログラム

> SSH接続をSSHサーバーにリクエストするとSSHサーバー内のsshdが起動するからクライアントでサーバーを操作できるようになる仕組み

### 公開鍵認証

- SSHログイン時に認証を行う仕組み

>
>> - 公開鍵はサーバーが保有、秘密鍵をもっているユーザーのみログイン可能
>> - EC2作成時にキーペアを作成、pemファイルをダウンロード → このpemファイルが秘密鍵

### ポート番号

- プログラムのアドレス

> どのアプリケーションと通信するかを指定する

### ウェルノウンポート番号

- 標準で決められている番号
- 0~1023までの整数値

>
>> - SSHのポート番号は22
>> - HTTPのポート番号は80
>> - HTTPSのポート番号は443番
>> - SMTPのポート番号は25

### Linux

- サーバーのOS

### yum(ヤム)

- Linuxのパッケージ管理ツール

> Linuxへライブラリ(パッケージ)をインストールしたりアンインストールしたりするツール

```:ターミナル
$ sudo yum update -y
```

`sudo` → root権限で
`yum update` → yumの中身を最新に
`-y` → yesの略

### apache

- Webサーバーソフトウェア

### Nginx(エンジンエックス)

- apacheの代替のWebサーバーソフトウェア

### ファイアウォール

- 通して良いデータだけ通して、それ以外は遮断する機能

### セキュリティグループ

- ファイアウォールの役割を担う

> デフォルトでは22番ポート(ssh接続)のみ許可されている。
つまりhttpとhttpsのポート接続を許可させる必要がある。

### インバウンド

- サーバーへ入ってくる通信

### アウトバウンド

- サーバーから出て行く通信

### Elastic IPアドレス

- インターネット経由でアクセス可能なグローバルIPアドレスを取得し、インスタンスに付与できるサービス

> インスタンスのパブリックIPアドレスを固定するために使用する。
インスタンス可動 → 無料
インスタンス不動 → 課金(Elastic IPアドレスを開放すればOK)

### ドメイン

- WebサイトのURL

### ドメインの構造

- www.example.co.jp

`www` → 第四レベルドメイン
`example` → 第三レベルドメイン
`co` → 第二レベルドメイン
`jp` → トップレベルドメイン

> 各レベルのドメインはユニークでないと登録できない

### DNS

- IPアドレスとドメインを紐付けるシステム

> ネームサーバーとフルリゾルバの2つから構成

### ネームサーバー

- 紐付いたIPアドレスとドメイン名が登録されているサーバー

### フルリゾルバ

- 特定のドメイン名に紐付くIPアドレスをネームサーバーに問い合わせて教えてくれるサーバー

### リソースレコード

- DNSのIPアドレスとドメインの紐付け一つ一つのこと

### Route53

- AWSのDNSサービス(ネームサーバーの役割)

> ドメイン名に紐付いたIPアドレスにアクセスできるようになる

### RDS

- AWSのフルマネージドなリレーショナルデータベースのサービス

> マルチAZ(アベイラビリティゾーン)である必要がある

>> 複数AZにサブネットが必要

### マスタースレーブ方式

- マルチAZを具体化した呼び名

> 複数AZにDBサーバーを設置し、普段使うDBサーバーをマスター、何らかの障害でマスターがダウンした時に使用するDBサーバーをスレーブと呼び、スレーブはマスターにレプリケーションしている

### レプリケーション

- 同期

### フルマネージド

- AWSが運用・管理をするサービス

> 1日1回バックアップを自動で取得

### リレーショナルデータベース

- データベース

### 可用性

- 障害があってもサービスが停止しないかを図る

### スナップショット

- バックアップ

### リストア

- スナップショットを元にDBインスタンスの作成

### DBサブネットグループ

- VPC内にあるサブネットを複数指定してRDSインスタンスが起動するサブネットを指定する設定

> 指定したサブネットの中でRDSが作成されるようになる

### DBパラメータグループ

- DBの設定値を指定するもの

> RDSではDBの設定ファイルを直接編集できないため

### RDS適用タイプ

>
>> - static DBパラメータ変更後はインスタンス起動後に設定反映
>> - dynamic DBパラメータ変更後は動的に設定反映

### DBオプショングループ

- DBの機能を設定

### プロトコル

- コンピュータ同士がネットワークを利用して通信するために決められた約束

> HTTP、TCP、IP、SMTPなど

### TCP/IPプロトコル郡

- TCP・IPを中心として、インターネットを構築する上で必要なプロトコル郡の総称

### HTTP

- コンテンツの送受信に用いられる通信の約束

> HTTPリクエストとHTTPレスポンスで通信が成り立つ

### HTTPリクエスト構成

- リクエストライン、ヘッダー、ボディの3つから成り立つ

#### リクエストライン
- どのURIに対して何をしてほしいか要求

例：GET/http~/1.1

GET → HTTPメソッド
http~ → リクエスト先のURI
1.1 → そのプロトコルのver

##### HTTPメソッド

- コンテンツに対してどんな操作をするかを表したもの

>
>> - GET データを取得する → サイトの閲覧
>> - POST データの送信や作成 → 投稿や保存

##### URI

- URLからドメインをぬいたパス

#### ヘッダー

- クライアントから送信する追加情報

#### ボディ

- オプション機能としてあるだけでつけないことが多い

### HTTPレスポンスの構成

- ステータスライン、ヘッダー、ボディの3つから成り立つ

#### ステータスライン

- リクエストの成否を返答

例：http~/1.1 200 OK

200 → ステータスコードの数字
OK → ステータスコードに対応した文字列

##### ステータスコード

- HTTP通信の結果の成否を示す値

>
>> - 200 成功
>> - 300番台 リダイレクト
>> - 400番台 クライアント側のエラー
>> - 500番台 サーバー側のエラー

#### ヘッダー

- 追加情報を返す

#### ボディ

- リクエストに対するコンテンツ

> htmlのテキストデータが入る

### TCP

- 信頼性のある通信を提供

> データの到達確認や、コネクション管理を行う
届いていなければ再送信する

### UDP

- 信頼性はないが高速な通信を提供

> 動画通信や電話通信など

### パケット

- データを小分けにした1つ1つ

> データはパケットで送受信される

### ネットワーク層の役割

- 最終的な宛先のコンピュータにパケットを届けること

### IPプロトコルの役割

- IPアドレス
- ルーティング
- パケットの分割・再構築処理

#### IPアドレス

[IPアドレスへ](#ipアドレス)

#### ルーティング

- 最終的な宛先のコンピュータまでのパケット配送

### S3

- AWSのクラウドストレージサービス
- デフォルトでアクセスを拒否(アクセス権限のあるIAMユーザーを作成する必要がある)

> オンライン上のファイルの保存場所。(無料枠には含まれない)

### S3の重要概念

- バケット
- オブジェクト
- キー

#### バケット

- オブジェクトの保存場所

#### オブジェクト

- データ本体のことでURLが付与される

#### キー

- オブジェクトのURLパス

### スケールアウト

- サーバーの台数を増やすこと

### バッチ

- 定期的に実行するプログラム

### CloudFront

- AWSのコンテンツ配信サービス(CDNのサービス)

> キャッシュ機能により高速にコンテンツを配信するサービス

### CDN

- コンテンツ配信サービスの総称

### オリジンサーバー

- 元になる画像を配信するサーバー(今回だとS3)

### ディストリビューション

- CloudFrontのルール

### CertificateManager(サーティフィケートマネージャー)

- 証明書を発行・管理するためのAWSのサービス

### SSLサーバー証明書

- WEBサイトの運営者が実在するかを確認し、ブラウザとWEBサーバーで暗号化通信(https)するための電子証明書

### ELB

- AWS上のロードバランサー
- ヘルスチェック機能

> アプリケーションへのアクセスを複数のサーバーに自動で分散するサービス

### ロードバランサー

- 各サーバーにアクセスを振り分け、負荷を分散する機能

### ヘルスチェック

- 複数EC2インスタンスの中から正常な(稼働している)インスタンスにのみ振り分ける機能

### 冗長化

- 稼働率を向上させる手段で、システムの構成要素を多重化すること

> サーバーを複数台設置しアクセスを分散することで冗長化を行う

### 稼働率

- 障害発生間隔
- 平均復旧時間

> 稼働率を向上させる ＝ 障害発生間隔を長くし、平均復旧時間を短くすること

### プロビジョニング

- アクセス数を予測し、適切にリソースを準備することで負荷を均一にさばくこと

> 負荷をさばく方法
>> - スケールアップ 個々の要素の性能を向上
>> - スケールアウト 個々の要素の数を増やす

### ECS

- AWSのコンテナオーケストレーションサービス

> ロードバランサーやオートスケーリングと組み合わさったサービス
ECSを動かすためのEC2インスタンスも自動で追加・削除される

### コンテナオーケストレーション

- コンテナを管理する技術

> コンテナ化されたアプリケーションのデプロイやスケーリング、管理などができる

### マイクロサービス

- コンテナと相性の良いソフトウェアの設計思想

### タスク

- タスク定義を元に作成されるコンテナ

### タスク定義

- コンテナ全般に渡る設定

> Dockerfileと似ている

### クラスター

- 複数のサーバーを統合して処理を行うこと

### ECR

- AWSが提供するDockerコンテナレジストリ(AWS版Dockerhub)

> Dockerコンテナの保管(アップデート)場所

### コンテナレジストリ

- イメージの保存、管理

### terraform

- AWSやHeroku、GCPなどの構成管理を行うソフトウェア

> ファイル構成は .thファイルに記述する

### GCP

- Google Cloud Platform

> Googleがクラウド上で提供するサービス群の総称
Gmail、Youtube、Google Mapなど

### AWS CLI

- AWSサービスを管理するための統合ツール

> ターミナルからAWSの各サービスの制御ができるようになる

[インストール参考](https://docs.aws.amazon.com/ja_jp/streams/latest/dev/kinesis-tutorial-cli-installation.html)
[インストール参考(エラー時)](https://qiita.com/cigalecigales/items/a4f37d2562ac1c422677)
 
# その他

## メモ

- apacheの参照場所

> ブラウザからapacheへアクセスがくると、/var/www/html/以下にあるファイルをレスポンスとして返す

- 著作権関係ない画像の検索

> Google → ツールクリック → ライセンス → 改変後の再使用が許可された画像

- サーバー構成のベストプラクティス

> Webサーバーの冗長化と負荷分散
DBサーバーの冗長化
>> - Webサーバー → N+1(Nは普段使用しているWebサーバーの数)
>> - DBサーバー → マスタースレーブ方式

[冗長化](#冗長化)
[マスタースレーブ方式](#マスタースレーブ方式)

## 理解が不十分な箇所

- IPアドレス
- ポート番号
- Route53の概念

## デプロイ流れ
- IAM作成(権限、操作ログ設定)
- VPC構築
 - VPCを作成する
 - サブネットを作成する
 - ルーティングを設定して、パブリックサブネットをインターネットにつなげる
- VPCにサーバーを配置
- Webサーバーソフトウェアをインストール
 - SSHでサーバーにログイン
 - apacheをインストール
- ファイアウォールの設定
- Elastic IPアドレスでIPアドレスを固定
- ドメインの取得
 - お名前.comなど
- ドメインのネームサーバーをRoute53に変更
 - Route53でホストゾーンを作成
 - ネームサーバーをRoute53に変更
- ドメインに紐付くIPアドレスを登録
 - Route53でレコードセットを作成
- プライベートサブネットの作成(RDS配置のため)
- RDS作成準備
 - セキュリティグループの作成(EC2)
 - DBサブネットグループの作成
 - DBパラメータグループの作成
 - DBオプショングループの作成
- RDS作成
 - DBエンジン
 - 本番環境
 - DB詳細の指定
 - 詳細設定の設定
- アプリケーションをサーバーにインストール
- S3設置
 - バケット作成
 - 権限を持ったIAMユーザーを作成(一般的ではない)
 - アプリケーションの設定