Cygwinでs3cmdを使えるようにしてみた

記事タイトルとURLをコピーする

こんにちは。「カラオケ行くー」と言ったら「ひとりで?」という返事が返ってくるようになった竹永です。

 

みなさまはCygwinを使ったことはありますか?僕はなかなか気に入っています。
社内のWindowsな方々に「Cygwin使いましょう!」と布教していますが、基本的な返事は「いらない」です。

でも正直なところ、仮想マシンにLinuxを入れるかMacを買ったほうが手っ取り早いです。しょうがない。

さて、使い始めてから気がついたのですが、G○○gle先生にCygwinのことを聞いてもあまり答えてくれません。
今回のs3cmdのインストールも、その1つです。

WindowsでUNIXライクな黒い画面の選択肢がCygwinくらいしかないのにこれはひどい。
ということで、インストールして使うところまでをまとめてみました。

必要なパッケージのインストール

Cygwinの公式サイトからダウンロードできるsetup-x86.exeを使ってs3cmdを動かすのに必要なパッケージをインストールします。

必要なパッケージは以下のとおりです。

  • git
  • python (バージョン2.x)
  • python-setuptools

これだけです。インストールに少し時間がかかるかもしれませんが気長に待ちましょう。

※apt-cygはお肌に合わなかったので使わない方向でいきます。

s3cmdのダウンロードとインストール

公式のGitHubリポジトリからgit cloneを使ってダウンロードします。

$ git clone https://github.com/s3tools/s3cmd.git

そしてインストール。

$ cd s3cmd
$ python setup.py install

これでインストールは完了です。
s3cmdを実行できるか確認してみましょう。

$ cd
$ s3cmd --version
s3cmd version 1.5.0-beta1

バージョンが表示されるようであればインストールされています。

s3cmdの設定

s3cmd --configureで初期設定を行います。

まずはアクセスキーとシークレットアクセスキーを入力します。
S3へのアクセス権限だけを持ったIAMユーザーのキーを使うのがおすすめです。

$ s3cmd --configure


Enter new values or accept defaults in brackets with Enter.
Refer to user manual for detailed description of all options.

Access key and Secret key are your identifiers for Amazon S3
Access Key: AKIAXXXXXXXXXXXXXXXX
Secret Key: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

次はクライアント側でのファイル暗号化の設定です。今回は使いません。
空白のままエンターを押して次に進みましょう。

※ファイル暗号化を使用する場合は、GPGを事前にインストールして設定すると使用できます。
※初期設定はこちらを参考にしてください。

Encryption password is used to protect your files from reading
by unauthorized persons while in transfer to S3
Encryption password:
Path to GPG program:

HTTPSを使用するかどうかを選択します。プロキシ越しの環境では使用できないので注意しましょう。
※今回はYesにします(Noを選択するとプロキシの設定を行えます)。

When using secure HTTPS protocol all communication with Amazon S3
servers is protected from 3rd party eavesdropping. This method is
slower than plain HTTP and can't be used if you're behind a proxy
Use HTTPS protocol [No]: y

次に、設定内容の確認とS3への接続テストを行うかの選択肢が表示されます。
そのままエンターを押すか、yを入力後エンターを押すと接続テストを行ってくれます。

New settings:
  Access Key: AKIAXXXXXXXXXXXXXXXX
  Secret Key: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
  Encryption password:
  Path to GPG program: None
  Use HTTPS protocol: True
  HTTP Proxy server name:
  HTTP Proxy server port: 0


Test access with supplied credentials? [Y/n] y
Please wait, attempting to list all buckets...
Success. Your access key and secret key worked fine :-)

Now verifying that encryption works...
Not configured. Never mind.

無事に接続テストに成功したら、設定を保存するかどうかを聞かれます。
ので、yで設定を保存します。

Save settings? [y/N] y
Configuration saved to '/home/UserName/.s3cfg'

これでs3cmdを使う準備が整いました。

使ってみる

さっそく、s3cmdでS3を操作してみましょう。

s3cmd lsでバケットの一覧を取得できます。

$ s3cmd ls
2013-08-26 04:33  s3://hogehoge
2013-06-26 12:08  s3://fugafuga
2014-01-21 10:05  s3://hungaaaaaaa
…

s3cmd ls s3://[バケット名]/[ディレクトリ名]でバケットのファイル・ディレクトリ一覧を取得できます。

$ s3cmd ls s3://hogehoge
2014-02-27 05:0751   s3://hogehoge/fuga.txt

s3cmd get s3://[バケット名]/[ファイル名]でファイルの取得ができます。

$ s3cmd get s3://hogehoge/fuga.txt
s3://hogehoge/fuga.txt -> ./fuga.txt  [1 of 1]
 51 of 51   100% in0s   471.46 B/s  done


$ ls
fuga.txt

s3cmd put [アップロードするファイル名] s3://[バケット名]でファイルのアップロードができるはずですが…。

$ s3cmd put hungaaa.txt s3://hogehoge
WARNING: Module python-magic is not available. Guessing MIME types based on file extensions.
hungaaa.txt -> s3://hogehoge/hungaaa.txt  [1 of 1]
 14 of 14   100% in0s   152.77 B/s  done
ERROR: S3 error: 403 (SignatureDoesNotMatch): The request signature we calculated does not match the signature you provided. Check your key and signing method.

何やら怒られてしまいました。
WARNINGに出てくるpython-magicは稀にとんでもないMIMEタイプを返してくるので無視しますが、ERRORはどうにかしなければなりません。

頑張って調べた結果、--no-preserveをつけるとアップロードできるようなので、
s3cmd put --no-preserve [アップロードするファイル名] s3://[バケット名]でファイルのアップロードが出来ます。

$ s3cmd put --no-preserve hungaaa.txt s3://hogehoge
WARNING: Module python-magic is not available. Guessing MIME types based on file extensions.
hungaaa.txt -> s3://hogehoge/hungaaa.txt  [1 of 1]
 14 of 14   100% in0s88.25 B/s  done


$ s3cmd ls s3://hogehoge
2014-02-27 05:0751   s3://hogehoge/fuga.txt
2014-02-27 05:4814   s3://hogehoge/hungaaa.txt

s3cmd del s3://[バケット名]/[オブジェクト名]で削除ができます。

$ s3cmd del s3://hogehoge/fuga.txt
File s3://hogehoge/fuga.txt deleted


$ s3cmd ls s3://hogehoge
2014-02-27 05:4814   s3://hogehoge/hungaaa.txt

 

最後に

今回は基本的なコマンドのみを紹介しましたが、s3cmd --helpで使い方を表示することができます。
S3の操作をブラウザを開かずに簡単にできるので、ぜひマスターしたいですね。

$ s3cmd --help
Usage: s3cmd [options] COMMAND [parameters]


S3cmd is a tool for managing objects in Amazon S3 storage. It allows for
making and removing "buckets" and uploading, downloading and removing
"objects" from these buckets.
…

 

P.S.

最初にインストールしようとした頃、ググっても別OSのインストール手順しか出てこないので「Cygwinにインストール出来ないのでは」という不安に駆られました。
が、ググらなくてもs3cmdディレクトリにあるINSTALLを読めば一発でした。まさに灯台下暗し。

putで失敗する問題を解決するために、休日を7日ほど使いましたが後悔はしていないです。ホントダヨ。