AWS の仮想サーバ(Amazon EC2 インスタンス)を作り、手元の PC から SSH で接続するまでの手順を確かめます。VPC、サブネット、ルートテーブル、インターネットゲートウェイは前の記事で作ったものを使い、パブリックサブネットに Amazon Linux 2 のインスタンスを1台作ります。
- EC2 インスタンスをパブリックサブネットに作る手順(AMI、インスタンスタイプ、ネットワーク、セキュリティグループ)
- キーペア(秘密鍵と公開鍵)と、SSH で接続するまでの流れ
- パブリック IP の割り当てと、インスタンスの状態の見方
- インスタンスからインターネットへの疎通確認
前提条件
インスタンスを置くネットワークは、次の記事で作っておきます。インスタンスを置く public-subnet-1a(10.0.1.0/24)のルートテーブルでは、0.0.0.0/0 がインターネットゲートウェイに向いています。
この記事の構成です。インスタンスには Amazon Linux 2 を使い、作業 PC(Mac)から SSH で接続したあと、インスタンスからインターネットに ping を打ちます。
検証時(2021年8月)のコンソールでは、インスタンスの作成が「ステップ 1」から「ステップ 7」までの画面に分かれていました。今のコンソールでは、名前とタグ、AMI、インスタンスタイプ、キーペア、ネットワーク設定、ストレージを1つの画面で設定します。設定する項目の意味は同じなので、この記事では検証時の画面の順に説明します。
また、Amazon Linux 2 は 2026年6月30日でサポートが終わっています。これから作る場合は Amazon Linux 2023 を選んでください。Amazon Linux 2023 でも、SSH で接続するユーザー名は ec2-user です。
EC2 インスタンスの作成
コンソール上部の検索欄に EC2 と入れて EC2 の画面を開き、EC2 ›› インスタンス ›› インスタンスを起動 をクリックします。
AMI(Amazon マシンイメージ)を選ぶ
AMI は、インスタンスの起動に使う OS などのイメージです。ここでは、無料利用枠の対象になっていた Amazon Linux 2 を選びます。
この記事の画面は、実際の画面ではなく、検証時の画面から設定する項目(見るポイント)を抜き出して描いたイメージです。AWS のコンソールは画面の構成や表記がよく変わるので、今の画面とは違います。AMI、インスタンス、サブネットなどの ID は省いています。
| 1Amazon Linux 2 AMI (HVM), SSD Volume Type | 無料利用枠の対象 ルートデバイスタイプ: ebs 仮想化タイプ: hvm ENA 有効: はい |
| 2アーキテクチャ | ◉ 64 ビット (x86)○ 64 ビット (Arm) |
| No. | 項目 | 設定内容 |
|---|---|---|
| 1 | AMI | Amazon Linux 2 AMI (HVM), SSD Volume Type を使います。 |
| 2 | アーキテクチャ | 64 ビット (x86) を選びます。Arm を選ぶと、次の画面で Arm(Graviton)用のインスタンスタイプを選ぶことになります。 |
| 3 | 選択 | クリックすると、インスタンスタイプの画面に進みます。 |
インスタンスタイプを選ぶ
インスタンスタイプは、vCPU やメモリなどのサーバの性能を決めるものです。ここでは、無料利用枠の対象だった t2.micro(vCPU 1、メモリ 1 GiB)を選び、「次のステップ: インスタンスの詳細の設定」をクリックします。
| ファミリー | タイプ | vCPU | メモリ (GiB) | インスタンス ストレージ (GB) | ネットワーク パフォーマンス | |
|---|---|---|---|---|---|---|
| ☐ | t2 | t2.nano | 1 | 0.5 | EBS のみ | 低から中 |
| 1☑ | t2 | t2.micro 無料利用枠の対象 | 1 | 1 | EBS のみ | 低から中 |
インスタンスタイプは、インスタンスを停止すればあとから変えられます。検証では小さいタイプで始め、足りなければ変えれば十分です。
AWS の無料利用枠の仕組みは検証時から変わっています。今の無料プランはクレジット制で、EC2 で対象になるインスタンスタイプは t3.micro、t3.small、t4g.micro、t4g.small、c7i-flex.large、m7i-flex.large です。作成時の画面で、対象のタイプを確かめてください。
ネットワークを設定する
インスタンスの詳細の設定では、インスタンスを置く VPC とサブネットを決めます。インターネットから SSH で接続するので、インターネットゲートウェイへのルートがあるパブリックサブネットに置き、パブリック IP アドレスを自動で割り当てます。
| 1ネットワーク | MyVPC |
| 2サブネット | public-subnet-1a | ap-northeast-1a 251 個の IP アドレスが利用可能 |
| 3自動割り当てパブリック IP | 有効 |
| ⋮ (中略) | |
| 4eth0 のプライマリ IP | 新しいネットワークインターフェイス 10.0.1.100 |
| No. | 項目 | 設定内容 |
|---|---|---|
| 1 | ネットワーク | インスタンスを置く VPC です。前の記事で作った MyVPC を選びます。 |
| 2 | サブネット | インターネットゲートウェイへのルートがあるパブリックサブネット public-subnet-1a を選びます。/24 のサブネットなので、使える IP アドレスは 251 個と表示されます。 |
| 3 | 自動割り当てパブリック IP | 有効 にすると、インスタンスにパブリック IPv4 アドレスが割り当てられ、インターネットから届くようになります。 |
| 4 | プライマリ IP | サブネット 10.0.1.0/24 の中から、プライベート IP アドレスを 10.0.1.100 に固定します。空欄なら自動で割り当てられます。 |
インスタンス自身が知っているのはプライベート IP アドレス(10.0.1.100)だけです。インターネットとやり取りするときは、インターネットゲートウェイがプライベート IP とパブリック IP を1対1で変換します。
今の AWS では、実行中のインスタンスに割り当てたパブリック IPv4 アドレスも、Elastic IP アドレスも、料金がかかります。検証が終わったらインスタンスを停止するか終了し、使わない Elastic IP アドレスは解放してください。
ストレージを確かめる
ストレージは、デフォルトのまま進めます。検証時のデフォルトは、ルートボリューム(/dev/xvda)が汎用 SSD(gp2)の 8 GiB で、「終了時に削除」にチェックが入っていました。終了時に削除が有効なので、インスタンスを終了するとこのボリュームも削除されます。確認したら「次のステップ: タグの追加」をクリックします。
タグで名前を付ける
タグを追加し、キー Name、値 EC2-public を入れます。キー Name の値は、インスタンス一覧の Name 列に表示されるので、複数のインスタンスを見分けやすくなります。
セキュリティグループを設定する
セキュリティグループは、インスタンスに出入りする通信を許可するルールです。ここでは「新しいセキュリティグループを作成する」を選び、名前を EC2-public にします。インバウンドルールには、SSH(TCP 22)を許可するルールが最初から入っています。
| 1セキュリティグループの割り当て | ◉ 新しいセキュリティグループを作成する ○ 既存のセキュリティグループを選択する |
| セキュリティグループ名 | EC2-public |
| 説明 | launch-wizard-1 created 2021-08-18T18:02:53.036+09:00 |
| タイプ | プロトコル | ポート範囲 | ソース |
|---|---|---|---|
| 2SSH | TCP | 22 | カスタム 0.0.0.0/0 |
| No. | 項目 | 設定内容 |
|---|---|---|
| 1 | セキュリティグループの割り当て | 新しく作り、名前を EC2-public にします。 |
| 2 | インバウンドルール | タイプ SSH(TCP 22)のルールです。ソースが 0.0.0.0/0 なので、どこからでも SSH で接続できます。 |
ソースが 0.0.0.0/0 のままだと、インターネットのどこからでも SSH のポートに接続を試みられます。検証でも、ソースは作業 PC のグローバル IP アドレス(「マイ IP」)などに絞るのが安全です。
先にセキュリティグループを作っておいた場合は、「既存のセキュリティグループを選択する」を選び、一覧から選びます。検証時の一覧には、次の記事で作った WebSV-SG のほか、default(default VPC security group)などがありました。
設定したら「確認と作成」をクリックし、確認画面で内容を確かめて「起動」をクリックします。
キーペアを作ってインスタンスを作成する
起動をクリックすると、SSH の接続に使うキーペアを選ぶ画面が出ます。キーペアは秘密鍵と公開鍵の組で、公開鍵はインスタンスの ec2-user に登録され、秘密鍵は手元に保存します。SSH で接続するときに秘密鍵を使うので、パスワードなしでログインできます。
| 1キーペア | 新しいキーペアの作成 |
| Key pair type | ◉ RSA○ ED25519 |
| 2キーペア名 | hirotano-key |
| No. | 項目 | 設定内容 |
|---|---|---|
| 1 | キーペア | 「新しいキーペアの作成」を選びます。既存のキーペアを使うこともできます。 |
| 2 | キーペア名 | 任意の名前です。この記事では hirotano-key にします。 |
| 3 | キーペアのダウンロード | 秘密鍵(hirotano-key.pem)をダウンロードし、安全な場所に保管します。秘密鍵をダウンロードできるのはこのときだけです。 |
| 4 | インスタンスの作成 | ダウンロードが終わったらクリックします。「インスタンスは現在作成中です」と表示されます。 |
インスタンスの状態を確かめる
「インスタンスの表示」をクリックすると、インスタンス一覧で状態を確かめられます。作成した直後は、インスタンスの状態は「実行中」でも、ステータスチェックは「初期化しています」です。しばらく待つと「2/2 のチェックに合格しました」になります。
| Name | インスタンスの状態 | インスタンスタイプ | ステータスチェック | |
|---|---|---|---|---|
| 作成直後 | EC2-public | 実行中 | t2.micro | 1 初期化しています |
| しばらく後 | EC2-public | 実行中 | t2.micro | 2 2/2 のチェックに合格しました |
| No. | 表示 | 意味 |
|---|---|---|
| 1 | 初期化しています(灰色) | 起動したばかりで、ステータスチェックがまだ終わっていません。 |
| 2 | 2/2 のチェックに合格しました(緑) | システムステータスチェック(AWS 側の基盤)とインスタンスステータスチェック(OS やネットワークの設定)の両方に合格しています。 |
今のコンソールでは、Nitro ベースのインスタンスに、アタッチした EBS ボリュームのステータスチェックも加わります。そのため、チェックの数が検証時と違って表示されることがあります。
インスタンスを選び、「ネットワーキング」タブを開くと、自動で割り当てられたパブリック IPv4 アドレスと、指定したプライベート IPv4 アドレス(10.0.1.100)を確かめられます。
| 1パブリック IPv4 アドレス | (伏せています)| オープンアドレス |
| 2プライベート IPv4 アドレス | 10.0.1.100 |
| No. | 表示 | 意味 |
|---|---|---|
| 1 | パブリック IPv4 アドレス | SSH の接続先になるアドレスです。自動割り当てなので、インスタンスを停止して起動すると変わります。 |
| 2 | プライベート IPv4 アドレス | STEP 3 で指定した 10.0.1.100 です。 |
インスタンスを選んで「接続」をクリックし、「SSH クライアント」タブを開くと、接続の手順が表示されます。秘密鍵のパーミッションを chmod 400 hirotano-key.pem で絞ることと、ユーザー名 ec2-user で接続することが書かれています。同じ画面には、ブラウザから接続できる「EC2 Instance Connect」や「セッションマネージャー」のタブもあります。
仮想インスタンスへアクセス
SSH で接続する
Mac のターミナルで、秘密鍵を保存したデスクトップに移動し、秘密鍵のパーミッションを 400(自分だけが読める)にしてから、ssh -i で秘密鍵を指定して接続します。パーミッションが広いままだと、SSH が秘密鍵を使わず、接続できません。
作業 PC(Mac のターミナル)
mac:~ hirotano$ cd Desktop/ mac:Desktop hirotano$ chmod 400 hirotano-key.pem mac:Desktop hirotano$ ssh -i "hirotano-key.pem" ec2-user@xx.xxx.xxx.xx The authenticity of host 'xx.xxx.xxx.xx (xx.xxx.xxx.xx)' can't be established. ECDSA key fingerprint is SHA256:jLIi62VYQ+eN9ZXqbTg+sA36dJFHi4kKz9+TwSF6uqg. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'xx.xxx.xxx.xx' (ECDSA) to the list of known hosts. __| __|_ ) _| ( / Amazon Linux 2 AMI ___|\___|___| 4 package(s) needed for security, out of 16 available Run "sudo yum update" to apply all updates. [ec2-user@ip-10-0-1-100 ~]$
| 表示 | 意味 |
|---|---|
| chmod 400 hirotano-key.pem | 秘密鍵を、所有者だけが読める状態にします。 |
| ssh -i “hirotano-key.pem” ec2-user@… | 秘密鍵を指定し、ユーザー ec2-user でパブリック IP アドレスに接続します。 |
| Are you sure you want to continue connecting (yes/no)? | 初めて接続するホストなので、ホスト鍵の確認を求められています。yes と入れると、ホスト鍵が known_hosts に登録されます。 |
| [ec2-user@ip-10-0-1-100 ~]$ | ログインできました。ホスト名はプライベート IP(10.0.1.100)から付いています。 |
表示された ECDSA のフィンガープリントは、本来はインスタンスのものと同じかを確かめてから yes と答えます。インスタンスのフィンガープリントは、インスタンスのシステムログ(コンソール出力)で確かめられます。違っていた場合は、途中で別のホストに接続させられている(中間者攻撃)おそれがあります。
インターネットへの疎通を確かめる
インスタンスを置いたサブネットのルートテーブルでは 0.0.0.0/0 がインターネットゲートウェイに向いているので、インスタンスからインターネットにも出られます。Google の DNS サーバ(8.8.8.8)に ping を打って確かめます。
EC2(Amazon Linux 2)
[ec2-user@ip-10-0-1-100 ~]$ ping 8.8.8.8 PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data. 64 bytes from 8.8.8.8: icmp_seq=1 ttl=104 time=2.56 ms 64 bytes from 8.8.8.8: icmp_seq=2 ttl=104 time=2.60 ms 64 bytes from 8.8.8.8: icmp_seq=3 ttl=104 time=2.56 ms ^C --- 8.8.8.8 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2003ms rtt min/avg/max/mdev = 2.565/2.577/2.602/0.044 ms
3回送って3回とも応答が返り(0% packet loss)、インスタンスからインターネットに出られることが確かめられました。応答が返るのは、セキュリティグループが通信の状態を覚えていて(ステートフル)、送った ping への応答を通すためです。
うまくいかないとき
| 状態 | よくある原因 | 確認すること |
|---|---|---|
| ssh が応答せずタイムアウトする | セキュリティグループで TCP 22 を許可していない、ソースに作業 PC のアドレスが入っていない、パブリック IP がない、サブネットにインターネットゲートウェイへのルートがない | インバウンドルール、インスタンスのパブリック IPv4 アドレス、サブネットのルートテーブル |
| UNPROTECTED PRIVATE KEY FILE と表示される | 秘密鍵のパーミッションが広い | chmod 400 を実行したか |
| Permission denied (publickey) と表示される | ユーザー名や秘密鍵が違う | ユーザー名 ec2-user、インスタンスに設定したキーペア |
| 昨日つながったのに今日はつながらない | 停止と起動でパブリック IP が変わった | ネットワーキングタブのパブリック IPv4 アドレス |
まとめ
| 項目 | この記事の設定 | ポイント |
|---|---|---|
| AMI | Amazon Linux 2(64 ビット x86) | 今は Amazon Linux 2023 を選ぶ |
| インスタンスタイプ | t2.micro | 停止すればあとから変えられる |
| ネットワーク | MyVPC、public-subnet-1a、プライベート IP 10.0.1.100、パブリック IP 自動割り当て | インターネットゲートウェイへのルートがあるサブネットに置く |
| タグ | Name = EC2-public | 一覧の Name 列に表示される |
| セキュリティグループ | EC2-public(SSH を許可) | ソースは作業 PC のアドレスに絞る |
| キーペア | hirotano-key | 秘密鍵は作成時にだけダウンロードできる |
EC2 インスタンスは、置くサブネット、パブリック IP、セキュリティグループ、キーペアの4つがそろって、はじめて SSH で接続できます。つながらないときは、この4つを順に確かめます。
コメント