AWSのVPC作成からEC2にsshログインまで

#AWS立ち上げ

今回、AWSを使用してEC2インスタンスにsshログインするまでの記事を投稿する

約一年ほど前にAWSでサーバを立ち上げてJavaやRDSを使用してネットワークやプログラムの
学習を行なっていたが諸事情により途絶えたので再開する


本記事の基本的な流れとしては下記になる
VPC作成→サブネット作成→EC2配置→sshログイン


##VPC作成(サブネット作成)
アプリケーションのプラットフォームを作成する
VPC環境をAWSコンソールから作成し、EC2のプラットフォームを作る

下記のキャプチャより、AWSコンソール画面のメニュー選択からネットワークとコンテンツ配信からVPCを選択する。
![スクリーンショット 2019-11-01 22.04.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526203/86d7ad53-0bb5-2ea2-6ec4-4f1742df88fd.png)

去年作成したが、あまり覚えていない・・・
どうやら下記がメインとなる設定画面のようだ
・使用するネットワークのIPアドレスとCIDRを決定する
・アベイラビリティゾーンの剪定を行う


VPCのネットワークとサブネットを同時に作成できるみたい
IPアドレスのプレフィックスは何かの書籍で読んだが、下位16ビットがホスト部として使用することを推奨していたので、VPCのIPは/16を使用する。
サブネットはVPCのプラットフォーム内に/24のものを配置する。

![スクリーンショット 2019-11-01 22.13.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526203/b15d7f3d-698a-8296-0a7d-f9a8fe22619e.png)


画面を進めていくと下記のような設定画面がある。
![スクリーンショット 2019-11-01 22.13.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526203/96162d3c-975a-c754-e6ee-474bb7391ebc.png)

アクセスポリシーの設定、ホスト名の有効化、ハードウェアのテナンシー設定である

VPCエンドポイントへのアクセスは基本的にあとで自宅用IPで制限をかけるので、フルアクセス可能にする

ホスト名の有効化は、よく意味がわからないが
おそらくIPアドレスだけでなくVPC用ホスト名を設定できる項目だと思われる
ホスト名は便利なのでとりあえず使用する設定にする

最後にテナンシーだが、詳細は公式ドキュメントに書いてある
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/dedicated-instance.html

今回はテスト動作用なので、専用ハードを構築する必要はない
よって、デフォルト設定で次へ


読み進めていくとVPC作成されていることが確認できる
![スクリーンショット 2019-11-01 22.14.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526203/0084f42b-aa02-e6c8-3ee4-058bf4bb3075.png)

設定の最後にpemファイルをダウンロードする項目がある
これはsshで接続する際に、身元確認証として必要になるので無くさないように
持っておく必要がある


##EC2インスタンス作成
次にEC2を作成する
同様にAWSコンソール画面のメニューからEC2の項目を選択する
下記のインスタンスの作成をクリックすると設定画面に移る
![スクリーンショット 2019-11-01 22.14.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526203/fda120eb-db4f-df4b-0a59-ffea67afc75b.png)

AMIを選ぶ
AMIはAWS専用OSのことで、インスタンスで起動する際のOSを選択する
今回は、無料のものを使うので、下記を選択
![スクリーンショット 2019-11-01 22.15.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526203/6a6da8ef-6016-c929-4443-a1a2abf55ecb.png)

次にEC2のスペックを決める
こちらも大規模システムを扱うわけでないので、無料枠で![スクリーンショット 2019-11-01 22.15.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526203/eb86923f-953a-32cb-e176-26c40369fc46.png)

インスタンスの詳細設定では、先ほど作成したVPCとサブネットを選択する
こうすることで指定したVPCとそのサブネット内にEC2サーバーが立ち上がる
自動IP割当を行わず、あとで固定IP(EIP)を割り当てる
自動IPの場合、EC2の再起動によってエンドポイント(IP)が変更されてしまうので一意性を保持するためにEPIを使用する
※EIPは有料（月500円程だった気がする


![スクリーンショット 2019-11-01 22.20.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526203/90fd50aa-2083-c9a9-dd48-68e6a5d9c6a7.png)



次にストレージのスペックを選ぶ
![スクリーンショット 2019-11-01 22.21.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526203/a9452a6e-a14e-9f19-2935-aabd129ab43e.png)


最後にセキュリティグループの設定だが、設定内容をセキュリティ上公開したくないため、画像はない
セキュリティグループは、EC2単位に設定できるファイアウォールみたいなもので、今回は自宅からのグローバルIPのみ通過するように設定した
また、テスト動作ではsshのみのアクセスとなるので、ポート番号は22番を解放する


以上の設定でEC2インスタンスが起動準備する(pending)
![スクリーンショット 2019-11-01 22.24.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526203/9d775018-0771-160b-9092-d1f9ec4f452d.png)

EC2作成したEC2インスタンスは自動IP割当を行なっていないため、グローバルIPがない状態で作成される模様
![スクリーンショット 2019-11-01 22.25.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526203/21c9e9ee-bdbe-a2cf-4e53-b9a8e2da41a3.png)


そこでEIPを作成し、割り当てるように設定する
EC2管理画面のメニューからElastic IPを選択して、新しいアドレスの割り当てを行う
![スクリーンショット 2019-11-01 22.26.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526203/1fb72004-716d-9c44-7764-fc78ca061b9c.png)


下記の設定では、AmazonプールからIPを割り当てる。
詳細は不明だが、AWSがDHCPサーバーを保有していて、可変/固定IPの割り当てを行なっている模様
固定IP(EIP)の設定を行うことでDHCPのIPプールから固定IPを割り当てる
![スクリーンショット 2019-11-01 22.27.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526203/388c54ca-b485-3e19-00b3-0c5addc7038e.png)

以上、EIPが割り当てられるので作成したEC2に関連付ける
![スクリーンショット 2019-11-01 22.28.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526203/41e7fd55-950f-bcd6-26be-2e32e90a978c.png)

![スクリーンショット 2019-11-01 22.30.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526203/f5530e22-d78a-9d98-4dc8-ece96282a06e.png)

以上の動作で、作成したEC2にグローバルIPとエンドポイントが表示される
![スクリーンショット 2019-11-01 22.32.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526203/916ed6dc-4ba0-47ed-aaa8-575591389402.png)


##ssh接続
Macのターミナル画面よりsshで下記のコマンド入力する

ssh -i [VPCでダウンんロードしたpemファイル].pem ec2-user@ec2-54-65-248-190.ap-northeast-1.compute.amazonaws.com


なにやらエラーが・・・
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for '[VPCでダウンんロードしたpemファイル].pem' are too open.

下記のURLで原因がわかった。
https://umebius.com/dev/permissions-0644-for-xxx-key-are-too-open-%E6%A8%A9%E9%99%90%E3%82%92%E3%81%A9%E3%81%86%E3%81%99%E3%82%8C%E3%81%B0%E3%81%84%E3%81%84%EF%BC%9F/

pemファイルは秘密鍵同様、他のユーザーからの書き込み権限があると使用できないみたい
下記のように権限を変更する
chmod 600 [VPCでダウンんロードしたpemファイル].pem

もう一度、sshで接続してみる
ssh -i [VPCでダウンんロードしたpemファイル].pem ec2-user@ec2-54-65-248-190.ap-northeast-1.compute.amazonaws.com

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

接続できた！！



なかなか忘れている部分が多く時間がかかったが、なんとか接続できた
次回は、AWSのEC2を使って何かしようと思う
以上