← ハンズオン一覧に戻る

AWS Hands-on / Compute

サーバーの性能を、後から変える

起動済みの EC2 インスタンスを「停止 → インスタンスタイプを変更 → 起動」という手順でスペックアップし、CPU やメモリの量を後から変えられることを体験します。コンソールでの操作だけでなく、サーバーの中で実際にスペックが変わったことも確認します。

● Lv.2 基本的なリソースを作れる人 ⏱ 所要 30〜45 分 コンソール操作+一部コマンドライン操作あり
01 — Prerequisites

はじめる前に

  • 必須AWS アカウントを持っていること
  • 必須マネジメントコンソールにサインインできること
  • 必須EC2 インスタンスへ SSH 接続できること(手順内で接続方法も説明します)
  • あると良いEC2 インスタンスを一度起動したことがある

※ メインの操作はコンソールですが、変化を実感するためにサーバーの中で数個のコマンドを実行します。コマンドはすべて本文中にそのまま掲載しています。

※ ローカル端末は Windows を想定し、標準搭載の OpenSSH を使う手順で説明します。

02 — References

参照する公式ドキュメント

手順に迷ったときや、用語の意味を確かめたいときに開きましょう。

※ リンク切れの場合は、ページタイトルで検索してください。

03 — Background

背景・シナリオ

サーバーを最初に立てるときは、ひとまず小さめのインスタンスタイプで始めることがよくあります。ところが、実際にアプリケーションを動かしてみると CPU やメモリが足りなくなり、もう少し性能の高いインスタンスタイプに変えたい、という場面が出てきます。

EC2 では、インスタンスを作り直さなくても、インスタンスタイプ(CPU・メモリなどのスペックの組み合わせ)を後から変更できます。ただし、稼働中のまま切り替えることはできず、「停止 → 変更 → 起動」という手順を踏む必要があります。今回はこの一連の流れを体験し、変更前後でサーバーの中のスペックが実際にどう変わるかも確認します。

インスタンスタイプは、動かしたまま変更できるの?

いいえ。インスタンスが「実行中」のままでは変更できません。一度「停止」してから変更し、そのあと「開始」する必要があります。変更している間、その分の停止時間が発生する点に注意してください。

ディスク(EBS)の中身はどうなるの?

そのまま保持されます。インスタンスタイプの変更は、いわば「載せ替える計算機本体(CPU・メモリ)」を変えるだけの操作で、ディスクの中身には影響しません。これは EBS が、計算リソースとは別の独立したストレージだからです。

Goal

EC2 インスタンスを停止 → インスタンスタイプを変更 → 起動し、コンソール表示とサーバー内のコマンド(nprocfree -h)の両方で、スペックが変わったことを確認する。

04 — Architecture

つくる構成

同じ1台のインスタンスのまま、インスタンスタイプだけを切り替えます。ディスクの中身(OS の設定やデータ)は変わらず、CPU・メモリなどのスペックだけが変わる、という点を確認します。

Before

変更前のスペック
(例)

t3.micro
vCPU2
メモリ1 GiB
同じインスタンスのまま
After

変更後のスペック
(例)

t3.small
vCPU2
メモリ2 GiB
✓ メモリが2倍に増えた

※ インスタンスタイプの組み合わせは一例です。無料利用枠の対象外になる場合があるため、組み合わせは自分で確認のうえ選んでください。

05 — Requirements

要件

以下の流れで、「今のスペックを確認する」→「停止して変更する」→「起動して変わったことを確認する」を順に行ってください。

No要件
1リージョンは「東京(ap-northeast-1)」を使用する。
2EC2 インスタンスを1台起動する。AMI は Amazon Linux 2023(最新版でよい)、インスタンスタイプは自由に選ぶ(例:t3.micro)。名前タグは resize-type-demo(例)。
3SSH で接続し、変更前の vCPU 数・メモリ容量を確認する。
4インスタンスを停止し、別のインスタンスタイプに変更する(例:t3.microt3.small)。
5インスタンスを起動し、SSH で再接続してvCPU 数・メモリ容量が変わったことを確認する。
06 — Steps

構築の進め方

「変更前の状態を確認してから変更する」という順番で進めることで、何がどう変わったのかを実感しやすくなります。

  1. マネジメントコンソールにサインインし、リージョンを合わせる

    ブラウザで AWS マネジメントコンソールにサインインし、画面右上のリージョンが「アジアパシフィック(東京)ap-northeast-1」になっていることを確認します。

  2. 確認用の EC2 インスタンスを1台起動する

    EC2 コンソールで「インスタンスを起動」を押し、名前に resize-type-demo、AMI に Amazon Linux 2023、インスタンスタイプに無料利用枠の対象(例:t3.micro)を選びます。キーペアを新規作成し、.pem ファイルをダウンロードしておきます。

    セキュリティグループは SSH のみ許可でよい

    インバウンドルールで SSH(ポート22)を自分の IP からのみ許可しておきます。それ以外のポートは今回開けなくて構いません。

  3. Windows の OpenSSH で接続し、いまのスペックを確認する

    PowerShell から接続し、変更前の vCPU 数とメモリ容量を確認します(<インスタンスのパブリックIP> は実際の値に置き換えてください)。

    PowerShell
    # 鍵ファイルの権限を自分のみ読み取り可に絞る
    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>
    EC2 インスタンス内
    # vCPU数を確認
    nproc
    
    # メモリ容量を確認
    free -h
    表示された値をメモしておく

    nproc の結果(例:2)と、free -hMem 行の total 列(例:~950Mi)を、あとで比較するためにメモしておきましょう。

  4. インスタンスを停止する

    EC2 コンソールで resize-type-demo を選び、「インスタンスの状態」→「インスタンスを停止」を選びます。状態が「停止済み(Stopped)」になるまで待ちます。

    「再起動」ではなく「停止」が必要

    OS の「再起動(Reboot)」では、インスタンスタイプの変更メニューは選べません。インスタンスタイプの変更には、AWS の視点で完全に「停止済み」の状態になっている必要があります。

  5. インスタンスタイプを変更する

    停止済みになったら、resize-type-demo を選んだ状態で「アクション」→「インスタンスの設定」→「インスタンスタイプを変更」を開きます。一覧から新しいインスタンスタイプ(例:t3.small)を選び、「適用」を押します。

    選べるのは互換性のあるインスタンスタイプだけ

    一覧には、現在の AMI のアーキテクチャ(x86_64 など)と互換性のあるインスタンスタイプだけが表示されます。見当たらないインスタンスタイプがある場合、アーキテクチャが異なる可能性があります。

  6. インスタンスを起動する

    resize-type-demo を選び、「インスタンスの状態」→「インスタンスを開始」を選びます。状態が「実行中(Running)」に戻るまで待ちます。

    パブリック IP が変わる場合がある

    Elastic IP を関連付けていない場合、起動し直すとパブリック IP アドレスが変わります。次の手順で SSH 接続する際は、最新のパブリック IP アドレスをコンソールで確認してから接続してください。

  7. 再接続し、スペックが変わったことを確認する

    もう一度 SSH 接続し、nprocfree -h を実行します。手順3でメモした値と比較し、新しいインスタンスタイプのスペックに変わっていることを確認します。

    EC2 インスタンス内
    nproc
    free -h
    これがゴール

    コンソール上の「インスタンスタイプ」表示と、サーバー内の nproc / free -h の値の両方が新しい値になっていれば、このハンズオンの目的は達成です。

07 — Pitfalls

つまずきポイント

初学者がよく引っかかる箇所を先回りでまとめました。答えそのものは載せていませんが、「どこを見直せばよいか」の手がかりとして使ってください。

Pitfall 01 — 「インスタンスタイプを変更」が選べない(グレーアウトしている)

「変更メニューを開いても、押せない状態になっている」

インスタンスの状態が「実行中」のままになっていないか確認しましょう。インスタンスタイプの変更は、インスタンスが完全に「停止済み」になっているときしか選べません。一覧の「インスタンスの状態」列を見直してみてください。

Pitfall 02 — 選びたいインスタンスタイプが一覧に出てこない

「変更先の候補に、希望のインスタンスタイプが見当たらない」

そのインスタンスタイプが、現在使っている AMI のアーキテクチャx86_64Arm か)に対応しているか見直してみましょう。Arm 系のインスタンスタイプは、Arm に対応した AMI でなければ選べません。

08 — Checklist

完了チェック

要件の再確認ではなく、画面・コマンドのどこを見れば達成を確認できるかをまとめました。次を順に確かめましょう。

  • EC2 コンソールのインスタンス詳細で、「インスタンスタイプ」が変更後の値(例:t3.small)になっている。
  • インスタンスの状態が「実行中(Running)」に戻っている。
  • SSH 接続後、nproc の出力が変更後の vCPU 数と一致している。
  • free -htotal 列が、変更前にメモした値と比べて変わっている。
09 — Think

考えてみよう

手を動かすことに加えて、次の問いに自分の言葉で答えられるようにしておくと、理解がより深まります。

  1. インスタンスタイプの変更には、なぜ「停止」が必要なのでしょうか。稼働中のまま切り替えられない理由を考えてみましょう。
    ヒント
    インスタンスタイプを変えると、裏側で動いている物理的なハードウェアの割り当てそのものが変わることがあります。動いているプログラムを実行したまま、土台のハードウェアだけをすり替えることはできない、という観点から考えてみましょう。
  2. インスタンスタイプを変更しても、ディスク(EBS)の中身はそのまま残りました。これはなぜでしょうか。
    ヒント
    EBS は、インスタンス(計算リソース)とは別の、ネットワークでつながった独立したストレージです。計算リソース側を載せ替えても、つなぎ直すだけで同じディスクをそのまま使える、という関係性がヒントです。
  3. サーバーの負荷が高くなったとき、「1台のインスタンスタイプを大きくしていく」という方法には、コストや上限の面でどんな限界があるでしょうか。複数台に分散する方法と比べて考えてみましょう。
    ヒント
    1台を大きくする方法(垂直スケーリング)は、選べるインスタンスタイプの上限に達すると、それ以上は大きくできません。また、コストもおおむね線形に増えていきます。複数台に処理を分散する方法(水平スケーリング)と比べて、それぞれの向き・不向きを考えてみましょう。
10 — Clean up

後片づけ

作成したインスタンスを終了し、リソースを整理しましょう。

  1. インスタンスを終了する:EC2 コンソールの「インスタンス」で resize-type-demo を選び、「インスタンスの状態」→「インスタンスを終了(Terminate)」を選びます。
Caution — 他で使っているインスタンスは終了しない

終了するのは、このハンズオンで自分が作ったインスタンスだけ

インスタンス一覧には、すでに別の用途で使っている他のインスタンスが並んでいるかもしれません。間違えて終了しないよう、このハンズオンのために作成したインスタンスだけを選んで終了してください。

コストに関する注意: EC2 インスタンスは起動中のみ課金され、料金はインスタンスタイプによって異なります。インスタンスタイプを大きくすると、その分時間あたりの料金も高くなる点に注意してください(t3.micro などは無料利用枠の対象ですが、t3.small などへ変更すると無料利用枠の対象外になる場合があります)。停止している間はインスタンス自体の料金はかかりませんが、EBS ボリュームには停止中も容量に応じた料金がかかり続けます。使い終わったら、上の「後片づけ」に沿って忘れずに終了しましょう。なお、VPC・サブネット・ルートテーブル・セキュリティグループ自体には料金はかかりません。