【AWS】コンピューティングサービス

# コンピューティングサービス

## Amazon Elastic Compute Cloud（EC2）

- AWS上で仮想サーバーを提供するサービス
- 作成された仮想サーバーを**EC2インスタンス**という

***

### 構築の流れ
#### 1. Amazon Machine Image（AMI）の選択
- EC2インスタンスはAMIと呼ばれる**イメージファイル**から起動する
- **標準提供**のAMI or **ベンダーから提供されたAMIをAWS Marketplaceから利用**

#### 2. インスタンスタイプの選択
- **vCPU（仮想CPU）とメモリ容量の組み合わせ**がパッケージ化している中から自由に選択する
- vCPUとメモリ容量のバランスによって、**インスタンスファミリー**と呼ばれるグループに分かれている

#### 3. インスタンスの詳細設定
EC2のインスタンスを構築する**ネットワーク情報／IAMロール**を設定する

#### 4. ストレージの設定
- EC2インスタンスに接続するストレージを選択する
- **EBSやインスタンスストア**を選択する

:::note info
EBS（Elastic Block Store）
EC2と共に使用するための、長期記憶用のブロックストレージサービス

インスタンスストア
ホストコンピュータに物理的に接続されたディスク上にある、一時記憶用のストレージ
:::

#### 5. タグの追加
EC2インスタンスやストレージにタグを追加して、**運用の効率化／課金の振り分け**を行う

#### 6. セキュリティグループの設定
- EC2へのアクセスを制限するためのファイアウォール機能
- AWSではセキュリティグループでアクセス制御するのが一般的

#### 7. キーペアの設定
- EC2インスタンスへのログインは**公開鍵認証方式**を採用している
- 公開鍵と秘密鍵を発行する
    - 公開鍵：**AWSが管理**
    - 秘密鍵：**ユーザーが管理し、ログイン時に使用する**
- 秘密鍵を紛失した場合は、**新たにキーペアを発行して別のEC2インスタンスを起動する**

:::note info
秘密鍵を紛失すると構築したEC2インスタンスにログインできなくなるため注意が必要
:::

[![Image from Gyazo](https://i.gyazo.com/aed800490abd935af7a4dfe193984c8d.png)](https://gyazo.com/aed800490abd935af7a4dfe193984c8d)
***

### Amazon Machine Image（AMI）
- **EBSのスナップショットとEC2インスタンスの構成情報から成り立っている**
- OSには**各種Linux／Windowsサーバー／Amazon Linuxが利用可能**
- **Amazon Marketplaceで用意されているサードパーティ製のAMI** or **ユーザー自身で作成したAMI**を利用する

:::note info
Auto Scalingの起動設定にAMIを指定することで、同じ設定のEC2インスタンスを必要な時に必要な分だけ自動構築できる
:::

#### 動作しているEC2インスタンスと同じ環境を別リージョンに複製する場合
1. AMIをコピーして複製先のリージョンを指定
1. 新しいリージョンに複製されたAMIからEC2インスタンスを起動する

***

### AMIの種類
#### EBS-Backedインスタンス
- **EBS**をOSのルート領域として利用したEC2インスタンス
- 不揮発性のため、インスタンスが停止してもデータは**永続化する**

#### Instance Store-Backedインスタンス
- **インスタンスストア**をOSのルート領域として利用したEC2インスタンス
- 揮発性のため、インスタンスが停止したらデータは**削除される**

***

### EC2インスタンスのライフサイクル
[![Image from Gyazo](https://i.gyazo.com/4592ef7716783b718c2ae3f6b36c806b.png)](https://gyazo.com/4592ef7716783b718c2ae3f6b36c806b)

| 状態 | 内容 | 課金対象 |
|:-:|:-:|:-:|
| pending  | インスタンス起動前  | 対象外  |
| running  | インタンス起動中  | 対象 |
| stopping  | インスタンス停止準備中  | 対象外  |
| stopped  | インスタンス利用不可／再開は可  |　対象外 |
| shutting-down  | インスタンス削除準備中  | 対象外  |
| terminated  | インスタンス完全削除／再開不可  | 対象外  |

:::note info
EBS-Backedインスタンスでは停止処理が可能
Instance Store-Backedインスタンスでは停止状態に遷移できない
:::
***

### ユーザーデータとインスタンスメタデータ
#### ユーザーデータ
- EC2インスタンス初回起動時に**一度だけスクリプトを実行できる機能**
- AMIからEC2を起動するとき、最新のコンテンツを反映する場合などに利用する

#### インスタンスメタデータ
- EC2インスタンス自身に関するデータで、**実行中のインスタンスを設定／管理するために利用する**
- リンクローカルアドレスにブラウザ or cURLコマンドでアクセスして取得する
    - インスタンスID
    - プライベートIPv4アドレス
    - パブリックIPv4アドレス
    - ローカルホスト名
    - 公開鍵

***

## AWS Lambda
Lambda関数と呼ばれるアプリケーションコードをデプロイしただけで実行できる**サーバーレス**なサービス
### Lambdaへの連携イメージ
[![Image from Gyazo](https://i.gyazo.com/48fb333ce7557df1b3d3d856c7f035c6.png)](https://gyazo.com/48fb333ce7557df1b3d3d856c7f035c6)

### ExecutionRole
- LambdaにアタッチされたIAMロール
- LambdaはIAMロールに従って各AWSサービスにアクセスするため、アクセス制御設計が必要になる

### ロギング
Lambda関数の処理結果はCloudWatch Logsに保存される

:::note info
・Lambdaと名前がついているが、実際はAmazon CloudFrontの機能の一つ
・アプリケーションユーザーに最も近い場所でコードが実行されるため待ち時間が短縮される
:::

## Amazon API Gateway
- **APIの作成／配布／保守／監視／保護**を簡単に行えるサービス
- **サーバー管理の必要がない**ため、Lambdaと組み合わせることでサーバーレスアプリケーションを実装できる

### API GatewayとLambdaとの連携イメージ
[![Image from Gyazo](https://i.gyazo.com/0e7a76935b82e300b00321203ce6ce7a.png)](https://gyazo.com/0e7a76935b82e300b00321203ce6ce7a)
***

## コンテナ関連のサービス
### Amazon Elastic Container Service（ECS）
- **複数の仮想環境（コンテナ）**を管理し、起動／削除／監視を行える**コンテナオーケストレーションサービス**
- **Dockerコンテナ**を簡単に実行／停止／管理できる

### 仮想化の種類
#### ハイパーバイザー型仮想環境

- サーバーへ直接インストールし、仮想マシンを稼働
- ハードウェアを直接制御できる

#### コンテナ型仮想環境

- ホストOS上にDocker等をインストールして仮想環境を構築する
- 一台のサーバーで多くのコンテナを稼働できる

[![Image from Gyazo](https://i.gyazo.com/4b3adaff38c5a484ddeb96d75b727785.png)](https://gyazo.com/4b3adaff38c5a484ddeb96d75b727785)

### ECS構築手順
#### 1. クラスター作成
- EC2インスタンスを論理グループ化する
- インスタンスタイプ／インスタンス数／EBSストレージ容量を設定

#### 2. タスク定義
- Dockerイメージの格納先の設定
- メモリ使用料の制限
- ネットワーク／ストレージ／ヘルスチェックに対する項目の設定

#### 3. ELBの設定
トラフィックをコンテナ全体に分散して処理するためにElastic Load Balancingの設定を行う

#### 4. サービス設定
クラスター上で起動するコンテナ数／最大数を設定する

***

### Amazon Elastic Kubernetes Service（EKS）
- Kubernetes向けのコンテナオーケストレーションサービス
- インスタンス数やEBSストレージの容量を定義すると、**状況をモニタリングしながら定義した状態になるように自動管理する**
- 負荷の増減に対しても、**自動スケーリングしてくれる**

:::note info
Kubernetes
分散されたホスト上でDockerなどのコンテナを利用するためのオーケストレーションツール
:::

***

### AWS Fargate
コンテナ向けの**サーバーレス**コンピューティングエンジン

#### 手動でコンテナを管理する場合
- コンテナイメージのビルド
- ECSインスタンスの定義とデプロイ
- コンピューティングリソース／メモリリソースのプロビジョニングと管理
- アプリケーションを別々の仮想マシンに分離させる
- アプリケーションとインフラの両方を別々に実行して管理

**Fargateを利用すれば、コンピューティングリソース／メモリリソースの定義やアプリケーションの実行／管理を行うだけで良い**
**スケールを含むコンテナの管理をFargateに任せることができる**
***

## その他のコンピューティングサービス
### Amazon Elastic MapReduce（EMR）
- 大量のデータを迅速／容易にかつコスト効果よく処理するためのWebサービス
- データの**分散処理環境の構築と分散処理**が容易に行うことができる

***

### VM（Virtual Machine） Import／Export
#### VM Import
オンプレ環境に作成した仮想サーバーのマシンイメージを**EC2インスタンスにインポート**するサービス

#### VM Export
VM ImportでAWS上にインポートされたEC２インスタンスを**オンプレ環境で動作する仮想サーバーのマシンイメージにエクスポート**するサービス
***

### Amazon LightSail
アプリケーションやWebサイトを素早く構築できるように、**仮想サーバー／ストレージ／データベース／ネットワークなどの環境と構成できるオールインワンなコンピューティングサービス**

***

#### 参考
https://aws.amazon.com/jp/premiumsupport/knowledge-center/instance-store-vs-ebs/

https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/WindowsGuide/ec2-key-pairs.html

https://bcblog.sios.jp/what-is-virtualenvironment-vmware/#i

https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/services-apigateway.html

https://business.ntt-east.co.jp/content/cloudsolution/column-171.html#section-03

https://aws.amazon.com/jp/lightsail/features/