0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

AWSのサーバーを利用する

Posted at

#目的
開発したアプリケーションを、AWS上で全世界に公開する仕組み・方法を学ぶこと
* ここで行う設定は、AWSのアカウントを作成した際の一度きりの作業となります。なので、今後別のサービスをデプロイさせるために同じ作業を行う必要はありません。

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

トップページに遷移したら、左上の「サービス」から「EC2」を選択しましょう。
次に、オレンジ色の「インスタンスを起動」をクリックします。クリック後、プルダウンで「インスタンスを起動」と表示されるので、クリックします。

次に、「AMI」というものを選択します。
###AMI
AMIとは、「Amazon Machine Image」の略語で、サーバーのデータをまるごと保存したデータのことです。この中には「OS」などが事前にインストールされているものもあるので、自分でゼロから様々なツールをインストールする手間を削減できます。
今回は「 Amazon Linux AMI 2 」という、AWSが独自にカスタマイズしたAMIを利用しましょう。
次に、「EC2インスタンスのタイプ」を選択します。
EC2ではさまざまなインスタンスタイプが用意されており、CPUやメモリなどのスペックを柔軟に指定することができます。
今回は、無料枠で利用できる「t2.micro」を選択して、「確認と作成」をクリックしましょう。
次の画面では、「起動」をクリックします。
次に、「キーペア」というものをダウンロードします。

###キーペア
インスタンスへログインする際に必要となる「秘密鍵」のことです。
これがないとEC2インスタンスにログインできないので、必ずダウンロードしてPCに保存しておきましょう。また、間違って他人に渡さないよう気をつけてください。
「新しいキーペアの作成」を選択して、キーペア名を入力しましょう。キーペアの名前はご自身で決めて大丈夫です。
キーペアのダウンロードが完了すると、クリック出来ない状態になっていた「インスタンスの作成」がクリックできるように変更されます。そちらをクリックして、EC2インスタンスを作成しましょう。
すると以下のような完了画面に遷移します。「インスタンスの表示」をクリックしましょう。
スクリーンショット 2021-01-04 10.39.49.png

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

以下の画面にインスタンスの概要が表示されています。作成した「インスタンスID」をコピーしてメモアプリなどに控えておきましょう。
スクリーンショット 2021-01-04 10.41.38.png

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

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

画面が遷移したら、「Amazon の IPv4 アドレスプール」にチェックが入ってることを確認しましょう。確認後、「割り当て」をクリックします。
「取得したElastic IPアドレス」と「EC2インスタンス」を紐付けましょう。まずは、右上にある「アクション」をクリックします。表示されたプルダウンから「Elastic IP アドレスの関連付け」を選択しましょう。

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

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

#EC2インスタンスの設定を変える
立ち上げたばかりのEC2インスタンスは「ssh」でアクセスすることはできますが、HTTPなどの他の接続は一切つながらないようになっています。そのため、サーバーとして利用するEC2インスタンスは事前にHTTPがつながるように「ポート」を開放する必要があります。
「ssh」は、離れた場所にあるサーバーの中で作業を行いたい場合に利用します。暗号や認証の技術を利用して、安全にリモートサーバーと通信できます。
「ポート」とは、1つのサーバーとクライアントを繋ぐ仕組みです。ポートにはそれぞれ番号が割り振られており、リクエスト側はポート番号を指定すれば該当する番号のポートに接続されます。
ポート番号には「0〜65535」までを使うことができます。しかし、「0〜1023」までの番号はよく使われるもので基本的なインターネット接続などのポートとして予約されており、自由に使うことはできません。
このポートの設定をするためには、「セキュリティグループ」という設定を変更する必要があります。
「セキュリティグループ」とは、EC2インスタンスが属するまとまりのようなもので、複数のEC2インスタンスのネットワーク設定を一括で行うためのものです。
それでは実際にポートを設定しましょう。

まず、インスタンスの概要画面下部にある、「セキュリティ」のタブをクリックします。表示が変わったらセキュリティグループの下にある文字列をクリックしましょう。図中では「launch-wizard-1」と文字列の最後にあります。2回目以降のセキュリティグループの設定では、「launch-wizard-2」となり設定ごとに数字が増えていきます。
スクリーンショット 2021-01-04 10.57.33.png
すると、インスタンスの属するセキュリティグループの設定画面に遷移します。
次に、「インバウンドルール」をクリックし、右上の「インバウンドのルールの編集」をクリックします。

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

スクリーンショット 2021-01-04 11.00.12.png

「0.0.0.0」や「::/0」は「すべてのアクセスを許可する」という意味です。
以上で、ポートの開放が完了です。
#EC2インスタンスへログインしよう
EC2インスタンスを作成すると、「ec2-user」というユーザーと対応するssh秘密鍵が生成されました。本来はこのec2-userではなく、サービスを稼働させるためにより権限を小さくしたユーザーを作成して運用しますが、ここでは簡易化のためにこの「ec2-user」を使って作業を進めていきます。
それでは「ec2-user」を使ってログインしましょう。

% cd ~
% mkdir ~/.ssh

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

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

# pemファイルが存在するか確認しましょう
% chmod 600 ダウンロードした鍵の名前.pem

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

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

スクリーンショット 2021-01-04 11.26.02.png
ssh接続(以下のコマンド)
先ほどのコマンドを打ち以下のようなコマンドが出てきたらyesを打ちましょう。

% ssh -i ダウンロードした鍵の名前.pem ec2-user@作成したEC2インスタンスと紐付けたElastic IP
The authenticity of host '作成したEC2インスタンスと紐付けたElastic IP (作成したEC2インスタンスと紐付けたElastic IP)' 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」を入力し、実行する)

ターミナルのコマンド待ちの際の左側の表示が、以下の画像のようになればログイン成功です。
スクリーンショット 2021-01-04 11.31.38.png
ssh接続は、一定時間操作をせずにいるとタイムアウトしてしまいます。その場合は、「ssh -i 〜」のコマンドを再度実行することでサーバーに接続できます。
#設定に必要なツールをインストールしよう
まずはyumコマンドというコマンドを使ってこのサーバに元々あるプログラムをアップデートします。こうしたプログラムをパッケージと呼びます。
###yumコマンド
「yumコマンド」とは、Linuxにおけるソフトウェア管理の仕組みです。MacOSにとってのhomebrewと同じ役割を果たします。yumコマンドを利用することで、yumの管理下にあるプログラムのバージョンを管理したり、一括でアップデートしたりできます。
###パッケージ
「パッケージ」とは、LinuxOS下におけるある役割/機能をもったプログラムの集合のことです。「ソフトウェア」や「ライブラリ」とも呼べます。
あくまでもLinuxOSでは「ある役割/機能をもったプログラムの集合のことをパッケージと呼ぶよ」ということです。
ターミナル(EC2内で実行)

[ec2-user@ip-172-31-25-189 ~]$ sudo yum -y update

次に、その他環境構築に必要なパッケージを諸々インストールします。
ターミナル(EC2内で実行)

[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で自動的に答える」という設定してコマンドを実行しています。
無事に入力画面に戻れば、インストール完了です。

続いて、EC2上でJavaScriptを動かすためにNode.jsというものをインストールします。
「Node.js」とは、サーバーサイドで動くJavaScriptのパッケージのことです。今後のデプロイに向けた作業の中で、CSSや画像を圧縮する際に活用されます。

[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

Railsのバージョンが6.0以降のアプリケーションを動かすために、Yarnをインストールします。
「Yarn」とは、Railsに搭載されているJavaScriptのパッケージを管理するためのパッケージマネージャーです。

[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

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

# ①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のコマンドを使えるようにするために必要なコマンドです。

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

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

# 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 

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

次回はデーターベースの設計です

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?