EC2講座
この講座では、AWSの仮想サーバサービスであるEC2について学びます。
- EC2(Elastic Compute Cloud)の概要と特徴
- インスタンスタイプ(ファミリー・世代・サイズ)の選び方
- AMI(Amazon Machine Image)の仕組み
- キーペアによるSSH接続の認証
- IPアドレスの設定とElastic IP
- EBS(ブロックストレージ)の役割
- ユーザデータによる起動時の自動化
- 購入オプション(オンデマンド・Savings Plans・スポット)
1. EC2とは
EC2(Elastic Compute Cloud)は、AWSで仮想サーバを構築できるサービスです。
1.1 インスタンス(仮想サーバ)
厳密には「EC2」はサービスの名前であり、実際に作成されるサーバ単位のことをインスタンスと呼びます。
ユーザは、AWSの巨大なインフラ上に、自分専用の「仮想サーバ(インスタンス)」を自由に作成することができます。
1.2 必要な時に、必要な分だけ(柔軟性とスピード)
最大の特徴は、必要なスペックのサーバを、必要な数だけ、必要な時間だけ借りられることです。物理サーバのように購入して届くのを待つ必要はなく、数クリック・数分で利用を開始できます。
また、料金は基本的に「使った分だけ支払う(従量課金)」モデルのため、不要となったら停止するなどして料金を抑えることができます。
1.3 あとから性能を変更できる(拡張性)
物理サーバとは異なり、後から構成を柔軟に変更できます。
例えば、アクセスが増えたのでCPUやメモリを強くするといった「スペックの変更(スケールアップ)」や、1台で処理しきれないので同じサーバを3台に増やすといった「台数の変更(スケールアウト)」が、簡単な操作で行えます。
このように、まずは小さくスタートして、徐々に拡大していくことができる点が、EC2を利用する大きなメリットの一つと言えます。
2. EC2の構成要素
EC2を構成する基本的な要素を見ていきます。
EC2インスタンスを構成する主要な要素と、それぞれの関係を以下に示します。
graph TD
EC2["EC2インスタンス"]
AMI["AMI<br>(OSテンプレート)"]
IT["インスタンスタイプ<br>(性能設定)"]
KP["キーペア<br>(SSH認証)"]
EBS["EBS<br>(ストレージ)"]
SG["セキュリティグループ<br>(通信制御)"]
IP["IPアドレス<br>(ネットワーク設定)"]
AMI --> EC2
IT --> EC2
KP --> EC2
EBS --> EC2
SG --> EC2
IP --> EC2
2.1 インスタンスタイプ
インスタンスタイプは、EC2インスタンスを起動するときの「性能」を表すための設定です。t2.micro、m5.largeのような文字列で表されます。インスタンスファミリー、インスタンス世代、インスタンスサイズの3つで構成されます。
インスタンスファミリー
インスタンスファミリーは、AWSが定めた、そのサーバの「用途」をあらわしています。これにより、CPUとメモリのバランスや、特定の処理への最適化具合などが定められています。
代表的なインスタンスファミリーの特徴と利用シーンについて詳しく説明します。
まず、インスタンス名の先頭に「m」がつくファミリーについてです。「m」はMainまたはGeneral(汎用)を表しており、CPUとメモリのバランスが最も標準的に構成されています。Webサーバやアプリケーションサーバなど、一般的な業務システムにおいて特定の偏ったリソースを必要としない場合に適しており、インスタンス選びに迷った際の第一候補として利用されます。
次に、「t」がつくファミリーについてです。こちらも汎用的な位置づけですが、TinyやTurbo(バースト可能)を表しており、平常時のCPU性能を抑えることで安価に利用できるのが特徴です。その代わり、一時的に負荷が高まった際には「バースト」して性能を引き上げることができます。常に高負荷がかかるわけではない開発環境や、アクセス数の少ないWebサイトなどでコストを抑えるために利用されます。
続いて、特定の性能を強化したファミリーについて見ていきます。「c」がつくファミリーはCompute(計算)を表しており、メモリ容量に対してCPUの性能が高い比率で設定されている「コンピューティング最適化」のインスタンスです。大量のアクセスを処理するWebサーバや、動画のエンコード、科学技術計算など、とにかくCPUの計算能力が優先して求められる処理で利用されます。
また、「r」がつくファミリーについてです。これはRAM(メモリ)を表しており、CPUに対して搭載されているメモリ容量が非常に多い「メモリ最適化」のインスタンスです。メモリ上で大量のデータを処理する必要がある大規模なデータベースや、インメモリキャッシュ(Redisなど)、ビッグデータ分析などの用途で利用されます。
これらに加えて、さらに専門的な用途向けのファミリーも存在しますが、ここでは省略します。
代表的なインスタンスファミリーを表にまとめると、以下のようになります。
| ファミリー | 分類 | 特徴 | 主な用途 |
|---|---|---|---|
| m | 汎用 | CPUとメモリのバランスが標準的 | Webサーバ、アプリケーションサーバ、一般的な業務システム |
| t | 汎用(バースト) | 平常時は低スペック、負荷時にバースト可能で安価 | 開発環境、アクセス数の少ないWebサイト |
| c | コンピューティング最適化 | メモリに対してCPU性能が高い | 高負荷Webサーバ、動画エンコード、科学技術計算 |
| r | メモリ最適化 | CPUに対してメモリ容量が多い | 大規模データベース、インメモリキャッシュ、ビッグデータ分析 |
インスタンス世代
次に、インスタンスファミリーの直後に続く「数字」について説明します。これは「インスタンス世代」を表しており、そのインスタンスが稼働するハードウェアの新しさを示しています。
例えば m5.large というインスタンスタイプであれば、「5」の部分が世代に該当します。スマートフォンのモデル番号と同じように、この数字が大きければ大きいほど、より新しい世代のハードウェアやCPUが採用されていることを意味します。
基本的に、世代が新しくなるほどCPUの処理能力やメモリの転送速度などの性能が向上しています。また、AWSでは新しい世代の方が、古い世代に比べて同じ性能あたりの価格(コストパフォーマンス)が安く設定されている傾向があります。そのため、古いシステムとの互換性を維持しなければならないといった特別な事情がない限り、インスタンスを作成する際は、その時点で数字が最も大きい「最新世代」を選択することが推奨されます。
なお、数字の後ろに「a(AMD)」や「g(AWS Graviton)」といった小文字が付いている場合があります。これらは世代の一部として、搭載されているプロセッサ(CPU)のメーカーや種類を区別するために使われますが、基本的には「数字が大きいほど新しく、高性能で割安である」という原則は変わりません。
インスタンスサイズ
最後に、インスタンスタイプの末尾にある名称、「インスタンスサイズ」について説明します。
これは m5.large におけるドット(.)の後ろの large にあたる部分で、サーバに割り当てられるCPUのコア数やメモリ容量といった「リソースの規模」を決定します。
このサイズには明確な規則性があります。基本的にはサイズが1段階上がるごとに、搭載されるスペック(vCPU数とメモリ容量)が「倍」になり、それに比例して時間あたりの利用料金も「倍」になります。例えば、large を基準にすると、その上の xlarge はスペックが2倍、さらにその上の 2xlarge は4倍といった形で比例して増えていきます。
物理サーバを購入する場合と異なり、AWSのようなクラウド環境では、このサイズを後から変更することが容易です。そのため、最初から完璧なサイズを見積もろうとして時間をかけるのではなく、まずは推測される必要最低限のサイズから開始するのが一般的です。実際の稼働状況(CPU使用率など)を監視しながら、パワー不足であればサイズを大きくし、逆に余っていれば小さくするという、柔軟な運用ができる点がクラウドの大きなメリットです。
なお、tファミリーなど一部のファミリーでは、nano、micro、small、medium といったlargeより小さいサイズも提供されています。
代表的なインスタンスタイプ
ここまで説明した内容を踏まえ、代表的なインスタンスタイプを表にまとめます。
| インスタンスタイプ | ファミリー | 分類 | vCPU | メモリ | 主な用途 |
|---|---|---|---|---|---|
| m7i.large | m | 汎用 | 2 | 8 GiB | Webサーバ、アプリケーションサーバ |
| t3.micro | t | 汎用(バースト) | 2 | 1 GiB | 開発環境、軽量なWebサイト |
| c7i.large | c | コンピューティング最適化 | 2 | 4 GiB | 高負荷Webサーバ、動画エンコード |
| r7i.large | r | メモリ最適化 | 2 | 16 GiB | データベース、インメモリキャッシュ |
2.2 AMI
EC2インスタンスを作成する上で欠かせない要素であるAMI(Amazon Machine Image)について説明します。
AMIとは
AMIは、インスタンスを起動するための「テンプレート(金型)」のようなものです。
EC2インスタンスを作成する際には、必ず1つのAMIを指定する必要があります。インスタンスタイプがハードウェア的な性能を決めるものであるのに対し、AMIは「その中身(ソフトウェア)」を決定するものです。
「このテンプレート(AMI)を使って、サーバ(インスタンス)を作成する」という仕組みであるため、一つのAMIから全く同じ構成のインスタンスを何台でも複製して起動することが可能です。
なお、性能を定める「インスタンスタイプ」は、AMIには含まれません。
AMIに含まれるもの
AMIには、サーバを動かすためのOS(オペレーティングシステム)が含まれています。例えば、Amazon Linux、Ubuntu、Windows ServerなどのOS情報です。
また、AMIにはOSだけでなく、ApacheやNginxといったミドルウェア、あるいは企業の業務アプリケーションなどを「あらかじめインストールした状態」で含めることもできます。これにより、サーバ起動後にゼロからソフトウェアをインストールする手間を省くことができます。
実際にEC2を作成する際、AMIは主に以下の3つの入手元から選択することになります。
クイックスタート
AWSが公式に提供している「クイックスタート」と呼ばれる、標準的なOSのAMIです。Amazon Linux 2023やUbuntuなど、余計なものが入っていない「素のOS」を利用したい場合に選択します。最も利用頻度が高い選択肢です。
サードパーティ
サードパーティ(ソフトウェアベンダーなど)が販売・提供しているAMIです。これらは「AWS Marketplace」から選択・購入できます。例えば、セキュリティソフトやWordPressなどの特定のソフトウェアが既にインストール・設定済みの状態で提供されており、購入してすぐに利用開始できるのが特徴です(ライセンス料が含まれる場合があります)。
カスタムAMI(マイAMI)
カスタムAMI(マイAMI)と呼ばれる、利用者自身が作成したAMIです。自分で構築・設定を行ったEC2インスタンスの状態を「保存」して、自分専用のAMIとして登録したものです。例えば、初期設定や必要なアプリの導入を済ませた状態をカスタムAMIにしておけば、2台目以降は設定不要で即座に同じ環境を構築できるため、Webサーバの増設や、バックアップ・復旧の手段として利用されます。
2.3 キーペア
EC2においてアクセス制御の要となるキーペアについて説明します。
キーペアとは
キーペアとは、EC2インスタンスにログインするために必要な秘密鍵と公開鍵のセットです。EC2インスタンスには重要な機密情報が含まれることが多く、外部からの不正アクセスによって設定変更やインスタンスの停止をされると、システム全体に多大な影響を与えてしまいます。そのため、一般的な「IDとパスワード」のような簡易的な認証ではなく、より強固なセキュリティの仕組みが求められます。
キーペアの仕組み
キーペアは、秘密鍵と公開鍵の組み合わせでおこなう「公開鍵暗号方式」にて認証を行います。「公開鍵暗号方式」の詳細な説明は割愛しますが、AWSでキーペアを作成すると、公開鍵がAWS側に保存され、秘密鍵をユーザがダウンロードできます。
SSH接続時のキーペア認証の流れを以下に示します。
sequenceDiagram
participant User as ユーザ
participant AWS as AWS(キーペア作成)
participant EC2 as EC2インスタンス
AWS->>EC2: 公開鍵を保存
AWS->>User: 秘密鍵をダウンロード
User->>EC2: 秘密鍵を指定してSSH接続
EC2->>EC2: 公開鍵で検証
EC2->>User: 認証成功・接続許可
ローカル環境からSSH接続を行う際、この秘密鍵を指定してログインすることで「このユーザは正規のものである」という証明になります。
秘密鍵は、キーペア作成時にしかダウンロードできません。そのため、キーペアを紛失すると二度とEC2インスタンスにログインできなくなる恐れがあるので注意が必要です。
| 💡 ポイント |
|---|
| 秘密鍵が外部に漏洩すると不正アクセスの原因となるため、取り扱いには細心の注意が必要です。 |
最新の接続方法について
ここまで「キーペア」による接続方法を説明しましたが、実は近年、セキュリティや運用の観点から、キーペアを使わない接続方法が主流になりつつあります。
従来のキーペア方式には、「秘密鍵の管理が大変(紛失や漏洩のリスク)」「セキュリティグループで22番ポートを開ける必要がある(攻撃の対象になりやすい)」といった課題がありました。これらを解決するために、現在は主に以下の2つの方法が推奨されています。
-
AWS Systems Manager Session Manager - これは、AWS上の権限(IAM)を使って認証を行う仕組みです。最大の特徴は、SSHのポート(22番)を開ける必要が全くないことです。ブラウザやコマンドラインから安全に接続でき、操作ログも自動で記録されるため、現在のセキュリティ・ベストプラクティスとされています。
-
EC2 Instance Connect - これは、一時的なキーを発行して接続する仕組みです。通信自体は従来のSSHを利用するため22番ポートを開ける必要はありますが、AWSマネジメントコンソール(ブラウザ)からワンクリックで接続できる利便性があります。「ポートは開く必要があるが、固定の秘密鍵を管理するリスクは無くしたい」といった場合に利用されます。
実務の運用では、キーペアは「万が一のためのバックアップ」として作成しておき、日常的なログインにはこれらの新しいサービスを利用するケースが増えています。
2.4 IPアドレスの設定
EC2インスタンスに設定されるIPアドレスについて説明します。
プライベートIPアドレス
プライベートIPアドレスは、VPCの内部でのみ利用されるIPアドレスです。サブネットのCIDRブロックに指定した範囲の中から、自動で割り当てられます。
このアドレスはインスタンス作成時に割り当てられ、インスタンスを削除するまで変化しません。
なお、あくまでもVPC内部での通信用であるため、これだけではインターネットにはアクセスできない点に注意が必要です。
パブリックIPアドレス
パブリックIPアドレスは、インターネットと通信をするために使用されるIPアドレスです。サブネットの設定に「パブリック IPv4 アドレスの自動割り当て」という項目があり、これをONにしたインスタンスに付与されます。
パブリックIPアドレスには一点重大な注意点があります。それは、インスタンスを一度「停止」して、再度「開始」すると、IPアドレスの値が変わってしまうという点です。
そのため、外部サービス側で許可IPアドレスとして登録している場合など、IPが変わることで通信ができなくなってしまう恐れがあります。
これを解決するために、次のElastic IPアドレスが利用されます。
Elastic IPアドレス
Elastic IPアドレスは、インスタンスに固定のパブリックIPアドレスを付与するサービスです。これを設定しておくことで、インスタンスを停止・開始してもIPアドレスが変わらず、固定化させることができます。
ただし、Elastic IPアドレスは別途料金が発生するため、必要な場合のみ作成することが重要です。
なお、以前はElastic IPアドレスは「インスタンス停止中、または未割り当ての場合のみ課金される(起動中は無料)」という方式でしたが、2024年の仕様変更により「起動中のインスタンスに割り当てている場合でも料金が発生する」ようになっています。
古い資料やブログ記事を見ると「起動中は無料」と書かれていることがあり、整合性が合わないことがあるのでご注意ください。
2.5 EBS(ブロックストレージ)
AWSにおけるストレージの基本であるEBS(Elastic Block Store)について解説します。
EBSとは
まず、EBSとは何かを一言で言うと、EC2インスタンスに取り付ける「ブロックストレージ」、つまりPCにおけるハードディスクやSSDのようなものです。私たちが普段使うPCも、ハードディスクがないとWindowsやmacOSが起動しないのと同じように、EC2もこのEBSがないと起動することができません。
EBSの基本的な挙動として覚えておきたいのが、「EC2インスタンスの作成時に自動的に作成され、接続される」点と、「インスタンスを終了(削除)すると、標準設定ではEBSも一緒に削除される」という点です。
EBSの主な用途
EBSには何を保存するべきでしょうか。
基本的には、「OS」や「ミドルウェア(Webサーバのソフトなど)」といった、サーバが動くために必要なシステムファイルを保存します。これらは、万が一消えてしまっても再インストールすれば元通りになるため、EBSに置いても問題ありません。また、処理の中で使用される一時ファイルなども保存されることがあります。
EBSの注意点
ここで非常に重要な注意点があります。それは、「顧客データ」や「アップロードされたファイル」などの『永続的に残すべきデータ』は、EBSに保存すべきではない、ということです。ローカルPCやオンプレミスのサーバではこのようなデータが保存されるケースもありますが、クラウドでは推奨されません。
その最大の理由は、クラウドの特徴である「Auto Scaling(サーバの自動増減)」と相性が悪いからです。
例えば、アクセス急増によりサーバが自動的に2台、3台と増えた場面を想像してください。もし、1台目のサーバのEBSだけに「顧客リスト」を保存してしまうと、新しく増えた2台目のサーバからはそのリストを読むことができません。その結果、2台目にアクセスが割り振られたユーザは、データが見つからずエラーになってしまいます。
こうした事態を避けるため、AWSではステートレス(状態を持たない)な設計が推奨されています。
具体的には、消えてはいけない大事なデータはEC2の中(EBS)に保存せず、すべてのサーバからアクセスできる外の場所、例えば画像なら「S3」、データベースなら「RDS」に保存します。そうすることで、EC2がいつ増えても、あるいはいつ消えても、サービスを問題なく継続することができるのです。
3. 高度な設定
3.1 ユーザデータ
ユーザデータとは
ユーザデータとは、EC2の構築作業を効率化する「起動時の自動実行機能」のことです。
通常、EC2をWebサーバとして使うには、インスタンス起動後にSSHで接続し、必要なコマンドを一つずつ手動で入力しなければなりません。1台ならまだしも、複数台のサーバを毎回手作業でセットアップするのは手間がかかり、設定ミスの原因にもなります。
ユーザデータを使えば、あらかじめ指定しておいたOSのコマンド(スクリプト)を、インスタンスが起動するタイミングで自動的に流し込むことができます。
この機能を使うことで、「ソフトウェアのアップデート」「Webサーバ(Apacheなど)のインストール」「Webページの作成」「サービスの起動」といった一連のセットアップ作業を全自動化できます。
つまり、人間が黒い画面でコマンドを叩かなくても、「EC2の起動ボタンを押して、起動を待つ間に、Webサイトが表示できる状態のサーバが出来上がっている」という状態を実現できるのです。
使い方
使い方は非常にシンプルです。EC2の作成ウィザードにある「ユーザデータ」という入力欄に、実行させたいコマンドを記述するだけです。
記述されたスクリプトは、インスタンスが立ち上がった直後に、管理者権限(root権限)で一度だけ実行されます。これはAWSにおける「構築の自動化(Infrastructure as Code)」の最初の一歩となる重要な概念です。
注意点
ユーザデータには「最初の起動時に一度しか実行されない」という制約があります。そのため、もし記述内容に間違いがあると、セットアップが不完全な状態で終わってしまい、後から手動で修正が必要になります。
ただし、EC2には「何度でも壊して作り直せる」というクラウドならではの特徴があります。そのため、もしユーザデータの実行に失敗した場合は、無理に手動で直そうとせず、スクリプトを修正してEC2インスタンスごと再作成してしまうのが、最も簡単で確実な対処法とも言えます。
3.2 購入オプション(料金モデル)
EC2には、用途に合わせてコストを最適化するための、いくつかの料金モデルがあります。ここでは代表的な3つを紹介します。
オンデマンドインスタンス
これが最も基本となる標準的なプランです。「使った分だけ秒単位で課金される」従量課金モデルです。
長期契約や前払いが一切不要で、いつでも好きな時に起動し、いつでも停止できる柔軟性が最大の特徴です。その反面、時間あたりの単価は他のプランに比べて割高に設定されています。
開発環境や、いつ終わるかわからない短期的なプロジェクト、あるいは初めてEC2を利用する場合に適しています。
Savings Plans / リザーブドインスタンス
これらはどちらも、「1年」または「3年」という期間を決めて、長期利用をあらかじめ約束(コミット)することで、オンデマンドよりも大幅に安く(最大72%割引)利用できるプランです。携帯電話の「年縛り契約」のようなイメージです。
両者の違いは「柔軟性」です。
「リザーブドインスタンス」は、特定のインスタンスタイプを指定して予約する従来の方式で、後から変更しにくいという制約があります。
一方、「Savings Plans」は、1時間あたりの利用金額(ドル)をコミットする新しい方式です。こちらは、使用するインスタンスの種類やサイズが変わっても割引が適用されるため、非常に柔軟性が高いのが特徴です。
そのため、現在では基本的に、より使いやすいSavings Plansを選択することが推奨されています。
スポットインスタンス
AWSのデータセンター内で、その瞬間に余っているサーバのリソースを、入札形式で非常に安く(最大90%割引)借りるプランです。
激安で利用できる反面、「AWS側の都合でサーバが足りなくなると、警告から2分後に強制終了(回収)されてしまう」というリスクがあります。
そのため、Webサイトのような止まってはいけないサーバには使えませんが、途中で中断しても問題ないバッチ処理や、ビッグデータ分析、あるいはコストを極限まで抑えたい学習用の環境などで利用されます。
それぞれの購入オプションの違いを表にまとめると、以下のようになります。
| 購入オプション | 割引率 | 契約期間 | 特徴 | 向いているケース |
|---|---|---|---|---|
| オンデマンドインスタンス | なし(基準価格) | なし | 使った分だけ課金、いつでも停止可能 | 開発環境、短期プロジェクト、初めての利用 |
| Savings Plans / リザーブドインスタンス | 最大72% | 1年または3年 | 利用金額をコミット、柔軟性が高い | 本番環境、長期運用が確定しているシステム |
| スポットインスタンス | 最大90% | なし | 余剰リソースを安く利用、強制終了のリスクあり | バッチ処理、ビッグデータ分析、学習用 |
4. 主なユースケース
EC2は汎用的な仮想サーバとして、様々な用途で活用されています。以下に代表的なユースケースを紹介します。
4.1 Webサーバ・APIサーバの構築
Apache、Nginx、Node.jsなどのWebサーバソフトウェアをインストールし、Webアプリケーションやバックエンドサービスを提供する基盤として利用されます。ELBと組み合わせることで負荷分散や冗長化も容易に実現できます。
4.2 バッチ処理・データ処理
大量のデータ処理や定期的なバッチジョブを実行するための計算リソースとして利用されます。処理が完了したらインスタンスを停止することでコストを最適化したり、スポットインスタンスを活用して大幅なコスト削減を実現したりできます。
4.3 開発・テスト環境の構築
本番環境と同じ構成の開発環境やテスト環境を、必要な時だけ立ち上げて利用できます。AMIを活用することで環境の複製も容易であり、開発者ごとに独立した環境を提供することも可能です。
5. 設計のポイント
EC2を設計する際の主要な検討項目を以下にまとめます。
| 設計項目 | 検討内容 | 推奨・注意事項 |
|---|---|---|
| インスタンスタイプ | ファミリー・世代・サイズの選択 | 最新世代を選択し、小さいサイズから始めて必要に応じてスケールアップ |
| AMIの選択 | OS・ソフトウェア構成 | Amazon Linux 2023が推奨。カスタムAMIで構成を標準化すると運用が楽 |
| 購入オプション | オンデマンド/Savings Plans/スポット | 本番はSavings Plans、開発はオンデマンド、バッチ処理はスポットを検討 |
| EBSボリューム | ストレージタイプとサイズ | gp3が標準的。永続データはEBSに置かず、S3やRDSに保存 |
| キーペア・接続方法 | SSH接続の認証方式 | Session Managerの利用を推奨。キーペアは緊急用として保管 |
| ユーザデータ | 起動時の自動設定 | 初期セットアップを自動化し、手動作業を最小限に |
| Elastic IP | 固定IPアドレスの必要性 | 必要な場合のみ割り当て(課金対象)。DNS名での運用を優先 |
6. まとめ
この講座では、EC2(仮想サーバ)について学びました。
- EC2は、AWSで仮想サーバを構築できるサービス
- インスタンスタイプで性能(ファミリー、世代、サイズ)を指定する
- AMIはインスタンスを起動するためのテンプレート
- キーペアでSSH接続時の認証を行う(近年はSession Managerも推奨)
- Elastic IPで固定のパブリックIPアドレスを付与できる
- EBSはEC2に接続するブロックストレージ
- ユーザデータで起動時のセットアップを自動化できる
- 料金モデルにはオンデマンド、Savings Plans、スポットがある