みなさん、AWSしてますか?
前回の記事でアウトプットをしていくと宣言したので、今回は第1回目。テーマは「EC2を作ってSSH接続してみよう」です。めちゃくちゃ簡単ですが、甘く見ると痛い目に遭います(経験済み)。
今回やりたいこと、ゴール
前提知識
EC2(Elastic Compute Cloud)
AWSが提供する仮想サーバ。サーバの起動時間によって課金される従量課金制。
※サーバについては下記参照
https://wa3.i-3-i.info/word144.html
SSH(Secure SHell)
暗号化などをし安全にリモートコンピュータ(ここではEC2)に接続するための方法。
EC2作成
0.マネジメントコンソールログイン等
AWSマネジメントコンソールにログイン後、サービスからEC2を選択。EC2ダッシュボードから「インスタンスを起動」を選択し、「インスタンスを起動」をクリック。
1.AMIの選択
インスタンスを起動する際、OSの種類などが選べる。ここでは無料利用枠の「Amazon Linux 2」を選択。
※AMI: Amazon Machine Image
2.インスタンスタイプの選択
サーバのスペックを選択できる。vCPUやメモリが高いものを選べば性能は良くなるが当然時間当たりの単価は高くなる。ちなみに「ファミリー」には色々種類があり、やりたいこと・要件に応じて変えていく必要がある。今回は無料利用枠の「t2.micro」を利用。ファミリーやvCPU、メモリによってmicroやlargeなどの名前がつきます。
- ファミリーのアルファベット部分
汎用(m):その名の通り汎用的な用途に使用。困ったらこれ。
バーストパフォーマンス(t):通常は負荷が高くなることはないが、一時的に負荷が高くなるような用途に使用
コンピューティング最適化(c):CPU性能が必要な用途に使用。
メモリ最適化(rなど):高性能なメモリが必要な用途に使用。
ストレージ最適化(iなど):高いIOPSが求められる用途に使用。
高速コンピューティング(gなど):GPUなどで高速処理が必要な用途に使用。 - ファミリーの数字部分
一言で言えば数字が大きいほど最新のハードウェアを利用している。特に理由もなければ一番大きい数字を選んでいいと思う。
3.インスタンスの設定
色々設定項目はあるが、気にしなくてはいけないのは「ネットワーク」「サブネット」「自動割り当てパブリックIP」だけ。
ネットワーク:通信を行いたいVPCを選択。デフォルトVPCが選択されているが、新しくVPCを作ることをお勧めします。ここでは新しくVPCを作成しております。
サブネット:VPCに紐づいてサブネットも作成が必要。こちらもVPCに合わせて新しく作ることをお勧めします。こちらもVPCに合わせてサブネットを新しく作成しています。
自動割り当てパブリックIP:グローバル(パブリック)IPアドレスを付与するかどうかの選択。SSH接続するにはグローバル(パブリック)IPアドレスが必要になるので「有効」を選択。
※厳密に言えば無効にしても後からElastic IPを使うことでグローバル(パブリック)IPアドレスを付与できるが、手順が追加になりIPアドレスの管理も必要なので今回のケースではこの段階でグローバル(パブリック)IPアドレスを割り当てた方が良い。
4.ストレージの追加
ここで言うストレージとは自宅等で使うPCのHDDやSSDに該当するもの。今回はファイルを保存したりすることはしないためこのままで。
5.タグの追加
個人で使う分には特に不要かと思いますが、会社とかでは何用のサーバなのかが分かるようにタグをつけます。今回はそのままで。
6.セキュリティグループの設定
EC2作成段階では一番重要な設定項目。この設定が不十分だと第三者にサーバログインされて悪いこと(曖昧)されます。セキュリティグループは簡単に言えばアクセス制限。サーバに接続しようとするユーザをIPアドレス・プロトコルで許可することができる。(セキュリティグループで拒否はできません)
今回SSH接続用に新規のセキュリティグループを作るため、「新しいセキュリティグループを作成する」を選び、任意のセキュリティグループ名を入力します。
タイプには接続を許可するプロトコルを選びます。今回はSSH接続をするだけなのでSSHだけを選びます。また、ソースにはSSH接続を許可するIPアドレスやIPアドレス範囲を指定できます。マイIPを選ぶことで今ブラウザにアクセスしているIPアドレスが自動で入力されます。
7.確認
ここまで設定が完了したら右下の「起動」を押していよいよサーバを立ち上げます。
その際、キーペアというものを作成する必要があります。キーペアとはいわゆる証明書のようなもので、これがないとEC2に接続ができません。私は既存のキーペアがあるのでそれを使います。
インスタンスを作成を押すと下のような画面が出てきます。完全に立ち上がるまで数分かかるのでその後「インスタンスの表示」を押してみましょう。
SSH接続
そしていよいよSSH接続です。現在の構成イメージは下記のようになります。
(この構成のままだとSSH接続ができないのですが、原因は2つほどあります。AWS経験者は是非その理由を考えてみてください。)
作成したEC2インスタンスにチェックを入れ、「アクション」から接続を押します。
すると下図のような画面が出るので手順にしたがって接続します。SSHクライアントとは、Macであれば標準で搭載されているターミナル、WindowsであればTeraTerm(要インストール)などのことです。
では例に記載がある通りコマンドを叩いてみましょう。
タイムアウトしましたね。接続失敗しましたね。何故でしょうか。もう一度先程の構成図を見て見ましょう。
さて、このEC2はどうやってインターネットに繋がっているのでしょうか。この状態は(パブリックIPアドレスはあるものの)インターネットから切り離されている状態です。このEC2に接続するためにはインターネットへの抜け道を用意する必要があります。その抜け道というのが次に紹介するインターネットゲートウェイ(IGW)です。
インターネットゲートウェイ(IGW)設定
IGWはVPCの項目から作成できます。
サービスからVPCを選択すると、左側に「インターネットゲートウェイ」の項目があるのでそれを選択します。
その後、右上の「インターネットゲートウェイの作成」から作成していきます。
名前をつけるだけで作成できます。そして、IGWは作ったら終わりではなく、IGWを先程作ったVPCに紐付ける必要があります。
アクションから「VPCにアタッチ」を選択します。
プルダウンから使用可能なVPCを選択し、アタッチしていきます。
よし!これでいけるはず!再トライです!
あれれーおかしいぞー。またもやタイムアウトです。インターネットへの抜け道は用意したのに。。。
さて、IGWは用意しましたが、EC2とIGWは繋がっていません。そのためEC2とIGWを繋げる線が必要になります。その線というのが、ルートテーブルです。
ルートテーブルの作成
ルートテーブルはVPCの項目から作成できます。左側のメニューからルートテーブルを選択し、「ルートテーブルの作成」を選びます。
こちらも名前を記載し、VPCを選び作成します。
作ったルートテーブルの編集をするため、アクションから「ルートの編集」を選びます。
ルートの追加を選んだ後、ターゲットのプルダウンからInternet Gatewayを選択します。すると、作成したIGWが出てくるのでそれを選択します。
送信先には「0.0.0.0/0」と入力します。(EC2からのトラフィックは全て外に流すという意味になります。)
その後、ルートの保存をします。
では3度目の正直!
無事接続できました。最後に今回の構成図を載せます。
作成したEC2は忘れないうちに終了しておきましょう。
P.S.
先日先輩に、「SysOpsアドミニストレーターとデベロッパー取れば?」と言われたのでまずはアソシエイト取ろうとしてます。ソリューションアーキテクトの知識で十分いけそうなので来月か再来月にでも受験しようと思います。