← ハンズオン一覧に戻る

AWS Hands-on / Compute

クラウド上にサーバーを 1 台立てて中に入る

AWS の仮想サーバーサービス「EC2」で、Amazon Linux のサーバーを 1 台起動します。鍵(キーペア)を作り、自分のパソコンのターミナルから SSH でそのサーバーにログインして、「クラウドの中に自分のサーバーがある」状態を体感します。

● Lv.1 AWS を触りはじめた人 ⏱ 所要 30〜50 分 最後に SSH を 1 回使用
01 — Prerequisites

はじめる前に

  • 必須AWS アカウントを持っていること
  • 必須マネジメントコンソールにサインインできること
  • 必須ターミナル(Mac の「ターミナル」/Windows の「PowerShell」など)を開けること。最後の接続で ssh コマンドを 1 回だけ使います
  • あると良い「サーバーに SSH でログインする」という言葉をなんとなく聞いたことがある
  • あると良いインターネットに出られる「パブリックサブネット」という区画の存在を知っている(無くても、最初からある「デフォルト VPC」で進められます)

※ AWS 側の操作はすべてコンソールで行います。コマンドを使うのは、最後にサーバーへ接続する ssh の 1 行だけです。

02 — References

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

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

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

03 — Background

背景・シナリオ

「自分のサーバーを 1 台持ってみたい」——そう思っても、これまでは物理的なマシンを用意し、置き場所や電源、ネットワークまで自分で準備する必要がありました。AWS の EC2(Elastic Compute Cloud)を使うと、その「サーバー 1 台」を、数分でクラウド上に立ち上げられます。

今回は EC2 で Linux のサーバーを 1 台起動し、自分のパソコンから SSH でそのサーバーにログインします。SSH は、離れた場所にあるサーバーへ安全に入るための、昔から使われている定番の方法です。ログインできれば、目の前のパソコンと同じようにコマンドを打って操作できます。

サーバーに入るのに、どうしてパスワードではなく「鍵」を使うの?

EC2 は、パスワードより安全なキーペア(鍵)方式を標準にしています。手元に秘密の鍵ファイルを持っている人だけがログインできる仕組みで、推測されやすいパスワードに頼らずに済みます。今回はこの鍵を自分で 1 つ作ります。

Goal

EC2 で Linux サーバーを 1 台起動し、自分のパソコンのターミナルから SSH で接続して、そのサーバーのコマンドプロンプトが表示される状態にする。

04 — Architecture

つくる構成

インターネットに出られるパブリックサブネットの中に EC2 サーバーを 1 台置き、パブリック IP アドレスを付けます。自分のパソコンからは、セキュリティグループで許可した SSH(ポート 22)を通ってそのサーバーへ接続します。

あなたのパソコン(ターミナル)
aws AWS Cloud
Region : ap-northeast-1(東京)
VPC(デフォルト VPC でも可)
インターネットゲートウェイ(インターネットへの出入口)
パブリックサブネット(インターネットに出られる区画)
EC2 インスタンス
Amazon Linux / 無料利用枠タイプ
パブリック IP : 起動時に付与 セキュリティグループ:SSH(22)を自分の IP から許可
サーバーに入れるかどうかは「パブリック IP があるか」「セキュリティグループで SSH を許可しているか」「正しい鍵を使っているか」で決まります。
※ 図はデフォルト VPC を使う場合の例です。自分で作ったパブリックサブネットでも構いません。
05 — Requirements

要件

以下の要件を満たす EC2 インスタンスを起動し、接続してください。

No要件
1リージョンは「東京(ap-northeast-1)」を使用する。
2サーバーへログインするためのキーペアを 1 つ作成し、秘密鍵ファイル(.pem)を自分のパソコンにダウンロードする。
3EC2 インスタンスを 1 台起動する。AMI は Amazon Linux(最新版でよい)、インスタンスタイプは無料利用枠の対象(例:t2.micro または t3.micro)とする。名前タグは my-first-server(例)。
4インスタンスはパブリックサブネットに置き、パブリック IP アドレスが割り当てられるようにする(最初からある「デフォルト VPC」を使うと、この条件は自動的に満たせます)。
5セキュリティグループで SSH(ポート 22)を許可する。ソースは自分の IP アドレス(マイ IP)に絞る。
6ターミナルから ssh で接続し、サーバーのコマンドプロンプト(例:[ec2-user@ip-… ~]$)が表示されることを確認する。
06 — Steps

構築の進め方

下のステップは「どの順で進めると迷いにくいか」の道しるべです。各ステップで「なぜそうするのか」を意識しながら進めると、理解が定着しやすくなります。

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

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

    リージョンを最初に決める理由

    EC2 インスタンスもキーペアも、作成したリージョンにしか表示されません。途中で「作ったはずのものが見つからない」を防ぐため、最初にそろえておきましょう。

  2. キーペア(ログイン用の鍵)を作成する

    画面上部の検索バーに EC2 と入力して EC2 コンソールを開き、左メニュー「キーペア」→「キーペアを作成」を選びます。名前(例:my-key)を付け、キーペアのタイプは RSA、形式は Mac/Linux なら .pem、Windows の PowerShell でも .pem を選びます。作成すると秘密鍵ファイルが自動でダウンロードされます。

    鍵は二度と再ダウンロードできない

    ダウンロードした .pem ファイルは、無くしても AWS から再取得できません。自分の分かる場所(例:ホームフォルダの中)に大切に保管してください。この鍵を持っている人だけがサーバーに入れます。

  3. 「インスタンスを起動」を開き、名前と AMI を選ぶ

    EC2 コンソールの左メニュー「インスタンス」→「インスタンスを起動」を押します。名前my-first-server と入力し、AMI(もとになる OS イメージ)Amazon Linux(最新版・無料利用枠の対象と表示されるもの)を選びます。

    AMI って何?

    サーバーの「OS の入った初期状態のテンプレート」です。Amazon Linux は AWS が用意している標準的な Linux で、EC2 と相性がよく、最初の 1 台に向いています。

  4. インスタンスタイプとキーペアを選ぶ

    インスタンスタイプは、無料利用枠の対象と表示されるもの(例:t2.micro または t3.micro)を選びます。キーペアの欄では、ステップ 2 で作った my-key を選択します。

    インスタンスタイプはサーバーの「大きさ」

    CPU やメモリの量を表します。今回は学習用なので、無料利用枠で使えるいちばん小さいクラスで十分です。大きいタイプを選ぶと料金が発生するので注意しましょう。

  5. ネットワークとセキュリティグループを設定する

    「ネットワーク設定」で次のようにします。デフォルト VPC を使う場合は、ほとんど初期値のままで条件を満たせます。

    サブネットパブリックサブネット(指定しなければデフォルト VPC のものが使われます)
    パブリック IP の自動割り当て有効
    セキュリティグループ新規作成。「SSH(ポート 22)」を許可し、ソースを「マイ IP」に設定
    セキュリティグループルールを設定 — SSH(イメージ)

    許可するソースタイプ

    マイ IP
    今アクセスしている自分の IP アドレスだけを許可
    任意の場所(0.0.0.0/0)
    インターネット上のすべての IP アドレスを許可

    入口は自分の IP だけに絞り、不要なアクセスの試行を防ぎます

    なぜソースを「マイ IP」に絞るの?

    ソースを 0.0.0.0/0(どこからでも可)にすると、世界中の誰でもポート 22 にアクセスを試せてしまいます。自分の今の IP アドレスだけに絞ることで、入口を必要最小限にできます。

  6. 内容を確認して起動する

    右側の「概要」で、台数が 1、AMI が Amazon Linux、タイプが無料利用枠であることを確認し、「インスタンスを起動」を押します。「インスタンス」一覧に戻り、状態が 「実行中(Running)」、ステータスチェックが完了になるまで少し待ちます。

    起動直後は少し待つ

    「実行中」になっても、OS が立ち上がりきるまで 1〜2 分かかることがあります。ステータスチェックが緑になってから接続するとスムーズです。

  7. パブリック IP アドレスを確認する

    一覧で my-first-server を選び、詳細画面の「パブリック IPv4 アドレス」をメモします(例:203.0.113.25)。次のステップで、このアドレスに向けて接続します。

    「接続」ボタンも便利

    詳細画面右上の「接続」を押すと、SSH クライアント用のタブにそのまま使えるコマンド例が表示されます。コマンドに自信がないときは、ここをお手本にすると確実です。

  8. ターミナルから SSH で接続する

    自分のパソコンでターミナル(Windows は PowerShell)を開き、ダウンロードした鍵のある場所へ移動します。まず鍵ファイルの権限を制限してから、ssh で接続します(my-key.pem とアドレスは自分のものに置き換えてください)。

    terminal — あなたのパソコン
    # 鍵ファイルを「自分だけが読める」権限にする(Mac / Linux)
    $ chmod 400 my-key.pem
    
    # Amazon Linux のユーザー名は ec2-user。IP は自分のものに置き換える
    $ ssh -i my-key.pem ec2-user@203.0.113.25
    
    # 初回は本物か確認されるので yes と入力
    The authenticity of host '...' can't be established.
    Are you sure you want to continue connecting? yes
    Windows の場合の権限設定

    Windows の PowerShell では chmod は使いません。鍵ファイルを右クリック →「プロパティ」→「セキュリティ」で、自分のユーザー以外のアクセスを外すか、AWS の公式手順「SSH を使用して接続する」を参照してください。ssh コマンド自体は同じです。

  9. サーバーの中に入れたことを確認する

    接続に成功すると、プロンプトが [ec2-user@ip-172-31-… ~]$ のような表示に変わります。これはもう「クラウド上のサーバーの中」です。試しに hostnamecat /etc/os-release と打つと、Amazon Linux のサーバーであることが確認できます。終わったら exit で抜けられます。

07 — Pitfalls

つまずきポイント

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

Pitfall 01 — SSH の接続が固まる/タイムアウトする

「ssh を実行しても反応がなく、しばらくして失敗する」

接続が「届いていない」ときの典型です。①セキュリティグループでポート 22 が許可され、ソースが今の自分の IP になっているか(外出先などで IP が変わると届かなくなります)、②接続先がパブリック IP アドレスになっているか(プライベート IP では届きません)、③インスタンスが「実行中」かを順に見直してみましょう。

Pitfall 02 — 鍵やユーザー名で拒否される

「Permission denied と表示されて入れない」

接続先までは届いているのに、認証ではじかれている状態です。ユーザー名が ec2-user になっているか(Amazon Linux のユーザー名です)、指定している鍵ファイルが起動時に選んだキーペアと同じものか鍵ファイルの権限が厳しすぎ/緩すぎになっていないか(Mac/Linux では chmod 400)を確認してみてください。

08 — Checklist

完了チェック

要件の再確認ではなく、画面のどこを見れば達成を確認できるかをまとめました。EC2 コンソールとターミナルを開いて、次を順に確かめましょう。

  • 画面右上のリージョン表示が 「東京 / ap-northeast-1」になっている。
  • 「インスタンス」一覧に my-first-server があり、インスタンスの状態「実行中(Running)」になっている。
  • そのインスタンスの詳細に「パブリック IPv4 アドレス」が表示されている。
  • インスタンスタイプが無料利用枠の対象(例:t2.micro / t3.micro)になっている。
  • セキュリティグループのインバウンドルールに、ポート 22・ソースが自分の IP の行がある。
  • ターミナルでの ssh 接続後、プロンプトが [ec2-user@ip-… ~]$ に変わっている。
09 — Think

考えてみよう

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

  1. セキュリティグループで SSH のソースを 0.0.0.0/0(どこからでも可)にせず、「マイ IP」に絞ったのはなぜでしょうか。広く開けると何が起きうるか考えてみましょう。
    ヒント
    ポート 22 を世界中に開けると、自動化された侵入の試行(ログインの総当たり)の対象になりやすくなります。「入口は必要な人だけに開ける」という考え方から、絞ることの意味を考えてみましょう。
  2. もしダウンロードした秘密鍵(.pem)を無くしてしまったら、このサーバーにはどうやって入ればよいでしょうか。鍵は再発行できない、という前提で考えてみましょう。
    ヒント
    同じ鍵をもう一度ダウンロードすることはできません。別の鍵で入り直すにはどんな方法があるか——たとえば「新しいキーペアを使う別の手段」や「最初から鍵を作り直して起動し直す」など、いくつかの選択肢を調べてみましょう。答えは 1 つに限りません。
  3. このサーバーを使い終えたあと、「停止(Stop)」と「終了(Terminate)」では料金やデータの扱いがどう違うでしょうか。学習用のサーバーを片づけるとき、どちらを選ぶべきか考えてみましょう。
    ヒント
    「停止」はサーバーの電源を切るイメージで、あとで起動し直せますが、ディスク(ストレージ)は残り続けます。「終了」はサーバーそのものを消すイメージです。料金が発生し続けるのはどちらか、もう使わないならどちらが適切か、という視点で整理してみましょう。
10 — Clean up

後片づけ

作ったものを片づけるところまでが一連の流れです。EC2 インスタンスは起動している間ずっと料金が発生する(無料利用枠を超えた場合)ため、使い終わったら必ず片づけましょう。

  1. インスタンスを終了する:EC2 コンソールの「インスタンス」で my-first-server を選び、「インスタンスの状態」→「インスタンスを終了(Terminate)」を選ぶ。状態が「終了済み(Terminated)」になれば、このサーバーの料金は止まります。
  2. キーペアを削除する(任意):もう使わない場合は、左メニュー「キーペア」から my-key を削除できます。手元の .pem ファイルも不要なら消してかまいません。
  3. セキュリティグループを削除する(任意):このハンズオン用に新しく作ったセキュリティグループは、インスタンスを終了したあとに削除できます(他で使っていないことを確認してから)。
Caution — 「停止」だけでは料金が完全には止まらない

残しておくなら「停止」、片づけるなら「終了」

「停止(Stop)」はあとで再開できますが、インスタンスに付いているディスク(EBS ボリューム)は残り、そのぶんの料金は発生し続けます。学習を終えてもう使わないなら、「終了(Terminate)」でサーバーごと消すのが確実です。デフォルト VPC やデフォルトのサブネットは消さないようにしましょう。

コストに関する注意: EC2 インスタンスは起動している間、課金されます。ただし新規アカウントには無料利用枠があり、t2.micro または t3.micro などの対象インスタンスを月あたり一定時間(一般的に 750 時間/月・12 か月間)まで無料で使えます。対象タイプを 1 台だけ動かす今回の範囲なら、無料利用枠に収まることが多いですが、消し忘れると枠を超えて課金されるので注意してください。インスタンスに付くディスク(EBS ボリューム)にも料金がかかります。今回は Elastic IP を使っていないため、終了すれば残りません。使い終えたら、上の「後片づけ」で必ずインスタンスを終了しておきましょう。