EC2インスタンスを理解し、初期設定をするところまでを紹介します!(学習記録)
EC2インスタンスとは
EC2インスタンスとはAWSで「仮想マシン」と呼ばれるものです。「サーバーを生成する」といっても、AWSがすべてのサーバーを物理的に用意しているわけではなく、実際には「仮想マシン」と呼ばれるソフトウェアを利用して、仮想的に1つのLinuxサーバーを利用できる仕組みを利用します。
1: EC2インスタンスを作成(Rails仕様)
1.AWSのトップページに移り、画面左上のサービスという欄からEC2を選択しインスタンスを起動をクリック!
2.次にAMIを選択します。無料枠で利用できるAmazon Linux 2 AMIを利用します!
AMIとは、「Amazon Machine Image」の略語で、サーバーのデータをまるごと保存したデータのことです。この中には「OS」などが事前にインストールされているものもあるので、自分でゼロから様々なツールをインストールする手間を削減できます。
3.EC2インスタンスのタイプを選択します。無料枠で利用できる t2.micro を選択します!
EC2ではさまざまなインスタンスタイプが用意されており、CPUやメモリなどのスペックを柔軟に指定することができます。選択できたら、確認と作成をクリック!次の画面で起動をクリック!
4.キーペアをダウンロード
新しいキーペアを選択して、キーペアをダウンロードをクリック!その後にインスタンスを作成をクリックします!その後インスタンス一覧画面に移動し、作成したインスタンスがあることを確認してみてください!
その後、そのインスタンスをクリックし、インスタンスIDをコピーしましょう!
キーペアとはインスタンスへログインする際に必要となる「秘密鍵」のことです。
これがないとEC2インスタンスにログインできないので、必ずダウンロードしてPCに保存しておきましょう。また、間違って他人に渡さないよう気をつけてください。
5.サーバーを起動させる準備
さきほど作成した「EC2インスタンス」には、作成時にIPアドレスが自動で割り振られています。これを「パブリックIP」と言います。しかし、サーバーを再起動させるたびにこのパブリックIPが変わってしまうという欠点を持っています。IPが変わってしまうということは、設定ファイル等をその都度書き換えなければいけません。これを解決してくれるのが「Elastic IP」です。
・Elastic Ip
AWSから割り振られた固定の「パブリックIPアドレス」のことを言います。このパブリックIPアドレスをEC2インスタンスに紐付けることで、インスタンスの起動・停止にかかわらず常に同じIPアドレスで通信をすることが可能になります。
サイドバーにあるElastic IPという項目をクリック!そして、Elastic IPアドレスの割り当てをクリックします!画面が遷移したら、「Amazon の IPv4 アドレスプール」にチェックが入ってることを確認しましょう。確認後、「割り当て」をクリックします。
.Elastic IPの紐付け
「取得したElastic IPアドレス」と「EC2インスタンス」を紐付けましょう。まずは、右上にある「アクション」をクリックします。表示されたプルダウンから「Elastic IP アドレスの関連付け」を選択しましょう。
アクションという項目をクリックし、Elastic IPアドレスの関連付けをクリックしましょう!
画面が遷移したら、インスタンスにチェックが入っていることを確認しましょう。次に、そのしたにあるインスタンスの入力欄をクリックすると、メモしたインスタンスIDが表示されます。表示されたインスタンスIDを選択しましょう。その下の入力欄は、空欄で大丈夫です。最後に「関連付ける」をクリックしましょう。
・Elastic IPが設定されているか確認
再びインスタンス一覧画面に戻り、作成したインスタンスの「Elastic IP」が設定されていることを確認しましょう。
以降、このIPアドレスはあなたの所有物のようになり、意図的にAWSに返却しない限り、変更されることはありません。
EC2インスタンスの設定を変更
立ち上げたばかりのEC2インスタンスは「ssh」でアクセスすることはできますが、HTTPなどの他の接続は一切つながらないようになっています。そのため、サーバーとして利用するEC2インスタンスは事前にHTTPがつながるように「ポート」を開放する必要があります。
・ssh
「ssh」は、離れた場所にあるサーバーの中で作業を行いたい場合に利用します。暗号や認証の技術を利用して、安全にリモートサーバーと通信できます。
・ポート
「ポート」とは、1つのサーバーとクライアントを繋ぐ仕組みです。ポートにはそれぞれ番号が割り振られており、リクエスト側はポート番号を指定すれば該当する番号のポートに接続されます。
ポート番号には「0〜65535」までを使うことができます。しかし、「0〜1023」までの番号はよく使われるもので基本的なインターネット接続などのポートとして予約されており、自由に使うことはできません。
このポートの設定をするためには、「セキュリティグループ」という設定を変更する必要があります。
.セキュリティグループ
「セキュリティグループ」とは、EC2インスタンスが属するまとまりのようなもので、複数のEC2インスタンスのネットワーク設定を一括で行うためのものです。
・実際にセキュリティグループのポートを設定
まず、インスタンスの概要画面下部にある、「セキュリティ」のタブをクリックします。表示が変わったらセキュリティグループの下にある文字列をクリックしましょう!
すると、インスタンスの属するセキュリティグループの設定画面に遷移します。
次に、「インバウンドルール」をクリックし、右上の「インバウンドのルールの編集」をクリックします。
ルールを追加します!例えば タイプ:HTTP、プロトコル:TCP,ポート範囲:80,送信元:カスタム/0.0.0.0/0などがあります!
追加したらルールを保存をクリック!以上で、ポートの開放が完了です!
EC2インスタンスへログイン
EC2インスタンスを作成すると、「ec2-user」というユーザーと対応するssh秘密鍵が生成されました。本来はこのec2-userではなく、サービスを稼働させるためにより権限を小さくしたユーザーを作成して運用しますが、ここでは簡易化のためにこの「ec2-user」を使って作業を進めていきます!
それでは「ec2-user」を使ってログインしましょう!
# ターミナル(ローカル)
% cd ~
# .sshというディレクトリを作成
# File existsとエラーが表示されたとしても、.sshディレクトリは存在しているのということなので、そのまま進みましょう。
% mkdir ~/.ssh
# mvコマンドで、ダウンロードしたpemファイルを、ダウンロードディレクトリから、.sshディレクトリに移動します。
# 「ダウンロードした鍵の名前」の部分は、Finderでダウンロードフォルダから「〜.pem」というファイルを探し、「〜」の部分の名前に置き換えてください。
% mv Downloads/ダウンロードした鍵の名前.pem .ssh/
# sshディレクトリに移動
% cd .ssh/
# pemファイルが存在するか確認しましょう
% ls
# 「ダウンロードした鍵の名前」はFinderのダウンロードフォルダから探しましょう(見つからない場合は他のフォルダを探しましょう)
% chmod 600 ダウンロードした鍵の名前.pem
# 「作成したEC2インスタンスと紐付けたElastic IP」は、ご自身のものに編集しましょう
# サイドバーから、インスタンスという項目をクリックし、下部にある説明のなかのElastic IP をコピー
% ssh -i ダウンロードした鍵の名前.pem ec2-user@作成したEC2インスタンスと紐付けたElastic IP
必要なツールをインストール
・まずはyumコマンドというコマンドを使ってこのサーバに元々あるプログラムをアップデートします。こうしたプログラムをパッケージと呼びます。
・yumコマンドとは
「yumコマンド」とは、Linuxにおけるソフトウェア管理の仕組みです。MacOSにとってのhomebrewと同じ役割を果たします。yumコマンドを利用することで、yumの管理下にあるプログラムのバージョンを管理したり、一括でアップデートしたりできます。
・パッケージとは
「パッケージ」とは、LinuxOS下におけるある役割/機能をもったプログラムの集合のことです。「ソフトウェア」や「ライブラリ」とも呼べます。
あくまでもLinuxOSでは「ある役割/機能をもったプログラムの集合のことをパッケージと呼ぶよ」ということです。
パッケージをアップデート
# ターミナル(EC2で実行)
[ec2-user@<自身のElastic IP> ~]$ sudo yum -y update
# 次に、その他環境構築に必要なパッケージを諸々インストールします
[ec2-user@<自身のElastic IP> ~]$ sudo yum -y install git make gcc-c++ patch libyaml-devel libffi-devel libicu-devel zlib-devel readline-devel libxml2-devel libxslt-devel ImageMagick ImageMagick-devel openssl-devel libcurl libcurl-devel curl
EC2でJavaScriptを動かすための準備
・Node.js
「Node.js」とは、サーバーサイドで動くJavaScriptのパッケージのことです。今後のデプロイに向けた作業の中で、CSSや画像を圧縮する際に活用されます。
EC2にNode.jsをインストール
[ec2-user@<自身のElastic IP> ~]$ sudo curl -sL https://rpm.nodesource.com/setup_10.x | sudo bash -
[ec2-user@<自身のElastic IP> ~]$ sudo yum -y install nodejs
これで、「Node.js」のインストールは以上です。
・Yarn
「Yarn」とは、Railsに搭載されているJavaScriptのパッケージを管理するためのパッケージマネージャーです。
EC2にYarnをインストール
[ec2-user@<自身のElastic IP> ~]$ sudo yum -y install wget
[ec2-user@<自身のElastic IP> ~]$ sudo wget https://dl.yarnpkg.com/rpm/yarn.repo -O /etc/yum.repos.d/yarn.repo
[ec2-user@<自身のElastic IP> ~]$ sudo yum -y install yarn
これで、「Yarn」のインストールは以上です。
EC2にrbenvとruby-buildをインストールします!
# ①rbenvのインストール
[ec2-user@<自身のElastic IP> ~]$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
# ②パスを通す
[ec2-user@<自身のElastic IP> ~]$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
# ③rbenvを呼び出すための記述
[ec2-user@<自身のElastic IP> ~]$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
# ④.bash_profileの読み込み
[ec2-user@<自身のElastic IP> ~]$ source .bash_profile
# ⑤ruby-buildのインストール
[ec2-user@<自身のElastic IP> ~]$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
# ⑥rehashを行う
[ec2-user@<自身のElastic IP> ~]$ rbenv rehash
最後にEC2にRubyをインストール
ここでは「2.6.5」をインストールしていきます。
# Ruby 2.6.5のバージョンをインストール
[ec2-user@<自身のElastic IP> ~]$ rbenv install 2.6.5
# EC2インスタンス内で使用するRubyのバージョンを決める
[ec2-user@<自身のElastic IP> ~]$ rbenv global 2.6.5
# rehashを行う
[ec2-user@<自身のElastic IP> ~]$ rbenv rehash
# Rubyのバージョンを確認
[ec2-user@<自身のElastic IP> ~]$ ruby -v
以上がEC2の初期設定(Rails仕様)になります!参考までにどうぞ!