20201222_アウトプット(EC2①初期設定)

アプトプット画像

今日行ったこと 2時間20分

  • AWSのEC2の初期設定について理解を整理
    👉流れを理解できた。

  • ミニアプリ作ろうとしたところsudo gem install railsの無限ループエラー
    👉ぐぐるもわからず。明日に持ち越し。



新しい発見

AWSのEC2の初期設定はどういう流れなの?

(1)EC2インスタンス仮想マシン)を作る📦
(2)Elastic (エラスティック)IPアドレスAWSから割り振ってもらう
(3)(1)と(2)を紐付ける🎀
(4)ポートの開放をする(ネットワークからパソコンにお邪魔するときに通るドアを増やすよ)
(5)出来上がったEC2にログインする
(6)出来上がったサーバーを整える

の流れで行うよ!

それぞれの詳細を見てみよう

(1)EC2インスタンス仮想マシン)を作る📦

ここで確認・行うこととしては

  1. リージョン(データの保存場所)は”パシフィックアジア(東京)”で合ってる?

  2. AMI(Amazon Machine Image)という「サーバーのデータを丸ごと保存したデータ内容」はどれにする?(今回はAmazon Linux AMI2

  3. CPUやメモリのスペックどれにする?(今回は無料枠のためt2.micro

で作成する✨(2つ目以降のEC2インスタンスは有料なので注意)

作成後、「キーペア」と呼ばれるEC2インスタンスにログインする時の秘密鍵を生成して、ダウンロードしておく。後に(5)のステップで使うよ。



(2)Elastic (エラスティック)IPアドレスAWSから割り振ってもらう

  • EC2インスタンスを作成した時に、パブリックIPと呼ばれるIPアドレスが自動で割り振られるものの、そのままだとサーバーを再起動するたびに設定ファイルを書き換えないといけないので面倒だよ。
    👉Elastic (エラスティック)IPアドレスと呼ばれる、固定の「パブリックIPアドレス」を設定する。

  • AWSに「割り当て」をしてもらい、Elastic IPアドレスの完成✨



(3)(1)と(2)を紐付ける🎀



(4)ポートの開放をする(ネットワークからパソコンにお邪魔するときに通るドアを増やすよ)

  • ポートとは、ネットワークからパソコンにお邪魔するときに通るドアのこと。

  • EC2インスタンス生成時にはssh(暗号や認証技術を利用して安全にリモートサーバーと通信できる方法)のみ、ポートが設定されている。

  • HTTPも通れるドアを作りたいので、「ポートの開放」を行う。

セキュリティグループの設定>インバウンドのルール>ルールの追加

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


ここで感じた疑問 👉送信元が違うだけで一緒みたいだけど上記2つの違いはなんだろう?
  • /0.0.0.0/0IPv4で、::/0IPv6という違いがある。

  • IPはインターネットプロトコルの略で、通信方法のお約束ごと「第4版」と「第6版」という意味なんだと理解。

  • IPv4は従来のお約束ごとで、最大約43億台のコンピュータが接続OKだったけれど、「それじゃ足りないんじゃない?」となった。

  • 後から出てきたIPv6は約340澗(かん)台の接続がOK。(事実上、無限)

  • IPv6は、IoT家電やYoutube,gmail,Facebookなどに使われていることを知った。



(5)出来上がったEC2にログインする

  • 今回は、簡易化のためec2-userを使って実装した。

1. .sshというディレクトリを作成(mkdirmake directory)

% cd ~
% mkdir ~/.ssh

2. (1)で作ったキーペアを上記ディレクトリに移動させる(mvmove)

% mv Downloads/キーペア名.pem .ssh/
% cd .ssh/
% ls 
# pemファイルが存在するか確認しとく

3. 保存したキーペアは所有者のみ読み書き可能なモードにする(chmodchange modeで、600とはパーミッションと呼ばれるアクセス権のこと)

% chmod 600 キーペア名.pem

(豆知識)何も設定しなければ644となり、次の"4."のコマンドでログインする際、「権限緩いんじゃない?」とエラーが出る。

4. ssh -iでログインするよ。(このコマンドは後々よく使うので控えておくとgood)

% ssh -i キーペア名.pem ec2-user@割当てたElastic IP



(6)出来上がったサーバーを整える

最後に出来立てほやほやのEC2インスタンスを整えるよ。

ここから使っていくyumコマンドとは?

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

1. このサーバに元々あるプログラムをアップデート(EC2内で実行)
# パッケージのアップデート
[ec2-user@ip-111-11-11-111 ~]$ sudo yum -y update
# その他環境構築に必要なパッケージを諸々インストール
[ec2-user@ip-111-11-11-111 ~]$ 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オプションは、予め”「yes」で!”という役割の意味があるよ(yes以外の誤入力を防ぐため)

2. JavaScriptを動かすための準備

サーバーサイドで動くJavaScriptのパッケージである「Node.js」をインストールする。

[ec2-user@ip-111-11-11-111 ~]$ sudo curl -sL https://rpm.nodesource.com/setup_10.x | sudo bash -
[ec2-user@ip-111-11-11-111 ~]$ sudo yum -y install nodejs


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

パッケージマネージャーであるYarn(Railsに搭載されているJavaScriptのパッケージを管理する)をインストールする。

[ec2-user@ip-111-11-11-111 ~]$ sudo yum -y install wget
[ec2-user@ip-111-11-11-111 ~]$ sudo wget https://dl.yarnpkg.com/rpm/yarn.repo -O /etc/yum.repos.d/yarn.repo
[ec2-user@ip-111-11-11-111 ~]$ sudo yum -y install yarn


4. rbenvとruby-buildをインストール

Rubyのバージョンを管理する際に組み合わせて使うツールだよ。

# ①gitからrbenvをクローン(インストール)
[ec2-user@ip-111-11-11-111 ~]$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv 

# ②パスを通す(どのディレクトリからも呼び出せるようにする)
[ec2-user@ip-111-11-11-111 ~]$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile 

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

# ④.bash_profileの読み込み
[ec2-user@ip-111-11-11-111 ~]$ source .bash_profile

# ⑤gitからruby-buildをクローン(インストール)
[ec2-user@ip-111-11-11-111 ~]$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build

# ⑥rehashを行う(使用しているRubyのバージョンでgemのコマンドを使えるようにする)
[ec2-user@ip-111-11-11-111 ~]$ rbenv rehash 

.bash_profileとは?


5. Rubyをインストール(rbenvとruby-build終わってから!)

ここでポイントなのは「自身のアプリで使っているRubyのバージョン」でインストールする事!

# Ruby 2.6.5のバージョンをインストール(時間かかるコマンドだよ)
[ec2-user@ip-111-11-11-111 ~]$ rbenv install 2.6.5

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

# rehashを行う
[ec2-user@ip-111-11-11-111 ~]$ rbenv rehash  

# Rubyのバージョンを確認
[ec2-user@ip-111-11-11-111 ~]$ ruby -v 



その他
  • which railsなどwhichコマンドによって、それがサーバー内のどこに格納できている確認できることを知った。

  • sudo gem install railsの無限ループエラーは出てきたキータの記事が古かったのと、whichで確認したらRailsRubyの格納先が異なるわけではなかったため、明日また調べてみよう。

  • AWSにまつわる表記や読み方が勉強になった。

dev.classmethod.jp

  • (5)の3にあった権限設定にはいろいろあることを知った。

qiita.com

  • 同じように権限設定について、それぞれの意味がわかりやすい。

web.tbgu.ac.jp

  • EC2インスタンス生成にまつわる単語の意味が平易な言葉で書かれていてわかりやすかった。

qiita.com

  • 今回は「ec2-user」で行ったけれど、新しいユーザーアカウントを追加するにはどうするんだろう?と調べたところ、以下の通りに進めればできそう☺️

aws.amazon.com

感想

  • 最近、プログラミングをシンプルに「楽しいなー」と思ってできている事が幸せ。(一時期は、理解が遅い自分に対して、焦りや虚しさを感じて「義務感」に感じることもあったため)

  • 今日はコードを書くのは進まなかったけど、今後も必須知識であろうAWS言語化(理解)をできたのでよかった。

  • 昔、たまたま動画で見たひろゆきさんの「詰まったら寝る」で解決できた事があったので、今回も寝て脳をすっきりさせようと思う。



これから理解したいこと(覚書用)