⑤AWS仮想サーバを利用する、AWSアカウント作成 + EC2インスタンス作成(2020.4時点)

ローカルでDocker、docker-composeを使用して開発環境を整えてきました。

これから、Docker＋Railsアプリを本番環境に上げていきたいと考えています。
今回は、まず、AWSサービスを利用開始する＋試しにEC２インスタンス作成してSSHログインする過程を記事にします。

#おさらい
ローカルRails+MYSQLアプリ開発中に、Dockerを実装する内容です。
[過去の記事]
[①Dockerを初めて導入して基本操作する (2020.4時点)](https://qiita.com/SakagamiKeisuke/items/4455631886b1c15a3b69)
[②Dockerを初めて導入してRails sする (2020.4時点)](https://qiita.com/SakagamiKeisuke/items/d64ee54c22378223659a)
[③Docker MYSQLにデモデータ(seed_fu)を投入する(2020.4時点)](https://qiita.com/SakagamiKeisuke/items/4ce1c4a4921abb57b896)
[④ローカルDocker環境でデータ永続化、entrypointでseed_fuをやり直しする(2020.4.時点)](https://qiita.com/SakagamiKeisuke/items/8d3fc70a2939cd4bbe3e)

#前提
・クレジットカードを持っている
・AWSの使用感を得る練習
・AWSアカウント作成からEC２インスタンス作成とSSHログインの練習
・セキュリティネットワークについては、この後に記事にする予定



#1.AWSのアカウントを作成する

リンク→ [AWS アマゾンウェブサービス](https://aws.amazon.com/jp/?nc1=h_ls)にいきます。

トップページはこんな感じです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617331/55edc88f-7b47-7690-c095-3e516c9e8643.png)
アカウントを作成します。
※クレジットカード支払い情報を登録します。
※無料のベーシックプランを選びます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617331/dd37201e-5d21-ec92-a94c-47bf06f57135.png)
ルートユーザーでサインインします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617331/1e1af2f9-e21a-fb89-2b90-66218c6e2707.png)
サインインして、AWSマネジメントコンソールページに遷移します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617331/18aeee08-e928-6062-1b53-9ee08b499d4c.png)
ヘッダー右上のリージョンを アジアパシフィック(東京) ap-northeast-1 に設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617331/0defd9f5-ca3f-2081-82c2-d91fb3389525.png)
これでアカウント作成は完了です。


#2.EC2インスタンスを作成する
”サービス”を開き、コンピューティングのところにある ”EC2” 選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617331/59b37002-482f-1769-ace9-e05ffeb5a11f.png)

左側にある ”インスタンス” を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617331/9fd92da0-e7d3-6c20-c957-da3055ed0999.png)

青色のインスタンスの作成ボタンを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617331/c92bc2a7-bbaa-c61d-c9b3-e0827116a28e.png)

AMI(アマゾンマシンイメージ)のページに移ります。
今回は、無料枠の一番上にあります、Amazon Linux2 AMI(HVM),SSD Volume Type  64ビット(×86)を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617331/74ebbde1-ed3c-a744-c12e-c0df1406c91d.png)

当方、既に 無料枠のt2.microを利用していますので、今回はt3.microを使用します。

皆さまにおかれては、１年間無料のt2.microをお勧めします。

選択したら、青色の[確認と作成]ボタンを押します。

＜参考になる記事>改めてAWSの「無料利用枠」を知ろう
https://dev.classmethod.jp/articles/overall-summary-about-aws-free-tier/
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617331/daab26bc-910f-5728-dee6-858eded5a153.png)

t3.microを利用するコスト 
[EC2の料金を日本円で計算 ざっくりAWS](https://aws-rough.cc/ec2/)　さんでを試算。 ひと月 1,100円くらい請求がありそうです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617331/a126d860-8e59-63ce-fcd6-3c189531ef20.png)

青色の起動ボタンを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617331/c619a330-6c4c-072d-1714-a7f580c683be.png)


#3.キーペア（秘密鍵）を作成する
・EC2インスタンスにSSHログインするためのキーペアを作成します。
** ※キーペア情報（秘密鍵）は第三者に見せないよう秘匿する必要があります。**
　**もし盗用された場合はEC2サービスを悪用されますので、取り扱いには十分に注意してください。**




・ 「新しいキーペアの作成」を選択し、キーペア名は任意につけます。
　　ただし、空白（スペース）を入れるとエラーになるようなので、空白（スペース）のない名前を設定します。
・ キーペアのダウンロードを押して、PCにキーペアの情報をダウンロードします。
・**「任意のキーペア名.pem」**というファイルがダウンロードディレクトリに入りますので、そのままにしておいてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617331/2d2da2a1-711b-9c8e-52d2-c6266e5bd3dc.png)

キーペアのダウンロードができたら、完了です。
青色のインスタンスの表示ボタンを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617331/2986ea65-ca2d-47a5-9e89-b2b68517a683.png)

インスタンス一覧に表示がされました。（塗り潰しはご容赦ください）

インスタンスIDをコピーしておきます。（あとでコピペします）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617331/5e4b609a-9f83-379a-c5be-a0d0c9e3673e.png)



#4.Elastic IPの作成と紐付けをする

EC2インスタンスにはパブリックIPというIPアドレスが自動で割り振られ、サーバー起動のたびにアドレス値が変化してしまいます。
これだと都合が悪いので、AWSが割り振る固定されたパブリックIPアドレスを、Elastic IPに紐付けて使用します。

左下の Elastic IP を押して、ページに移ります。
オレンジ色の[Elastic IPアドレスの割り当て]を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617331/83a084f0-56c8-90fe-1000-132bcd66b2ce.png)

このまま、割り当てボタンを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617331/54f7d190-de6b-fb1d-19a7-a4701e7aa885.png)
続いて、Elastic IP アドレスの関連付け を押します。

インスタンスのフォームに、先ほどコピーしておいた"インスタンスID" を貼り付けます。
プルダウンになっていて、選択することもできます。

プライベートIPアドレス、再関連付け許可チェックボックスは空欄のまま、関連付けるボタンを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617331/b9c93f58-5e77-e202-a3e6-f8a25966bbe6.png)

インスタンス一覧に戻ると、インスタンスの説明の右下にある Elastic IP にアドレスが設定されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617331/2b887e96-dbb4-d060-5ba0-d23f7d16169e.png)

#5.ポートを開く

HTTP接続できるように、「ポート」を開放します。

EC2インスタンス一覧画面で「セキュリティグループ」のリンクをクリックします。
今回の例だと、「launch-wizard-3」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617331/231f1315-b825-02e8-cb6d-e7bcf388594a.png)
セキュリティグループ設定ページに遷移しました。

今回の例だと、「launch-wizard-3」になります。
下の詳細ビューを引き上げて、「インバウンドルール」を押して、「インバウンドルールの編集」ボタンを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617331/50d3a636-24b7-4298-dac1-ba90862f5167.png)
このページに遷移したら、「ルールの追加」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617331/ee8d70af-8c80-9aa7-3214-c9ccc5ce7669.png)
**タイプ　：　HTTP　**
**プロトコル　：　TCP**
**ポート範囲　：　80　**
**ソース　：　カスタム 　/ 0.0.0.0/0, ::/0　** に設定します。
「0.0.0.0」「::/0」は「全てのアクセス許可」になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617331/c32c36f8-cdde-c61a-c81b-bba7325e681f.png)
ルールの保存ボタンを押すと、このようになります。

**※インバウンドルールのデフォルトのSSHを消してしまわないように注意してください。**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617331/ab3e6fda-8e2a-df40-acfe-65ddea9463f1.png)


#6.EC2インスタンスにSSHログインする

ターミナルで以下のコマンドを実行します。


```ruby:ターミナル 

      #cdコマンドで ローカルPCのホームディレクトリに移動
cd ~
      #mkdir(メイクディア)コマンドで.sshというディレクトリを作成
      # もしFile exists(存在します)とエラーがでた時は、そのままでOK

mkdir ~/.ssh

      /# mvコマンドでキーペア作成時にダウンロードしたpemファイルをダウンロードディレクトリから、.sshディレクトリに移動
      #mv Downloads/ダウンロードした鍵の名前.pem .ssh/

mv Downloads/nomadcafe.pem .ssh/

      # .sshディレクトリに移動

 cd .ssh/

      #lsコマンドで .sshディレクトリのファイル一覧を表示
      # pemファイルの移動ができたか確認
 ls

      # chmod(チェンジモード)コマンドで、パーミッション(アクセス権限) 600 -rw- --- ---  を設定
      #所有者権限 (6 読込・書込み可能)・グループ権限(0 権限なし)・その他のユーザーの権限(0 権限なし)
      #chmod 600 ダウンロードした鍵の名前.pem

chmod 600 nomadcafe.pem

      #ダウンロードした鍵を用いて、ec2-userとしてログイン
      # ssh -i ダウンロードした鍵の名前.pem ec2-user@作成したEC2インスタンスと紐付けたElastic IP

ssh -i nomadcafe.pem ec2-user@＊＊.＊＊＊＊.＊＊＊＊.＊＊

```
こんな感じになります。(関係の無いところは塗り潰ししています)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617331/263ac55f-be32-1eeb-da21-3039ae2e3643.png)
途中で以下のような確認があります。

```ruby:ターミナル 
The authenticity of host '18.178.170.12 (18.178.170.12)' can't be established.
ECDSA key fingerprint is SHA256:GJUmS2jQThkOYf3YtxgSHI3OMCJE0tA6v7eEHNxmizw.
Are you sure you want to continue connecting (yes/no)? 

ホスト'18 .178.170.12（18.178.170.12） 'の信頼性を確立できません。
ECDSAキーフィンガープリントはSHA256：GJUmS2jQThkOYf3YtxgSHI3OMCJE0tA6v7eEHNxmizwです。
接続を続行してもよろしいですか（はい/いいえ）？
```
これに yes で応えます。

```ruby:ターミナル 
 ssh -i ＊＊＊＊＊.pem ec2-user@＊＊.＊＊＊＊.＊＊＊＊.＊＊

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

https://aws.amazon.com/amazon-linux-2/
[ec2-user@ip-＊＊＊＊-＊＊-＊＊-＊＊~]$ 
```

このように表示されたら、EC２インスタンスにSSHログイン完了です!

#7. 参考にさせていただいた記事（ありがとうございます！）
・[AWS EC2インスタンスにdockerとdocker-composeをインストールして簡単なWEBサービスを立ち上げる方法](
https://qiita.com/y-do/items/e127211b32296d65803a)
・[AWS EC2 ハンズオン]
(https://qiita.com/leomaro7/items/8560bfbeb0672d0d83ec)
・[EC2要点まとめ]
(https://qiita.com/bobu_web/items/4e3723fdb51fbd7bc200)

#8.最後に
当方、 実務未経験＋初学者＋テッ○キャンプ卒業＋転職活動中であります。

EC２インスタンス作成は一番初めにやることでは無いかもしれませんが、
今回、複数のEC２インスタンスを利用する状況になり、復習を兼ねて進めました。
ゼロスタートからAWSやります、という方には参考にはなると思います。

この先も、本番環境でのdocker実装を進めつつ、その過程をわかりやすい記事で寄稿していきたいと考えています。