はじめる前に
- 必須AWS アカウントを持っていること
- 必須マネジメントコンソールにサインインできること
- 必須EC2 インスタンスへ SSH 接続できること(手順内で接続方法も説明します)
- あると良いEC2 インスタンスを一度起動したことがある
※ メインの操作はコンソールですが、変化を実感するためにサーバーの中で数個のコマンドを実行します。コマンドはすべて本文中にそのまま掲載しています。
※ ローカル端末は Windows を想定し、標準搭載の OpenSSH を使う手順で説明します。
参照する公式ドキュメント
手順に迷ったときや、用語の意味を確かめたいときに開きましょう。
※ リンク切れの場合は、ページタイトルで検索してください。
背景・シナリオ
サーバーを最初に立てるときは、ひとまず小さめのインスタンスタイプで始めることがよくあります。ところが、実際にアプリケーションを動かしてみると CPU やメモリが足りなくなり、もう少し性能の高いインスタンスタイプに変えたい、という場面が出てきます。
EC2 では、インスタンスを作り直さなくても、インスタンスタイプ(CPU・メモリなどのスペックの組み合わせ)を後から変更できます。ただし、稼働中のまま切り替えることはできず、「停止 → 変更 → 起動」という手順を踏む必要があります。今回はこの一連の流れを体験し、変更前後でサーバーの中のスペックが実際にどう変わるかも確認します。
インスタンスタイプは、動かしたまま変更できるの?
いいえ。インスタンスが「実行中」のままでは変更できません。一度「停止」してから変更し、そのあと「開始」する必要があります。変更している間、その分の停止時間が発生する点に注意してください。
ディスク(EBS)の中身はどうなるの?
そのまま保持されます。インスタンスタイプの変更は、いわば「載せ替える計算機本体(CPU・メモリ)」を変えるだけの操作で、ディスクの中身には影響しません。これは EBS が、計算リソースとは別の独立したストレージだからです。
EC2 インスタンスを停止 → インスタンスタイプを変更 → 起動し、コンソール表示とサーバー内のコマンド(nproc、free -h)の両方で、スペックが変わったことを確認する。
つくる構成
同じ1台のインスタンスのまま、インスタンスタイプだけを切り替えます。ディスクの中身(OS の設定やデータ)は変わらず、CPU・メモリなどのスペックだけが変わる、という点を確認します。
変更前のスペック
(例)
変更後のスペック
(例)
※ インスタンスタイプの組み合わせは一例です。無料利用枠の対象外になる場合があるため、組み合わせは自分で確認のうえ選んでください。
要件
以下の流れで、「今のスペックを確認する」→「停止して変更する」→「起動して変わったことを確認する」を順に行ってください。
| No | 要件 |
|---|---|
| 1 | リージョンは「東京(ap-northeast-1)」を使用する。 |
| 2 | EC2 インスタンスを1台起動する。AMI は Amazon Linux 2023(最新版でよい)、インスタンスタイプは自由に選ぶ(例:t3.micro)。名前タグは resize-type-demo(例)。 |
| 3 | SSH で接続し、変更前の vCPU 数・メモリ容量を確認する。 |
| 4 | インスタンスを停止し、別のインスタンスタイプに変更する(例:t3.micro → t3.small)。 |
| 5 | インスタンスを起動し、SSH で再接続してvCPU 数・メモリ容量が変わったことを確認する。 |
構築の進め方
「変更前の状態を確認してから変更する」という順番で進めることで、何がどう変わったのかを実感しやすくなります。
-
マネジメントコンソールにサインインし、リージョンを合わせる
ブラウザで AWS マネジメントコンソールにサインインし、画面右上のリージョンが「アジアパシフィック(東京)ap-northeast-1」になっていることを確認します。
-
確認用の EC2 インスタンスを1台起動する
EC2 コンソールで「インスタンスを起動」を押し、名前に
resize-type-demo、AMI に Amazon Linux 2023、インスタンスタイプに無料利用枠の対象(例:t3.micro)を選びます。キーペアを新規作成し、.pem ファイルをダウンロードしておきます。セキュリティグループは SSH のみ許可でよいインバウンドルールで SSH(ポート22)を自分の IP からのみ許可しておきます。それ以外のポートは今回開けなくて構いません。
-
Windows の OpenSSH で接続し、いまのスペックを確認する
PowerShell から接続し、変更前の vCPU 数とメモリ容量を確認します(
<インスタンスのパブリックIP>は実際の値に置き換えてください)。# 鍵ファイルの権限を自分のみ読み取り可に絞る icacls .\resize-type-demo-key.pem /inheritance:r icacls .\resize-type-demo-key.pem /grant:r "$($env:USERNAME):(R)" # SSH接続 ssh -i .\resize-type-demo-key.pem ec2-user@<インスタンスのパブリックIP>
# vCPU数を確認 nproc # メモリ容量を確認 free -h
表示された値をメモしておくnprocの結果(例:2)と、free -hのMem行のtotal列(例:~950Mi)を、あとで比較するためにメモしておきましょう。 -
インスタンスを停止する
EC2 コンソールで
resize-type-demoを選び、「インスタンスの状態」→「インスタンスを停止」を選びます。状態が「停止済み(Stopped)」になるまで待ちます。「再起動」ではなく「停止」が必要OS の「再起動(Reboot)」では、インスタンスタイプの変更メニューは選べません。インスタンスタイプの変更には、AWS の視点で完全に「停止済み」の状態になっている必要があります。
-
インスタンスタイプを変更する
停止済みになったら、
resize-type-demoを選んだ状態で「アクション」→「インスタンスの設定」→「インスタンスタイプを変更」を開きます。一覧から新しいインスタンスタイプ(例:t3.small)を選び、「適用」を押します。選べるのは互換性のあるインスタンスタイプだけ一覧には、現在の AMI のアーキテクチャ(
x86_64など)と互換性のあるインスタンスタイプだけが表示されます。見当たらないインスタンスタイプがある場合、アーキテクチャが異なる可能性があります。 -
インスタンスを起動する
resize-type-demoを選び、「インスタンスの状態」→「インスタンスを開始」を選びます。状態が「実行中(Running)」に戻るまで待ちます。パブリック IP が変わる場合があるElastic IP を関連付けていない場合、起動し直すとパブリック IP アドレスが変わります。次の手順で SSH 接続する際は、最新のパブリック IP アドレスをコンソールで確認してから接続してください。
-
再接続し、スペックが変わったことを確認する
もう一度 SSH 接続し、
nprocとfree -hを実行します。手順3でメモした値と比較し、新しいインスタンスタイプのスペックに変わっていることを確認します。nproc free -h
これがゴールコンソール上の「インスタンスタイプ」表示と、サーバー内の
nproc/free -hの値の両方が新しい値になっていれば、このハンズオンの目的は達成です。
つまずきポイント
初学者がよく引っかかる箇所を先回りでまとめました。答えそのものは載せていませんが、「どこを見直せばよいか」の手がかりとして使ってください。
「変更メニューを開いても、押せない状態になっている」
インスタンスの状態が「実行中」のままになっていないか確認しましょう。インスタンスタイプの変更は、インスタンスが完全に「停止済み」になっているときしか選べません。一覧の「インスタンスの状態」列を見直してみてください。
「変更先の候補に、希望のインスタンスタイプが見当たらない」
そのインスタンスタイプが、現在使っている AMI のアーキテクチャ(x86_64 か Arm か)に対応しているか見直してみましょう。Arm 系のインスタンスタイプは、Arm に対応した AMI でなければ選べません。
完了チェック
要件の再確認ではなく、画面・コマンドのどこを見れば達成を確認できるかをまとめました。次を順に確かめましょう。
- EC2 コンソールのインスタンス詳細で、「インスタンスタイプ」が変更後の値(例:
t3.small)になっている。 - インスタンスの状態が「実行中(Running)」に戻っている。
- SSH 接続後、
nprocの出力が変更後の vCPU 数と一致している。 free -hのtotal列が、変更前にメモした値と比べて変わっている。
考えてみよう
手を動かすことに加えて、次の問いに自分の言葉で答えられるようにしておくと、理解がより深まります。
- インスタンスタイプの変更には、なぜ「停止」が必要なのでしょうか。稼働中のまま切り替えられない理由を考えてみましょう。
ヒント
インスタンスタイプを変えると、裏側で動いている物理的なハードウェアの割り当てそのものが変わることがあります。動いているプログラムを実行したまま、土台のハードウェアだけをすり替えることはできない、という観点から考えてみましょう。 - インスタンスタイプを変更しても、ディスク(EBS)の中身はそのまま残りました。これはなぜでしょうか。
ヒント
EBS は、インスタンス(計算リソース)とは別の、ネットワークでつながった独立したストレージです。計算リソース側を載せ替えても、つなぎ直すだけで同じディスクをそのまま使える、という関係性がヒントです。 - サーバーの負荷が高くなったとき、「1台のインスタンスタイプを大きくしていく」という方法には、コストや上限の面でどんな限界があるでしょうか。複数台に分散する方法と比べて考えてみましょう。
ヒント
1台を大きくする方法(垂直スケーリング)は、選べるインスタンスタイプの上限に達すると、それ以上は大きくできません。また、コストもおおむね線形に増えていきます。複数台に処理を分散する方法(水平スケーリング)と比べて、それぞれの向き・不向きを考えてみましょう。
後片づけ
作成したインスタンスを終了し、リソースを整理しましょう。
- インスタンスを終了する:EC2 コンソールの「インスタンス」で
resize-type-demoを選び、「インスタンスの状態」→「インスタンスを終了(Terminate)」を選びます。
終了するのは、このハンズオンで自分が作ったインスタンスだけ
インスタンス一覧には、すでに別の用途で使っている他のインスタンスが並んでいるかもしれません。間違えて終了しないよう、このハンズオンのために作成したインスタンスだけを選んで終了してください。
コストに関する注意: EC2 インスタンスは起動中のみ課金され、料金はインスタンスタイプによって異なります。インスタンスタイプを大きくすると、その分時間あたりの料金も高くなる点に注意してください(t3.micro などは無料利用枠の対象ですが、t3.small などへ変更すると無料利用枠の対象外になる場合があります)。停止している間はインスタンス自体の料金はかかりませんが、EBS ボリュームには停止中も容量に応じた料金がかかり続けます。使い終わったら、上の「後片づけ」に沿って忘れずに終了しましょう。なお、VPC・サブネット・ルートテーブル・セキュリティグループ自体には料金はかかりません。