20201222_アウトプット(EC2①初期設定)
今日行ったこと 2時間20分
新しい発見
AWSのEC2の初期設定はどういう流れなの?
(1)EC2インスタンス(仮想マシン)を作る📦
(2)Elastic (エラスティック)IPアドレスをAWSから割り振ってもらう
(3)(1)と(2)を紐付ける🎀
(4)ポートの開放をする(ネットワークからパソコンにお邪魔するときに通るドアを増やすよ)
(5)出来上がったEC2にログインする
(6)出来上がったサーバーを整える
の流れで行うよ!
それぞれの詳細を見てみよう
(1)EC2インスタンス(仮想マシン)を作る📦
ここで確認・行うこととしては
リージョン(データの保存場所)は”パシフィックアジア(東京)”で合ってる?
AMI(Amazon Machine Image)という「サーバーのデータを丸ごと保存したデータ内容」はどれにする?(今回は
Amazon Linux AMI2
)CPUやメモリのスペックどれにする?(今回は無料枠のため
t2.micro
)
で作成する✨(2つ目以降のEC2インスタンスは有料なので注意)
作成後、「キーペア」と呼ばれるEC2インスタンスにログインする時の秘密鍵を生成して、ダウンロードしておく。後に(5)のステップで使うよ。
(2)Elastic (エラスティック)IPアドレスをAWSから割り振ってもらう
EC2インスタンスを作成した時に、パブリックIPと呼ばれるIPアドレスが自動で割り振られるものの、そのままだとサーバーを再起動するたびに設定ファイルを書き換えないといけないので面倒だよ。
👉Elastic (エラスティック)IPアドレスと呼ばれる、固定の「パブリック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/0
はIPv4
で、::/0
はIPv6
という違いがある。IPはインターネットプロトコルの略で、通信方法のお約束ごと「第4版」と「第6版」という意味なんだと理解。
IPv4
は従来のお約束ごとで、最大約43億台のコンピュータが接続OKだったけれど、「それじゃ足りないんじゃない?」となった。後から出てきた
IPv6
は約340澗(かん)台の接続がOK。(事実上、無限)
(5)出来上がったEC2にログインする
- 今回は、簡易化のため
ec2-user
を使って実装した。
1. .ssh
というディレクトリを作成(mkdir
はmake directory
)
% cd ~
% mkdir ~/.ssh
2. (1)で作ったキーペアを上記ディレクトリに移動させる(mv
はmove
)
% mv Downloads/キーペア名.pem .ssh/
% cd .ssh/
% ls # pemファイルが存在するか確認しとく
3. 保存したキーペアは所有者のみ読み書き可能なモードにする(chmod
はchange 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
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
で確認したらRails
とRuby
の格納先が異なるわけではなかったため、明日また調べてみよう。AWSにまつわる表記や読み方が勉強になった。
- (5)の3にあった権限設定にはいろいろあることを知った。
- 同じように権限設定について、それぞれの意味がわかりやすい。
- EC2インスタンス生成にまつわる単語の意味が平易な言葉で書かれていてわかりやすかった。
- 今回は「ec2-user」で行ったけれど、新しいユーザーアカウントを追加するにはどうするんだろう?と調べたところ、以下の通りに進めればできそう☺️
感想
最近、プログラミングをシンプルに「楽しいなー」と思ってできている事が幸せ。(一時期は、理解が遅い自分に対して、焦りや虚しさを感じて「義務感」に感じることもあったため)
昔、たまたま動画で見たひろゆきさんの「詰まったら寝る」で解決できた事があったので、今回も寝て脳をすっきりさせようと思う。