#目的
開発したアプリケーションを、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インスタンスを作成しましょう。
すると以下のような完了画面に遷移します。「インスタンスの表示」をクリックしましょう。
「インスタンス一覧画面」に戻るので、「インスタンスID」列の一番上をクリックしましょう。
以下の画面にインスタンスの概要が表示されています。作成した「インスタンスID」をコピーしてメモアプリなどに控えておきましょう。
さきほど作成した「EC2インスタンス」には、作成時にIPアドレスが自動で割り振られています。これを「パブリックIP」と言います。しかし、サーバーを再起動させるたびにこのパブリックIPが変わってしまうという欠点を持っています。IPが変わってしまうということは、設定ファイル等をその都度書き換えなければいけません。これを解決してくれるのが「Elastic IP」です。
###Elastic IP
AWSから割り振られた固定の「パブリックIPアドレス」のことを言います。このパブリックIPアドレスをEC2インスタンスに紐付けることで、インスタンスの起動・停止にかかわらず常に同じIPアドレスで通信をすることが可能になります。
まずはElastic IPを取得するために、左側の選択欄から「Elastic IP」をクリックしましょう。画面の表示が変わったらオレンジで表示されている「Elastic IP アドレスの割り当て」をクリックします。
画面が遷移したら、「Amazon の IPv4 アドレスプール」にチェックが入ってることを確認しましょう。確認後、「割り当て」をクリックします。
「取得したElastic IPアドレス」と「EC2インスタンス」を紐付けましょう。まずは、右上にある「アクション」をクリックします。表示されたプルダウンから「Elastic IP アドレスの関連付け」を選択しましょう。
画面が遷移したら、インスタンスにチェックが入っていることを確認しましょう。次に、そのしたにあるインスタンスの入力欄をクリックすると、メモしたインスタンスIDが表示されます。表示されたインスタンスIDを選択しましょう。その下の入力欄は、空欄で大丈夫です。最後に「関連付ける」をクリックしましょう。
再びインスタンス一覧画面に戻り、作成したインスタンスの「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」となり設定ごとに数字が増えていきます。
すると、インスタンスの属するセキュリティグループの設定画面に遷移します。
次に、「インバウンドルール」をクリックし、右上の「インバウンドのルールの編集」をクリックします。
ページが切り替わるので、「ルールの追加」をクリックし、画像の①~⑦の手順通りに設定しましょう。
「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」は以下の画像を参照し、ご自身のものに編集しましょう
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」を入力し、実行する)
ターミナルのコマンド待ちの際の左側の表示が、以下の画像のようになればログイン成功です。
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」のインストールは以上です。
次回はデーターベースの設計です