はじめに
今回の記事の目的
AWSに入門してみる。
EC2サーバ(Linux)を構築し、サーバにログイン(SSHアクセス)を実施する。
前提
- AWSマネジメントコンソールにアクセスできること。
- IAMユーザに対し、必要なAWSサービスの利用を許可するIAMロールが紐づいていること。
- teratermまたはWindowsPowershellなど、SSH接続できるターミナルがインストールされていること。
今回の構成
インターネットからアクセス可能なパブリックサブネットを作成し、その中にEC2インスタンスを起動します。
EC2を利用したサーバの構築手順
VPCを作成
VPCを作成する。
AWSコンソール画面の「VPC」から「VPCを作成」を選択。
CIDRCIDRブロックは10.0.0.0/24
とした。
意味としては以下の通り。
- プライベートIPアドレスである
- IPアドレスのネットワーク部が24ビット(
10.0.0
までの部分) - ネットワーク全体を表すIPアドレス=ホスト部を0としたアドレス(最後の
0
の部分) - ホスト部には、8ビット分(32-24=8)、256個のアドレスを利用可能。
10.0.0.1~10.0.0.254
のIPアドレスが利用可能。(10.0.0.255
はブロードキャストアドレス)
CIDR説明 IPv4 CIDRブロック - Qiita
CIDRブロックを計算できるサイト
[CIDRをIPアドレスに展開ツール v2.0.3 -IPv46 – IPアドレス(CIDR)の範囲確認・変換・国判定サイト]
サブネットを作成する
同じVPCコンソールから、サブネットタブを選んで「サブネットを作成」を選ぶ。
今回サブネットにはインターネットゲートウェイとの通信を設定して、インターネットからアクセスできるようにしたいので、パブリックサブネットとする。
また、サブネットを配置するアベイラビリティゾーン(AZ)はap-northeast-1a
(東京リージョンのAZ-a)を選ぶことにする。
サブネットの名前は、以上の状況を表すpublic-1a
とした。
システムを作る際には可用性を高めるためマルチAZ構成を検討する。(マルチAZは基本的にやっておく、マルチリージョンは必要に応じてやることが多い印象)
サブネットをパブリックサブネットとするため、インターネットゲートウェイと、ルートテーブルの設定を行う。
インターネットゲートウェイを作成する
同じVPCコンソールから、インターネットゲートウェイを選んで「インターネットゲートウェイの作成」を選ぶ。
次に、作成したインターネットゲートウェイにチェックマークを入れ、「アクション」→「VPCにアタッチ」。先ほど作成したVPCにアタッチする。
ルートテーブルの作成・設定
VPCコンソールから、ルートテーブルを選んで「ルートテーブルの作成」を選ぶ。 VPCは先ほど作ったVPCを選ぶ。
作成したルートテーブルを選び、「ルートを編集」→「ルートを追加」で、0.0.0.0/0
(フルオープン)から、インターネットゲートウェイへのアクセスルートを追加する。
ルートテーブルを選択し、「サブネットの関連付け」→「サブネットの関連付けを編集」から、先ほど作ったサブネット(public-1a
)を関連付ける。
EC2インスタンスを起動する
マネジメントコンソールからEC2のコンソール画面に移動。「インスタンスを起動」を選ぶ。
AMIの選択
AMI選択画面では「Amazon Linux」を選択。
AMIとは、サーバを立ち上げるときの設定ファイルのようなもので、自分で作成することもできるし、AWS側が用意しているものを使うこともできる。また、サードパーティー製のものを買って使うこともできる。
インスタンスタイプの選択
インスタンスタイプの選択。今回は無料のt2.micro
を選んでおく。
インスタンスタイプとは、起動するサーバのスペックを表すもの。(詳細は「インスタンスタイプ」「インスタンスファミリー」で検索)
詳細を設定する
- ネットワーク:先ほど作ったVPC
- サブネット:先ほど作ったパブリックサブネット
- 自動割り当てパブリックIP:有効(自動でパブリックIPアドレスをふってくれる)
ストレージの追加
EC2にはEBS(Elastic Block Store)と呼ばれるストレージをアタッチできる。
S3やEFSにデータを格納するのに比べるとコストは高いがI/O性能は良い。
デフォルト設定とする。
タグの追加
今回はNameタグのみつけておく。
セキュリティグループの設定
セキュリティグループは、アクセス設定のひとかたまりみたいなもので、VPC単位に複数作ることができる。 これをEC2に関連付けることで、インバウンドとアウトバウンドのトラヒックを許可・制限できる。
SSHとHTTPのポートに対し、0.0.0.0/0
(フルアクセス)の権限を与えるセキュリティグループを新規作成して、EC2にアタッチする。
おそらく実際の業務システムでは、フルアクセス設定はNG。
キーペアの作成
キーペアを作成し、秘密鍵をダウンロードしておく(EC2アクセス時に使用する)。
設定完了
しばらく待つとインスタンスが起動する。
EC2インスタンスへのSSHアクセス
マネジメントコンソールから、起動したEC2のパブリックIPアドレスを確認する。
teratermを起動し、ホストに先ほど設定したIPアドレスを入れる。
- ユーザ名:
ec2-user
とする。 - RSA/DSA/・・・・鍵を使う にチェックを入れる。
- 秘密鍵に、EC2作成時にダウンロードしておいた秘密鍵を設定する。
これでサーバにアクセスできる。
業務システムとして利用する際は、プライベートサブネット上にEC2を設置することが多いので、接続方法は別途検討が必要。
こちらなど参考になりそう。
「プライベートサブネットにあるEC2へのアクセス方法を整理してみた」というビデオセッションを公開しました #devio2021 | DevelopersIO
sshコマンドで接続する方法
PowerShellで、以下コマンドを実行することでteratermと同じようにアクセスできた。
> ssh ec2-user@[パブリックIP] -i [秘密鍵ファイル(.pem)のパス]
# 例)
# ssh ec2-user@18.111.111.111 -i C:\Users\user\Documents\AWS\rsa.pem
参考資料:sshコマンドが無い場合:PowerShellでSSHクライアントを使う(Windows 10ネイティブ版) | デジカシ
- VSCodeの「ターミナル」
- Windowsターミナル
からも同様に実行可能。
おわりに
今回はEC2インスタンスを準備し、起動した上で、SSHアクセスを行なった。
関連記事
EC2へのアクセス時にポートフォワーディングを設定する
ローカルPCのlocalhostからEC2のlocalhostにアクセスできるようにする方法。
EC2でdockerを立ち上げてみた
dockerを立ち上げてみた内容。 EC2の上でdockerを立ち上げてみたメモ。(通常、あまりやらない構成かも)