ニフクラ ブログ

ニフクラやクラウドの技術について、エンジニアが語るブログです。

オブジェクトストレージをS3ツールで利用する【設定編】

はじめまして。ニフティクラウド オブジェクトストレージ担当の北條です。

2016年6月29日にリリースしたニフティクラウド オブジェクトストレージは、おかげさまで着々とユーザー数を伸ばし、多くの方々にご利用いただいています。 今回は、Amazon S3互換のREST APIを提供するニフティクラウド オブジェクトストレージをLinux OS上でS3ツールを使って、手軽に利用する方法をご紹介します。
※本記事に掲載されている情報は、2016年11月25日時点でニフティクラウドで提供されているCentOS7.1およびUbuntu 16.04にて動作確認を行っています。

なお、今回取り上げるツールのうち、ニフティクラウド ストレージ SDK for Java以外のツールにつきましては、ニフティから提供されているツールではないため、サポート範囲外となりますのでご了承ください。

obj_storage_img02

取り扱うツール

今回は、下記の3つのツールをニフティクラウド オブジェクトストレージで利用するための導入・設定方法を中心に説明いたします。

  • s3cmd - v1.6.1
  • aws cli - v1.11.21
  • NIFTY Cloud Storage SDK for Java 付属のCLI - v1.2(SDKのライブラリバージョン)

s3cmd,aws cliは利用方法を解説した資料が数多く公開されていますので、そちらもあわせてご参照ください。

各ツールを導入する前にリポジトリを最新の情報に更新します。
ubuntuの場合は、

$ sudo apt update -y

CentOSは

$ sudo yum update -y

でリポジトリ情報を更新します。

s3cmd

s3cmdは、LinuxおよびMac OSで利用できるコマンドラインツールです。 s3cmd

s3cmdのインストール

Ubuntu 16.04編

s3cmdをインストールします。 ubuntuは標準で登録されているリポジトリの中にパッケージが存在したため、

$ sudo apt install -y s3cmd

上記のコマンドでインストールすることができます。 下記のコマンドを実行し、バージョンが表示されればインストールは成功です。

$ s3cmd --version
s3cmd version 1.6.1

CentOS 7.1編

CentOSでは、標準で登録されているリポジトリの中にはs3cmdのパッケージがなく、最新のバージョンを利用したいため、ソースコードからビルドします。 まずはソースコードを取得するために、gitをインストール。

$ sudo yum install -y git

そして、ソースコードをgitレポジトリから取得。

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

ソースコードからs3cmd をインストール。

$ cd s3cmd
$ python setup.py install

依存ライブラリをインストール。

$ yum install -y python-dateutil

バージョンを確認。

$ s3cmd --version
s3cmd version 1.6.1

これで最新版のs3cmdを利用する準備が整いました!
※バージョンの異なるs3cmdでは、本稿とは異なる設定や操作が必要な場合があります。

以降の利用方法は、CentOS,Ubuntuともに共通となります。

s3cmdの初期設定

下記のコマンドを実行し、s3cmd コマンドの初期設定を行います。

$ 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. Leave them empty for using the env variables. Access Key: Secret Key: Default Region [US]: ← そのままEnter

Encryption password is used to protect your files from reading by unauthorized persons while in transfer to S3 Encryption password: ← そのままEnter Path to GPG program [/usr/bin/gpg]: ← そのままEnter

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 only be proxied with Python 2.7 or newer Use HTTPS protocol [Yes]: ← そのままEnter

On some networks all internet access must go through a HTTP proxy. Try setting it here if you can't connect to S3 directly HTTP Proxy server name: ← 必要に応じて入力

New settings: Access Key: Secret Key: Default Region: US Encryption password: Path to GPG program: /usr/bin/gpg Use HTTPS protocol: True HTTP Proxy server name: HTTP Proxy server port: 0

Test access with supplied credentials? [Y/n] ← n を入力してEnter(この段階でアクセス試行しても失敗する)

Save settings? [y/N] y ← y を入力して設定を保存 Configuration saved to '/.s3cfg'

上記の手順を実行することで、~/.s3cfgに設定ファイルが作成されます。 この設定ファイルを編集することで、オブジェクトストレージの情報を設定します。任意のエディタで編集してください。 変更が必要な項目は下記の通りです。

項目名 初期値 設定値
host_base s3.amazonaws.com jp-east-2.os.cloud.nifty.com
host_bucket %(bucket)s.s3.amazonaws.com %(bucket)s.jp-east-2.os.cloud.nifty.com
signature_v2 False True

上記を編集して保存すると、s3cmd コマンドでオブジェクトストレージを利用することができます。

s3cmdでニフティクラウド オブジェクトストレージを操作する

下記に簡単な利用例を示します。 詳細な利用方法は、上記の公式サイトを始め、多くの情報が公開されておりますのでここでは割愛いたします。

$ s3cmd mb s3://hoge # hoge バケット作製
$ s3cmd ls # バケット一覧
$ s3cmd ls s3://foo # foo バケットの仮想ディレクトリとファイルの一覧
$ s3cmd get s3://foo/bar/baz.txt # foo バケットの bar/baz.txt ファイルの取得
$ s3cmd put bazbaz.txt s3://foo/bar/baz/ #foo バケットに bar/baz/bazbaz.txt ファイルアップロード
$ s3cmd du # 仕様容量表示(byte) .s3cfg に human_readable_sizes = True を設定すると単位をMBやGBで表示する。

aws cli

aws cli は、AWSサービスを管理するための統合ツールです。 Amazon S3をはじめ、AWSのさまざまなサービスをコマンドラインから操作することが可能です。 aws cliはソースコードが公開されているApache Licenseのソフトウェアで、Python実行環境で動作します。
aws cli

aws cliのインストール

aws cliのインストールに必要な環境は下記となっています。
- Python 2 version 2.6.5+ or Python 3 version 3.3+
- pip
(出展:AWS ドキュメントページ)

ニフティクラウドが提供するCentOS 7.1およびUbuntu 16.04には、すでにPython2.7系が導入されています。Pythonのパッケージ管理ツールであるpipは追加で導入する必要があります。

下記の手順はCentOS 7.1、Ubuntu 16.04共通です。

$ wget https://bootstrap.pypa.io/get-pip.py
$ sudo python get-pip.py
$ pip --version

pipが導入できたら、awscliをインストールします。

$ sudo pip install awscli

awscliの初期設定

aws cliでニフティクラウド オブジェクトストレージを利用するための初期設定を行います。

$ aws configure
AWS Access Key ID [None]:
AWS Secret Access Key [None]:
Default region name [None]: ← 空白でEnter
Default output format [None]: ← 空白でEnter

.aws/credentialsファイルに設定した内容が記載されていれば成功です。

awscli でオブジェクトストレージを操作する

awscliでオブジェクトストレージを操作するには、s3サブコマンドを利用します。 aws s3コマンドは標準ではAmazon S3に接続するため、エンドポイントを指定する必要があります。 バケット一覧を表示するには、

$ aws --endpoint-url https://jp-east-2.os.cloud.nifty.com s3 ls

として実行します。 下記にほかの簡単な利用例を示します。詳細な利用方法は、上記の公式サイトを始め、多くの情報が公開されておりますのでここでは割愛いたします。

$ aws --endpoint-url https://jp-east-2.os.cloud.nifty.com s3 cp s3://foo/bar/baz.txt ./ # fooバケットのbar/baz.txtファイルをカレントディレクトリにコピー
$ aws --endpoint-url https://jp-east-2.os.cloud.nifty.com s3 cp ./baz.txt s3://foo/bar/baz.txt # fooバケットのbarにカレントディレクトリのbaz.txtをアップロード
$ aws --endpoint-url https://jp-east-2.os.cloud.nifty.com s3 rb s3://foo --force # fooバケット配下のオブジェクトを全て削除して、fooバケットも削除
$ aws --endpoint-url https://jp-east-2.os.cloud.nifty.com s3 rm s3://foo/bar --recursive # fooバケットのbarプレフィックスが付いたオブジェクトを全て削除

毎回エンドポイントを指定するのは大変なので、alias などを設定すると便利です。

rb + --foceコマンドでは、バケット内のオブジェクトを削除した上でバケットを削除することができて便利ですが、間違って実行した場合は削除されたオブジェクトは復元できませんので注意が必要です。 詳しくは、AWS CLIコマンドリファレンスをご参照ください。
AWS CLIコマンドリファレンス

ニフティクラウド ストレージ SDK for Java付属のCLI

ニフティクラウド ストレージ SDK for Javaは、ニフティ株式会社が提供しているニフティクラウドストレージ(旧)/ニフティクラウド オブジェクトストレージのJava SDKツールです。 サンプルプログラムとして、コマンドラインで利用できるCLIのスクリプトが同梱されています。 ニフティクラウド ストレージ SDK for Javaは下記のページで配布されています。
ニフティクラウド ストレージ SDK for Java
※本記事では、2016年8月22日時点での最新版を利用しております。バージョンの違いによって、ディレクトリの名称などが多少異なる場合があります。

ニフティクラウド ストレージ SDK for Javaのインストール

今回はwgetでダウンロードします。

$ wget http://cloud.nifty.com/api/storage/NiftyCloudStorage-SDK-CLI.zip

動作環境は、JDK6以上が推奨されています。 今回はOpenJDK v1.8を利用してみたいと思います。

CentOSでは、

$ sudo yum install java-1.8.0-openjdk-devel.x86_64

Ubuntuでは、

$ sudo apt install openjdk-8-jdk

ダウンロードしたニフティクラウド ストレージ SDK for Javaのzipファイルを展開します。

$ unzip NiftyCloudStorage-SDK-CLI.zip

(Ubuntu 16.04ではunzipコマンドが入っていなかったので、apt-get install unzipでインストールしました)

ニフティクラウド ストレージ SDK for Javaの初期設定

ダウンロードしたzipファイルを展開すると、NiftyCloudStorage-SDK-CLI というフォルダが作成されます。 CLIを利用するためには次の2つのファイルを編集する必要があります。

・credentials.properties
  -アクセスキー/シークレットアクセスキーを記述します。

accessKey =12345678901234567890
secretKey =1234567890abcdefghijklmnopqrstuvwxyzABCD

・ncs_cli.sh
  -エンドポイント(jp-east-2.os.cloud.nifty.com)を設定します。

# endpoint settings
ENDPOINT="-Dendpoint=https://jp-east-2.os.cloud.nifty.com/"

任意のエディタで上記のファイルを編集してください。 ncs_cli.shについては、エンドポイントのほかにも設定できる項目があります。 詳細な利用方法については、NiftyCloudStorage-SDK-CLI/cli/READMEを参考にしてください。

上記2箇所を設定すると、ncs_cli.shツールでオブジェクトストレージにアクセスが可能です。

ニフティクラウド ストレージ SDK for Javaでオブジェクトストレージを操作する

簡単なコマンドの例を下記に示します。

$ sh ncs_cli.sh # コマンドのヘルプや利用可能なコマンド一覧が表示されます。
$ sh ncs_cli.sh mb ncss:// #バケットを作成します。
$ sh ncs_cli.sh ls [ncss://] #バケットの一覧、またはバケット内のオブジェクトの一覧を表示します。
$ sh ncs_cli.sh put  ncss://[/] #指定ファイルをオブジェクトとしてバケット内に作成します。オブジェクト名の指定が可能です。
$ sh ncs_cli.sh get ncss:///  #バケット内のオブジェクトを取得します。

ほかのコマンドなどの詳細につきましては、上述のREADME、コマンドのヘルプを参考にしてください。

また、NiftyCloudStorage-SDK-CLI/cliディレクトリには、CLI ツールのソースコードも含まれています。オブジェクトストレージを利用するJavaアプリケーション開発の参考資料としてもご活用いただけます。

まとめ

今回は、Amazon S3のツールやニフティクラウド ストレージサービスのツールを使って、オブジェクトストレージを利用する手法を簡単に紹介いたしました。 オブジェクトストレージは、Amazon S3と互換性を持つREST APIを提供しており、上記のツールにとどまらず、さまざまな利用シーンでご活用いただけます。 ぜひ、ニフティクラウド オブジェクトストレージを利用してみてください。