acd_cli で Amazon Cloud Drive を FUSE mount する

Posted about 8 years ago by yoosee.
  linux cloudstorage

2017/07 追記: ACD側のポリシー変更なのか、acd_cli を始めとするAPIを多用するツールが押しなべて利用不可になっているようで、下記方法は使えなくなっている。またACDの無制限プラン(Unlimited Everything)もUSでは廃止になっているため、個人的にも継続利用はしない方針。

去年の Black Friday で Amazon Cloud Drive Unlimited Everything プランが通常 $90 / year のところ $5 というお試し価格になっていたので試しに契約してみた。

Amazon Cloud Drive Unlimited Everything

しかし Amazon から提供されるクライアントは Windows 向けや Android/iOS 向けで、Linux 向けがないので自宅 Debian マシンにファイルを溜め込んでいる身からは使いにくい。ちょっと調べると API を用いた CLI ツールの実装が幾つかあったのでその中でも acd_cli というものを試してみた。結論から言えば素晴らしく使い物になる。

yadayada/acd_cli: A command line interface and FUSE filesystem for Amazon Cloud Drive

ポイントは FUSE として仮想 mount point を作れることで、容量無制限の Amazon Cloud Drive を自分のマシンのディレクトリとして管理できる。ファイルのアップロードはそこにコピーするだけなので大変簡単だ(同等のことはWebdavがあるBox.comなどでも出来るのだが)。一応最大ファイルサイズなどに制限があるようではあるが、バックアップを含めた普段使いでは特に困っていない。

adc_cli のインストール

インストールだが、基本的には docs/setup.rst にある通り Python の pip でインストールする。Debian stretch だと pip のバージョンが古くてそのままでは使えなかったので、python-virtualenv 及び python3 を使った下準備から始める。

% virtualenv -p /usr/bin/python3 acdcli
% source acdcli/bin/activate
...
% bin/pip3 install --upgrade git+https://github.com/yadayada/acd_cli.git

認証と利用

導入が終わったら認証を設定する。これも基本的には docs/authorization.rst のまま。Amazon App としての認証をお任せにする設定方法もあるが、今回は自前で Amazon Developer 登録で取得できる Key pair を使って設定した。

https://developer.amazon.com/public/apis/experience/cloud-drive/content/getting-started

Developer ConsoleLogin with Amazon タブから Create a New Security Profile で新しい Profile を作ると OAuth2 Credentials として Client ID 及び Client Secret が生成される。これを ~/.cache/acd_cli/client_data というファイルとして以下のフォーマットで記載する。

.. code :: json
 {
     "CLIENT_ID": "amzn1.application-oa2-client.0123456789abcdef0123456789abcdef",
     "CLIENT_SECRET": "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"
 }

これを設定した上で初期化コマンドを実行。

% bin/acd_cli -v init

URLが出るのでブラウザで表示して認証を進めると、oauth_data というファイルがダウンロードされる。これを以下のように配置する。

% mv oauth_data ~/.cache/acd_cli/

これでもう使えるようになっているはずだ。acdcli コマンドでステータスを表示したり単体ファイルをプッシュ・プルしたりできる。FUSE mount するのはパラメータに mount を指定して mount 先のディレクトリを記載するだけ。先に一度 sync しておく。

% acdcli sync
% acdcli mount ~/var/acd

これで ~/var/acd (ないし上記で指定する任意のディレクトリ)に Amazon Cloud Drive のトップディレクトリが表示され、操作やファイルの転送ができるようになる。

ちなみに df で確認すると容量は 100TB となっているようで、実際 Quota を見ると

% acdcli quota
...
    "quota": 109951162777600
}

という数字が返ってくる。Unlimited Plan なはずなので、100TB 近辺になると Quota が増えるんだろうか。まあ自分の用途で100TBどころか10TBを超えることもまず無いだろうと思うので何ら問題のない数値ではあるが。