クラウド上で仮想サーバーを起動・管理できるコンピューティングサービス
Amazon EC2(Elastic Compute Cloud)はAWSの仮想サーバーサービスです。物理サーバーの購入・管理なしに、数分でサーバーを起動できます。インスタンスタイプ(CPU・メモリの組み合わせ)を選択し、必要に応じてスケールアップ・ダウンが可能です。t3.mediumは汎用タイプ(2 vCPU、4 GiB RAM)の一例です。
1つのインスタンスにはvCPU・メモリ・ストレージ(EBS)・ネットワーク(ENI)・セキュリティグループ・キーペアといった複数のリソースが紐付いており、それぞれを独立して設定・変更できます。この構造を理解することが、障害対応やコスト最適化の基礎知識になります。
AMIはEC2インスタンスを起動するためのテンプレート(雛形)です。OS(Amazon Linux、Ubuntu など)、プリインストールされたソフトウェア、ルートボリュームの内容がパッケージされています。同じAMIから何台でもインスタンスを起動でき、環境を素早く複製できます。
AMIには ルートボリュームのスナップショット(OSやアプリが入ったディスクのコピー)、起動権限(どのAWSアカウントが使えるか)、ブロックデバイスマッピング(追加ボリュームの設定)が含まれます。
AMIは作成したリージョンでのみ使用できます。別リージョンで使うにはAMIコピーが必要です。災害対策(DR)で別リージョンにバックアップを置く場合、AMIをコピーしておくことで復旧時間を短縮できます。
EBSはEC2にアタッチする仮想ディスク(ブロックストレージ)です。インスタンスとは独立したリソースであり、デタッチして別のインスタンスに再アタッチできます。インスタンスに障害が起きても、EBSのデータは保持されます。
ルートボリュームはOSが入ったディスクで、AMIのスナップショットから自動作成されます。デフォルトではDeleteOnTermination=trueのため、インスタンス終了時に削除されます。追加ボリューム(データ用)はデフォルトでDeleteOnTermination=falseのため、インスタンス終了後も残ります。
gp3(汎用SSD、コスパ最良)、io2(高IOPS、データベース向け)、st1(スループット最適化HDD、ログ・ビッグデータ向け)、sc1(コールドHDD、アクセス頻度の低いデータ向け)があります。ほとんどのワークロードではgp3が推奨されます。
EBSは同一AZ内のインスタンスにしかアタッチできません。別AZに移動したい場合は、スナップショットを取得し、そこから別AZに新しいボリュームを作成します。スナップショットはS3に保存され、リージョン間コピーも可能です。
ENIはEC2にアタッチする仮想ネットワークカード(NIC)です。プライベートIPアドレス、MACアドレス、パブリックIP(オプション)を保持します。ENIを別のインスタンスに付け替えることでIPアドレスを引き継げるため、障害時のフェイルオーバーに活用できます。
インスタンス起動時にプライマリENI(eth0)が自動作成されます。プライマリENIはインスタンスからデタッチできません。セカンダリENIは後から追加・付け替えが自由にでき、複数サブネットに接続したり、管理用とサービス用でネットワークを分離するといった構成が可能です。
Elastic IP(固定パブリックIP)は実際にはENIに関連付けられます。ENIを別インスタンスに移動すれば、Elastic IPもそのまま移動します。これにより、インスタンスを入れ替えても外部からのアクセス先IPを変えずに運用できます。
1つのENIに複数のプライベートIPアドレスを割り当てられます。割り当て可能な数はインスタンスタイプによって異なります。1つのサーバーで複数のWebサイトをホスティングする場合などに、ENIに複数IPを持たせて使い分けます。
セキュリティグループはEC2の仮想ファイアウォールです。重要なポイントとして、SGはインスタンスではなくENI(ネットワークインターフェース)に紐付きます。1つのSGを複数のインスタンス(ENI)で共有でき、ルールの一元管理が可能です。
インバウンドルールは外部からの受信トラフィックを制御します(デフォルトですべて拒否)。
アウトバウンドルールは外部への送信トラフィックを制御します(デフォルトですべて許可)。
SGは許可ルールのみ設定可能で、拒否ルールはありません(拒否はNACLで制御)。
SGはステートフルです。インバウンドで許可したリクエストのレスポンスは自動的に許可されます(アウトバウンドルールに関係なく)。逆も同様で、アウトバウンドで許可した通信のレスポンスはインバウンドルールに関係なく通ります。
コンソールでは「インスタンスのSGを変更」と表示されますが、実際にはプライマリENI(eth0)のSGを書き換えています。1つのインスタンスに複数ENIがある場合、ENIごとに異なるSGを適用できます。例えばENI-1にはHTTP用SG、ENI-2には管理用SSH専用SGといった構成が可能です。
キーペアはSSH公開鍵認証に使われるリソースです。AWSが公開鍵をインスタンス内の~/.ssh/authorized_keysに配置し、ユーザーは秘密鍵(.pem)を使ってログインします。
秘密鍵はキーペア作成時に一度だけダウンロードできます。紛失するとAWSから再ダウンロードできず、通常のSSH接続は不可能になります。秘密鍵は安全な場所に保管し、ファイルパーミッションをchmod 400に設定する必要があります。
同じキーペアを複数のインスタンス起動時に指定できます。開発環境のサーバー群に同じキーペアを使い、1つの秘密鍵ですべてにSSH接続するといった運用が可能です。ただし本番環境では、用途ごとにキーペアを分けるのがセキュリティ上望ましいです。
EC2 Instance Connectで一時的なSSHキーを使いブラウザから接続できます。またAWS Systems Manager Session Managerを設定すれば、キーペアなしでもCLIやブラウザからインスタンスにアクセスでき、SSHポート(22番)を開ける必要もなくなります。
AWSの各リソースには一意のIDが付与されます。IDのプレフィックスでリソース種別を識別できます。たとえばi-で始まればEC2インスタンス、vol-ならEBSボリュームです。
これらのIDはAWS CLI・CloudFormation・CloudTrailなど、あらゆる場面で使われます。障害調査の際にCloudTrailログからeni-0abc...のようなIDが出てきた場合、プレフィックスを見るだけで「これはENI関連の操作だ」と即座に判断できます。IDの命名規則を覚えておくと、ログの読解速度が格段に上がり、SAA試験でもリソース間の関係を素早く把握できるようになります。
i-EC2インスタンスi-0abcdef1234567890ami-AMIami-0abc1234def56789vol-EBSボリュームvol-root001eni-ENIeni-0abc1234defsg-セキュリティグループsg-0abc1234key-キーペアkey-0abc1234def56789
クラウド上で仮想サーバーを起動・管理できるコンピューティングサービス

クラウド上で仮想サーバーを起動・管理できるコンピューティングサービス

クラウド上で仮想サーバーを起動・管理できるコンピューティングサービス

クラウド上で仮想サーバーを起動・管理できるコンピューティングサービス

クラウド上で仮想サーバーを起動・管理できるコンピューティングサービス

クラウド上で仮想サーバーを起動・管理できるコンピューティングサービス