S3をNextCloudのプライマリストレージ(データディレクトリ)に設定する方法


TL;DR

  • NextCloudのユーザデータを,AWS S3に保存する方法を解説します
    • NextCloudのデータがクラウドストレージに格納されるようになるので(費用が掛かるデメリットを除けば),容量を気にせずに使用することができます
    • (NextCloudの機能通り)ユーザごとに個別のディレクトリが使え,かつ,共有設定もできます

NextCloudがS3を利用する2つの方法

  • NextCloudがS3を利用する方法として,以下の2つの方法があります
    • NextCloudアプリを使用して,ユーザが共有されるディレクトリをS3上に作る方法
    • データディレクトリをS3にまるまる置く方法
  • この記事では,後者の方法を扱います
    • 前者の(アプリを使う)方法は,NextCloudに設定された全ユーザが共有するディレクトリを作る方法で,ユーザごとに振り分けることができないようです(未調査です)
    • 後者の方法は,データディレクトリがS3に置かれるので,ホストのストレージ負荷を軽減できます(その分費用も掛かります)

NextCloudのユーザデータをS3に置く方法

設定

  • 以下の3つの手順で進めます
    • IAMでS3にアクセスできるユーザを作成する
    • S3にNextCloud用のバケットを作成する
    • NextCloudに作成したバケット情報を設定する

IAMでS3アクセスユーザを作成する

aws IAMにアクセスし,ユーザを作成します.

  • メニューから[ユーザ]を選び,[ユーザを追加]をクリックする
  • 適当なユーザ名を入力し[プログラムによるアクセス]にチェックします
  • アクセス許可の設定で[既存のポリシーを直接アタッチ]を選択し,[AmazonS3FullAccess]をチェックする
  • 「成功」と言われたら,[アクセスキーID]および[シークレットアクセスキー]を記録しておく
    • 注意: [表示]リンクをクリックするとシークレットアクセスキーが表示されますが,このときだけしか表示されないので注意してください!紛失したら別のユーザを作る必要があります.

S3のバケットを作成する

aws S3で,前項のユーザでアクセスできるNextCloud用のバケットを作成します.

  • [バケットを作成する]をクリックします
  • 適当なバケット名を入力します
    • (別のユーザも含めて)awsサービス全体一意な名前である必要があります
    • 適当な名前や日付などを入れて一意な名前にしてください
  • アクセス許可などはそのまま(「パブリックアクセスをすべてブロック」)でOKです
  • 「バケットの作成」をクリックし,バケットを作成します
  • バケットが作成されました.次節では,このバケットにデータを格納するようにNextCloudの設定を行います

NextCloudの設定

  • NextCloudが稼働しているホストの,config/config.phpのCONFIGアレイの中に,S3の設定を記載します.
    • NextCloudをDockerで稼働させている場合は,コンテナの/var/www/htmlにconfigディレクトリがあります
  • 以下のように,objectstoreキーで,前項までで作ったawsユーザおよびS3の情報を記載します
    • 'bucket' : バケット名
    • 'region' : S3のリージョン('ap-northeast-1'など)
    • 'key' : 20文字の大文字英数字のアクセスキー
    • 'secret' : 40文字の英数字記号のシークレットキー
<?php
// config/config.php
$CONFIG = array (
  //.....<snip>.....
  'objectstore' => array(
        'class' => 'OC\\Files\\ObjectStore\\S3',
        'arguments' => array(
                'bucket' => '<バケット名>',
                'autocreate' => true,
                'region' => '<S3のリージョン>',
                'key'    => '<20文字の大文字英数字のアクセスキー>',
                'secret' => '<40文字の英数字記号のシークレットキー>',
                'use_ssl' => false,
                'use_path_style'=> false,
        ),
    ),
    //.....<snip>.....
);

動作確認

  • ブラウザでNextCloudにアクセス(ログイン)すると,ユーザディレクトリがS3になります
    • もともとデータが(ローカルに)存在していた場合は,設定が上書きされて見えなくなっています
    • 上述のconfig.phpの設定を消すと,元に戻すことができます
  • S3のバケットには,urn:oid:数字のようなファイル名で,データが格納されます

参考