IBM CloudでVPCの仮想サーバの構築から接続

# はじめに
これまで研修を通じて、アプリケーションやLinuxといったITの基礎を勉強してきました。今回は最後の研修として、IBM製品の理解を深めることを目的とし、IBM Cloudでの仮想サーバを立ち上げてSSH接続するまでの手順を記事にまとめていきたいと思います。

**目的**
IBM Cloudで仮想サーバを構築し、SSHを使って接続するまでの一連の流れを説明します。IBM Cloudの仮想サーバの基本的な使い方を理解し、実際にサーバへアクセスする方法を習得することを目指します。

**前提**
これまでの研修でアプリケーションの開発やLinuxの基本操作について学んできたことを前提としています。また、IBM Cloudのアカウントが既に作成済みであり、基本的なクラウドの概念についての理解がある方を対象としています。


# IBM Cloudにアカウント登録
まず、最初にアカウント登録していない方はアカウントの作成を行います
アカウント登録の方法については、下記のサイトを参考に行いました。

https://qiita.com/Topfield/items/d3bdd7f696268a562340

# IBM Cloudにログイン
 [IBM Cloud](https://cloud.ibm.com/login)にログインしていきます。

 ![スクリーンショット 2024-09-17 13.38.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3848963/f747605b-02e5-b6c1-61eb-f21a7d7b8032.png)
 
 リンクのURLから上記の画面へと遷移します。
 ここで登録したメールアドレスとパスワードでログインします。
 ログインすると下の画面へと遷移します。
 
 ![スクリーンショット 2024-09-17 13.45.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3848963/f55e7f6d-bff1-9c17-d083-ae883cecb029.png)



 # 仮想サーバの作成
ここからは仮想サーバを作成していきます。

## IBM Cloudから仮想サーバ作成への画面遷移
- 画面左上にあるタブボタン(<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3848963/0eb012c4-ba85-7f0e-aaf2-e9cefea6491b.png" width="80">)クリック
- VPC インフラストラクチャ -> 仮想サーバ・インスタンス をクリック
  
 ![スクリーンショット 2024-09-17 13.58.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3848963/6353ff6f-0818-2b2b-819e-58cf691b30b9.png)

- 右にある作成ボタンをクリック

![スクリーンショット 2024-09-17 14.00.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3848963/e43e1a40-9d2d-d56b-588c-364899a0d803.png)

## 仮想サーバの設定
### ロケーションの設定
最初に仮想サーバを保管するロケーションの設定を行います。
今回は下記のように設定していきました。

- 地域：アジア太平洋
- リージョン：東京
- ゾーン：東京２

![スクリーンショット 2024-09-17 14.04.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3848963/9b2c44f8-f458-f8d7-5497-4a1a4b1e4c1c.png)


### 詳細
ここでは作成する仮想サーバの名前や管理グループを設定します。

- 名前：仮想サーバの名前（各自で好きな名前を設定してください）
- リソース・グループ：管理するグループ、リソース・グループがない場合は作成してください
- タグ：作成する仮想サーバのタグ（オプション）

### イメージとプロファイル
作成する仮想マシンのOSとプロファイルを設定していきます。プロファイルは馴染みのないものだと思いますが、vCPU の数、RAM の量、ネットワーク帯域幅、デフォルト帯域幅割り振りなど、インスタンス属性の組み合わせになります。アーキテクチャごとにプロファイル方法は異なるので注意してください。

今回の設定では、
- イメージ：Red Hat Enterprise Linux 
    - name: ibm-redhat-8-8-minimal-arm64-7
    - イメージ・タイプ：ストック・イメージ
    - アーキテクチャ: x86
- プロファイル：平衡型

![スクリーンショット 2024-09-17 14.43.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3848963/4283eb5c-9c65-2972-490c-bf4a63dc22f8.png)




#### 参考：x86-64のプロファイル設定の一覧

| ファミリー              | 説明                                                                                 |
|-----------------------|--------------------------------------------------------------------------------------|
| 平衡型                | 中規模データベースと中規模トラフィック向けのコアとRAMのバランスが取れたプロファイル。    |
| Compute               | 中〜高いWebトラフィックワークロードに最適なコア対RAMの比率を提供。CPU集約型のワークロードに適しています。 |
| メモリー               | メモリーキャッシュやリアルタイム分析ワークロードに最適。メモリー集中型ワークロードに適しています。 |
| 高容量メモリー型       | 1 vCPUあたり14 GiBのRAMを提供。小〜中規模のメモリー内データベースやOLAPワークロード向け。   |
| 超高容量メモリー型     | 1 vCPUあたり28 GiBのRAMを提供。大規模なメモリー内データベースやOLTPワークロード向けに最適化。  |
| GPU                   | NVIDIA V100およびA100 GPUへのオンデマンドアクセスを提供し、AIやデータサイエンスワークロードを加速。|
| Storage optimized     | 1 vCPU対300 GBの一時SSDインスタンス・ストレージを提供し、ストレージ密度の高いワークロード向け。   |
| 機密コンピュート       | EPC（Enclave Page Cache）を使用してアプリケーションデータを暗号化し、機密性と保全性を維持。       |



### SSH鍵
作成した仮想サーバにアクセスするためにSSH鍵を作成します。SSH鍵の作成ボタンを押すと、画面の右側にモーダルが開きます。
SSH鍵の設定では、次を設定します。
- 名前：鍵の名前
- リソース・グループ：先ほど設定したリソース・グループを設定
- タグ：鍵のタグ設定（オプション）
- 鍵のタイプ：鍵の暗号方法について設定
- SSH鍵の入力方法の選択：自分で鍵ペアを作成と、既存の公開鍵を設定することが可能

<img width=25%><img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3848963/38221299-1d27-1614-833d-453f84934e38.png" width="300">

#### SSH鍵作成時の注意
今回は、RSA鍵で自分用の鍵ペアを選択しました。作成ボタンを押すと**自動的にSSH鍵がダウンロード**されるため、無くさないように注意してください。この画面を離れると後から複製することができませんので、手元にあるのか確認してください。


### ストレージ
ここでは作成される仮想マシンのストレージを設定することができます。
今回は、デフォルトのままで進めます。

![スクリーンショット 2024-09-17 14.59.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3848963/d222d964-2404-c735-eb44-0556fb136d51.png)



### ネットワーキング
#### VPCとサブネットとは
仮想プライベートクラウド（VPC）とサブネットを設定します。まず、VPCとは何かというと、「東京」や「大阪」などの特定のリージョンに作成する、自分専用の仮想ネットワーク環境です。VPCは、クラウド上に自分だけの独立したネットワーク空間を作り出すものと考えるとわかりやすいでしょう。

VPCは特定のリージョン（たとえば「東京」や「大阪」）に構築され、そのリージョン内に存在する複数のデータセンター (DC) にまたがって運用されます。たとえば、「東京」リージョンや「大阪」リージョンは、それぞれ3つのデータセンターから構成されています。VPCはこれらのデータセンターを利用して、複数のサーバーやサービスをセキュアかつ柔軟に配置できるネットワークを作成します。

次に、サブネットとは何かというと、VPC内に作成する小さなネットワークのグループです。言い換えれば、サブネットはVPCの中にある部分的なネットワークです。サブネットを使うことで、VPC内でネットワークを細かく分割し、それぞれの部分に異なるルールや設定を適用することができます。たとえば、VPC全体を会社のオフィスに例えると、サブネットはその中の部署や部屋のようなもので、各部署に異なるセキュリティやアクセス権を設定するイメージです。


#### VPCの作成
VPCの作成ボタンをクリックすると、右側にVPC作成モーダルが表示されます。

![スクリーンショット 2024-09-17 15.33.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3848963/d52bdb62-2aae-b966-a095-a75acc261d35.png)

まず、VPCの詳細では
- 名前：VPCの名前の設定
- リソース・グループ：管理するグループの設定
- タグ：VPCのタグの設定（オプション）
を入力していきます。

モダールの下部にスクロールするとサブネットの詳細があり、ここでサブネットの作成をします。
サブネットは選択したリージョンのゾーン数まで設定することができます。

![スクリーンショット 2024-09-17 15.37.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3848963/fe5e521f-97f4-8d89-f544-b87237400d0f.png)

作成ボタンを押すことでVPCが作成されます。


#### インターフェース
先ほど作成したVPCのネットワークのインターフェースを設定することができます。
２種類あり、それぞれ下記の特徴があります。推奨は仮想ネットワーク・インターフェースになっています。



| 項目                         | 説明                                                                                           |
|----------------------------|------------------------------------------------------------------------------------------------|
| 仮想ネットワーク・インターフェース | VPCのネットワーク・インターフェースの機能と柔軟性を向上させるための拡張VPCサービス統合、高可用性、複数のIPアドレス、転送可能インターフェースなどを提供。 |
| インスタンス・ネットワーク・インターフェース | 仮想サーバー・インスタンスに接続するために複数のネットワーク・インターフェースを作成し、ネットワーク・インターフェースを介してサーバーにアクセス可能。        |

![スクリーンショット 2024-09-17 15.48.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3848963/5b9d1a3e-3ff6-85a3-dc04-4e4d1edd4693.png)


### 追加詳細オプション
追加で詳細オプションを設定することができますが、今回はデフォルトのまま進めていきます。

![スクリーンショット 2024-09-17 15.50.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3848963/2db1b7dd-6888-b6d3-d6fc-2e120ae87095.png)

全ての設定を記入後に、右側の**仮想サーバーの作成**ボタンを押すことで、仮想サーバーが作成されます。
仮想サーバーの作成に時間がかかる場合もあります。


# 浮動IPアドレスの作成
仮想サーバの作成後の画面では浮動IPが空欄になっています。
作成した仮想サーバーにアクセスするため、IPアドレスを設定していきます。

![スクリーンショット 2024-09-17 15.56.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3848963/12582d8f-2a1e-c154-b2c2-87f86f8525e4.png)


左側のタブから、
VPCインフラストラクチャー -> ネットワーク　-> 浮動IP を選択

<img width=25%><img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3848963/6a1e1b7a-4ea4-dc1b-9c0c-7fde5274bf8f.png" width="300">


予約を選択していきます。

![スクリーンショット 2024-09-17 16.04.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3848963/7e39d150-656b-bc65-7409-4289efcbc087.png)


すると、右側に浮動IPの予約画面が表示されます。
ロケーションの設定は、仮想サーバと同じままで、詳細を設定します。

<img width=25%><img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3848963/2d86b5f5-f81a-7718-c944-18fd62a10ed9.png" width="300">


詳細設定では、下記を設定します。
- 名前：浮動IPの名前を設定
- リソース・グループ：管理するグループの設定
- タグ：浮動IPのタグ設定（オプション）
- バインドするリソース：紐付けするインスタンスを設定、今回は作成した仮想サーバになります

予約ボタンをクリックすると、予約された浮動IPが表示されます。

![スクリーンショット 2024-09-17 16.20.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3848963/1251021f-03de-5d86-557b-f8e608e8544d.png)

**浮動IPの注意**
サーバを再起動すると、IPアドレスが変更されることもあるので、注意してください。


# 仮想サーバにアクセス
作成した仮想サーバーにSSH接続して、ログインしていきます。
ダウンロードされた秘密鍵を```~/.ssh```に移動させておきます。

今回はVirtual Studio Codeの拡張機能のリモートエクスプローラーを使ってSSH接続していきます。
リモートエクスプローラからSSHタブの横にあるプラスボタンを押します。

![スクリーンショット 2024-09-17 16.41.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3848963/da53f48a-8d6d-3e3b-ac1e-d38824795561.png)

そしてコマンドを入力して、アクセスしていきます。
```shell
ssh -i ~/.ssh/<sshkey_name> root@<浮動IP address>
```
![スクリーンショット 2024-09-17 16.53.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3848963/f02a7d82-6aca-6274-0ed3-880173370133.png)

ssh configの記載場所の指定のメッセージが出てきますが、これは任意の場所で構いません。
接続情報をlocalに保存するもので、そのままエンターで構いません。

左側のREMOTESに追加されていることがわかります。
カーソルを合わせて矢印ボタンでは現在のウィンドウで接続でき、窓ボタンでは新しいウィンドウで接続できます。

![スクリーンショット 2024-09-17 17.06.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3848963/2ddca21f-1308-00b1-34aa-eb008cc81f0f.png)


今回は新しいウィンドウで接続して、フォルダを開くと接続することができました！
![スクリーンショット 2024-09-17 17.10.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3848963/e7670e35-7ffc-6b4a-f238-3983b2a2dfad.png)


# やってみた所感
元々AWSで仮想サーバを立てていた経験もあり、作成自体は難なく進められたところがよかったと感じました。
設定する項目も少なく、AWSではドキュメントが英語のみの場合も多いのでその点はやりやすいなと思いました。

今回の苦労した点では、そもそもVPCとは何か理解する点から始まったところとVS CodeでSSH接続する時に、秘密鍵の権限を変更するところが必要だった点に時間を費やしてしまいました。


# まとめ
今回は、IBM CloudでVPCサーバを立てて、SSH接続するまでの記事を書かせてもらいました。今回は単体の仮想サーバを立てて接続するまでのことしかできていないので、これから複数のサーバの連携や、仮想サーバを動かしてみたいなと感じました。


# 参考文献

https://qiita.com/6onoda/items/06f9a4b1090d05ea0813

https://qiita.com/kimuni-i/items/f9957efccb9ed4bf1495

https://qiita.com/yyy752/items/32f66d877de41655b7bb