yuuki blog

プログラミング をアプトプットしています。

AWS (EC2の初期設定)

AWS内の環境構築

https://tech-master.s3.amazonaws.com/uploads/curriculums//dc161c37ef5514ae9f05ba33c482b5eb.png

ここで行う設定は、AWSのアカウントを作成した際の一度きりの作業となります。なので、今後別のサービスをデプロイさせるために同じ作業を行う必要はありません。 

 リージョンを確認しましょう

まずは【こちら】からAWSアカウントにログインします。

リージョンが東京となっていない場合は、ユーザー名をクリックした後に表示されるメニューから「アジアパシフィック(東京)ap-northeast-1」を選択しましょう。

ページを更新した際に、「東京」と表示されていれば、正しく設定できています。

 あるリージョンで作成したEC2や他の設定は、他のリージョンでは表示されないので注意しましょう。

https://tech-master.s3.amazonaws.com/uploads/curriculums//384f45342cc62daccd66e25a30b50faf.png

続いて、「EC2インスタンス」を作成します

 EC2インスタンス

AWSで「仮想マシン」と呼ばれるものです。「サーバーを生成する」といっても、AWSがすべてのサーバーを物理的に用意しているわけではなく、実際には「仮想マシン」と呼ばれるソフトウェアを利用して、仮想的に1つのLinuxサーバーを利用できる仕組みを利用します。

EC2インスタンスを作成しよう

それでは実際に作成しましょう。

EC2インスタンス作成の作業が2回目以降の方は、費用が発生する場合があります。こちらのカリキュラムを確認してください。

 EC2インスタンスを作成しましょう

トップページに遷移したら、左上の「サービス」から「EC2」を選択しましょう。

https://tech-master.s3.amazonaws.com/uploads/curriculums//5fc51c76bf4358ce6dacb6cadcff7fb2.png

以下の画像のようにオレンジ色の「インスタンスを起動」をクリックします。クリック後、プルダウンで「インスタンスを起動」と表示されるので、クリックしましょう。

https://tech-master.s3.amazonaws.com/uploads/curriculums//443cabc3ee1785f0e9ee623163a46759.png

次に、「AMI」というものを選択します。

 AMI

AMIとは、「Amazon Machine Image」の略語で、サーバーのデータをまるごと保存したデータのことです。この中には「OS」などが事前にインストールされているものもあるので、自分でゼロから様々なツールをインストールする手間を削減できます。

AMIを選択しましょう

今回は「 Amazon Linux AMI 2 」という、AWSが独自にカスタマイズしたAMIを利用しましょう。

 「 Amazon Linux AMI 」ではなく、「 Amazon Linux 2 AMI 」を選択してください。

https://tech-master.s3.amazonaws.com/uploads/curriculums//30f83f978c1f6e977eb746ea21075740.png

次に、「EC2インスタンスのタイプ」を選択します。
EC2ではさまざまなインスタンスタイプが用意されており、CPUやメモリなどのスペックを柔軟に指定することができます。

インスタンスタイプを選択しましょう

今回は、無料枠で利用できる「t2.micro」を選択して、「確認と作成」をクリックしましょう。

https://tech-master.s3.amazonaws.com/uploads/curriculums//3a54db3b685e18ecd06ae992f3509df8.png

次の画面では、「起動」をクリックします。

https://tech-master.s3.amazonaws.com/uploads/curriculums//52960e34ce145b06fc3828bed40d6ae3.png

次に、「キーペア」というものをダウンロードします。

 キーペア

インスタンスへログインする際に必要となる「秘密鍵」のことです。
これがないとEC2インスタンスにログインできないので、必ずダウンロードしてPCに保存しておきましょう。また、間違って他人に渡さないよう気をつけてください。

キーペア名を決めて、ダウンロードしましょう

「新しいキーペアの作成」を選択して、キーペア名を入力しましょう。キーペアの名前はご自身で決めて大丈夫です。

キーペアの名前にスペースを含まないようにしましょう。この後の作業でエラーが発生する可能性があります。

キーペアのダウンロードが完了すると、クリック出来ない状態になっていた「インスタンスの作成」がクリックできるように変更されます。そちらをクリックして、EC2インスタンスを作成しましょう。

https://tech-master.s3.amazonaws.com/uploads/curriculums//4afc0f7aa42cd4fec12c981a058b1253.png

すると以下のような完了画面に遷移します。「インスタンスの表示」をクリックしましょう。

https://tech-master.s3.amazonaws.com/uploads/curriculums//8038dd376083bcc9505e6bfa8dfa321c.png

インスタンス作成の確認をしましょう

インスタンス一覧画面」に戻るので、「インスタンスID」列の一番上をクリックしましょう。

https://tech-master.s3.amazonaws.com/uploads/curriculums//3ae8bd91190a7574d4939d99bcb89433.png

以下の画面にインスタンスの概要が表示されています。作成した「インスタンスID」をコピーしてメモアプリなどに控えておきましょう。

https://tech-master.s3.amazonaws.com/uploads/curriculums//af3696aaf134b918eb95c0052bce0d8b.png

サーバーを起動させる準備をしよう

さきほど作成した「EC2インスタンス」には、作成時にIPアドレスが自動で割り振られています。これを「パブリックIP」と言います。しかし、サーバーを再起動させるたびにこのパブリックIPが変わってしまうという欠点を持っています。IPが変わってしまうということは、設定ファイル等をその都度書き換えなければいけません。これを解決してくれるのが「Elastic IP」です。

 Elastic IP

AWSから割り振られた固定の「パブリックIPアドレス」のことを言います。このパブリックIPアドレスをEC2インスタンスに紐付けることで、インスタンスの起動・停止にかかわらず常に同じIPアドレスで通信をすることが可能になります。

それでは実際に「Elastic IPの作成・紐付け」を行いましょう。

 Elastic IPの作成をしましょう

まずはElastic IPを取得するために、左側の選択欄から「Elastic IP」をクリックしましょう。画面の表示が変わったらオレンジで表示されている「Elastic IP アドレスの割り当て」をクリックします。

https://tech-master.s3.amazonaws.com/uploads/curriculums//e40caa6122476bda64d8629ca5b1043f.png

画面が遷移したら、「AmazonIPv4 アドレスプール」にチェックが入ってることを確認しましょう。確認後、「割り当て」をクリックします。

https://tech-master.s3.amazonaws.com/uploads/curriculums//9c4dae956487dc485d54d519b8318e1d.png

Elastic IPの紐付けをしましょう

「取得したElastic IPアドレス」と「EC2インスタンス」を紐付けましょう。まずは、右上にある「アクション」をクリックします。表示されたプルダウンから「Elastic IP アドレスの関連付け」を選択しましょう。

https://tech-master.s3.amazonaws.com/uploads/curriculums//f26e1e6e20c7519cbdfb78ae5aa3d177.png

画面が遷移したら、インスタンスにチェックが入っていることを確認しましょう。次に、そのしたにあるインスタンスの入力欄をクリックすると、メモしたインスタンスIDが表示されます。表示されたインスタンスIDを選択しましょう。その下の入力欄は、空欄で大丈夫です。最後に「関連付ける」をクリックしましょう。

https://tech-master.s3.amazonaws.com/uploads/curriculums//61b09fe5bb42174b59a5bfee78d51466.png

Elastic IPが設定されているか確認しましょう

再びインスタンス一覧画面に戻り、作成したインスタンスの「Elastic IP」が設定されていることを確認しましょう。
以降、このIPアドレスはあなたの所有物のようになり、意図的にAWSに返却しない限り、変更されることはありません。

https://tech-master.s3.amazonaws.com/uploads/curriculums//fd1cd172d6338badfbd7db1c7383c130.png

EC2インスタンスの設定を変えよう

立ち上げたばかりのEC2インスタンスは「ssh」でアクセスすることはできますが、HTTPなどの他の接続は一切つながらないようになっています。そのため、サーバーとして利用するEC2インスタンスは事前にHTTPがつながるように「ポート」を開放する必要があります。

 ssh

ssh」は、離れた場所にあるサーバーの中で作業を行いたい場合に利用します。暗号や認証の技術を利用して、安全にリモートサーバーと通信できます。

 ポート

「ポート」とは、1つのサーバーとクライアントを繋ぐ仕組みです。ポートにはそれぞれ番号が割り振られており、リクエスト側はポート番号を指定すれば該当する番号のポートに接続されます。
ポート番号には「0〜65535」までを使うことができます。しかし、「0〜1023」までの番号はよく使われるもので基本的なインターネット接続などのポートとして予約されており、自由に使うことはできません。

このポートの設定をするためには、「セキュリティグループ」という設定を変更する必要があります。

 セキュリティグループ

「セキュリティグループ」とは、EC2インスタンスが属するまとまりのようなもので、複数のEC2インスタンスのネットワーク設定を一括で行うためのものです。

それでは実際にポートを設定しましょう。

 セキュリティグループのポートを設定しましょう

以下の手順で、セキュリティグループのポートを設定しましょう。

まず、インスタンスの概要画面下部にある、「セキュリティ」のタブをクリックします。表示が変わったらセキュリティグループの下にある文字列をクリックしましょう。図中では「launch-wizard-1」と文字列の最後にあります。2回目以降のセキュリティグループの設定では、「launch-wizard-2」となり設定ごとに数字が増えていきます。

https://tech-master.s3.amazonaws.com/uploads/curriculums//729017cab0962956ea93915b0a963ce2.png

すると、インスタンスの属するセキュリティグループの設定画面に遷移します。

次に、「インバウンドルール」をクリックし、右上の「インバウンドのルールの編集」をクリックします。

 「アウトバウンド」と間違えないように注意しましょう。

https://tech-master.s3.amazonaws.com/uploads/curriculums//e8a0abc0c97113e0ad29523ad74aa0b8.png

ページが切り替わるので、「ルールの追加」をクリックし、画像の①~⑦の手順通りに設定しましょう。

ルールの詳細は以下です。

タイプ プロトコル ポート範囲 送信元
HTTP TCP 80 カスタム/0.0.0.0/0
HTTP TCP 80 カスタム::/0

「0.0.0.0」や「::/0」は「すべてのアクセスを許可する」という意味です。

https://tech-master.s3.amazonaws.com/uploads/curriculums//d30a58ac9974eb48fe41d6246a6ee643.png

 既にある「sshの設定」がなくならないように注意しましょう。

最後に、右下の「ルールを保存」を押します。
以上で、ポートの開放が完了です。

EC2インスタンスへログインしよう

EC2インスタンスを作成すると、「ec2-user」というユーザーと対応するssh秘密鍵が生成されました。本来はこのec2-userではなく、サービスを稼働させるためにより権限を小さくしたユーザーを作成して運用しますが、ここでは簡易化のためにこの「ec2-user」を使って作業を進めていきます。

それでは「ec2-user」を使ってログインしましょう。

 EC2インスタンスへログインしましょう

ターミナル(ローカル)
1
% cd ~
ターミナル(ローカル)
1
2
3
4
% mkdir ~/.ssh

# .sshというディレクトリを作成
# File existsとエラーが表示されたとしても、.sshディレクトリは存在しているのということなので、そのまま進みましょう。
ターミナル(ローカル)
1
2
3
4
% mv Downloads/ダウンロードした鍵の名前.pem .ssh/

# mvコマンドで、ダウンロードしたpemファイルを、ダウンロードディレクトリから、.sshディレクトリに移動します。
# 「ダウンロードした鍵の名前」の部分は、Finderでダウンロードフォルダから「〜.pem」というファイルを探し、「〜」の部分の名前に置き換えてください。
ターミナル(ローカル)
1
% cd .ssh/
ターミナル(ローカル)
1
2
3
% ls

# pemファイルが存在するか確認しましょう
ターミナル(ローカル)
1
2
3
% chmod 600 ダウンロードした鍵の名前.pem

# 「ダウンロードした鍵の名前」はFinderのダウンロードフォルダから探しましょう(見つからない場合は他のフォルダを探しましょう)
ターミナル(ローカル)
1
2
3
% ssh -i ダウンロードした鍵の名前.pem ec2-user@作成したEC2インスタンスと紐付けたElastic IP

# 「作成したEC2インスタンスと紐付けたElastic IP」は以下の画像を参照し、ご自身のものに編集しましょう

https://tech-master.s3.amazonaws.com/uploads/curriculums//463e24e452693541c68f7db580828c61.png

ssh接続(以下のコマンド)を実行すると以下の様なメッセージが表示されることがありますが、「yes」と入力し、実行してください。

ターミナル(ローカル)
1
2
3
4
5
6
% ssh -i aws_key.pem ec2-user@52.68.~~~~~~
The authenticity of host '52.68.~~~~~~ (52.68.~~~~~~)' can't be established.
RSA key fingerprint is eb:7a:bd:e6:aa:da:~~~~~~~~~~~~~~~~~~~~~~~~.
Are you sure you want to continue connecting (yes/no)? 

(ここで「yes」を入力し、実行する)

ターミナルのコマンド待ちの際の左側の表示が、以下の画像のようになればログイン成功です。

ssh接続

ssh接続は、一定時間操作をせずにいるとタイムアウトしてしまいます。その場合は、「ssh -i 〜」のコマンドを再度実行することでサーバーに接続できます。
 「ssh -i 〜」のコマンドは頻繁に使うので、メモアプリなどに控えておきましょう。

必要なツールのインストール

ここからは、EC2インスタンスの環境構築をするためにさまざまなツールをインストールします。それでは順に進めていきましょう。

設定に必要なツールをインストールしよう

まずはyumコマンドというコマンドを使ってこのサーバに元々あるプログラムをアップデートします。こうしたプログラムをパッケージと呼びます。

 yumコマンド

yumコマンド」とは、Linuxにおけるソフトウェア管理の仕組みです。MacOSにとってのhomebrewと同じ役割を果たします。yumコマンドを利用することで、yumの管理下にあるプログラムのバージョンを管理したり、一括でアップデートしたりできます。

 パッケージ

「パッケージ」とは、LinuxOS下におけるある役割/機能をもったプログラムの集合のことです。「ソフトウェア」や「ライブラリ」とも呼べます。
あくまでもLinuxOSでは「ある役割/機能をもったプログラムの集合のことをパッケージと呼ぶよ」ということです。

 パッケージをアップデートしましょう

ターミナルで以下のコマンドを実行しましょう。

ターミナル(EC2内で実行)
1
[ec2-user@ip-172-31-25-189 ~]$ sudo yum -y update

次に、その他環境構築に必要なパッケージを諸々インストールします。

ターミナル(EC2内で実行)
1
[ec2-user@ip-172-31-25-189 ~]$ 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
非常に長いコマンドなので、右端まで漏れなく確認した上で実行しましょう。

 -yオプション

「-yオプション」とは、yumコマンドのオプションです。yum install などのコマンドでは、本当にインストールして良いのか [y/n](「Yes or No」の意味)が問われます。
この場合、「Y(Yesのイニシャル)」を入力し、Enterキーを押して実行すればインストールされます。しかし、誤ってYキー以外を押してしまう場合もあります。 ここでは確実にインストールするために、あらかじめオプションで「-y」を設定する事で「すべての問いにYesで自動的に答える」という設定してコマンドを実行しています。

もし誤ってオプションを忘れてしまうと下記のような問いが発生しますので、「Y」を入力し、Enterキーを押してインストールを完了してください。

ターミナル(EC2内で実行)
1
2
総ダウンロード容量: 120 M
Is this ok [y/d/N]: 

無事に入力画面に戻れば、インストール完了です。

EC2上でJavaScriptを動かすための準備をしよう

続いて、EC2上でJavaScriptを動かすためにNode.jsというものをインストールします。

 Node.js

「Node.js」とは、サーバーサイドで動くJavaScriptのパッケージのことです。今後のデプロイに向けた作業の中で、CSSや画像を圧縮する際に活用されます。

 EC2にNode.jsをインストールしましょう

ターミナルで以下のコマンドを実行します。

ターミナル(EC2内で実行)
1
2
[ec2-user@ip-172-31-25-189 ~]$ sudo curl -sL https://rpm.nodesource.com/setup_10.x | sudo bash -
[ec2-user@ip-172-31-25-189 ~]$ sudo yum -y install nodejs
 こちらも確認画面が出てきた場合は「Y」を入力し、Enterキーを押してインストールを完了して下さい。

「Node.js」のインストールは以上です。

Railsのバージョンが6.0以降のアプリケーションを動かすための準備をしよう

Railsのバージョンが6.0以降のアプリケーションを動かすために、Yarnをインストールします。

 Yarn

「Yarn」とは、Railsに搭載されているJavaScriptのパッケージを管理するためのパッケージマネージャーです。

 EC2にYarnのインストールをしましょう

ターミナルで以下のコマンドを実行してインストールします。
それでは順に実行しましょう。

ターミナル(EC2内で実行)
1
2
3
[ec2-user@ip-172-31-25-189 ~]$ sudo yum -y install wget
[ec2-user@ip-172-31-25-189 ~]$ sudo wget https://dl.yarnpkg.com/rpm/yarn.repo -O /etc/yum.repos.d/yarn.repo
[ec2-user@ip-172-31-25-189 ~]$ sudo yum -y install yarn

「Yarn」のインストールは以上です。

rbenvとruby-buildをインストールしよう

続いては、「rbenv」と「ruby-build」をインストールします。
これらはRubyをインストールする前に、インストールする必要があり、Rubyのバージョンを管理する際に組み合わせて使うツールになります。

 EC2にrbenvとruby-buildをインストールしましょう

ターミナルで以下のコマンドを実行してインストールします。
それでは順に実行しましょう。

ターミナル(EC2内で実行)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
# ①rbenvのインストール
[ec2-user@ip-172-31-25-189 ~]$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv 

# ②パスを通す
[ec2-user@ip-172-31-25-189 ~]$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile 

# ③rbenvを呼び出すための記述
[ec2-user@ip-172-31-25-189 ~]$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile

# ④.bash_profileの読み込み
[ec2-user@ip-172-31-25-189 ~]$ source .bash_profile

# ⑤ruby-buildのインストール
[ec2-user@ip-172-31-25-189 ~]$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build

# ⑥rehashを行う
[ec2-user@ip-172-31-25-189 ~]$ rbenv rehash  

各コマンドの役割を一つずつ見ていきましょう。

コマンド 役割
gitから「rbenv」をクローンします。
②&③ パスを通す際に必要なコマンドです。パスを通すとは、「どのディレクトリからもアプリケーションを呼び出せる状態にする」ということです。
設定したパスを読み込みます。
gitから「ruby-build」をクローンします。
使用しているRubyのバージョンにおいて、gemのコマンドを使えるようにするために必要なコマンドです。

「rbenv」と「ruby-build」のインストールは以上です。

Rubyをインストールしよう

最後は「Ruby」をインストールします。
以下で実行するコマンド群は、「インストールするRubyのバージョン」「自身のアプリケーションで使っているRubyのバージョン」によって適宜変更してください。

ここでは「2.6.5」をインストールしていきます。

 EC2にRubyをインストールしましょう

それでは順に実行しましょう。

ターミナル(EC2内で実行)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# Ruby 2.6.5のバージョンをインストール
[ec2-user@ip-172-31-25-189 ~]$ rbenv install 2.6.5

# EC2インスタンス内で使用するRubyのバージョンを決める
[ec2-user@ip-172-31-25-189 ~]$ rbenv global 2.6.5

# rehashを行う
[ec2-user@ip-172-31-25-189 ~]$ rbenv rehash  

# Rubyのバージョンを確認
[ec2-user@ip-172-31-25-189 ~]$ ruby -v 
 1つ目のコマンドで、Rubyのインストールには時間がかかります。ターミナルに「Installing ruby-2.6.5...」といった表示が出たまま止まって見えますが、そのまま待ちましょう。

Ruby」のインストールは以上です。