LinuxでMinIOをマウント — NetDriveでUbuntu上のセルフホストS3ストレージ
NetDriveの実験的Ubuntuビルドで、セルフホストのMinIOバケットをLinuxのマウントポイントとしてマウント。エンドポイント設定、パススタイルアクセス、確認手順を解説。
あるビルドチームは、マネージドのオブジェクトストレージに料金を払う代わりに、Ubuntuサーバーのラック上で自前のMinIOクラスタを運用している——Dockerのレイヤーキャッシュ、夜間テストのフィクスチャ、そしてオフィスのネットワークから外に出る必要のない数テラバイトのアーティファクトだ。CIランナーはすでにプレーンなシェルコマンドでローカルパスを読み書きしており、3ラック先にあるだけのバケットに到達するためだけにMinIOのSDKを使うようスクリプトを書き換えるのは、解決不要な問題を解決するように感じられる。NetDriveのLinuxビルドはそのバケットを普通のパスとしてマウントするので、既存のスクリプトはそのまま動き続ける。

UbuntuでMinIOをマウント
NetDrive を使えば Google Drive、OneDrive、S3、SFTP、WebDAV などが Windows と macOS でネイティブドライブとして表示されます — 同期も、まるごとダウンロードも不要です。
- S3互換接続 — 任意のセルフホストMinIOエンドポイントで動作
- Ubuntu 16.04以降で動作
- 既存のシェルスクリプトは通常のマウントポイント経由で読み書き可能
無料トライアル。永久ライセンスとサブスクリプションプランあり。
MinIO APIに対してスクリプトを書くより、マウントポイントの方が優れている理由
MinIOに直接アクセスするには、mcクライアントやS3 SDKを組み込み、アクセスキーのローテーションを扱い、ジョブごとに異なる言語でリトライロジックを書く必要がある。どれも難しくはないが、本質的には「このファイルを読んで、あのファイルを書く」だけのタスクに、インフラ作業を貼り付けているようなものだ。バケットをマウントすればそのレイヤーはまるごと不要になる——tar、cp、rsyncなど、すでにローカルパスの扱い方を知っているツールなら何でも、マウントポイントを同じように扱える。
NetDriveはバージョン3.15.450(2021-11-08)以降、MinIOをS3互換接続として十分にサポートしてきた。これはAmazon S3自体とともに汎用のS3互換サポートが追加されたのと同じリリースだ。ただしLinux上では、この接続タイプはNetDriveの実験的Ubuntuビルド上で動作し、テストがより充実したWindows版・macOS版とは異なる。Linuxは、NetDrive自身の比較ページで「実験的」というラベルが付いている点は最初に知っておく価値がある。

始める前に必要なもの
- MinIOエンドポイントURL — ローカルネットワーク上のマシンなら
http://minio.internal:9000のようなもの、クラスタがリバースプロキシの背後にあるならHTTPS URL。MinIOのAPIはデフォルトでポート9000で待ち受けており、Webコンソールは別ポートで動作していてNetDriveが通信する相手ではない。 - アクセスキーとシークレットキー — NetDriveが必要とするバケットに限定したサービスアカウント。MinIOコンソールのIdentity → Service Accountsから、または
mc admin user svcacct addで作成する。長時間稼働するものにはルート認証情報を使わないこと。 - バケット名 — NetDriveはバケット単位で接続するため、複数のバケットが必要なサーバーではバケットごとに別々のNetDrive接続を用意する。
- Ubuntu 16.04以降。MinIOエンドポイントのポートへのアウトバウンドアクセスが、マシンのファイアウォールで許可されていること。
UbuntuへのNetDriveインストール
NetDrive for LinuxはUbuntuの標準リポジトリには存在しないため、セットアップはaptではなくGitHub経由で行う。
- github.com/NetDrive/installerにアクセスし、使用中のUbuntuバージョンに合ったリリースをダウンロードする。
- インストール前にそのリリースのノートを確認すること——ドライバコンポーネントを先にロードする必要があり、そうしないと接続がマウントされない。
- パッケージをインストールし、一度NetDriveを起動してドライバをロードする。マシンの設定によっては、このステップで
sudoを求められることがある。
手順:MinIOバケットを接続する
- NetDriveのDrive Managerを開き、+ Add Driveをクリックする。
- プロバイダ一覧からAmazon S3を選択する——MinIOはS3 APIを話すため、これがNetDriveでMinIOや他のS3互換ストレージに使うエントリポイントとなる。

- 先ほど作成したサービスアカウントのアクセスキーIDとシークレットアクセスキーを入力する。
- Regionには
us-east-1のような空でない値を設定する——MinIOはこの値を無視するが、フィールドを空にはできない。 - エンドポイントを入力する——MinIOのAPI URL、例えば
http://minio.internal:9000。 - マウントするバケット名を入力する。
- Path styleを有効化する(Force path styleと表示されることもある)。セルフホストのMinIOでは通常、仮想ホスト形式のバケットURL用のDNSエントリが存在しないため、バケットをパスセグメントとして扱うパススタイルのアドレッシングが、そのまま動作する設定になる。
/mnt/minio-artifactsのようなマウントポイントを設定し、Connectをクリックする。
CIジョブが依存する前にマウントを確認する
無人ジョブをそこに向ける前に、マウントが実際に成功していることを確認する。
# Confirm the mount is listed
mount | grep minio-artifacts
# Or just list it
ls /mnt/minio-artifacts

ディレクトリが空に見える、またはマウントが一向に現れない場合は、アクセスキーが間違っていると決めつける前に、マシンのファイアウォールがMinIOエンドポイントのポートへのアウトバウンド通信を許可しているか確認すること——ロックダウンされたビルドサーバーでは、認証情報の誤りよりもポートのブロックが原因であることの方が多い。

Linuxビルドで想定しておくべきこと
- リリースサイクルが別建てであること。 WindowsやmacOS向けに出た修正が、同じ週にLinuxビルドへ自動的に反映されるわけではない。
aptとの統合がないこと。 更新はパッケージマネージャーではなくGitHubリリースから配布されるため、新バージョンの追跡は手作業になる。- WindowsとmacOSの方がテストが手厚いこと。 MinIOを読み込むCIランナーや夜間ジョブにはLinuxビルドは妥当な選択だが、無人の本番パイプラインの背後に置く前に十分にテストすること。
まとめ
セルフホストのMinIOバケットをUbuntu上でマウントすれば、S3 SDK周りを書き換えることなく、NetDriveがWindowsやmacOSで提供するのと同じドライブ形式のアクセスをビルドサーバーにもたらせる。よりテストが充実した他のプラットフォームでの同じプロバイダについてはMount MinIO on WindowsやMount MinIO on macOSを、Linux全般についてはNetDrive on Ubuntu Linuxを、S3互換ストレージを軸にしたCI向けの活用例についてはDevOps: S3 Test Fixtures with NetDriveを参照してほしい。
— Kai, NetDrive