実践で学ぶRuby on rails 〜仮説千本ノック〜

プログラマーとして独立するため日々スキルアップに励んでいます。優れたプログラマは仮説を立てるのがうまい。そこを目指して仮説を立てては検証する日々です!!

AWSを使ったデプロイ~EC2のセットアップからログインまで~

AWSを使ってデプロイをするには、

こんな作業が必要になります。

 

リージョンの設定

まず、世界各地に設置されているAWSサーバのいずれを使用するのか選択します。

リージョンを選ぶ基準は以下の3点となります。

リージョンごとにいずれも異なりますが、大体日本でサービスを公開するでしょうから、東京で問題ありません。

▫️利用料金

▫️サービスの利用者 との距離

▫️扱っているサービスの種類

 

EC2インスタンスの作成

続いて、サーバの作成です。

AWSでは、利用者ごとに、仮想のサーバーを提供しており、

EC2インスタンスと呼んでいます。

作成にあたり、設定する項目は次の通り。

 

AMIの選択

Amazon LInux AMIを選択してください。

AMIとは、「Amazon Machine Image」の略語です。

EC2インスタンスを起動するのに必要なOS等の情報が詰まったもので、あらかじめOS、WEBサーバー等、デプロイ環境に必要なものがインストールしてあります。

AMIのコピーであるEC2インスタンスは、AMIによって起動します。

 

EC2インスタンスのタイプ選択

CPU、メモリなどのスペックにより最適なものを選びましょう。

まずは、無料プランの「t2.mcro」がいいでしょう。

 

サーバを操作するための公開鍵、秘密鍵の準備

EC2インスタンスを操作する際には、サーバーをLinuxコマンドを使って自在遠隔操作できるssh(Secure Shell)という手段を使います。

サーバーは、誰にでも操作できてしまうと問題なので、ログインが適正に行われているか、sshではチェックする仕組みがあります。

例えば、今回使う公開鍵認証方式では、次のように安全な通信が担保される。

 ▫️クライアントがログインしたい意思をサーバーに伝える

▫️サーバーは、持っている公開鍵で、認証に使う情報を暗号化し、クライアントに渡す。

▫️クライアントは、持っている秘密鍵で、暗号化された情報を復号した上で、サーバに返す

▫️サーバーが、送られてきた情報が、送った情報と同じであることを確認したら通信を開始

 

公開鍵は、あらかじめEC2インスタンスに用意されているため、秘密鍵をクライアント(自分のローカルPCへ)ダウンロードすれば、二種類の鍵の準備が完了。

 

Elastic IPの設定

EC2インスタンスを作成した時点では、自動でIPアドレスが割り振られていますが、このアドレスは、サーバーを再起動するたびに変更されてしまいます。

アドレスは、固定のものである必要があるため、固定のIPアドレスであるElastic IPを作成し、EC2インスタンスに紐つけます。

Elastic IPは、Amazonプール(Amazon所有アドレス)、ユーザ所有のアドレスいずれかから選択します。学習する上では、アドレスにこだわる必要はないので、前者を選択し、適当に割り振ってもらいましょう。

※パブリックIPという表現が出てきますが、要するにIPアドレスなので、Elastic IPもパブリックIPの範疇です。

 

Elastic IPをEC2インスタンスの紐付け

Elastic IPとEC2インスタンスの作成が完了したら、両者を紐付け(関連付け)しましょう。

EC2インスタンスへアクセスは、IPを割り振ることで初めて実現します。

※紐付け作業を行うと、「プライベートIP」が自動的に割り振られる。この役割は不明。。。

少なくとも、外部からサーバにアクセスするためのアドレスとしては機能していない。

 

ファイアーウォール設定

これで、サーバ遠隔操作するためのssh接続が可能となりました。

が、デフォルトではファイアーウォールの設定で、他のユーザーがサーバにアクセスするためのhttp接続等が行えません。セキュリティグループのメニューから、サーバのポートを解放する等、ウォールの設定を変更しましょう。

 

◽️インバウンド

外部からサーバへのアクセスに関する設定

[ssh(設定ずみ)]

あなたのパソコンからサーバーを遠隔操作できるように設定する。

ポート=22が一般的だがバレやすいので慣れたら変えた方が良い。

ソース=カスタムにして、どのユーザーからでもアクセス可能を意味する「0.0.0.0/0」または「::/0」にする。

[HTTP]

世界中どのパソコンからもアクセスできるように設定する。

ポート=httpなら80、httpsなら443と決まっている。

httpsは、通信を暗号化でき、サイトの運営者が変な人でないことを証明してくれる仕組みだが、証明書の発行等が必要なので、まずはhttpのみ設定する。

EC2インスタンスへのログイン

EC2インスタンスを上記手順で作成すると、ec2-userというユーザーが作成されます。

実際には、このユーザーは権限が大きすぎるので、小さくしたユーザーを作成して、サーバーの運用を行うが、まずはec2-userのままログインができるか試しましょう。

 

秘密鍵ファイル(〇〇〇〇.pem)を.sshディレクトリに格納

ホームディレクトリの直下に.sshディレクトリを 作成し、秘密鍵のファイルを格納する。

 

・.sshディレクトリ内で、秘密鍵ファイルの権限設定コマンドを実行

$ chmod 600 〇〇〇〇.pem

あなた、仲間、他人の3者に対して、権限を設定できます。

色々な法はありますが今回は3者に同時に設定する方法をとります。

3桁の数字は左から、あなた、仲間、他人を意味します。

上の例では、

6=あなたの権限 4(読み取りさせる)+2(書き込みさせる)

0=仲間の権限  0(何もさせない)

0=他人       0(何もさせない)

 

・ec2-userとして、秘密鍵を使ってEC2インスタンスssh接続する

$ ssh  -i  〇〇〇〇.pem  ec2-user@Elastic IP

 ※単に秘密鍵の名前を書くのではなく、-iをつけて初めて認識される。