概要
Amazon EC2 (Amazon Elastic Compute Cloud) とは、クラウド上にOS付きの仮想マシン (VM) を作成できるサービスである。
クラウド上に自身または自社専用のサーバを構築することができる。
このように、クラウド上でOSありの仮想マシン環境を提供するサービスをIaaS (Infrastructure as a Service )と呼ぶ。
Amazon EC2はIaaSの中でも最も広く使用されているサービスであり、AWSの主要サービスの1つである。
Amazon EC2のようなIaaSをオンプレミスサーバと比較したメリットとして、物理的なハードが不要である事によるスペースや初期費用のメリットが挙げられる。
また、それ以外にも以下に示すメリットが得られる。
- 従量制(使用した分)だけ過不足なく料金が請求される。(コストの変動費化)
- 障害への耐性を簡単な設定で確保できる。(可用性)
- 適切な設定により柔軟に性能を向上できる。(パフォーマンス)
- アクセス権限を簡単に設定できる。(セキュリティ)
また、より機能を限定したSaaSやPaaSと比較した場合の特徴としては、「様々なことができるが、何かをするためには自身で逐次設定が必要である」ことが挙げられる。
ただし、近年ではサーバーレス技術を用いて設定管理を簡略化できるFargateやLambda等のサービスに置き換えられることも増えている。
様々なことができ、かつ、料金が安いというAmazon EC2の特徴は多くの企業にとって魅力的である。
EC2の構造
Amazon EC2は大きく分けて、3つの構成要素から成り立っている。
| 名称 | 一般的なPCにおける役割 |
|---|---|
| AMI (OS) | OS (Linux, Windows等) + 一部のミドルウェア |
| インスタンスタイプ | CPU + メモリ (+ ストレージ + GPU) |
| ストレージ (EBS) | ストレージ |
AMI (OS)
AMI (Amazon Machine Images) とは、インスタンスの起動時に実行するOSイメージを表す。
また、ミドルウェアがインストールされたAMIもあり、用途に応じて選択することができる。
AWSがデフォルトで提供するAMI以外にも、サードパーティ製のAMIやユーザが独自に作成できるカスタムAMIと呼ばれる仕組みが存在しており、環境構築の簡略化やバックアップ用途等で使用されている。
AWSがデフォルトで提供するAMIを下表に示す。
また、アーキテクチャも同時に選択できるが、アーキテクチャとインスタンスタイプのアーキテクチャを揃える必要がある。
| 名称 | 分類 | 概要 |
|---|---|---|
| Amazon Linux | Linux | RHEL派生のAmazonがカスタマイズしたLinux |
| SLES | Linux | Slackware派生のLinux |
| RHEL | Linux | RHEL |
| Ubuntu Pro | Linux | Debian派生のLinux |
| Windows Server | Windows | - |
初めて使用する場合は、Amazon Linuxを選択することが推奨される。
ミドルウェア
一般的なのWebサーバ等の用途であれば、OSのみがインストールされたAMIでよい。
以下に示すような特殊用途を想定して、一部ミドルウェアがインストールされたAMIも提供されている。
| AMIの名称 | 概要 | 用途 |
|---|---|---|
| Deep Learning AMI | TensorFlowおよびPyTorchの実行環境(CUDA, GPUドライバ等) | Deep LearningによるAI開発 |
| with SQL Server | SQL Serverがインストールされている | データベースサーバ |
| with .NET 6 | .NETの開発環境やMATEによるデスクトップ環境 | .NETを使用した開発 (Unityを使用したゲーム開発等) |
インスタンスタイプ
サーバ上で処理を実行する装置(CPU, RAM等)を選択する。
CPUおよびRAM等を選択するために一意に付与されたIDをインスタンスタイプと呼び、t2.microのような名称で表される。
名称の解釈を以下に示す。
- 先頭の文字
- インスタンスの種類(ファミリー)
- 用途と対応
- 先頭から2つ目の数字
- 世代
- 数字が大きいほど高スペック
- nano、micro
- サイズを表す。
- 基本的に大きいほど高スペック
| 名称 | 概要 |
|---|---|
| vCPU | 仮想CPUの個数 (詳細なCPUの種類は、Amazon EC2の公式ドキュメントを参照すること) |
| メモリ | 仮想メモリの容量 |
| ネットワーク帯域幅 | EC2外部と通信する際の帯域幅 (通信速度) |
| ストレージ | インスタンスストア(後述)の容量 (EBSではないことに注意する) 通常は0 |
| GPU | GPUの個数 (一般的なサーバ用途では0でよいが、Deep Learningをする場合は必要となる)
|
また、用途とインスタンスタイプの関係の詳細を知りたい場合は、Amazon EC2の公式ドキュメントを参照すること。
例えば、学習用途の場合は、t2.microを選択してよい。
ストレージ (EBS)
一般的なPCにおけるストレージと同様に、Amazon EC2にもストレージを付与する必要がある。
特に、起動用OSがインストールされたルートボリュームは必須である。
Amazon EC2のストレージには、一般的にEBS (Elastic Block Store)というサービスが用いられるが、特殊な用途ではインスタンスストアと呼ばれるサービスも使用される。
| 名称 | 冗長性 | 着脱(アタッチ)可否 | データの永続性 | バックアップ(スナップショット) | 速度(スループット) | 速度(IOPS) |
|---|---|---|---|---|---|---|
| EBS | 可能 | あり | あり | 可 | 高速 | SSDは高速 HDDは低速 |
| インスタンスストア | 不可 | なし | なし | 不可 | EBSより高速 | EBSよりかなり高速 |
スループットとIOPSの違いを以下に示す。
- スループット
- 大きなファイルを一度に読み書きする時の速度
- IOPS
- 細切れのファイルに頻繁に読み書きする時の速度
EBS
EBSは、Amazon EC2に対して自由に着脱(アタッチ / デタッチ)可能なストレージであり、一般的なストレージのように使用することができる。
EBSもインスタンスタイプと似たボリュームタイプと呼ばれる一意の名称から選択することができる。
主なボリュームタイプを下表に示す。
| ボリュームタイプ名称 | 種類 | 耐久性 | スループット (MB/s) | IOPS (回/s) | 容量 | 備考 |
|---|---|---|---|---|---|---|
| gp3 | SSD | 99.8% 〜 99.9% | 1000 | 16,000 | 1[GB] 〜 16[TB] | |
| gp2 | SSD | 99.8% 〜 99.9% | 250 | 16,000 | 1[GB] 〜 16[TB] | |
| io2Block Express | SSD | 99.8% | 1000 | 16,000 | 4[GB] 〜 64[TB] | |
| io2 | SSD | 99.999% | 4000 | 256,000 | 4[GB] 〜 16[TB] | |
| io1 | SSD | 99.999% | 1000 | 64,000 | 4[GB] 〜 16[TB] | 複数インスタンス共有可 |
| st1 | HDD | 99.8% 〜 99.9% | 500 | 500 | 125[GB] 〜 16[TB] | ルートボリューム不可 |
| sc1 | HDD | 99.8% 〜 99.9% | 250 | 250 | 125[GB] 〜 16[TB] | ルートボリューム不可 |
基本的に、HDDタイプのsc1 / st1よりもSSDタイプのgp2やgp3の方が高性能かつ料金が高い。
また、同じSSDタイプでもgp2 / gp3より、io1 / io2の方が高性能かつ料金が高い。
gp2が容量に応じた時間課金のみであるのに対し、gp3は読み書きに伴うIOPSやスループットにも課金される。
ボリュームタイプによる性能差は、スループットよりもIOPSの方が大きいため、IOPSに求められる要件と料金のバランスを見て判断することを推奨する。
スループットやIOPSは、ボリュームの容量によっても変化するため、詳細を知りたい場合はAmazon EC2の公式ドキュメントを参照すること。
なお、EBSはAmazon EC2と一体化して動作するという特性上、同じAZ内のAmazon EC2インスタンスとしか紐付けることができない。
また、io1を除き、1つのEBSを複数のAmazon EC2インスタンスで共有する事はできない。
※スナップショットとは
スナップショットは、EBSのデータをAmazon S3にバックアップする機能のことである。
これは、ユーザのAmazon S3ではなく、AWSが管理するAmazon S3バケットに保存される。
障害時の復旧等に有用な機能であるが、有料であることに注意する。
また、EBSのみで使用できる機能であるため、インスタンスストアでは使用できないことに注意する。
スナップショットによるバックアップの詳細は、AWS_-_Amazon_EC2#Amazon EC2とバックアップを参照すること。
インスタンスストア
一般的に、Amazon EC2のストレージにはEBSが使用されるが、一部のインスタンスタイプではインスタンスストアと呼ばれるストレージが選択できる。
インスタンスストアはEBSと比較してデータ消失のリスクがあるが (冗長性がない、かつ、インスタンス停止時にデータが自動的に削除される等)、
高速アクセスが可能なストレージ(IOPSが速い)であり、耐障害性を犠牲にしてでも高頻度アクセスにおける処理速度を重視する用途 (一時ストレージ等)に向いている。
選択可能なインスタンスストアの種類は、Amazon EC2の公式ドキュメントを参照すること。
EBSとインスタンスストアの比較
- EBS
- 標準的な速度であるが、データの消失対策やコスト面に優れる。
- インスタンスストア
- 大変高速であるが、データの消失対策やコスト面で弱い。
- 使用例: 速度最優先の一時ストレージ向け
両者の比較は、AWSの公式ドキュメントでも比較されており、
インスタンスストアが適した用途として頻繁に変更される情報 (バッファ、キャッシュ、スクラッチデータ、その他の一時コンテンツ等) の一時ストレージに最適と記載されている。
S3 / EFSとの違い
EBSやインスタンスストアはOSのイメージを持つため、Amazon EC2インスタンスと一緒に動作する事が前提となるため、一般的なサーバの内蔵ストレージに相当する。
一方、S3は静的サイトのホスティングに使用されることから、それだけで独立したサービスとして動作するストレージ (SaaS) である。
また、AWSで使用されるストレージにEFSがあり、
これはEBSのようにAmazon EC2にマウントでき、かつ、複数のAmazon EC2インスタンスで共有ができるため、NASに近い存在といえる。
また、EFSはLambdaやFargate等のAmazon EC2以外のコンピューティングサービスでも使用できる。
共に、KMSによる暗号化ができる等の共通点もある。
その他、冗長化やデータの保持形式も異なっている。
| 動作形態 | デフォルトの冗長化方法 | データ保持形式 | |
|---|---|---|---|
| EBS | Amazon EC2インスタンスと一緒に動作 | 単一AZ内で冗長化 | ブロックストレージ |
| S3 | 単独のサービスとして動作 | 複数AZで冗長化 | オブジェクトストレージ |
| EFS | Amazon EC2インスタンスにマウントされる事が多いが、 他サービスからも利用可能 |
複数AZで冗長化 | ファイルストレージ |
Amazon EC2とネットワーク
外部からAmazon EC2へアクセスする場合は、ネットワークの構築をする必要がある。
| 名称 | 説明 |
|---|---|
| VPC | AWS上で仮想ネットワークを構築して、セキュリティや耐障害性を向上させる。 |
| ENI (Elastic Network Interface) | インスタンスに新たなIPアドレスを付与する。 |
| Elastic IP | インスタンスに固定のグローバルIPアドレスを付与する。 |
| ELB (ロードバランサ) | 複数のインスタンスにアクセスを分散させて、可用性向上や負荷分散を自動化する。 |
| Auto Scaling | 負荷に応じてインスタンス数を自動で変化させ、コストと性能のバランスを自動調整する。 |
| プレイスメントグループ | 複数のインスタンスをグループ化して、インスタンス間の通信速度や耐障害性を向上させる。 |
| SSHによるアクセス | キーペアで公開鍵認証によるSSH通信でインスタンスに接続して、外部からセキュアなインスタンスの操作を実現する。 |
VPC
VPC (Virtual Private Cloud) とは、AWS上で仮想ネットワークを構築できるサービス (Amazon EC2とは別のサービス) であり、Amazon EC2も基本的にはこのVPC内に設置されて動作する。
デフォルトの設定において、Amazon EC2インスタンスを作成するとデフォルトのVPCが自動的に紐付けられるため、単一のAmazon EC2であればVPCを意識しなくとも使用できる。
しかし、複雑なシステムを構築する場合は、VPCの知識は必須となる。
ENI
ENI (Elastic Network Interface) サービスを着脱 (アタッチ / デタッチ) することにより、ネットワークへの接続経路、すなわちインスタンスに付与されたIPアドレスの数を増減することができる。
1つのENIに複数のIPアドレスを付与することもできる。
ENIが無い場合はネットワークにアクセスできないため、Amazon EC2インスタンスにはデフォルトで1つのENIが付加されている。
また、ENIを追加することもできる。
※注意
なお、後述のElastic IPやセキュリティグループは、Amazon EC2インスタンスではなくENIに付与されているため、ENIのアタッチ / デタッチ時は再設定が必要となることに注意する。
EFA
ENIに高速化が施されたEFA (Elastic Fabric Adapter) サービスも存在する。
これは、大規模シミュレーションや機械学習等のハイパフォーマンス性能が求められる用途において、複数のコンピュータが連携して動作するHPC処理に適している。
Elastic IP
Amazon EC2のインスタンスにおいて、グローバルIPアドレスは動的に付与されるため、再起動ごとにIPアドレスが変更される。
これを防ぐため、Elastic IP (EIP) は固定のグローバルIPアドレスを割り振る。
ELB
複数のサーバを並列に立ち上げ、アクセスを分散させることで負荷を軽減させる仕組みがロードバランサである。
AWSにおいては、ELB (Elastic Load Balancer) と呼ばれるロードバランサがサービスとして提供されており、
アクセスを複数のAmazon EC2インスタンス、あるいは、FargateやRDSのようなサービスに分散させることができる。
また、下図のようにELB / ALBにおいて、分散先のインスタンスを複数のAZに配置することにより、冗長性の確保を実現することもできる。
Auto Scaling
ELBで負荷分散をする場合、Amazon EC2インスタンスの数が重要となる。
インスタンスの数が多いほど捌けるアクセス数が増えて性能が向上するがコストも増大するため、コストと性能のバランスを取り、インスタンスの数を調整することが望ましい。
これに対応するため、負荷に応じてインスタンスの数を動的に変化させて、コストと性能のバランスを自動調整するサービスがEC2 Auto Scalingである。
プレイスメントグループ
物理的距離の差により通信速度(RTT)が早くなる。 (往復距離に掛かる時間 (RTT: レイテンシ))
同様にAWSにおいても、複数のインスタンスをグループ化してRTTが小さくなるよう配置することにより、同一AZ内のインスタンス同士の通信速度を向上させるプレイスメントグループと呼ばれる機能が存在する。
プレイスメントグループでは、以下の3種類のグルーピング方法を選択することができ、パーティションとスプレッドは速度だけでなく耐障害性も向上させることができる。
| 名称 | 配置 | 用途 |
|---|---|---|
| クラスタ | グループ内のRTTが小さくなるようインスタンスを配置する。 | 速度重視 低RTT 高スループット |
| パーティション | インスタンスをパーティション単位で分けて、パーティション同士がラックと電源を共有しないよう配置する。 | 速度と耐障害性のバランス |
| スプレッド | 全てのインスタンスがラックと電源を共有しないよう配置する。 | 耐障害性重視 |
プレイスメントグループにより、具体的にどの程度速度が向上するかは、以下に示すWebサイトで詳細に検証されている。
(スプレッドは、耐障害性のみを向上させる方式に見えるが、速度も向上する)
https://dev.classmethod.jp/articles/ec2-placement-group-strategy/
なお、プレイスメントグループには、以下に示す注意点が存在する。
- 既存のインスタンスを後からプレイスメントグループに追加することはできない。
インスタンス起動時に追加が必要となる。 - 一部のインスタンスタイプはプレイスメントグループを適用できない。
例えば、デフォルトのT2インスタンスは適用できない。
SSHによるアクセス
Amazon EC2において、インスタンス内部を操作する場合に第1の選択肢となる接続手法である。
なお、SSHを使用する場合は、セキュリティグループのファイアウォールにおいて、該当するポートを開ける必要がある。
AWSにおいては、公開鍵認証にキーペアを使用してSSH接続する。
キーペアとは、Amazon EC2インスタンスへの接続において、公開鍵認証に使用する鍵を指す。
公開鍵をサーバ側で保持して、秘密鍵をクライアント側で保持することにより、公開鍵認証によるSSH接続を行う。
なお、一般的なオンプレで使用する公開鍵との違いがあることに注意する。
- 一般的なオンプレではクライアント側で両鍵を生成するが、キーペアではサーバ側(AWS側)で鍵を生成する。
- 秘密鍵をAWSからのダウンロードする場合は、1度しかできない。
秘密鍵を紛失した場合は、キーペアの再生成が必要となる。
また、一般的なオンプレと同様、公開鍵と秘密鍵の特性から以下に示すことが成り立つ。
- 秘密鍵を複数のクライアントで共有する事は避けるべきである。
- 公開鍵(インスタンス起動時に選択する鍵)を複数のインスタンスで共有することは構わない。
セキュリティグループとは、インスタンスをグルーピングしてIPアドレスとポート番号に基づくアクセス制限を設定することにより、ファイアウォールのようなアクセス制御を実現する機能である。
セキュリティグループはVPC内部の機能のため、詳細を知りたい場合は、AWS - Amazon_EC2#VPCのページを参照すること。