Amazon EC2を起動し、MacのターミナルからSSH接続してみる

# はじめに
- [Amazon VPCでシンプルなネットワークを構築する](https://qiita.com/TaishiOikawa/items/6201eceaa7a4e815b175)の続きです
- 今回はパブリックサブネットにEC2インスタンスを作成し、sshでアクセスしてみます
    - 本記事ではMacのターミナルからアクセスします
    - Windowsの方はTeraTerm等をお使いください

# 構造図
- VPC(10.1.0.0/16)
    - Publicサブネット(10.1.1.0/24)
        - dev-web-serverインスタンスを追加
    - Privateサブネット(10.1.2.0/24)
        - 特に使用しない

![Untitled Diagram (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/779593/e1ad0fc8-36d4-4ff1-bc36-2cb8904ea477.png)

---

- Privateサブネットがない場合の図

![Untitled Diagram (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/779593/fb4a7e5a-e83f-825f-9fa6-9b3ffa9fe97a.png)

# 手順と設定
## 1. EC2の起動
-  EC2サービスを開く
-  [左タブ] インスタンス
-  下記設定でインスタンスを起動

### AMI
- Amazon Linux 2 64ビット(x86) 

### インスタンスタイプ

- t2.micro 

### インスタンスの詳細の設定
- ネットワーク: Develop(10.1.0.0/16)
- サブネット: public-subnet-1a-dev
- 自動割り当てパブリックIP: 有効 

### ストレージの追加
- 特に変更なし

### タグの追加
- タグの追加
    - キー: Name
    - 値: dev-web-server
    
### セキュリティグループの設定
- 新しいセキュリティグループ
    - グループ名: web-server
    - 説明: web-server
    - ルールの追加
        - 特に変更なし
        
            | タイプ | プロトコル | ポート範囲 | ソース   |           | 説明 |
            | ------ | ---------- | ---------- | -------- | --------- | ---- |
            | SSH    | TCP        | 22         | カスタム | 0.0.0.0/0 |      |
        - 確認と作成
            
### 起動
- キーペアの作成
    - 新しいキーペアの作成
    - キーペア名: develop
    - キーペアのダウンロード

##2. キーの移動
- ターミナルを起動
- develop.pemを保存した場所に移動
    - `cd /Downloads/`
- キーを`~/.ssh`に移動
    - `mv develop.pem ~/.ssh/`
- カレントディレクトリを`~/.ssh`に移動
    - `cd ~/.ssh`
    - `ls`でファイルを確認
- develop.pemを読み取り専用ファイルにする
    - `chmod 400 develop.pem`
    - `ls -l`で`r`のみ有効になっていることを確認
        - `-r--------`
         
## 3. ネットワークACLの設定
- VPCサービス
- [左タブ] ネットワークACL
- ネットワークACLを作成
    - Name: Develop-NACL
    - VPC: Develop

- Develop-NACLを選択、アクション「サブネットの関連づけを編集」
    - [x] public-subnet-1a-dev
    - [x] private-subnet-1a-dev


- Develop-NACLを選択、アクション「インバウンドルールを編集」
    - 下図の通り設定
        - 1024-65535を許可
        - 理論上はSSHだけあればよいのだが、上記許可がないとエラーが発生する場合があるので...
    ![スクリーンショット 2021-01-07 23.17.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/779593/5de47786-b380-f91a-e56c-cc83eb7fd54d.png)

   

- Develop-NACLを選択、アクション「アウトバウンドルールを編集」
    - インバウンドルールと同様の設定
        - ポート番号の「1024-65535」を許可
            - 返信する際のポート番号は動的に割り当てられるため

## 4. SSH接続
- EC2サービス
    - [左タブ] インスタンス
    - 起動したインスタンスを選択
    - 画面下にスクロールし、パブリック IPv4 アドレスを確認、コピー

- ターミナル
    - `ssh -i ~/.ssh/develop.pem ec2-user@[コピーしたIPv4アドレス]`
    -  Are you sure you want to continue connecting
        -  `yes`
        - ```

            __|  __|_  )
            _|  (     /   Amazon Linux 2 AMI
            ___|\___|___|
          https://aws.amazon.com/amazon-linux-2/
          ```

## 完了

    
# 終わりに
- 近頃はキーペアを作成してSSHするのではなく、セッションマネージャーによって直接アクセスする方が主流のようです
    - [セッションマネージャーでEC2にシェルアクセス](https://masakimisawa.com/ssm-ec2-ssh/)
    - [AWS Systems Manager セッションマネージャーを使ってEC2鍵とAWS ACCESS KEY管理から開放されよう](https://qiita.com/e__koma/items/009565384efbecb8a46e)
- EC2インスタンスは無料枠に時間制限があるので、使用しない場合は停止しておきましょう
- 次回はEC2インスタンスにWebサーバとしての機能を与え、ブラウザでHello,worldを表示してみます
- 間違いや改善点等ございましたらコメントをいただければ幸いです

### 作図ツール
- draw.io(https://www.draw.io/?splash=0&libs=aws4)