このトピックでは、ossfsの設定方法について説明します。
前提条件
ossfsがインストールされています。 詳細については、「インストール」をご参照ください。
アカウント情報の指定
ossfsを使用してObject Storage Service (OSS) バケットにアクセスする場合は、AccessKey IDやAccessKey secretなどのアカウント情報を指定する必要があります。 アカウント情報は、$bucket_name:$access_key_id:$access_key_secret
形式でアカウント設定ファイルに書き込む必要があります。 ossfsは、アカウント設定ファイルからアカウント情報を取得します。
AccessKey IDとAccessKeyシークレットの作成方法については、「AccessKeyペアの作成」をご参照ください。
アカウント設定ファイルのデフォルトパスは /etc/passwd-ossfsです。 -opasswd_file=passwd-pathオプションを使用して、設定ファイルのパスを指定することもできます。 デフォルトパスのアカウント設定ファイルの権限を640できます。 別のパスのアカウント設定ファイルの権限を600する必要があります。
アカウント設定ファイルには、複数のアカウントのレコードを含めることができます。 各行は1つのアカウントに関する情報を提供します。 ossfsを使用してバケットをマウントすると、ossfsはバケット名を正しいアカウントに一致させます。
設定例:
エコーバケット-テスト-1:AAAIbZcdVCmQ ****:AAA8x0y9hxQ31coh7A5e2MZEUz **** > /etc/passwd-ossfs エコーバケット-テスト-2:BBBIbZcdVCmQ ****:BBB8x0y9hxQ31coh7A5e2MZEUz **** >> /etc/passwd-ossfs chmod 640 /etc/passwd-ossfs mkdir /tmp/ossfs-1 mkdir /tmp/ossfs-2 ossfs bucket-test-1 /tmp/ossfs-1 -ourl=http://oss-cn-hangzhou.aliyuncs.com ossfs bucket-test-2 /tmp/ossfs-2 -ourl=http://oss-cn-hangzhou.aliyuncs.com
複数のバケットをマウントする場合は、すべてのアカウントに関する情報を1つのアカウント構成ファイルに書き込むか、各アカウントに関する情報を個別のアカウント構成ファイルに書き込むことができます。 -opasswd_file=xxxオプションを使用して、アカウント設定ファイルを選択できます。
設定例:
エコーバケット-テスト-3:CCCIbZcdVCmQ ****:CCC8x0y9hxQ31coh7A5e2MZEUz **** > /etc/passwd-ossfs-3 chmod 600 /etc/passwd-ossfs-3 mkdir /tmp/ossfs-3 ossfs bucket-test-3 /tmp/ossfs-3 -ourl=http://oss-cn-hangzhou.aliyuncs.com -opasswd_file=/etc/passwd-ossfs-3 エコーバケット-テスト-4:DDDIbZcdVCmQ ****:DDD8x0y9hxQ31coh7A5e2MZEUz **** > /etc/passwd-ossfs-4 chmod 600 /etc/passwd-ossfs-4 mkdir /tmp/ossfs-4 ossfs bucket-test-4 /tmp/ossfs-4=http://oss-cn-hangzhou.aliyuncs.com -opasswd_file=/etc/passwd-ossfs-4
インスタンスRAMロールの使用
ECS (Elastic Compute Service) では、インスタンスRAM (Resource Access Management) ロールに基づいてossfsを使用できます。 ECSインスタンスにRAMロールをアタッチして、ECSインスタンスからOSSにアクセスするには、Security Token Service (STS) から取得した一時的なアクセス資格情報を使用します。 STSの一時的なアクセス資格情報は自動的に生成および更新されます。 アプリケーションは、インスタンスメタデータURLを使用してSTSの一時的なアクセス資格情報を取得できます。 RAMロールは、AccessKeyペアのセキュリティを保護し、きめ細かい権限の制御と管理を容易にします。 インスタンスRAMロールの詳細については、「概要」をご参照ください。
このセクションでは、EcsRamRoleOssTestインスタンスRAMロールを使用してossfsを使用する方法について説明します。
EcsRamRoleOssTestという名前のRAMロールを作成します。
詳細については、「ECSインスタンスへのインスタンスRAMロールのアタッチ」をご参照ください。
RAMロールにOSSリソースへのアクセス権限を付与します。
詳細については、「RAMロールへの権限の付与」をご参照ください。 この例では、AliyunOSSReadOnlyAccessポリシーがRAMロールにアタッチされています。 実際のビジネスアプリケーションでは、カスタム権限を付与できます。 詳細については、「カスタムポリシーの作成」をご参照ください。
RAMロールをECSインスタンスにアタッチします。
詳細については、「ECSインスタンスへのインスタンスRAMロールのアタッチ」をご参照ください。
インスタンスメタデータURLに基づいてossfsを使用します。
ECSインスタンスにログインします。
ossfsコマンドを使用してバケットをマウントし、コマンドに -oram_roleオプションを含めます。
次の例では、中国 (杭州) リージョンにあるBucket1という名前のバケットを使用します。
ossfs bucket1 /tmp/ossfs -ourl=http://oss-cn-hangzhou.aliyuncs.com=http:// 100.100.100.200/latest/meta-data/ram/security-credentials/EcsRamRoleOssTest
アクセス許可の設定
デフォルトでは、ossfsがバケットをマウントするディレクトリには、マウントポイントの所有者のみがアクセスできます。 マウントポイントの所有者は、マウント操作を実行するユーザーです。 他のユーザーまたはユーザーグループがマウントポイントにアクセスできるようにデフォルトの権限設定を変更するには、ossfsを実行するときに次のオプションを使用します。
- allow_other: 他のユーザーがバケットがマウントされているディレクトリへのアクセスを許可しますが、ディレクトリ内のオブジェクトへのアクセスは許可しません。 ディレクトリ内のオブジェクトのアクセス許可を変更するには、chmodコマンドを実行する必要があります。 このオプションには値がありません。 他のユーザーに権限を付与するには、-oallow_otherオプションを使用します。
uid: ディレクトリの所有者のユーザーID (UID) を指定します。
gid: ディレクトリの所有者のグループID (GID) を指定します。
mp_umask: マウントポイントの権限マスクセットを指定します。 このオプションは、allow_otherオプションが設定されている場合にのみ有効になります。 デフォルト値は000です。 たとえば、-oallow_other -omp_umask=007を使用してマウントポイントの権限を770に設定したり、-oallow_other -omp_umask=077を使用してマウントポイントの権限を700に設定したりできます。
umask: マウントポイントのファイルとディレクトリのアクセス許可を設定します。 デフォルト値は000です。 たとえば、-oumask=007を使用してマウントポイントのファイルの権限を770に設定したり、-oumask=077を使用してマウントポイントのファイルの権限を700に設定したりできます。
設定例:
すべてのユーザーからのアクセスを許可する権限を777に設定します。
ossfs bucket_name mount_point -ourl=endpoint -oallow_other
権限を770に設定して、マウントポイントの所有者と同じグループのユーザーからのアクセスのみを許可します。
ossfs bucket_name mount_point -ourl=endpoint -oallow_other -omp_umask=007
マウントポイントのファイルおよびディレクトリの権限を770に設定して、マウントポイントの所有者と同じグループのユーザーのみがアクセスを許可します。
ossfs bucket_name mount_point -ourl=endpoint -oumask=007
マウントポイント上のファイルおよびディレクトリの権限を770に設定して、マウントポイントの所有者と同じグループおよび他のグループのユーザーによるアクセスを許可します。
この例では、ユーザーwwwが使用されています。 idコマンドを実行してユーザーのUIDまたはGIDを取得し、バケットをマウントするときにuidまたはgidパラメーターを指定できます。
id www uid=1000(www) gid=1000(web) groups=1000(web) ossfs bucket_name mount_point -ourl=endpoint -oallow_other -ouid=1000 -ogid=1000 -omp_umask=007
特定のディレクトリをマウントする
ossfsを使用して、プレフィックスを指定してバケット内の特定のディレクトリをローカルファイルシステムにマウントできます。 コマンド構文:
ossfsバケット:/prefix mount_point -ourl=endpoint
このコマンドを実行するときは、バケットに ${prefix}/ オブジェクトが存在することを確認してください。 ossutilのstatコマンドを実行して、そのようなオブジェクトが存在するかどうかを確認できます。
次のコマンドでは、folderディレクトリを中国 (杭州) リージョンのbucket-ossfs-testバケットの /tmp/ossfs-folderフォルダーにマウントする方法の例を示します。
ossfs bucket-ossfs-test:/folder /tmp/ossfs-folder -ourl=http://oss-cn-hangzhou.aliyuncs.com
起動時にディレクトリを自動的にマウントする
バケット名、AccessKey ID、AccessKey secretなどの情報を /etc/passwd-ossfsファイルに追加し、ファイルの権限を640に変更します。
詳細については、「インストール」をご参照ください。
起動時に自動マウントを有効にします。
説明次の例は、UbuntuとCentOSの一般的なバージョンの起動時に自動マウントを有効にする方法を示しています。 その他のバージョンについては、関連ドキュメントを参照して、起動時に自動マウントを有効にします。
Ubuntu 14.04以降およびCentOS 6.5以降のfstabファイルを使用して起動時に自動マウントを有効にする
次の行を /etc/fstabファイルに追加します。
ossfs#bucket_name mount_point fuse _netdev、url=url、allow_other 0 0
bucket_name
は、マウントするバケットの名前です。mount_point
は、バケットをマウントするローカルディレクトリです。url
はバケットのエンドポイントです。0 0
は、ファイルシステムのオプションです。/etc/fstabファイルを保存します。 mount -aコマンドを実行します。 エラーが報告されない場合、設定は正しく構成されています。
上記の手順を完了すると、Ubuntu 14.04で起動時の自動マウントが有効になります。 CentOS 6.5では、次のコマンドも実行する必要があります。
chkconfig netfs on
CentOS 7.0以降のスクリプトを使用して起動時に自動マウントを有効にする
/etc/init.d/ ディレクトリにossfsファイルを作成し、テンプレートの内容をこのファイルにコピーします。 your_xxxを実際の情報に置き換えます。
次のコマンドを実行して、ossfsスクリプトに実行権限を付与します。
chmod a + x /etc/init.d/ossfs
上記のコマンドを実行した後、スクリプトを実行できます。 スクリプトの内容が正しい場合、OSSバケットは指定されたディレクトリにマウントされます。
次のコマンドを実行して、起動時に自動的に有効になるサービスとしてossfsスクリプトを起動します。
chkconfig ossfs on
上記の手順を完了すると、ossfsは起動時にバケットを自動的にマウントします。
Supervisorを使用してossfsを開始する
Supervisorは、Pythonで開発されたユニバーサルプロセス管理プログラムです。 スーパーバイザーは、一般的なコマンドラインプロセスをバックグラウンドデーモンに変換し、プロセスを監視できます。 プロセスが予期せず停止すると、スーパーバイザーは自動的にプロセスを再開します。 Supervisorを使用してossfsを起動するには、次の手順を実行します。
次の手順では、sudo権限を持つuser1ユーザーのインストールパスを使用します。 インストールパスを実際のインストールパスに置き換えます。
Supervisorをインストールする:
CentOS
sudo yum install supervisor
Ubuntu
sudo apt-get install supervisor
ossfsスタートアップスクリプトを作成します。
次のコマンドを実行して、start_ossfs.shファイルを作成します。
mkdir /home/user1/ossfs_scripts
起動スクリプトを記述します。
vi /home/user1/ossfs_scripts/start_ossfs.sh
次のコードは、start_ossfs.shファイルの内容の例です。
# バケットのマウントを解除します。 fusermount -u /mnt/ossfs # バケットを再度マウントします。 フロントエンドでossfsを実行するには、-fパラメーターを使用する必要があります。 exec ossfs bucket_name mount_point -ourl=endpoint -f
supervisord.confファイルを編集します。
Centos
sudo vi /etc/supervisord.conf
Ubuntu
sudo vi /etc/supervisor/supervisor. conf
ファイルの最後に次の内容を追加します。
[program:ossfs] コマンド=bash /home/user1/ossfs_scripts/start_ossfs.sh logfile=/var/log/ossfs.log log_stdout=true log_stderr=true logfile_maxbytes=1MB logfile_backups=10
次のコマンドを実行してSupervisorを実行します。
supervisord
Supervisorが正常に実行されているか確認します。
次のコマンドを実行して、Supervisorプロセスを確認します。
ps aux | grepスーパーバイザー
次のコマンドを実行してossfsプロセスを確認します。
ps aux | grep ossfs
次の結果が返されます。 2044と2452はossfsのプロセスIDです。
次のコマンドを実行してossfsプロセスをシャットダウンします。
重要killallコマンドは使用しないでください。 killallコマンドを実行すると、コマンドはSIGTERM信号を送信してossfsプロセスを停止します。 この場合、Supervisorはossfsプロセスを再起動しません。
kill -9プロセスID
ossfsプロセスがシャットダウンされた後、Supervisorはossfsプロセスを再起動します。
次のコマンドを実行してossfsプロセスを確認します。
ps aux | grep ossfs
デバッグログの有効化
ossfsを使用すると問題が発生する可能性があります。 問題の分析と特定を支援するために、デバッグログ機能を有効にできます。 次のいずれかの方法を使用して、デバッグログを有効にできます。
バケットをローカルディレクトリにマウントするときに、-d -odbglevel=debug -ocurldbgオプションを追加します。 ossfsは、ログをシステムログに書き込みます。
CentOS
ログは /var/log/messagesに保存されます。
Ubuntu
ログは /var/log/syslogに保存されます。
バケットをローカルディレクトリにマウントするときに、-d -odbglevel=debug -ocurldbg -fオプションを追加します。 ossfsはログを画面に表示します。