AWSを用いたデプロイの流れ(1)

甘党エンジニアのkanjiです。

今回はAWSを用いたデプロイ・本番環境の構築の流れついて書きたい。

そもそもAWSとは何か?

AWSとはAmazon Web Servisesの略で、通販で有名なあの米Amazonが提供しているクラウドコンピューティングサービスの総称。

代表的なサービスにAmazon EC2(仮想サーバ)Amazon S3(クラウドストレージ)Amazon RDS(データベース)などがある。

Amazonといえば通販サービスが真っ先に頭に浮かぶが、こういった事業も展開している。

そんなAmazonが展開するサービス、さぞシンプルで扱いやすいだろうと高を括っていたら、そんな事はなかった。

簡単にデプロイしたいだけなのであれば、「Heroku」を使うことをオススメする。

herokuでデプロイする手順HEROKUを使って簡単にデプロイする方法

AWSを用いての本番環境構築は(1)〜(3)まで、全3回に分けて書いた。

今回の(1)では「AWSのアカウント作成」から、「データベースの設定」までを記述する。


AWSアカウント作成

まずはAWSのサイトにアクセスし、アカウントを作成する。

トップページ右上の「まずは無料で始める」ページからアカウント情報(アドレス・住所・連絡先・クレジットカード情報など)を登録する。

登録が完了したら、作成したアカウントでサインインする。

AWSアカウントのリージョンを設定する。

リージョンとは、AWSの物理的なサーバの場所を指定するもの。
(最近大規模障害が起きて話題になったアレである。)

世界各地に10箇所以上存在する中の1つ、東京をトップページの右上から「アジアパシフィック(東京)」を選択すればOK。

EC2インスタンスの作成

EC2インスタンスとは?
仮想サーバのこと。「仮想マシン」と呼ばれるソフトウェアを利用して、仮想的に1つのLinuxサーバを利用できる仕組み。
この「仮想マシン」を「EC2インスタンス」と呼んでいる。

EC2インスタンスを作成する。

①トップページの「サービス」からEC2インスタンスをクリック
②AMI(サーバのデータをまるごと保存したデータ)を選択
③EC2インスタンスのタイプ選択(無料枠で利用できる「t2.micro」でOK)
④キーペアをダウンロードする

MEMO
インスタンスにSSHでログインする際に必要となる「秘密鍵」となる。
EC2インスタンスにログイン時必要となるので、必ずどこかに保存しておく。
※名前はご自身で決めて大丈夫。

キーペアダウンロード完了後、「インスタンスの作成」がクリックできるようになっている。

作成が出来た後はインスタンス一覧画面に戻り、作成した「インスタンスID」をコピーしておく(後ほど使用)。

Elastic IPの作成と紐付けを行う。

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

サイドバーの「Elastic IP」をクリック→「新しいアドレス」→「関連づける」をクリック

先程コピーした「インスタンスID」をインスタンスに貼り付ける(※プライベートIDは選択しない)

「関連付け」をクリック

一覧画面に戻り、「Elastic IP」が設定されていればOK。

ポートを開く

HTTPにつなげるための設定。
ポートの設定をするためには、「セキュリティグループ」のポートを設定する。

EC2インスタンス一覧画面から対象のインスタンスを選択し、「セキュリティグループ」のリンクをクリック

インスタンスの属するセキュリティグループの設定画面に移動するので、「インバウンド」タブの中の「編集」をクリック

「ルールの追加」をクリックし、タイプを「HTTP」、プロトコルを「TCP」、ポート範囲を「80」、送信元を「カスタム / 0.0.0.0, ::/0」に設定。

ec2-userでログインする

ターミナルで下記のコマンドを実行する。

$ cd ~

$ mv Downloads/ダウンロードした鍵の名前.pem .ssh/

$ cd .ssh/

$ chmod 600 ダウンロードした鍵の名前.pem

$ ssh -i ダウンロードした鍵の名前.pem ec2-user@作成したEC2インスタンスと紐付けたElastic IP#(例えばElastic IPが555.432.111なら、「shh -i ダウンロードした鍵の名前.pem ec2-user@555.432.111 )#(ダウンロードした鍵を用いて、ec2-userとしてログイン)
MEMO1
Elastic IP は、AWSアカウントの「インスタンス」から確認できる
MEMO2
Are you sure you want to continue connecting (yes/no)? というメッセージが表示されるが「yes」を選択する。

下記の画面になればログイン成功

 __|  __|_  )
       _|  (     /   Amazon Linux AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-ami/2018.03-release-notes/
[ec2-user@ip-555-432-111 ~]$ 
#(ターミナルのコマンド待ちの際の左側の表示が、表記のように[ec2-user・・|となればOK) 

EC2インスタンスの環境構築に必要なパッケージのインストール

パッケージとは?
LinuxOS下における、ある役割/機能をもったプログラムの集合のこと。
yumコマンドを実行することでパッケージを一括アップデートできる。

ターミナルで以下のコマンドを順に実行する。

[ec2-user@ip-555-432-111 ~]$ sudo yum update

ターミナルで以下のコマンドを全て一度に打ち込む。

[ec2-user@ip-555-432-111 ~]$ sudo yum install \
git make gcc-c++ patch \
libyaml-devel libffi-devel libicu-devel \
zlib-devel readline-devel libxml2-devel libxslt-devel \
ImageMagick ImageMagick-devel \
MEMO
バックスラッシュを入れると、ターミナルにおいてもreturnキーを押すことで改行することができる。

全てインストールしますか?という旨の確認画面が出てきたら、

総ダウンロード容量: 120 M
Is this ok [y/d/N]: 

「y」と入力してenterキーを押す。yはYESの略。
無事に入力画面に戻れば、インストール完了。

最後にopenssl-develというRubyのインストールに必要なパッケージも合わせてインストールしておく。

sudo yum install -y openssl-devel

ターミナルで以下のコマンドを実行し、Node.jsをインストールする。

Node.jsとは?
サーバーサイドで動くJavaScriptのパッケージ。今後のデプロイに向けた作業の中で、CSSや画像を圧縮する際に活用される。
[ec2-user@ip-555-432-111 ~]$ sudo curl -sL https://rpm.nodesource.com/setup_6.x | sudo bash -
[ec2-user@ip-555-432-111 ~]$ sudo yum install nodejs

ターミナルで以下のコマンドを実行し、rbenvとruby-buildをインストールする。

Node.jsとは?
rbenvとruby-buildは、Rubyのバージョンを管理する際に組み合わせて使うツールにな、Rubyをインストールする前にインストールする必要がある。
#rbenvのインストール
[ec2-user@ip-555-432-111 ~]$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv 
#パスを通す
[ec2-user@ip-555-432-111 ~]$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile 
#rbenvを呼び出すための記述
[ec2-user@ip-555-432-111 ~]$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
#.bash_profileの読み込み
[ec2-user@ip-555-432-111 ~]$ source .bash_profile
#ruby-buildのインストール
[ec2-user@ip-555-432-111 ~]$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
#rehashを行う
[ec2-user@ip-555-432-111 ~]$ rbenv rehash  

ターミナルで以下のコマンドを実行し、Rubyをインストールする。

Rubyのバージョンについて
インストールするRubyのバージョンは、自身のRubyのバージョンによって適宜変更して下さい。
[ec2-user@ip-555-432-111 ~]$ rbenv install 2.5.1
[ec2-user@ip-555-432-111 ~]$ rbenv global 2.5.1
[ec2-user@ip-555-432-111 ~]$ rbenv rehash  #rehashを行う
[ec2-user@ip-555-432-111 ~]$ ruby -v # バージョンを確認

データベースのセットアップ

MEMO
ここではMySQLを使用

MySQLの設定と起動を行うことで、デプロイするアプリケーションのデータベースが適切に使えるようにしていく。

ターミナルで以下のコマンドを実行し、MySQLをインストールする。

[ec2-user@ip-555-432-111 ~]$ sudo yum install mysql56-server mysql56-devel mysql56

インストールが出来たら、ターミナルで以下のコマンドを実行する。

[ec2-user@ip-555-432-111 ~]$ sudo service mysqld start
[ec2-user@ip-555-432-111 ~]$ sudo service mysqld status

mysqld (pid 15692) is running…
「running」と表示されればMySQLの起動は成功している。

ターミナルで以下のコマンドを実行しパスワードを設定する。

[ec2-user@ip-555-432-111 ~]$ sudo /usr/libexec/mysql56/mysqladmin -u root password '設定したいパスワード'
MEMO
後ほどRailsからアクセスする時に利用するので、個人で設定したパスワードは保存しておく。

以下のコマンドで設定したパスワードが使えるか確認する。

[ec2-user@ip-555-432-111 ~]$ mysql -u root -p

以下の表示が出ていれば、MySQLの設定は終了。

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.6.33 MySQL Community Server (GPL)

Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

次回(2)では本番環境構築を終え、自分のアプリケーションがサーバーで公開できるようになる所まで書いている。
(1)が終わった方はお進み頂きたい。

AWSを用いたデプロイの流れ(2)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です