[Oracle Cloud] インスタンス・プールでの共有ファイルシステムの利用 (2021/03/01)

同じインスタンス構成に基づいた複数のコンピュート・インスタンスをプロビジョニングするインスタンス・プールで共有ファイルシステムを利用する設定をしてみた。
参考：[インスタンスのオートスケーリングを設定する](https://oracle-japan.github.io/ocitutorials/intermediates/autoscaling/)

# ポイント

- /etc/fstab にマウント情報を記述後に、カスタム・イメージを作成し、カスタム・イメージからインスタンス構成を作成する
- インスタンス構成にアタッチしたブロック・ボリュームのコンテンツを含める場合、アタッチしたブロック・ボリュームのバックアップを作成し、CLI（またはAPI）を使用していインスタンス構成を作成する

# File Storage Serviceを使用した場合
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108635/fcdec7f2-3e79-9b58-e1d3-be4734ff5a80.png)

## 事前準備

- [OCI チュートリアル](https://oracle-japan.github.io/ocitutorials/)を参考に
    - VCN/Subnet/Gateway/Route Tableなど[ネットワークリソースを作成](https://oracle-japan.github.io/ocitutorials/beginners/creating-vcn/)
    - [Computeインスタンスを作成](https://oracle-japan.github.io/ocitutorials/beginners/creating-compute-instance)
    - [ファイルストレージサービスの作成とファイルシステムのマウント](https://oracle-japan.github.io/ocitutorials/beginners/using-file-storage/)
    - [oci cli実行環境の設定](https://community.oracle.com/tech/welcome/discussion/4474263/%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%83%A9%E3%82%A4%E3%83%B3-cli-%E3%81%A7oci%E3%82%92%E6%93%8D%E4%BD%9C%E3%81%99%E3%82%8B-oracle-cloud-infrastructure%E3%82%A2%E3%83%89%E3%83%90%E3%83%B3%E3%82%B9%E3%83%89)

- Computeインスタンスでの追加作業
    - /etc/fstab に ファイルストレージサービスのエントリを追記
    - 必要に応じて共有するファイルを配置
        - Webコンテンツ（HTMLファイル）などを配置
        - アプリケーションが共有ファイルシステムを利用するように設定 

## カスタム・イメージの作成
ファイルストレージのマウントができ、アプリケーションの設定が完了後に、カスタム・イメージを作成
（ カスタム・イメージ作成中は、インスタンスが停止するので注意）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108635/984987b0-08d7-cc0b-6275-5aa27af7dddb.png)
カスタム・イメージに名前を付けて作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108635/66b2c250-08dd-891c-90c0-47c0e1e56fa8.png)

## インスタンス構成の作成
作成したカスタム・イメージを元にインスタンス構成を作成

インスタンス構成は、稼働中のインスタンスから作成が可能だが、cliを使う場合、カスタム・イメージから直接インスタンス構成の作成が可能

### cli用パラメータファイル（input.json）の準備

可用性ドメイン名と以下のOCIDを利用

- コンパートメント
- サブネット
- カスタム・イメージ
- （オプションで）ネットワーク・セキュリティ・グループ

```input.json
{
    "instance-type": "compute",
    "launch-details": {
      "agent-config": {
        "is-management-disabled": false,
        "is-monitoring-disabled": false
      },
      "availability-domain": "AD-1",
      "compartment-id": "ocid1.compartment.oc1..aaaaaaaa",
      "create-vnic-details": {
        "assign-public-ip": true,
        "defined-tags": null,
        "display-name": "vnic-display-name",
        "freeform-tags": null,
        "hostname-label": null,
        "nsg-ids": [
          "ocid1.networksecuritygroup.oc1.aaaaaaaa"
        ],
        "private-ip": null,
        "skip-source-dest-check": false,
        "subnet-id": "ocid1.subnet.oc1..aaaaaaaa"
      },
      "dedicated-vm-host-id": null,
      "defined-tags": null,
      "display-name": "instance_config_ap01",
      "extended-metadata": null,
      "fault-domain": null,
      "freeform-tags": null,
      "ipxe-script": null,
      "is-pv-encryption-in-transit-enabled": false,
      "launch-mode": "PARAVIRTUALIZED",
      "launch-options": {
        "boot-volume-type": null,
        "firmware": null,
        "is-consistent-volume-naming-enabled": null,
        "is-pv-encryption-in-transit-enabled": null,
        "network-type": "PARAVIRTUALIZED",
        "remote-data-volume-type": null
      },
      "metadata": null,
      "preferred-maintenance-action": "REBOOT",
      "shape": "VM.Standard.E3.Flex",
      "shape-config": {
          "memoryInGBs": 8.0,
          "ocpus": 1.0
      },
      "source-details": {
        "bootVolumeSizeInGBs": null,
        "image-id": "ocid1.image.oc1..aaaaaaaa",
        "source-type": "image"
      }
    },
    "secondary-vnics": null
}
```

### cliを使ったインスタンス構成の作成

```
oci compute-management instance-configuration create --instance-details file://input.json --compartment-id ocid1.compartment.oc1..aaaaaaaa
```

## インスタンス・プールの作成

作成したインスタンス構成をもとにインスタンス・プールの作成
参考：[インスタンスのオートスケーリングを設定する](https://oracle-japan.github.io/ocitutorials/intermediates/autoscaling/)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108635/f143bd6e-ae4e-f361-aa73-bae8d7227a51.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108635/d597b32a-41bc-d2cf-bcd7-b4e68d19fabf.png)


## 確認
起動したインスタンスでファイルストレージの領域がマウントされていることを確認


# おわりに
インスタンス・プールのインスタンス間で共有ファイルシステムを使った構成ができた。

## 参考

- OCFS の設定 [Using the Multiple-Instance Attach Block Volume Feature to Create a Shared File System on Oracle Cloud Infrastructure](https://blogs.oracle.com/cloud-infrastructure/using-the-multi-attach-block-volume-feature-to-create-a-shared-file-system-on-oracle-cloud-infrastructure)
- [BeeGFSパラレル・ファイル・システムのデプロイ](https://docs.oracle.com/ja/solutions/deploy-beegfs/index.html#GUID-61DDEA18-1EEA-47B1-903C-57EBA3CACC4D)
- [GlusterFSを使用した、スケーラブルな分散ファイル・システムのデプロイ](https://docs.oracle.com/ja/solutions/deploy-glusterfs/index.html#GUID-147BA563-0282-43B7-8FBF-C243AC464C2A)
- [ロード・バランシングされたWebアプリケーションの自動スケーリング](https://docs.oracle.com/ja/solutions/autoscale-webapp/index.html#GUID-8DEA8911-8AC5-4C10-B3E2-0D30B58DCBB0)