SlideShare a Scribd company logo
1 of 60
Download to read offline
Technical Tips on CLOUDIAN HyperStore #2
Technical Tips on CLOUDIAN HyperStore®
自動階層化(Auto-Tiering)とバージョニング機能の解説
~ AWS SDK for PHP を使用したサンプルコード ~
(CLOUDIAN HyperStore v5.2.x 対応版)
Version 1.2
Jan. 27, 2016
《 目 次 》
1. はじめに........................................................................................................ 2
2. 自動階層化(AUTO-TIERING)機能について ...................................................... 3
バケットライフサイクル概要 ............................................................................... 3
自動階層化機能の設定 ................................................................................. 6
ライフサイクルルールの設定 ............................................................................ 10
① 自動階層化(データの移動)ルールの設定...................................................... 11
② データの削除ルールの設定.......................................................................... 12
③ ライフサイクルルールの有効化 ...................................................................... 13
3. バージョニングについて ..................................................................................... 14
バージョニング概要 ...................................................................................... 14
PUT 時の動作.......................................................................................... 16
DELETE/GET 時の動作............................................................................ 17
バケットのバージョニング有効化 ....................................................................... 18
バージョニングされたオブジェクトの削除 .............................................................. 20
4. AWS SDK FOR PHP 2 を使用した PHP サンプルコード .......................................... 25
バージョニング設定状況の表示と状態変更のサンプルコード ....................................... 28
バージョニングされたバケットに対するオブジェクトの複数回 PUT.................................. 38
バージョニングされたオブジェクトのダウンロード(GET)処理..................................... 45
5. おわりに ...................................................................................................... 55
Technical Tips on
CLOUDIAN HyperStore #2
P.1
Copyright © 2010-2015 Cloudian KK. All rights reserved.
本書では、CLOUDIAN HyperStore®で利用可能な下記 2 つの機能について、その概念と利
用方法を説明します。
 自動階層化(Auto-Tiering)機能 (※HyperStore 独自機能)
 バージョニング機能
CMC で設定できない設定項目は、本書では AWS SDK for PHP 2 をインストールした PHP 環境
を用意し、PHP から S3 API を呼び出して設定を行っています。
AWS SDK は PHP 以外にも、Java や.NET、Python、Ruby、Node.js、モバイル端末向けの
iOS や Android に対応したものが、Amazon Web Services から提供されています。
本書では AWS SDK for PHP 2 を使用した PHP サンプルコードをいくつか掲載し、主にバージョニン
グ機能の利用イメージを説明します。
本書では触れないその他言語の AWS SDK や、AWS SDK for PHP 2 ののより詳細な内容・説
明を確認したい場合には、Amazon Web Services 社のホームページをご参照ください。
【対象読者】
システム管理者、システム運用者、アプリケーション開発者 および HyperStore の自動階層化機能
にご興味をお持ち頂いているお客様
《注意事項》
本書に掲載するサンプルコードは、あくまでも S3 API を使用して HyperStore の機能を設定する方法の概要を説明するための、非
常に簡易なものです。そのため、サンプルコードでは最低限の機能しか実装しておらず、例外処理も不十分な状態です。実環境で使用さ
れる場合は本書を参考にして、必要な機能や例外処理を実装してください。
本書に掲載するサンプルコードを使用したことにより発生したデータの損失またはお客様のコンピューター・システムへの損傷などのいかな
る損害についても、クラウディアン株式会社は一切の責任を負わないものとします。
サンプルコードをそのままご使用になられる場合は、自己判断・自己責任でお願いします。
Technical Tips on
CLOUDIAN HyperStore #2
P.2
Copyright © 2010-2015 Cloudian KK. All rights reserved.
1. はじめに
本書では、CLOUDIAN HyperStore®(以下、「HyperStore」)の独自機能である自動階層化
(Auto-Tiering)機能と、バージョニングについて説明します。
HyperStore は、HyperStore ストレージにオブジェクトが格納されている期間(ライフサイクルルール)
に基づいて異なる HyperStore システム、あるいは Amazon S3 または Glacier へオブジェクトを自動
的に移行させる“自動階層化(Auto-Tiering)”機能を有しています。この機能は、Amazon S3 が持
つバケットライフサイクル管理機能を拡張し、HyperStore 独自の機能として実装したものです。
まず初めに、本機能の基になっているバケットライフサイクル管理機能の概要を説明し、具体的に
HyperStore でどのように自動階層化の設定を行うのかをスクリーンショットを掲載し説明します。
次に、HyperStore のバケットに格納されたオブジェクトの過去バージョンを複数保持することができる、
“バージョニング機能”について説明します。
最終章では AWS SDK for PHP 2 を使用し、PHP から S3 API を呼び出してバージョニングの機
能を確認して頂ける PHP サンプルコードをいくつか掲載します。
Technical Tips on
CLOUDIAN HyperStore #2
P.3
Copyright © 2010-2015 Cloudian KK. All rights reserved.
2. 自動階層化(Auto-Tiering)機能について
本章では、自動階層化(Auto-Tiering)機能の概要を説明します。
 バケットライフサイクル概要
HyperStore の自動階層化機能は、Amazon S3 で使用できるバケットライフサイクル管理機能を
拡張し実装されています。HyperStore は、設定されたライフサイクルルールに基づき、ライフサイクルの有
効期限が失効したオブジェクトを Amazon S3/Glacier、あるいは異なる HyperStore システムに移
動させます。
ライフサイクルルールは、バケットに対して設定します。バケット単位で設定できるため、
「バケット A は、オブジェクトを外部のストレージシステムに自動階層化する」
「バケット B は自動階層化せず、ローカルの HyperStore ストレージに保管し続ける」
といった制御も可能です。
オブジェクトが格納されるバケットに対して設定したライフサイクルの有効期間中に、そのバケットに格納
されたオブジェクトをどのように管理するかを定義できます。
ここで言う“管理”とは、
 オブジェクトの削除 … 「図1: データの削除(Expiration)」 参照
 オブジェクトの移動 … 「図2: データの移動(Transition)」 参照
という操作を、設定したライフサイクルに基づくルールにより自動的に実行することを意味しています。
Technical Tips on
CLOUDIAN HyperStore #2
P.4
Copyright © 2010-2015 Cloudian KK. All rights reserved.
例えば、下記の例のように
 Firewall やサーバー、ネットワーク機器等の IT 機器から出力されるログを毎日、S3 バケットにア
ップロードしているが、このログは監査目的で一年間は保持しておく必要があるものの、その後は削
除しても問題無いという社内規定等がある。
 ファイルサーバー用途で HyperStore ストレージを利用しているが、調査の結果、約 80%のファ
イルが 3 年以上、アクセスされていないことが判明したので、最終アクセス日時から 3 年以上経
過したものは他の HyperStore システム、あるいは Amazon Glacier に移行させても構わな
い。
 一定期間はすぐにアクセスできる状態でデータを保持しておく必要があるが、その期間を経過する
と殆どアクセスされなくなるデータだが、業界基準や法規制により長期間の保管を義務付けられて
いる。
等のオブジェクト(データ)に対する保管要件に従って、HyperStore のライフサイクルルールを定義
することができます。
図 1: データの削除 (Expiration)
作成日: 2014 年 8 月 7 日
作成日: 2014 年 8 月 14 日
作成日: 2014 年 7 月 31 日 本日削除
2015 年 8 月 14 日 削除予定
2015 年 7 月 31 日 削除済み
今日: 2015 年 8 月 7 日
ライフサイクル設定期間
<Expiration>
<Days>365</Days>
</Expiration>
文書①
文書②
文書③
文書②
文書③
文書①
365 日
Technical Tips on
CLOUDIAN HyperStore #2
P.5
Copyright © 2010-2015 Cloudian KK. All rights reserved.
図 2: データの移動 (Transition)
さらにオブジェクトの移動(Transition)と削除(Expiration)のルールを組み合わせて定義することによ
り、
 作成後、1 年経過した財務帳票を異なる HyperStore システムあるいは Amazon Glacier
に移行し、作成後から 10 年経過した時点で削除する
といった、Transition と Expiration を組み合わせたライフサイクルルールを定義することもできます。
作成日: 2014 年 8 月 7 日
作成日: 2014 年 8 月 14 日
作成日: 2014 年 7 月 31 日
本日移行
今日: 2015 年 8 月 7 日
<Transition>
<Days>365</Days>
</Transition>
Amazon Glacier
文書②
文書① 文書③
文書①
文書②
文書③
ライフサイクル設定期間
365 日
Technical Tips on
CLOUDIAN HyperStore #2
P.6
Copyright © 2010-2015 Cloudian KK. All rights reserved.
 自動階層化機能の設定
自動階層化先が Amazon S3 あるいは Glacier である場合は、CMC にシステム管理者アカウント
でログインし、
[クラスター] → [クラスター設定] → [構成設定]
から「Auto-Tiering 有効」および「Auto-Tiering URL」を編集します。
Technical Tips on
CLOUDIAN HyperStore #2
P.7
Copyright © 2010-2015 Cloudian KK. All rights reserved.
自動階層化先が異なる HyperStore システムや HyperStore をインフラ基盤としてご採用頂いてい
るクラウドストレージである場合は前頁の設定(Auto-Tiering の有効化や URL の設定)を行い、さらに
HyperStore の設定ファイル「mts-ui.properties.erb」内のパラメータ
「bucket.transitiontocloudian.enabled」を、以下のように編集し保存します。
この設定ファイルは、HyperStore システムのインストールを実行したノードの下記ディレクトリに存在し
ています。
格納ディレクトリ: /etc/cloudian-5.2.1-puppet/modules/cmc/templates
:
(中略)
:
bucket.transitiontocloudian.enabled = true
:
(中略)
:
● 「mts-ui.properties.erb」設定ファイルの編集(異なる HyperStore システム)
Technical Tips on
CLOUDIAN HyperStore #2
P.8
Copyright © 2010-2015 Cloudian KK. All rights reserved.
さらに自動階層化先が異なる HyperStore システムや HyperStore をインフラ基盤としてご採用頂
いているクラウドストレージである場合は、HyperStore の設定ファイル「tiering-regions.xml.erb」
に階層先の情報を追記し保存します。
この設定ファイルは、HyperStore システムのインストールを実行したノードの下記ディレクトリに存在し
ています。
格納ディレクトリ: /etc/cloudian-5.2.1-puppet/modules/cloudians3/templates
有効にできる自動階層化先は、同時にひとつのみです。
例えば、Amazon S3 へオブジェクトを自動階層化している場合には、同時に異なるバケットを異なる
HyperStore システムへ自動階層化することはできません。
上記設定を完了したら、Puppet により設定ファイルを HyperStore ノードへ配布してください。
HyperStore のインストール・スクリプト内のメニューに、
「2) Cluster Management → b」 Push Configuration Settings to Cluster」
というメニューがありますので、これを実行します。
:
(中略)
:
<Region>
<Name>OSAKA</Name>
<Endpoint>
<ServiceName>s3</ServiceName>
<Http>true</Http>
<Https>true</Https>
<Hostname>s3-region1.osaka.local</Hostname>
</Endpoint>
</Region>
:
(中略)
:
● 「tiering-regions.xml.erb」設定ファイルの編集(異なる HyperStore システム)
※ <Http>、<Https>の値(true/false)は、階層先の環境に合わせたものを設定してください。
※ <Hostname>には、階層先のエンドポイントを設定してください。
Technical Tips on
CLOUDIAN HyperStore #2
P.9
Copyright © 2010-2015 Cloudian KK. All rights reserved.
変更された設定ファイルの配布が完了すると、CMC のバケットプロパティ画面に後述する
「バケットライフサイクルルール」セクションに、自動階層化の設定を行うことができる“オブジェクトの移動
を有効にする”欄が表示されます。
※ デフォルトの状態では、“オブジェクトの移動を有効にする”欄は表示されていません。
なお、Auto-Tiering を有効化すると、すべてのユーザーのバケットプロパティ画面に「オブジェクトの移
動を有効にする」欄が表示されます。
システム管理者権限を持つユーザーのみ、グループ管理者以上の権限を持つユーザーのみ、すべての
ユーザー、特定の(指定した)ユーザーのみ、またはその組み合わせを指定して表示させるユーザーを制
限したい場合には、このパラメータ―の値を変更してください。
bucket.transition.enabled = { SystemAdmin | GroupAdmin | User | (許可するユーザー名) }
bucket.transitiontocloudian.enabled = { SystemAdmin | GroupAdmin | User | (許可するユーザー名) }
※ 複数種別/複数ユーザーを指定する場合は、「 , 」で区切って指定してください。
※ {許可するユーザー名}は、CMC の“<グループ ID>|<ユーザーID>”の形式で指定します。
【補足】
自動階層化先のストレージシステムに接続するためには S3 クレデンシャル(アクセスキーとシークレットキ
ー)が必要になります。
バケットに対して自動階層化機能の設定を行う際に、個別に(異なる)S3 クレデンシャルを設定する
こともできますが、システム管理者は事前に下図の CMC 画面から、デフォルトで使用されるアクセスキー
とシークレットキーを登録しておくこともできます。
図 3:CMC[クラスター]メニュー → [クラスター設定] → AUTO-TIERING クレデンシャル
Technical Tips on
CLOUDIAN HyperStore #2
P.10
Copyright © 2010-2015 Cloudian KK. All rights reserved.
 ライフサイクルルールの設定
バケットライフサイクルのルールは、Cloudian Management Console(以下、CMC)のバケットプ
ロパティ画面内―「バケットライフサイクルルール」から設定できます。
ブラウザで CMC を開き、
[オブジェクト]メニュー
↓
バケット一覧からルールを
設定したいバケットを選択
↓
選択状態で下部[設定]
ボタンを押下
すると、バケットプロパティ画面
が表示されます。
ルールの適用対象はバケット内に格納されている全てのオブジェクト、またはオブジェクトプレフィックス
(後述)にマッチする単一あるいは複数のオブジェクトです。
ルールが適用されるオブジェクトのライフサイクル起算日となる基準は、
 作成日時
 最終アクセス日時
のいずれかから選択することができます。
例えば、ライフサイクルルールが設定されているバケットに、
「新規にオブジェクトが格納されてから 90 日後に、
Amazon Glacier にデータを移動させる(作成日時基準)」
「最後にオブジェクトにアクセスがあった日から
365 日が経過したオブジェクトを、削除する(最終アクセス日時基準)」
といったように、作成日時と最終アクセス日時を使い分けることができます。
①CMC を開き、
[オブジェクト]メニューを
クリックします。
②バケット一覧から、ライフサイクルルールを
設定したいバケットを選択します。
③[設定]ボタンを押下します。
Technical Tips on
CLOUDIAN HyperStore #2
P.10
Copyright © 2010-2015 Cloudian KK. All rights reserved.
実際の CMC の画面イメージを使いながら、ライフサイクルルールの設定方法を説明します。
バケットライフサイクルルール
の設定画面は、左図のように
① データの移動
② データの削除
③ ルールの有効化
を設定する領域に分かれてい
ます。
以降、領域毎に設定方法
を記載します。
「データの移動」
設定箇所
「データの削除」
設定箇所
ルールの有効化と
保存
Technical Tips on
CLOUDIAN HyperStore #2
P.11
Copyright © 2010-2015 Cloudian KK. All rights reserved.
① 自動階層化(データの移動)ルールの設定
オブジェクトプレフィックスの設定が空の場合は
バケット内のすべてのオブジェクトに、
指定のある場合は、前方一致でマッチする
オブジェクトにのみルールが適用されます。
オブジェクトの移動の有効/無効を設定します。
有効にチェックした場合は、オブジェクトの移動先を Amazon S3
(AWS S3 へ転送)
あるいは
Amazon Glacier(AWS GLACIER へ転送)
から選択します。
ルールが適用されたオブジェクトが、指定した移動先に階層化
されるタイミングを設定します。
① ●日後以降(オブジェクト作成後)
あるいは
② 指定日以降
のどちらかの形式で設定可能です。
①の設定単位は”日”で、1 日後から 2,147,483,647 日後
までの間で指定できます。
②の設定単位は”年月日時分”で、西暦 9999 年 23 時 59
分までの値を設定できます。
Amazon S3/Glacier に移動されたオブジェクトを取得する際の
動作を、以下の 3 つの方式から選択します。
(1) ストリーム
(2) リダイレクト
(3) 取得する前にリストアが必要
オブジェクトの自動階層先(Amazon S3/Glacier)に
接続するために使用するアクセスキーとシークレットキー。
管理者が事前に登録したキーを使用する場合は、
[デフォルトの S3 クレデンシャルを使用]
にチェックします。
● 自動階層化(データ移動)の設定
Technical Tips on
CLOUDIAN HyperStore #2
P.12
Copyright © 2010-2015 Cloudian KK. All rights reserved.
② データの削除ルールの設定
オブジェクトの削除の有効/無効を設定します。
削除(ライフサイクル有効期限の失効)のタイミングは、
次の設定項目で設定します。
ルールが適用されたオブジェクトが、削除されるタイミングを設定
します。
① ●日後以降(オブジェクト作成後)
あるいは
② 指定日以降
のどちらかの形式で設定可能です。
①の設定単位は”日”で、1 日後から 2,147,483,647 日後
までの間で指定できます。
②の設定単位は”年月日時分”で、西暦 9999 年 23 時 59
分までの値を設定できます。
● データ削除の設定
Technical Tips on
CLOUDIAN HyperStore #2
P.13
Copyright © 2010-2015 Cloudian KK. All rights reserved.
③ ライフサイクルルールの有効化
これまで設定してきたライフサイクルルールを
有効化するには、[ルールの有効化]をチェックします。
ライフサイクルルールの起算日となる基準を、
 作成日時
 最終アクセス日時
から選択します。
● ライフサイクルルールの有効化
Technical Tips on
CLOUDIAN HyperStore #2
P.14
Copyright © 2010-2015 Cloudian KK. All rights reserved.
3. バージョニングについて
本章では、機能が有効化されたバケットに格納されたオブジェクトの過去バージョンを保持すること
ができる“バージョニング”の概要を説明します。
 バージョニング概要
バージョニングとは、その機能を有効にしたバケットに格納されるオブジェクトの複数バージョンを保持
する機能です。バージョニングを有効にすると、誤ってデータ(オブジェクト)を上書きしてしまった場合
や誤削除してしまった場合でも、過去バージョンのデータを取り出すことが可能になります。
バージョニングは、ディスクストレージの一般的な機能としてよく用いられているスナップショットとは異
なる概念であることに注意してください。
一般的なスナップショットの場合は、スナップショットを取得した時点で存在したディスク上のブロック
を Frozen Frame して保存し、ファイルが更新されブロックが書き変わった場合には、Frozen
Frame として保存されたブロックは変更せず、ディスク上に更新されたブロックを新たに配置します。そ
のため、スナップショットのために必要となるディスク容量は、基本的にはスナップショット取得後からの
差分ブロック分となります。
バージョニングの場合はスナップショットのように、ブロック差分データから過去バージョンを復元するの
ではなく、単に更新や削除される前の状態(バージョン)のデータを内部に保持しているだけです。
Technical Tips on
CLOUDIAN HyperStore #2
P.15
Copyright © 2010-2015 Cloudian KK. All rights reserved.
下表に、HyperStore のバージョニングと一般的なストレージ製品のスナップショットの比較を記載
します。
バージョニング (一般的な) スナップショット
取得される単位 バージョニングが有効にされたバケッ
ト内に格納されているオブジェクト
ファイルシステムが作成されている
ボリューム
取得されるタイミング オブジェクトに変更(更新、上書
き、削除)が発生した時点。
保持されるバージョン数は、オブジェ
クトの変更頻度により異なるため、
各オブジェクトで異なる。
手動またはスケジュール実行。
対象のボリューム全体に対して取得さ
れるため、ボリューム内のファイルは一
律、同じ世代数を持つ。
取得時に保持されるデータ 変更前のオブジェクト全体 前回取得以降の更新差分ブロック
過去データの削除  手動による削除 (※)
※ S3 API によりプログラミングすることに
より、自動化も実現可能
 手動による削除
 設定した世代数を超過したもの
の自動削除
表 1: バージョニングとスナップショットの違い
例えば左図のように、バージョニング
が有効化されたバケット
「versioned」内に「test.txt」という
ファイルが存在するとします。
通常の PUT/GET 操作ではあまり
意識しませんが、オブジェクトには
“バージョン ID”という属性が設定さ
れています。
格納バケット名: versioned
ファイル名: test.txt
ファイルサイズ: 88 bytes
バージョン ID:
fe1ac32c-2169-2f1f-a160-000c296039b5
Technical Tips on
CLOUDIAN HyperStore #2
P.16
Copyright © 2010-2015 Cloudian KK. All rights reserved.
 PUT 時の動作
例えば、バージョニングが有効にされたバケット「versioned」に同じファイル名(キー)でオブジェク
トを PUT した場合、下図のように以前のバージョンは内部的に保持されます。
図 4: バージョニングの動作 (PUT 時)
PUT
test.txt
Key = test.txt
ID = fe1ac32c-08ed-a2ef-a160-000c296039b5
isLatest = True
Key = test.txt
ID = fe1ac32c-0eed-e42f-a160-000c296039b5
isLatest = False
Key = test.txt
ID = fe1ac32c-14eb-664f-a160-000c296039b5
isLatest = False
Key = test.txt
ID = fe1ac32c-1ae7-afef-a160-000c296039b5
isLatest = False
Key = test.txt
ID = fe1ac32c-2169-2f1f-a160-000c296039b5
isLatest = False
最新バージョン
一世代前バージョン
二世代前バージョン
三世代前バージョン
四世代前バージョン
Technical Tips on
CLOUDIAN HyperStore #2
P.17
Copyright © 2010-2015 Cloudian KK. All rights reserved.
 DELETE/GET 時の動作
このオブジェクト「test.txt」を削除すると、最新バージョン(ID: fe1ac32c-08ed-a2ef-
a160-000c296039b5)に削除マーカーが付けられます。
バージョン ID を指定しない GET リクエストは最新のバージョンを取得するため、“404 Not
Found”エラーが返されます。GET リクエスト時に Bucket、Key 以外に、VersionId を指定する
ことで、過去バージョンのオブジェクトを取得することができます。
図 5: バージョニングの動作 (DELETE/GET 時)
DELETE
test.txt
Key = test.txt
ID = fe1ac32c-08ed-a2ef-a160-000c296039b5
isLatest = True
Key = test.txt
ID = fe1ac32c-0eed-e42f-a160-000c296039b5
isLatest = False
Key = test.txt
ID = fe1ac32c-14eb-664f-a160-000c296039b5
isLatest = False
Key = test.txt
ID = fe1ac32c-1ae7-afef-a160-000c296039b5
isLatest = False
Key = test.txt
ID = fe1ac32c-2169-2f1f-a160-000c296039b5
isLatest = False
最新バージョン
GET 404 Not Found
二世代前 GET
 Bucket
 Key
 VersionId
削除マーカー
Technical Tips on
CLOUDIAN HyperStore #2
P.18
Copyright © 2010-2015 Cloudian KK. All rights reserved.
 バケットのバージョニング有効化
バケットのバージョニングを有効にする設定は、現行バージョン(HyperStore v5.2.x)の CMC か
らは行うことができません。
バージョニングを有効にする方法としては主に、
① バージョニングを有効にする機能が搭載されている S3 クライアントソフトを利用する
② S3 API を使用して、バケットのバージョニングを有効にする
の 2 つの方法が存在します。
本書ではバージョニングを有効にする方法として、上記②の AWS SDK for PHP 2 を用いた
PHP コードから S3 API を呼び出して有効化する方法を説明します。
バケットのバージョニングを有効にするには、バージョニングの状態(”status”)を表す属性に
“Enabled”を設定します(デフォルトは“Disabled”の状態です)。
上記「注意点」記載のように、一度、バージョニングを有効にしたバケットのバージョニングを再度無
効にすることはできません。“status”属性に“Suspended”を設定することで、バージョニングを一時
停止させることは可能です。
一度、バージョニングを有効にしたバケットのバージョニングをその後、
無効にすることはできません。
過去バージョンのオブジェクトの保持を止めたい場合には、バージョニングを
一時停止(Suspended)させます。
注意点
Technical Tips on
CLOUDIAN HyperStore #2
P.19
Copyright © 2010-2015 Cloudian KK. All rights reserved.
AWS SDK for PHP 2 を使用して PHP から S3 API を呼び出し、バケットのバージョニング・ス
テータスを変更するには、S3Client オブジェクトの putBucketVersioning メソッドを使用する
方法が非常に簡単です。
< s3client -> putBucketVersioning メソッド >
以下のサンプルコードは、バケット「test01」のバージョニングの状態(“Status”)を“Enabled”に
変更します。
public Guzzle¥Service¥Resource¥Model putBucketVersioning( array $args = array() )
$args
array
$args パラメータは、以下のキーを含む連想配列です(黒太字は設定必須です)。
Bucket => (string)
MFA => (string)
MFADelete => (string: Enabled | Disabled )
Status => (string: Enabled | Suspended )
<?php
require_once("vendor/autoload.php");
require_once("./config.php");
use Aws¥S3¥S3Client;
$client = S3Client::factory($config);
// バケットのバージョニング有効化
$param = array(
'Bucket' => 'test01',
'Status' => 'Enabled'
);
$client->putBucketVersioning($param);
構 文
説 明
サンプルコード
Technical Tips on
CLOUDIAN HyperStore #2
P.20
Copyright © 2010-2015 Cloudian KK. All rights reserved.
 バージョニングされたオブジェクトの削除
バージョニングが有効になっているバケットに格納されているオブジェクトは、上書きや削除をしても、
変更前のオブジェクトが内部的に保持され続けます。保持された過去バージョンのオブジェクトは、明
示的に deleteObject(s)しない限り、過去バージョンが残るためデータが増えていきます。
前述の通り、通常のオブジェクトの DELETE リクエストは Bucket と Key の 2 つのパラメータを
使用して行われるため、最新バージョンのオブジェクトが削除対象となります。
過去バージョンのオブジェクトを削除したい場合には、どのバージョンのオブジェクトを削除するかを指
定するために Key と VersionId の組み合わせでオブジェクトを特定し、deleteObject(s)する必
要があります。
以下に、AWS SDK for PHP 2 で使用できる S3Client オブジェクトの deleteObject およ
び deleteObjects メソッドのパラメータ一覧を記載します。
単一の過去バージョンのオブジェクトを削除する場合には deleteObject メソッドを、複数の過去
バージョンのオブジェクトを削除する場合には deleteObjects メソッドを用いますが、どちらもポイント
は 3 つのパラメータ(Bucket, Key, VersionId)を指定して削除対象の過去バージョンを指定する点
です。
Technical Tips on
CLOUDIAN HyperStore #2
P.21
Copyright © 2010-2015 Cloudian KK. All rights reserved.
< s3client -> deleteObject メソッド >
public Guzzle¥Service¥Resource¥Model deleteObject( array $args = array() )
$args
array
$args パラメータは、以下のキーを含む連想配列です(黒太字は設定必須です)。
Bucket => (string)
Key => (string)
MFA => (string)
VersionId => (string)
RequestPayer => (string: requester )
構 文
説 明
Technical Tips on
CLOUDIAN HyperStore #2
P.22
Copyright © 2010-2015 Cloudian KK. All rights reserved.
< s3client -> deleteObjects メソッド >
public Guzzle¥Service¥Resource¥Model deleteObjects( array $args = array() )
$args
array
$args パラメータは、以下のキーを含む連想配列です(黒太字は設定必須です)。
Bucket => (string)
Objects => (array<associative-array>)
(associative-array)
Key => (string)
VersionId => (string)
Quiet => (bool)
MFA => (string)
RequestPayer => (string: requester )
構 文
説 明
Technical Tips on
CLOUDIAN HyperStore #2
P.23
Copyright © 2010-2015 Cloudian KK. All rights reserved.
以下のコードは、通常の(最新バージョンを対象とした)deleteObject を実行するために、PHP か
ら S3 API を呼び出すサンプルコードです。以下のように、最新バージョンを対象とした
deleteObject で指定する必須のパラメータは、
 Bucket … このサンプルでは「test01」を設定
 Key … このサンプルでは「sample/data.txt」を設定
のみです。
<?php
require_once("vendor/autoload.php");
require_once("./config.php");
use Aws¥S3¥S3Client;
$client = S3Client::factory($config);
// オブジェクトの削除
$param = array(
'Bucket' => 'test01',
'Key' => 'sample/data.txt'
);
$client->deleteObject($param);
サンプルコード
Technical Tips on
CLOUDIAN HyperStore #2
P.24
Copyright © 2010-2015 Cloudian KK. All rights reserved.
PHP から S3 API を呼び出し、過去バージョンのオブジェクトに対して deleteObjects を実行す
るサンプルコードを、以下に掲載します。
Key は同じもの(sample/data.txt)を指定していますが、異なるバージョン ID(VersionId)を
指定していることに注目してください。
<?php
require_once("vendor/autoload.php");
require_once("./config.php");
use Aws¥S3¥S3Client;
$client = S3Client::factory($config);
// オブジェクトの削除
$param = array(
'Bucket' => 'test01',
'Objects' => array(
array(
'Key' => 'sample/data.txt',
'VersionId' => 'fe1ac32c-0eed-e42f-a160-000c296039b5',
),
array(
'Key' => 'sample/data.txt',
'VersionId' => 'fe1ac32c-14eb-664f-a160-000c296039b5',
),
array(
'Key' => 'sample/data.txt',
'VersionId' => 'fe1ac32c-1ae7-afef-a160-000c296039b5',
)
)
);
$client->deleteObjects($param);
サンプルコード
Technical Tips on
CLOUDIAN HyperStore #2
P.25
Copyright © 2010-2015 Cloudian KK. All rights reserved.
4. AWS SDK for PHP 2 を使用した PHP サンプルコード
本章で掲載するサンプルコードは、
 Apache HTTP サーバー(Win64/2.4.12)
 PHP 5.6.7
が導入済みの環境に、Composer を使って AWS SDK for PHP 2 をインストールして動作していま
す。
AWS SDK for PHP をインストールする手段はいくつかありますが、Composer を使用することに
より aws-sdk-php およびその依存関係にあるパッケージをインストールできるため、非常に簡単に導
入することができます。
Composer
https://getcomposer.org/
Composer のインストール方法等の詳細は、下記の Amazon Web Services のインストレーシ
ョンガイドをご参照ください。このガイドに記載されているように、Amazon Web Services の推奨も
Composer を使用して AWS SDK for PHP をインストールする方法です。
AWS SDK for PHP Installation
http://docs.aws.amazon.com/aws-sdk-php/v2/guide/installation.html#installing-using-composer
著者が自 PC に Composer を導入する際に、パッケージの依存関係を記載する
「composer.json」ファイルの内容は以下の記述のみです。
{
"require": {
"aws/aws-sdk-php": "2.*"
}
}
● composer.json
Technical Tips on
CLOUDIAN HyperStore #2
P.26
Copyright © 2010-2015 Cloudian KK. All rights reserved.
Composer の導入が完了し、上述の「composer.json」ファイル作成後に、
php composer.phar install
を実行し AWS SDK for PHP のインストールを完了させてください。
右図のようなフォルダ構成により、
 AWS SDK for PHP
 Guzzle
がインストールされているはずです。
PHP のソースコード内で
"vendor/autoload.php"
を require(require_once)すると、AWS
SDK for PHP のライブラリが使用できるように
なります。
また、著者の環境では、HyperStore に接
続する際に必要となるクレデンシャルの情報を
“./config.php”
に記載し、ソース冒頭で require_once によ
り取り込んでいます。
さらに HTML 禁則文字をエンコードする処
理が記載されている
“../Encode.php”
を作成し、ソース冒頭で require_once によ
り取り込んでいます。
Technical Tips on
CLOUDIAN HyperStore #2
P.27
Copyright © 2010-2015 Cloudian KK. All rights reserved.
<?php
// Instantiate the S3 client with your S3 credentials
$config = array(
'base_url' => 'http://s3.shibuya.local',
'region' => 'region1',
'key' => '3720a036a0d080b14db7',
'secret' => 'QZa9f0FjvK8JMUQufc3YO667Tc9uJ3jhGOrLSNri',
);
<?php
function e($str, $charset = 'UTF-8') {
print htmlspecialchars($str, ENT_QUOTES, $charset);
}
サンプルコード
※ サンプルコードが動作している環境は、インターネットに接続できない完全なローカル環境であるため、
分かり易いように’key’(アクセスキー)と’secret’(シークレットキー)を伏せていませんが、通常は
アクセスキーとシークレットキーの組み合わせは外部に漏れないよう管理してください。
config.php
サンプルコード Encode.php
Technical Tips on
CLOUDIAN HyperStore #2
P.28
Copyright © 2010-2015 Cloudian KK. All rights reserved.
 バージョニング設定状況の表示と状態変更のサンプルコード
以下に掲載するサンプルコードは、アクセスキー/シークレットキーを使用して HyperStore に接
続したアカウントが作成しているバケットの
 バージョニング設定状況の表示
 バージョニング状態の変更(無効→有効 / 有効→一時停止)
を行う PHP プログラムです。
メインフォーム: enableVersioning_form.php をブラウザで開くと、バージョニングの設定状況と
状態変更ができます。
現在の各バケットのバージョニングの状態
(Disabled/Enabled/Suspended)を
表示しています。
操作(状態を変更させる)対象の
バケットをリストから選択します。
変更するバージョニングの状態を
選択します。
対象バケットおよび状態の選択が
完了したら[設定変更]ボタンを押下します。
Technical Tips on
CLOUDIAN HyperStore #2
P.29
Copyright © 2010-2015 Cloudian KK. All rights reserved.
例えば[設定を変更するバケット:]リストボックスから、下図のようにバケット「versioned2」を選
択します。このバケットの現時点のバージョニング設定状況は、“Disabled”(無効)になっていま
す。このバケットのバージョニングを有効にするために、[設定する状態:]ラジオボックスから“有効”を
選択し[設定変更]ボタンを押下します。
[設定変更]ボタンを押下して暫く待つと、バケット「versioned2」の[バージョニング設定]列
の値が下図のように“Enabled”に変わり、このバケットのバージョニングが有効になります。
なお、[設定する状態:]で“一時停止”を選択して[設定変更]ボタンを押下すると、以下の
ように状態が変化します。
Technical Tips on
CLOUDIAN HyperStore #2
P.30
Copyright © 2010-2015 Cloudian KK. All rights reserved.
この仕組みを実装している PHP プログラムの構成は、下図のようになっています。
enableVersioning_form.php vendor/autoload.php
require_once
<form method="GET" action="enableVersioning_process1.php">
enableVersioning_process1.php
./config.php
../Encode.php
./checkVersioningStatus.php
./listBuckets.php
Technical Tips on
CLOUDIAN HyperStore #2
P.31
Copyright © 2010-2015 Cloudian KK. All rights reserved.
このアプリケーションフォームを構成する PHP コードを、以下に掲載します。
① メインフォームの PHP コード冒頭で require_once されるコード
 checkVersioningStatus クラス
このクラスは、バケットのバージョニング設定状況を返すメソッドを提供します。
定義されている関数
getBucketVersioningStatus
説明
引数で指定された単一バケットのバージョニング設定状況を取得します。
パラメータ
$bucket HyperStore に作成済みのバケット名
返り値
指定したバケットのバージョニング設定状況(Disabled、Enabled あるいは Suspended)を返します。
getAllBucketsVersioningStatus
説明
すべてのバケットのバージョニング設定状況を取得します。
パラメータ
無し
返り値
すべてのバケットのバージョニング設定状況(Disabled、Enabled あるいは Suspended)を連想配列で返し
ます。
返される連想配列の内容は、次のようになります。
キー 説明 戻り値
“Name” バケット名 バージョニング設定状況
(Disabled、Enabled あるいは Suspended)
string getBucketVersioningStatus ( string $bucket )
array getAllBucketsVersioningStatus ( void )
Technical Tips on
CLOUDIAN HyperStore #2
P.32
Copyright © 2010-2015 Cloudian KK. All rights reserved.
<?php
class checkBucketVersioningStatus {
private $client;
private $results;
private $bucket;
public function __construct($client) {
$this->client = $client;
}
public function getBucketVersioningStatus($bucket) {
$this->results = $this->client->getBucketVersioning(array(
'Bucket' => $bucket,
));
return isset($this->results['Status']) ? $this->results['Status'] : 'Disabled';
}
public function getAllBucketsVersioningStatus() {
$this->results = $this->client->listBuckets(array());
foreach ($this->results['Buckets'] as $this->bucket) {
$attrs = $this->client->getBucketVersioning(array(
'Bucket' => $this->bucket['Name'],
));
$status = isset($attrs['Status']) ? $attrs['Status'] : 'Disabled';
$bucketNameAndVersioningStatus[$this->bucket['Name']] = $status;
}
return $bucketNameAndVersioningStatus;
}
}
サンプルコード checkVersioningStatus.php
Technical Tips on
CLOUDIAN HyperStore #2
P.33
Copyright © 2010-2015 Cloudian KK. All rights reserved.
 listBuckets クラス
このクラスは、バケットに関する情報を返すメソッドを提供します。
定義されている関数
getBucketNames
説明
すべてのバケットの名前を取得します。
パラメータ
無し
返り値
すべての作成済みバケット名を配列で返します。
getBucketsAndCreationDate
説明
すべてのバケットの名前と作成日時を取得します。
パラメータ
無し
返り値
すべてのバケットの名前と作成日時を連想配列で返します。
返される連想配列の内容は、次のようになります。
キー 説明 戻り値
“Name” バケット名 作成日時
('Y 年 m 月 d 日 H 時 i 分 s 秒')
array getBucketNames ( void )
array getBucketsAndCreationDate ( void )
Technical Tips on
CLOUDIAN HyperStore #2
P.34
Copyright © 2010-2015 Cloudian KK. All rights reserved.
<?php
class ListBuckets {
private $client;
private $results;
private $bucket;
public function __construct($client) {
$this->client = $client;
}
// Return all atributes of all buckets as an associative array.
public function getAssocBuckets() {
return $this->client->listBuckets(array());
}
// Return all bucket names.
public function getBucketNames() {
$this->results = $this->client->listBuckets(array());
foreach ($this->results['Buckets'] as $this->bucket) {
$bucketNameList[] = $this->bucket['Name'];
}
return $bucketNameList;
}
// Return pairs of all buckets and creation date as an associative array.
public function getBucketsAndCreationDate() {
$this->results = $this->client->listBuckets(array());
foreach ($this->results['Buckets'] as $this->bucket) {
$date = new DateTime($this->bucket['CreationDate']);
$date->setTimezone(new DateTimeZone('Asia/Tokyo'));
$bucketNameAndCreationDate[$this->bucket['Name']] = $date->format('Y 年 m 月 d 日 H 時 i 分 s 秒
');
}
return $bucketNameAndCreationDate;
}
}
サンプルコード listBuckets.php
Technical Tips on
CLOUDIAN HyperStore #2
P.35
Copyright © 2010-2015 Cloudian KK. All rights reserved.
② Web 画面のメインフォームとなる PHP コード
以下に掲載する PHP コードは、この Web アプリケーションのメインフォームを生成するもので
す。コード冒頭で require_once して取り込んでいる PHP コードは前掲したものになり、このメイ
ンフォーム内の[設定変更]ボタンを押下したときに呼び出されるコードは後述
「③ Web 画面のメインフォームから呼び出される PHP コード」
に掲載しています。
<?php
require_once("vendor/autoload.php");
require_once("./config.php");
require_once("../Encode.php");
require_once("./checkVersioningStatus.php");
require_once("./listBuckets.php");
use Aws¥S3¥S3Client;
// Instantiate the client.
$client = S3Client::factory($config);
//
$versionedBuckets = new checkBucketVersioningStatus($client);
?>
<html>
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
<title>サンプル: バージョニング設定されたバケットの確認</title>
<style type="text/css">
.auto-style1 {
font-family: "Meiryo UI";
font-size: 1.5em;
}
.auto-style2 {
font-family: "Meiryo UI";
font-size: 1.0em;
}
.tbl-style1 td {
font-family: "Meiryo UI";
font-size: 0.9em;
}
</style>
</head>
<body>
<p class="auto-style1">
<b>バージョニング設定状況</b>
</p>
<table class="tbl-style1" border="1">
<tr>
<th>バケット名</th>
<th>バージョニング設定</th>
</tr>
★次頁へつづく.....
サンプルコード enableVersioning_form.php
Technical Tips on
CLOUDIAN HyperStore #2
P.36
Copyright © 2010-2015 Cloudian KK. All rights reserved.
★前頁からの続き
<?php
foreach ($versionedBuckets->getAllBucketsVersioningStatus()
as $versionedBucket => $versioningStatus) {
?>
<tr>
<td><?php print $versionedBucket; ?></td>
<td><?php e($versioningStatus); ?></td>
</tr>
<?php
}
?>
</table>
<hr>
<form method="GET" action="enableVersioning_process1.php">
<div style="text-align: left">
<p class="auto-style2">
設定を変更するバケット:
<select name="bucket">
<?php
$buckets = new ListBuckets($client);
foreach ($buckets->getBucketNames() as $bucketName) {
?>
<option><?php e($bucketName); ?></option>
<?php
}
?>
</select>
<br />
設定する状態:
<input type="radio" name="status" value="Enabled">有効
<input type="radio" name="status" value="Suspended">一時停止
<br /><br />
<input type="submit" name="submit" value="設定変更" />
</p>
</div>
</form>
</body>
</html>
Technical Tips on
CLOUDIAN HyperStore #2
P.37
Copyright © 2010-2015 Cloudian KK. All rights reserved.
③ Web 画面のメインフォームから呼び出される PHP コード
以下に掲載する PHP コードは、メインフォーム内の[設定変更]ボタンを押下したときに呼び
出され、バケットのバージョニング状態を変更する PHP コードです。
<?php
require_once("vendor/autoload.php");
require_once("./config.php");
use Aws¥S3¥S3Client;
// use Aws¥S3¥Exception¥NoSuchKeyException;
// use Aws¥S3¥Exception¥InvalidArgumentException;
$bucket = $_GET['bucket'];
$status = $_GET['status'];
$client = S3Client::factory($config);
try {
// Enable object versioning for the bucket.
$result = $client->putBucketVersioning(array(
'Bucket' => $bucket,
'Status' => $status,
));
header('Location:
http://'.$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']).'/enableVersioning_form.php
');
} catch (Exception $ex) {
?>
<b><font color="red">何らかしらのエラーが発生しました( ゚ Д ゚)。</font></b><br />
<hr>
エラーメッセージ: <b><?php print $ex->getMessage(); ?></b>
<?php
}
サンプルコード enableVersioning_process1.php
Technical Tips on
CLOUDIAN HyperStore #2
P.38
Copyright © 2010-2015 Cloudian KK. All rights reserved.
 バージョニングされたバケットに対するオブジェクトの複数回 PUT
以下に掲載するサンプルコードは、オブジェクトを PUT する“バージョニングが有効になっている”バケ
ットをリストから選択し、
 PUT するキー(ファイル名)を入力
 PUT するファイルに書き込む文字列を入力
 10 秒間隔で何回、同名のファイルを PUT するかの回数選択(1~10 回)
という条件を設定して、ファイルを複数回、PUT する PHP プログラムです。
バージョニングの動作を確認するためのプログラムであるため、ファイルを PUT するバケットは“すで
にバージョニングが有効になっているバケット”しかリストから選択できないようにしています。
また、PUT されるファイルには、[ファイル内に書き込む文字列を入力してください:]欄に記入
した文字列 + 「(YYYY 年 MM 月 DD 日 hh 時 mm 分 ss 秒)」形式の日時が書きこまれま
す。
メインフォーム: putVersionedObjects_form.php を開き、各種設定値を確定した後で
[書込実行]ボタンを押下すると処理が開始されます。
ファイルを PUT するバケットをリストから選択します。
バージョニングが有効なバケットのみ、選択可能です。
PUT するファイル(キー)名を
入力します。
ファイルに書き込む文字列を
入力します。PUT する回数を選択します。
(1~10 回)
各種設定値の入力後、
[書込実行]ボタンを押下します。
Technical Tips on
CLOUDIAN HyperStore #2
P.39
Copyright © 2010-2015 Cloudian KK. All rights reserved.
10 秒間隔で指定した回数の putObject 処理を実行し終わると、下図のような「バージョン履
歴」画面が表示されます。
このアプリケーションで同名の
ファイルを何回 PUT しても、
CMC からは右図のように1つ
のファイルが確認できるだけです
が、実際には上図のように複数
の過去バージョンのオブジェクト
が保持されています。
格納バケット名
PUT したキー(ファイル)名
オブジェクトのバージョン ID
オブジェクトのサイズ(Bytes)
オブジェクトの更新日時
最新バージョンのオブジェクトに
は、「○」が表示されます。
Technical Tips on
CLOUDIAN HyperStore #2
P.40
Copyright © 2010-2015 Cloudian KK. All rights reserved.
この仕組みを実装している PHP プログラムの構成は、下図のようになっています。
putVersionedObjects_form.php vendor/autoload.php
require_once
<form method="GET" action="putVersionedObjects_process1.php">
putVersionedObjects_process1.php
./config.php
../Encode.php
./checkVersioningStatus.php
Technical Tips on
CLOUDIAN HyperStore #2
P.41
Copyright © 2010-2015 Cloudian KK. All rights reserved.
このアプリケーションフォームを構成する PHP コードを、以下に掲載します。
① メインフォームの PHP コード冒頭で require_once されるコード
PHP コード冒頭で require_once されているものは既に前掲していますので、割愛します。
② Web 画面のメインフォームとなる PHP コード
以下に掲載する PHP コードは、この Web アプリケーションのメインフォームを生成するもので
す。このメインフォーム内の[書込実行]ボタンを押下したときに呼び出されるコードは後述
「③ Web 画面のメインフォームから呼び出される PHP コード」
に掲載しています。
<?php
require_once("vendor/autoload.php");
require_once("./config.php");
require_once("../Encode.php");
require_once("./checkVersioningStatus.php");
use Aws¥S3¥S3Client;
// Instantiate the client.
$client = S3Client::factory($config);
//
$versionedBuckets = new checkBucketVersioningStatus($client);
?>
<html>
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
<title>デモ: オブジェクトのバージョニング</title>
<style type="text/css">
.auto-style1 {
font-family: "Meiryo UI";
font-size: 1.5em;
}
.auto-style2 {
font-family: "Meiryo UI";
font-size: 1.0em;
}
.tbl-style1 td {
font-family: "Meiryo UI";
font-size: 0.9em;
}
</style>
</head>
★次頁へつづく.....
サンプルコード putVersionedObjects_form.php
Technical Tips on
CLOUDIAN HyperStore #2
P.42
Copyright © 2010-2015 Cloudian KK. All rights reserved.
★前頁からの続き
<body>
<form method="GET" action="putVersionedObjects_process1.php">
<div style="text-align: left">
<p class="auto-style1">
<b>オブジェクトの複数回 PUT 処理</b>
</p>
<hr>
<p class="auto-style2">
オブジェクトを PUT するバケットを選択してください:
<select name="bucket">
<?php
foreach ($versionedBuckets->getAllBucketsVersioningStatus()
as $versionedBucket => $versioningStatus) {
if ($versioningStatus == 'Enabled') {
?>
<option><?php e($versionedBucket); ?></option>
<?php
}
}
?>
</select>
<br />
PUT するキー(ファイル名)を入力してください:
<input type="text" name="keyname" size="50" maxlength="100"
required="required" aria-required="true"/>
<br />
ファイル内に書き込む文字列を入力してください:
<input type="text" name="content" size="50" maxlength="100" />
<br />
10 秒間隔で何回、同名ファイルを作成するかを選択してください:
<select name="count">
<option value="1">1 回</option>
<option value="2">2 回</option>
<option value="3">3 回</option>
<option value="4">4 回</option>
<option value="5" selected>5 回</option>
<option value="6">6 回</option>
<option value="7">7 回</option>
<option value="8">8 回</option>
<option value="9">9 回</option>
<option value="10">10 回</option>
</select>
<br /><br />
<input type="submit" name="submit" value="書込実行" />
<input type="reset" name="reset" value="リセット" />
</p>
</div>
</form>
</body>
</html>
Technical Tips on
CLOUDIAN HyperStore #2
P.43
Copyright © 2010-2015 Cloudian KK. All rights reserved.
③ Web 画面のメインフォームから呼び出される PHP コード
以下に掲載する PHP コードは、メインフォーム内の[書込実行]ボタンを押下したときに呼び
出され、指定したファイル名での複数回 putObject 処理を実行する PHP コードです。
<?php
// Include the AWS SDK using the Composer autoloader.
require_once("vendor/autoload.php");
require_once("./config.php");
require_once("../Encode.php");
use Aws¥S3¥S3Client;
$client = S3Client::factory($config);
$bucket = $_GET['bucket'];
$keyname = $_GET['keyname'];
$content = isset($_GET['content']) ? $_GET['content'] : 'ほげほげ hogehoge';
$count = (int)$_GET['count'];
?>
<html>
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
<title>デモ: オブジェクトのバージョニング</title>
<style type="text/css">
.auto-style1 {
font-family: "Meiryo UI";
font-size: 1.5em;
}
.auto-style2 {
font-family: "Meiryo UI";
font-size: 1.0em;
}
.tbl-style1 td {
font-family: "Meiryo UI";
font-size: 0.9em;
}
</style>
</head>
<body>
★次頁へつづく.....
サンプルコード putVersionedObjects_process1.php
Technical Tips on
CLOUDIAN HyperStore #2
P.44
Copyright © 2010-2015 Cloudian KK. All rights reserved.
★前頁からの続き
// Put same objects many times.
for ($i = 1; $i <= $count; $i++) {
$now = new DateTime();
$result = $client->putObject(array(
'Bucket' => $bucket,
'Key' => $keyname,
'Body' => "{$content} (" . $now->format('Y 年 m 月 d 日 H 時 i 分 s 秒') . ")¥n",
));
if ($count != 1) { sleep(10); }
}
?>
<p class="auto-style1">
<b>バージョン履歴</b>
</p>
<table class="tbl-style1" border="1">
<tr>
<th>バケット名</th>
<th>キー</th>
<th>バージョン ID</th>
<th>サイズ(B)</th>
<th>最終更新日</th>
<th>最新バージョン?</th>
</tr>
<?php
// List the objects versions and get the keys and version IDs etc.
$versions = $client->listObjectVersions(array('Bucket' => $bucket))
->getPath('Versions');
foreach ($versions as $version) {
?>
<tr>
<td><?php print $bucket; ?></td>
<td><?php e($version['Key']); ?></td>
<td><?php e($version['VersionId']); ?></td>
<td><div align="right"><?php e($version['Size']); ?></div></td>
<?php
$date = new DateTime($version['LastModified']);
$date->setTimezone(new DateTimeZone('Asia/Tokyo'));
?>
<td><?php print $date->format('Y 年 m 月 d 日 H 時 i 分 s 秒'); ?></td>
<td><div align="center"><?php print $version['IsLatest'] ? '○' :
''; ?></div></td>
</tr>
<?php
}
?>
</table>
<br />
<input type="button" onclick="location.href='putVersionedObjects_form.php'"
value="戻る">
</body>
</html>
Technical Tips on
CLOUDIAN HyperStore #2
P.45
Copyright © 2010-2015 Cloudian KK. All rights reserved.
 バージョニングされたオブジェクトのダウンロード(GET)処理
以下に掲載するサンプルコードは、前掲のサンプルコードでバージョニングが有効なバケットに格納さ
れたオブジェクト(ファイル)を、バージョン ID を指定してダウンロードする PHP プログラムです。
メインフォーム: getObject_form1.php をブラウザで開き、
 ダウンロードするオブジェクトが格納されているバケットをリストから選択
 ダウンロードするキー(ファイル)名の入力
を行い、[バージョン選択へ]ボタンを押下すると、バージョン選択画面に遷移します。
下図のようなバージョン選択画面が開き、全画面でバージョニングが有効になっているバケットを選
択した場合は、[GET したいキー(ファイル)のバージョンを選択してください:]のリストボックスから
対象のバージョンを選択できます(バージョニングが有効になっていない場合は、最新バージョンのみ選択できます)。
[ダウンロード]ボタンを押下すると、リストから選択したバージョンのファイルのダウンロードが開始
されます。
オブジェクトが格納されている
バケットをリストから選択
GET するファイル名を入力
バージョン選択画面に遷移
GET するオブジェクトの
バージョンをリストから選択
[ダウンロード]ボタンを押下すると、対象のオブジェクトを GET
Technical Tips on
CLOUDIAN HyperStore #2
P.46
Copyright © 2010-2015 Cloudian KK. All rights reserved.
下図は、最新バージョンをダウンロードしたファイルの内容です。
同様の手順で、同名ファイル(キー)の異なるバージョンをダウンロードすると...........
というように、ファイルの内容が異なる過去のバージョンを取り出すことができます。
ダウンロードしてメモ帳で開く
Technical Tips on
CLOUDIAN HyperStore #2
P.47
Copyright © 2010-2015 Cloudian KK. All rights reserved.
この仕組みを実装している PHP プログラムの構成は、下図のようになっています。
getObject_form1.php
vendor/autoload.php
require_once
<form method="GET" action="getObject_form2.php">
getObject_process1.php
getObject_form2.php
./config.php
../Encode.php
./checkVersioningStatus.php
<form method="GET" action="getObject_process1.php">
Technical Tips on
CLOUDIAN HyperStore #2
P.48
Copyright © 2010-2015 Cloudian KK. All rights reserved.
① メインフォームの PHP コード冒頭で require_once されるコード
PHP コード冒頭で require_once されているものは既に前掲していますので、割愛します。
② Web 画面のメインフォームとなる PHP コード
以下に掲載する PHP コードは、この Web アプリケーションのメインフォーム
(getObject_form1.php)を生成するものです。このメインフォーム内の[バージョン選択へ]ボタ
ンを押下すると、バージョン選択のフォーム(getObject_form2.php)に画面遷移します。
<?php
require_once("vendor/autoload.php");
require_once("./config.php");
require_once("../Encode.php");
require_once("./listBuckets.php");
use Aws¥S3¥S3Client;
?>
<html>
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
<title>デモ: オブジェクトの GET 処理</title>
<style type="text/css">
.auto-style1 {
font-family: "Meiryo UI";
font-size: 2.0em;
}
.auto-style2 {
font-family: "Meiryo UI";
font-size: 1.0em;
}
</style>
</head>
★次頁へつづく.....
サンプルコード getObject_form1.php
Technical Tips on
CLOUDIAN HyperStore #2
P.49
Copyright © 2010-2015 Cloudian KK. All rights reserved.
★前頁からの続き
<body>
<p class="auto-style1" align="center">
<b>オブジェクトの GET 処理</b>
</p>
<form method="GET" action="getObject_form2.php">
<div style="text-align: center">
<p class="auto-style2">
バケットを選択してください:
<select name="bucket">
<?php
$client = S3Client::factory($config);
$buckets = new ListBuckets($client);
foreach ($buckets->getBucketNames() as $bucketName) {
?>
<option><?php e($bucketName); ?></option>
<?php
}
?>
</select>
<br />
GET するキー(ファイル名)を入力してください:
<input type="text" name="keyname" size="30" maxlength="60"
required="required" aria-required="true"/>
<br /><br />
<input type="submit" name="submit" value="バージョン選択へ" />
<input type="reset" name="reset" value="リセット" />
</p>
<div style="color: red"><?php print $err[$status]; ?></div>
</div>
</form>
</body>
</html>
Technical Tips on
CLOUDIAN HyperStore #2
P.50
Copyright © 2010-2015 Cloudian KK. All rights reserved.
<html>
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
<title>デモ: オブジェクトの GET 処理</title>
<style type="text/css">
.auto-style1 {
font-family: "Meiryo UI";
font-size: 2.0em;
}
.auto-style2 {
font-family: "Meiryo UI";
font-size: 1.0em;
text-align: center;
}
.tbl-style1 td {
font-family: "Meiryo UI";
font-size: 0.9em;
}
</style>
</head>
<body>
<p class="auto-style1" align="center">
<b>オブジェクトの GET 処理</b>
</p>
<?php
require_once("vendor/autoload.php");
require_once("./config.php");
require_once("../Encode.php");
require_once("./checkVersioningStatus.php");
use Aws¥S3¥S3Client;
use Aws¥S3¥Exception¥NoSuchKeyException;
use Aws¥S3¥Exception¥InvalidArgumentException;
$bucket = $_GET['bucket'];
// $keyname = isset($_GET['keyname'])? $_GET['keyname'] : 'versioned.txt';
$keyname = $_GET['keyname'];
$client = S3Client::factory($config);
// Get the versioning status of the specified bucket
$versionedBuckets = new checkBucketVersioningStatus($client);
$versioningStatus = $versionedBuckets->getBucketVersioningStatus($bucket);
★次頁へつづく.....
サンプルコード getObject_form2.php
Technical Tips on
CLOUDIAN HyperStore #2
P.51
Copyright © 2010-2015 Cloudian KK. All rights reserved.
★前頁からの続き
try {
if (! $client->doesObjectExist($bucket, $keyname)) {
throw new NoSuchKeyException("キーが存在しません。");
}
$exist = $client->doesObjectExist($bucket, $keyname);
if ($versioningStatus == 'Enabled') {
$msgStatus = "有効";
} elseif ($versioningStatus == 'Disabled') {
$msgStatus = "無効";
} elseif ($versioningStatus == 'Suspended') {
$msgStatus = "一時停止";
}
if ($versioningStatus == 'Enabled' || $versioningStatus == 'Suspended') {
$versions = $client->listObjectVersions(array(
'Bucket' => $bucket,
))->getPath('Versions');
}
?>
<div style="text-align: center">
<p class="auto-style2">
選択したバケット「<?php e($bucket); ?>」は、バージョニングが
<b><?php print $msgStatus; ?></b>です。<br /><br />
</p>
<form method="GET" action="getObject_process1.php">
<?php
if ($versioningStatus == 'Enabled' || $versioningStatus == 'Suspended') {
$versions = $client->listObjectVersions(array(
'Bucket' => $bucket,
))->getPath('Versions');
?>
<p class="auto-style2">
GET したいキー(ファイル)のバージョンを選択してください:
</p>
<select name="versionid">
<?php
foreach ($versions as $version) {
if ($version['Key'] == $keyname) {
$date = new DateTime($version['LastModified']);
$date->setTimezone(new DateTimeZone('Asia/Tokyo'));
$lastModified = $date->format('Y 年 m 月 d 日 H 時 i 分 s 秒');
?>
<option value="<?php e($version['VersionId']); ?>">
<?php print $version['IsLatest'] ? "{$lastModified} ←最新バージョン
" : $lastModified; ?>
</option>
★次頁へつづく.....
Technical Tips on
CLOUDIAN HyperStore #2
P.52
Copyright © 2010-2015 Cloudian KK. All rights reserved.
★前頁からの続き
<?php
}
}
}
?>
</select>
<input type="hidden" name="bucket" value="<?php print $bucket; ?>" />
<input type="hidden" name="keyname" value="<?php print $keyname; ?>" />
<br /><br />
<input type="submit" name="submit" value="ダウンロード" />
<input type="button" onclick="location.href='getObject_form1.php'"
value="戻る">
</form>
</div>
<?php
} catch (NoSuchKeyException $ex) {
?>
<b><font color="red">指定されたキーは存在しません(´・ω・`)。</font></b><br />
<hr>
<!-- エラーコード: <b><?php print $ex->getCode(); ?></b><br /> -->
エラーメッセージ: <b><?php print $ex->getMessage(); ?></b>
<?php
} catch (InvalidArgumentException $ex) {
?>
<b><font color="red">無効なバージョン ID が指定されました(*´Д`)。</font></b><br />
<hr>
<!-- エラーコード: <b><?php print $ex->getCode(); ?></b><br /> -->
エラーメッセージ: <b><?php print $ex->getMessage(); ?></b>
<?php
} catch (Exception $ex) {
?>
<b><font color="red">何らかしらのエラーが発生しました( ゚Д゚)。</font></b><br />
<hr>
<!-- エラーコード: <b><?php print $ex->getCode(); ?></b><br /> -->
エラーメッセージ: <b><?php print $ex->getMessage(); ?></b>
<?php
}
?>
</body>
</html>
Technical Tips on
CLOUDIAN HyperStore #2
P.53
Copyright © 2010-2015 Cloudian KK. All rights reserved.
③ Web 画面のメインフォームから呼び出される PHP コード
以下に掲載する PHP コードは、バージョン選択フォーム内の[ダウンロード]ボタンを押下したと
きに呼び出され、指定したファイルを getObject 処理する PHP コードです。
<?php
require_once("vendor/autoload.php");
require_once("./config.php");
use Aws¥S3¥S3Client;
use Aws¥S3¥Exception¥NoSuchKeyException;
use Aws¥S3¥Exception¥InvalidArgumentException;
$client = S3Client::factory($config);
$temp_file = tempnam("data", "tmp-");
$bucket = $_GET['bucket'];
// $keyname = isset($_GET['keyname'])? $_GET['keyname'] : 'versioned.txt';
$keyname = $_GET['keyname'];
$tmp = explode('/', $keyname);
$filename = end($tmp);
$version = isset($_GET['versionid']) ? $_GET['versionid'] : NULL;
$get_args = array(
'Bucket' => $bucket,
'Key' => $keyname,
'SaveAs' => $temp_file,
);
if (!is_null($version)) {
$get_args['VersionId'] = $version;
}
★次頁へつづく.....
サンプルコード getObject_process1.php
Technical Tips on
CLOUDIAN HyperStore #2
P.54
Copyright © 2010-2015 Cloudian KK. All rights reserved.
★前頁からの続き
try {
// (1) データ取得
$result = $client->getObject($get_args);
// (2) データのメタ情報
$size = $result['ContentLength']; // => "20"
$type = $result['ContentType']; // => "text/plain"
$mtime = $result['LastModified']; // => "Sat, 01 Mar 2014 07:45:45 GMT"
header('Content-Type:'.$type);
header('Content-Length:'.$size);
header('Content-Disposition: attachment; filename="' . $filename . '"');
$body = $result['Body'];
//$body->rewind();
$body instanceof Guzzle¥Http¥EntityBody;
print $body;
$body->close();
unlink($temp_file);
} catch (NoSuchKeyException $ex) {
?>
<b><font color="red">指定されたキーは存在しません(´・ω・`)。</font></b><br />
<hr>
<!-- エラーコード: <b><?php print $ex->getCode(); ?></b><br /> -->
エラーメッセージ: <b><?php print $ex->getMessage(); ?></b>
<?php
} catch (InvalidArgumentException $ex) {
?>
<b><font color="red">無効なバージョン ID が指定されました(*´Д`)。</font></b><br />
<hr>
<!-- エラーコード: <b><?php print $ex->getCode(); ?></b><br /> -->
エラーメッセージ: <b><?php print $ex->getMessage(); ?></b>
<?php
} catch (Exception $ex) {
?>
<b><font color="red">何らかしらのエラーが発生しました( ゚Д゚)。</font></b><br />
<hr>
<!-- エラーコード: <b><?php print $ex->getCode(); ?></b><br /> -->
エラーメッセージ: <b><?php print $ex->getMessage(); ?></b>
<?php
}
Technical Tips on
CLOUDIAN HyperStore #2
P.55
Copyright © 2010-2015 Cloudian KK. All rights reserved.
5. おわりに
本書では、HyperStore 独自機能である自動階層化機能の概要とその設定方法を説明し、(現行
バージョンにおいては)CMC 経由では設定できないバージョニング機能について、その動作を見て頂ける
PHP サンプルコードを提示し説明しました。
自動階層化機能を使用することにより、オンプレにある HyperStore とパブリッククラウド上のクラウドス
トレージをうまく組み合わせて有効活用するハイブリッドクラウド構成を実現できます。
また、バージョニング機能も有効に活用できれば、ある一定期間、格納されたユーザーデータを保護す
るための仕組み/手段として活用して頂ける機能です。
これまで見てきたように、現時点ではまだ CMC から設定できない機能もありますが、HyperStore の
大きな特長のひとつでもある S3 API を活用し、データ操作だけではなくストレージシステムの管理や保守
にもチャレンジしてみてください。Java や Python、PHP 等のプログラムから S3 API を呼び出して様々な
操作や管理が行えるようになれば、例えば業務システムのプログラムに組み込んで直接、業務システムか
ら HyperStore にアクセスしデータをアップロード/ダウンロードさせることもでき、より効果的に
HyperStore をご使用頂けるものと思います。
なお、本書掲載のサンプルコードは元々、『なかなか目には見えづらいバージョニング機能を、お客様に
視覚的にご理解頂ける術はないものか?』と、著者が試行錯誤して作成したデモ用の PHP コードです。
このように公開するにはお粗末でお恥ずかしい稚拙なコードで、デモや解説に必要な最低限の機能し
か実装しておらず、またエラーハンドルもかなり省いていますので、現場でご使用の場合は本書サンプルコ
ードを参考にして頂き、より良いコードを作成してください。
以上
著者 松井 良祐
役職 テクニカル プリセールス マネージャー
メールアドレス rmatsui@cloudian.com
Technical Tips on
CLOUDIAN HyperStore #2
《 本書掲載のサンプルコードについて 》
本書にはサンプルコードを別添しませんが、もしサンプルコードが欲しいとご希望を頂けましたら別途、お
送り致します。その際はご面倒をお掛け致しますが、弊社営業部までご連絡ください。
Technical Tips on
CLOUDIAN HyperStore #2
ホームページ:http://cloudian.jp/
Facebook:https://www.facebook.com/cloudian.cloudstorage.S3
Twitter:https://twitter.com/Cloudian_KK
ブログ:http://www.cloudian-blog.com/
評価版お申込み:http://www.cloudian.jp/cloud-storage-products/cloudian_eval_agr.php
クラウディアン株式会社
THANK YOU ! www.cloudian.jp
Cloud Storage for Everyone

More Related Content

What's hot

Azure IaaS update (2018年6月~7月 発表版)
Azure IaaS update (2018年6月~7月 発表版) Azure IaaS update (2018年6月~7月 発表版)
Azure IaaS update (2018年6月~7月 発表版) Takamasa Maejima
 
OpenStack-ansibleで作るOpenStack HA環境 Mitaka版
OpenStack-ansibleで作るOpenStack HA環境 Mitaka版OpenStack-ansibleで作るOpenStack HA環境 Mitaka版
OpenStack-ansibleで作るOpenStack HA環境 Mitaka版VirtualTech Japan Inc.
 
Ubuntu OpenStack Installer を使った1Node OpenStack
Ubuntu OpenStack Installer を使った1Node OpenStackUbuntu OpenStack Installer を使った1Node OpenStack
Ubuntu OpenStack Installer を使った1Node OpenStackVirtualTech Japan Inc.
 
Canonicalが支える、さくっと使えるUbuntu OpenStack - OpenStack Day in ITpro EXPO 2014
Canonicalが支える、さくっと使えるUbuntu OpenStack - OpenStack Day in ITpro EXPO 2014Canonicalが支える、さくっと使えるUbuntu OpenStack - OpenStack Day in ITpro EXPO 2014
Canonicalが支える、さくっと使えるUbuntu OpenStack - OpenStack Day in ITpro EXPO 2014VirtualTech Japan Inc.
 
OpenStack構築手順書Mitaka版 (期間限定公開)
OpenStack構築手順書Mitaka版 (期間限定公開)OpenStack構築手順書Mitaka版 (期間限定公開)
OpenStack構築手順書Mitaka版 (期間限定公開)VirtualTech Japan Inc.
 
社内システム on AWS
社内システム on AWS 社内システム on AWS
社内システム on AWS kudo-jun
 
OpenStack-Ansibleで作るOpenStack HA環境 Mitaka版(期間限定公開)
OpenStack-Ansibleで作るOpenStack HA環境 Mitaka版(期間限定公開)OpenStack-Ansibleで作るOpenStack HA環境 Mitaka版(期間限定公開)
OpenStack-Ansibleで作るOpenStack HA環境 Mitaka版(期間限定公開)VirtualTech Japan Inc.
 
Recap: PowerShell Core
Recap: PowerShell CoreRecap: PowerShell Core
Recap: PowerShell CoreKazuki Takai
 
S16 Microsoft Azure 上での Chef 環境の構成
S16 Microsoft Azure 上での Chef 環境の構成S16 Microsoft Azure 上での Chef 環境の構成
S16 Microsoft Azure 上での Chef 環境の構成Microsoft Azure Japan
 
Chefで始めるWindows Server構築
Chefで始めるWindows Server構築Chefで始めるWindows Server構築
Chefで始めるWindows Server構築Takashi Kanai
 
Okinawa Open Days 2014 OpenStackハンズオンセミナー / OpenStackの機能概要
Okinawa Open Days 2014 OpenStackハンズオンセミナー / OpenStackの機能概要Okinawa Open Days 2014 OpenStackハンズオンセミナー / OpenStackの機能概要
Okinawa Open Days 2014 OpenStackハンズオンセミナー / OpenStackの機能概要Etsuji Nakai
 
OpenStackを一発でデプロイ – Juju/MAAS - OpenStack最新情報セミナー 2015年2月
OpenStackを一発でデプロイ – Juju/MAAS  - OpenStack最新情報セミナー 2015年2月OpenStackを一発でデプロイ – Juju/MAAS  - OpenStack最新情報セミナー 2015年2月
OpenStackを一発でデプロイ – Juju/MAAS - OpenStack最新情報セミナー 2015年2月VirtualTech Japan Inc.
 
OpenStack QuickStart - Icehouse
OpenStack QuickStart - IcehouseOpenStack QuickStart - Icehouse
OpenStack QuickStart - IcehouseHideki Saito
 
PowerShell DSC と Linux
PowerShell DSC と LinuxPowerShell DSC と Linux
PowerShell DSC と LinuxKazuki Takai
 
OpenStack Liberty をインストールしてみた
OpenStack Liberty をインストールしてみたOpenStack Liberty をインストールしてみた
OpenStack Liberty をインストールしてみたTakashi Umeno
 
Ansible2とOpenStackの関係
Ansible2とOpenStackの関係Ansible2とOpenStackの関係
Ansible2とOpenStackの関係Hideki Saito
 
知らないと地味にハマるOpen stackインストール時の注意点
知らないと地味にハマるOpen stackインストール時の注意点知らないと地味にハマるOpen stackインストール時の注意点
知らないと地味にハマるOpen stackインストール時の注意点d-shen
 
OpenStack概要 ~仮想ネットワーク~
OpenStack概要 ~仮想ネットワーク~OpenStack概要 ~仮想ネットワーク~
OpenStack概要 ~仮想ネットワーク~Masaya Aoyama
 
H26第1回 沖縄オープンラボラトリ・ハンズオンセミナー:OpenStack 基礎操作編
H26第1回 沖縄オープンラボラトリ・ハンズオンセミナー:OpenStack 基礎操作編H26第1回 沖縄オープンラボラトリ・ハンズオンセミナー:OpenStack 基礎操作編
H26第1回 沖縄オープンラボラトリ・ハンズオンセミナー:OpenStack 基礎操作編irix_jp
 
Open Stack Day - Ansibleによる環境構築の自動化
Open Stack Day - Ansibleによる環境構築の自動化Open Stack Day - Ansibleによる環境構築の自動化
Open Stack Day - Ansibleによる環境構築の自動化shirou wakayama
 

What's hot (20)

Azure IaaS update (2018年6月~7月 発表版)
Azure IaaS update (2018年6月~7月 発表版) Azure IaaS update (2018年6月~7月 発表版)
Azure IaaS update (2018年6月~7月 発表版)
 
OpenStack-ansibleで作るOpenStack HA環境 Mitaka版
OpenStack-ansibleで作るOpenStack HA環境 Mitaka版OpenStack-ansibleで作るOpenStack HA環境 Mitaka版
OpenStack-ansibleで作るOpenStack HA環境 Mitaka版
 
Ubuntu OpenStack Installer を使った1Node OpenStack
Ubuntu OpenStack Installer を使った1Node OpenStackUbuntu OpenStack Installer を使った1Node OpenStack
Ubuntu OpenStack Installer を使った1Node OpenStack
 
Canonicalが支える、さくっと使えるUbuntu OpenStack - OpenStack Day in ITpro EXPO 2014
Canonicalが支える、さくっと使えるUbuntu OpenStack - OpenStack Day in ITpro EXPO 2014Canonicalが支える、さくっと使えるUbuntu OpenStack - OpenStack Day in ITpro EXPO 2014
Canonicalが支える、さくっと使えるUbuntu OpenStack - OpenStack Day in ITpro EXPO 2014
 
OpenStack構築手順書Mitaka版 (期間限定公開)
OpenStack構築手順書Mitaka版 (期間限定公開)OpenStack構築手順書Mitaka版 (期間限定公開)
OpenStack構築手順書Mitaka版 (期間限定公開)
 
社内システム on AWS
社内システム on AWS 社内システム on AWS
社内システム on AWS
 
OpenStack-Ansibleで作るOpenStack HA環境 Mitaka版(期間限定公開)
OpenStack-Ansibleで作るOpenStack HA環境 Mitaka版(期間限定公開)OpenStack-Ansibleで作るOpenStack HA環境 Mitaka版(期間限定公開)
OpenStack-Ansibleで作るOpenStack HA環境 Mitaka版(期間限定公開)
 
Recap: PowerShell Core
Recap: PowerShell CoreRecap: PowerShell Core
Recap: PowerShell Core
 
S16 Microsoft Azure 上での Chef 環境の構成
S16 Microsoft Azure 上での Chef 環境の構成S16 Microsoft Azure 上での Chef 環境の構成
S16 Microsoft Azure 上での Chef 環境の構成
 
Chefで始めるWindows Server構築
Chefで始めるWindows Server構築Chefで始めるWindows Server構築
Chefで始めるWindows Server構築
 
Okinawa Open Days 2014 OpenStackハンズオンセミナー / OpenStackの機能概要
Okinawa Open Days 2014 OpenStackハンズオンセミナー / OpenStackの機能概要Okinawa Open Days 2014 OpenStackハンズオンセミナー / OpenStackの機能概要
Okinawa Open Days 2014 OpenStackハンズオンセミナー / OpenStackの機能概要
 
OpenStackを一発でデプロイ – Juju/MAAS - OpenStack最新情報セミナー 2015年2月
OpenStackを一発でデプロイ – Juju/MAAS  - OpenStack最新情報セミナー 2015年2月OpenStackを一発でデプロイ – Juju/MAAS  - OpenStack最新情報セミナー 2015年2月
OpenStackを一発でデプロイ – Juju/MAAS - OpenStack最新情報セミナー 2015年2月
 
OpenStack QuickStart - Icehouse
OpenStack QuickStart - IcehouseOpenStack QuickStart - Icehouse
OpenStack QuickStart - Icehouse
 
PowerShell DSC と Linux
PowerShell DSC と LinuxPowerShell DSC と Linux
PowerShell DSC と Linux
 
OpenStack Liberty をインストールしてみた
OpenStack Liberty をインストールしてみたOpenStack Liberty をインストールしてみた
OpenStack Liberty をインストールしてみた
 
Ansible2とOpenStackの関係
Ansible2とOpenStackの関係Ansible2とOpenStackの関係
Ansible2とOpenStackの関係
 
知らないと地味にハマるOpen stackインストール時の注意点
知らないと地味にハマるOpen stackインストール時の注意点知らないと地味にハマるOpen stackインストール時の注意点
知らないと地味にハマるOpen stackインストール時の注意点
 
OpenStack概要 ~仮想ネットワーク~
OpenStack概要 ~仮想ネットワーク~OpenStack概要 ~仮想ネットワーク~
OpenStack概要 ~仮想ネットワーク~
 
H26第1回 沖縄オープンラボラトリ・ハンズオンセミナー:OpenStack 基礎操作編
H26第1回 沖縄オープンラボラトリ・ハンズオンセミナー:OpenStack 基礎操作編H26第1回 沖縄オープンラボラトリ・ハンズオンセミナー:OpenStack 基礎操作編
H26第1回 沖縄オープンラボラトリ・ハンズオンセミナー:OpenStack 基礎操作編
 
Open Stack Day - Ansibleによる環境構築の自動化
Open Stack Day - Ansibleによる環境構築の自動化Open Stack Day - Ansibleによる環境構築の自動化
Open Stack Day - Ansibleによる環境構築の自動化
 

Viewers also liked

PHP開発とクラウド
PHP開発とクラウドPHP開発とクラウド
PHP開発とクラウド晋也 古渡
 
Eleven tips to build your succesfull body language
Eleven tips to build your succesfull body languageEleven tips to build your succesfull body language
Eleven tips to build your succesfull body languageAndre Vonk
 
クラウドストレージとは? (Cloudian Summit 2012)
クラウドストレージとは? (Cloudian Summit 2012)クラウドストレージとは? (Cloudian Summit 2012)
クラウドストレージとは? (Cloudian Summit 2012)CLOUDIAN KK
 
Второе ополчение. Всвобождение москвы.
Второе ополчение. Всвобождение москвы.Второе ополчение. Всвобождение москвы.
Второе ополчение. Всвобождение москвы.Proznanie.ru
 
Solgenicin nobelevskaya lekcia
Solgenicin nobelevskaya lekciaSolgenicin nobelevskaya lekcia
Solgenicin nobelevskaya lekciaProznanie.ru
 
Вторая война Рима с Карфагеном
Вторая война Рима с КарфагеномВторая война Рима с Карфагеном
Вторая война Рима с КарфагеномProznanie.ru
 
Особенности и развитие Латинской Америки
Особенности и развитие Латинской АмерикиОсобенности и развитие Латинской Америки
Особенности и развитие Латинской АмерикиProznanie.ru
 
Культура России XVIIIв
Культура России XVIIIвКультура России XVIIIв
Культура России XVIIIвProznanie.ru
 
Cardionics EKG Netwerk project cardionics.be presentatie doc nl
Cardionics EKG  Netwerk project cardionics.be presentatie   doc nlCardionics EKG  Netwerk project cardionics.be presentatie   doc nl
Cardionics EKG Netwerk project cardionics.be presentatie doc nlCARDIONICS BELGIUM
 
NetApp SteelStore with CLOUDIAN HyperStore
NetApp SteelStore with CLOUDIAN HyperStoreNetApp SteelStore with CLOUDIAN HyperStore
NetApp SteelStore with CLOUDIAN HyperStoreCLOUDIAN KK
 
Apresentacao sessoes mz
Apresentacao sessoes mzApresentacao sessoes mz
Apresentacao sessoes mzDiogo Gomes
 
СИНХРОНИЧЕСКАЯ ТАБЛИЦА ДРЕВНЕГО ВОСТОКА (ДРЕВНИЙ БЛИЖНИЙ ВОСТОК, ДРЕВНИЙ ИРАН...
СИНХРОНИЧЕСКАЯ ТАБЛИЦА ДРЕВНЕГО ВОСТОКА (ДРЕВНИЙ БЛИЖНИЙ ВОСТОК, ДРЕВНИЙ ИРАН...СИНХРОНИЧЕСКАЯ ТАБЛИЦА ДРЕВНЕГО ВОСТОКА (ДРЕВНИЙ БЛИЖНИЙ ВОСТОК, ДРЕВНИЙ ИРАН...
СИНХРОНИЧЕСКАЯ ТАБЛИЦА ДРЕВНЕГО ВОСТОКА (ДРЕВНИЙ БЛИЖНИЙ ВОСТОК, ДРЕВНИЙ ИРАН...Proznanie.ru
 
Cloudian meets CloudStack
Cloudian meets CloudStackCloudian meets CloudStack
Cloudian meets CloudStackCLOUDIAN KK
 
Malthus is still Wrong - we can feed a world of 9 billion
Malthus is still Wrong - we can feed a world of 9 billionMalthus is still Wrong - we can feed a world of 9 billion
Malthus is still Wrong - we can feed a world of 9 billionPrabhu Pingali
 
Presentation parent engagement january 2012
Presentation   parent engagement january 2012Presentation   parent engagement january 2012
Presentation parent engagement january 2012slater_45
 
Эпоха республики. Эпоха империи.
Эпоха республики. Эпоха империи.Эпоха республики. Эпоха империи.
Эпоха республики. Эпоха империи.Proznanie.ru
 

Viewers also liked (20)

PHP開発とクラウド
PHP開発とクラウドPHP開発とクラウド
PHP開発とクラウド
 
Eleven tips to build your succesfull body language
Eleven tips to build your succesfull body languageEleven tips to build your succesfull body language
Eleven tips to build your succesfull body language
 
クラウドストレージとは? (Cloudian Summit 2012)
クラウドストレージとは? (Cloudian Summit 2012)クラウドストレージとは? (Cloudian Summit 2012)
クラウドストレージとは? (Cloudian Summit 2012)
 
Второе ополчение. Всвобождение москвы.
Второе ополчение. Всвобождение москвы.Второе ополчение. Всвобождение москвы.
Второе ополчение. Всвобождение москвы.
 
Solgenicin nobelevskaya lekcia
Solgenicin nobelevskaya lekciaSolgenicin nobelevskaya lekcia
Solgenicin nobelevskaya lekcia
 
Usa
UsaUsa
Usa
 
Social media classroom
Social media classroomSocial media classroom
Social media classroom
 
Вторая война Рима с Карфагеном
Вторая война Рима с КарфагеномВторая война Рима с Карфагеном
Вторая война Рима с Карфагеном
 
Особенности и развитие Латинской Америки
Особенности и развитие Латинской АмерикиОсобенности и развитие Латинской Америки
Особенности и развитие Латинской Америки
 
Культура России XVIIIв
Культура России XVIIIвКультура России XVIIIв
Культура России XVIIIв
 
Protobuf
ProtobufProtobuf
Protobuf
 
Cardionics EKG Netwerk project cardionics.be presentatie doc nl
Cardionics EKG  Netwerk project cardionics.be presentatie   doc nlCardionics EKG  Netwerk project cardionics.be presentatie   doc nl
Cardionics EKG Netwerk project cardionics.be presentatie doc nl
 
Itunesaaapart5a
Itunesaaapart5aItunesaaapart5a
Itunesaaapart5a
 
NetApp SteelStore with CLOUDIAN HyperStore
NetApp SteelStore with CLOUDIAN HyperStoreNetApp SteelStore with CLOUDIAN HyperStore
NetApp SteelStore with CLOUDIAN HyperStore
 
Apresentacao sessoes mz
Apresentacao sessoes mzApresentacao sessoes mz
Apresentacao sessoes mz
 
СИНХРОНИЧЕСКАЯ ТАБЛИЦА ДРЕВНЕГО ВОСТОКА (ДРЕВНИЙ БЛИЖНИЙ ВОСТОК, ДРЕВНИЙ ИРАН...
СИНХРОНИЧЕСКАЯ ТАБЛИЦА ДРЕВНЕГО ВОСТОКА (ДРЕВНИЙ БЛИЖНИЙ ВОСТОК, ДРЕВНИЙ ИРАН...СИНХРОНИЧЕСКАЯ ТАБЛИЦА ДРЕВНЕГО ВОСТОКА (ДРЕВНИЙ БЛИЖНИЙ ВОСТОК, ДРЕВНИЙ ИРАН...
СИНХРОНИЧЕСКАЯ ТАБЛИЦА ДРЕВНЕГО ВОСТОКА (ДРЕВНИЙ БЛИЖНИЙ ВОСТОК, ДРЕВНИЙ ИРАН...
 
Cloudian meets CloudStack
Cloudian meets CloudStackCloudian meets CloudStack
Cloudian meets CloudStack
 
Malthus is still Wrong - we can feed a world of 9 billion
Malthus is still Wrong - we can feed a world of 9 billionMalthus is still Wrong - we can feed a world of 9 billion
Malthus is still Wrong - we can feed a world of 9 billion
 
Presentation parent engagement january 2012
Presentation   parent engagement january 2012Presentation   parent engagement january 2012
Presentation parent engagement january 2012
 
Эпоха республики. Эпоха империи.
Эпоха республики. Эпоха империи.Эпоха республики. Эпоха империи.
Эпоха республики. Эпоха империи.
 

Similar to Auto tiering and Versioning of CLOUDIAN HyperStore

AWSのデータベースサービス全体像
AWSのデータベースサービス全体像AWSのデータベースサービス全体像
AWSのデータベースサービス全体像Amazon Web Services Japan
 
AWSマイスターシリーズReloaded(AWS Beanstalk)
AWSマイスターシリーズReloaded(AWS Beanstalk)AWSマイスターシリーズReloaded(AWS Beanstalk)
AWSマイスターシリーズReloaded(AWS Beanstalk)Akio Katayama
 
20120416 aws meister-reloaded-aws-elasticbeanstalk-public
20120416 aws meister-reloaded-aws-elasticbeanstalk-public20120416 aws meister-reloaded-aws-elasticbeanstalk-public
20120416 aws meister-reloaded-aws-elasticbeanstalk-publicAmazon Web Services Japan
 
Aws elastic beanstalk-handson-summit2012
Aws elastic beanstalk-handson-summit2012Aws elastic beanstalk-handson-summit2012
Aws elastic beanstalk-handson-summit2012Akio Katayama
 
Zerto ホワイトペーパー:Oracleデータベース保護のベストプラクティス(ショート編)
Zerto ホワイトペーパー:Oracleデータベース保護のベストプラクティス(ショート編)Zerto ホワイトペーパー:Oracleデータベース保護のベストプラクティス(ショート編)
Zerto ホワイトペーパー:Oracleデータベース保護のベストプラクティス(ショート編)株式会社クライム
 
MTのダイナミック処理(PHP)を高速化する@サーバーサイドスクリプティング
MTのダイナミック処理(PHP)を高速化する@サーバーサイドスクリプティングMTのダイナミック処理(PHP)を高速化する@サーバーサイドスクリプティング
MTのダイナミック処理(PHP)を高速化する@サーバーサイドスクリプティング純生 野田
 
RFC8525(YANG Library)の勉強資料。
RFC8525(YANG Library)の勉強資料。RFC8525(YANG Library)の勉強資料。
RFC8525(YANG Library)の勉強資料。Tetsuya Hasegawa
 
Hybrid Cloud with Cisco Cloud Center and Object Storage
Hybrid Cloud with Cisco Cloud Center and Object StorageHybrid Cloud with Cisco Cloud Center and Object Storage
Hybrid Cloud with Cisco Cloud Center and Object StorageHisayoshi Kato
 
Gpu accelerates aimodeldevelopmentandanalyticsutilizingelasticsearchandazure ai
Gpu accelerates aimodeldevelopmentandanalyticsutilizingelasticsearchandazure aiGpu accelerates aimodeldevelopmentandanalyticsutilizingelasticsearchandazure ai
Gpu accelerates aimodeldevelopmentandanalyticsutilizingelasticsearchandazure aiShotaro Suzuki
 
AWS Blackbelt 2015シリーズ Amazon CloudWatch & Amazon CloudWatch Logs
AWS Blackbelt 2015シリーズ Amazon CloudWatch & Amazon CloudWatch LogsAWS Blackbelt 2015シリーズ Amazon CloudWatch & Amazon CloudWatch Logs
AWS Blackbelt 2015シリーズ Amazon CloudWatch & Amazon CloudWatch LogsAmazon Web Services Japan
 
Azure IaaS update (2018年6月~8月 発表版)
Azure IaaS update (2018年6月~8月 発表版) Azure IaaS update (2018年6月~8月 発表版)
Azure IaaS update (2018年6月~8月 発表版) Takamasa Maejima
 
スマートニュースの世界展開を支えるログ解析基盤
スマートニュースの世界展開を支えるログ解析基盤スマートニュースの世界展開を支えるログ解析基盤
スマートニュースの世界展開を支えるログ解析基盤Takumi Sakamoto
 
msal.js v2を触る
msal.js v2を触るmsal.js v2を触る
msal.js v2を触るDevTakas
 
Jjug springセッション
Jjug springセッションJjug springセッション
Jjug springセッションYuichi Hasegawa
 
M20_Azure SQL Database 最新アップデートをまとめてキャッチアップ [Microsoft Japan Digital Days]
M20_Azure SQL Database 最新アップデートをまとめてキャッチアップ [Microsoft Japan Digital Days]M20_Azure SQL Database 最新アップデートをまとめてキャッチアップ [Microsoft Japan Digital Days]
M20_Azure SQL Database 最新アップデートをまとめてキャッチアップ [Microsoft Japan Digital Days]日本マイクロソフト株式会社
 
20201017 JAWS-UG Fukuoka AWS Storage Gateway
20201017 JAWS-UG Fukuoka AWS Storage Gateway20201017 JAWS-UG Fukuoka AWS Storage Gateway
20201017 JAWS-UG Fukuoka AWS Storage GatewayKazuhiro Uchimura
 
Windows エンジニア向け sql server on linux のためのスキルアップデート
Windows エンジニア向け sql server on linux のためのスキルアップデートWindows エンジニア向け sql server on linux のためのスキルアップデート
Windows エンジニア向け sql server on linux のためのスキルアップデートMasayuki Ozawa
 
Alfrescoクラスタリング入門
Alfrescoクラスタリング入門Alfrescoクラスタリング入門
Alfrescoクラスタリング入門Ashitaba YOSHIOKA
 

Similar to Auto tiering and Versioning of CLOUDIAN HyperStore (20)

AWSのデータベースサービス全体像
AWSのデータベースサービス全体像AWSのデータベースサービス全体像
AWSのデータベースサービス全体像
 
AWSマイスターシリーズReloaded(AWS Beanstalk)
AWSマイスターシリーズReloaded(AWS Beanstalk)AWSマイスターシリーズReloaded(AWS Beanstalk)
AWSマイスターシリーズReloaded(AWS Beanstalk)
 
20120416 aws meister-reloaded-aws-elasticbeanstalk-public
20120416 aws meister-reloaded-aws-elasticbeanstalk-public20120416 aws meister-reloaded-aws-elasticbeanstalk-public
20120416 aws meister-reloaded-aws-elasticbeanstalk-public
 
Aws elastic beanstalk-handson-summit2012
Aws elastic beanstalk-handson-summit2012Aws elastic beanstalk-handson-summit2012
Aws elastic beanstalk-handson-summit2012
 
Zerto ホワイトペーパー:Oracleデータベース保護のベストプラクティス(ショート編)
Zerto ホワイトペーパー:Oracleデータベース保護のベストプラクティス(ショート編)Zerto ホワイトペーパー:Oracleデータベース保護のベストプラクティス(ショート編)
Zerto ホワイトペーパー:Oracleデータベース保護のベストプラクティス(ショート編)
 
MTのダイナミック処理(PHP)を高速化する@サーバーサイドスクリプティング
MTのダイナミック処理(PHP)を高速化する@サーバーサイドスクリプティングMTのダイナミック処理(PHP)を高速化する@サーバーサイドスクリプティング
MTのダイナミック処理(PHP)を高速化する@サーバーサイドスクリプティング
 
RFC8525(YANG Library)の勉強資料。
RFC8525(YANG Library)の勉強資料。RFC8525(YANG Library)の勉強資料。
RFC8525(YANG Library)の勉強資料。
 
Hybrid Cloud with Cisco Cloud Center and Object Storage
Hybrid Cloud with Cisco Cloud Center and Object StorageHybrid Cloud with Cisco Cloud Center and Object Storage
Hybrid Cloud with Cisco Cloud Center and Object Storage
 
Gpu accelerates aimodeldevelopmentandanalyticsutilizingelasticsearchandazure ai
Gpu accelerates aimodeldevelopmentandanalyticsutilizingelasticsearchandazure aiGpu accelerates aimodeldevelopmentandanalyticsutilizingelasticsearchandazure ai
Gpu accelerates aimodeldevelopmentandanalyticsutilizingelasticsearchandazure ai
 
AWS Blackbelt 2015シリーズ Amazon CloudWatch & Amazon CloudWatch Logs
AWS Blackbelt 2015シリーズ Amazon CloudWatch & Amazon CloudWatch LogsAWS Blackbelt 2015シリーズ Amazon CloudWatch & Amazon CloudWatch Logs
AWS Blackbelt 2015シリーズ Amazon CloudWatch & Amazon CloudWatch Logs
 
Azure IaaS update (2018年6月~8月 発表版)
Azure IaaS update (2018年6月~8月 発表版) Azure IaaS update (2018年6月~8月 発表版)
Azure IaaS update (2018年6月~8月 発表版)
 
スマートニュースの世界展開を支えるログ解析基盤
スマートニュースの世界展開を支えるログ解析基盤スマートニュースの世界展開を支えるログ解析基盤
スマートニュースの世界展開を支えるログ解析基盤
 
msal.js v2を触る
msal.js v2を触るmsal.js v2を触る
msal.js v2を触る
 
Jjug springセッション
Jjug springセッションJjug springセッション
Jjug springセッション
 
M20_Azure SQL Database 最新アップデートをまとめてキャッチアップ [Microsoft Japan Digital Days]
M20_Azure SQL Database 最新アップデートをまとめてキャッチアップ [Microsoft Japan Digital Days]M20_Azure SQL Database 最新アップデートをまとめてキャッチアップ [Microsoft Japan Digital Days]
M20_Azure SQL Database 最新アップデートをまとめてキャッチアップ [Microsoft Japan Digital Days]
 
PHP on Cloud
PHP on CloudPHP on Cloud
PHP on Cloud
 
20201017 JAWS-UG Fukuoka AWS Storage Gateway
20201017 JAWS-UG Fukuoka AWS Storage Gateway20201017 JAWS-UG Fukuoka AWS Storage Gateway
20201017 JAWS-UG Fukuoka AWS Storage Gateway
 
Windows エンジニア向け sql server on linux のためのスキルアップデート
Windows エンジニア向け sql server on linux のためのスキルアップデートWindows エンジニア向け sql server on linux のためのスキルアップデート
Windows エンジニア向け sql server on linux のためのスキルアップデート
 
Kinesis3 notes
Kinesis3 notesKinesis3 notes
Kinesis3 notes
 
Alfrescoクラスタリング入門
Alfrescoクラスタリング入門Alfrescoクラスタリング入門
Alfrescoクラスタリング入門
 

More from CLOUDIAN KK

CLOUDIAN HYPERSTORE - 風林火山ストレージ
CLOUDIAN HYPERSTORE - 風林火山ストレージCLOUDIAN HYPERSTORE - 風林火山ストレージ
CLOUDIAN HYPERSTORE - 風林火山ストレージCLOUDIAN KK
 
クラウディアンのご紹介
クラウディアンのご紹介クラウディアンのご紹介
クラウディアンのご紹介CLOUDIAN KK
 
IoT/ビッグデータ/AI連携により次世代ストレージが促進するビジネス変革
IoT/ビッグデータ/AI連携により次世代ストレージが促進するビジネス変革IoT/ビッグデータ/AI連携により次世代ストレージが促進するビジネス変革
IoT/ビッグデータ/AI連携により次世代ストレージが促進するビジネス変革CLOUDIAN KK
 
CLOUDIAN Presentation at VERITAS VISION in Tokyo
CLOUDIAN Presentation at VERITAS VISION in TokyoCLOUDIAN Presentation at VERITAS VISION in Tokyo
CLOUDIAN Presentation at VERITAS VISION in TokyoCLOUDIAN KK
 
S3 API接続検証プログラムのご紹介
S3 API接続検証プログラムのご紹介S3 API接続検証プログラムのご紹介
S3 API接続検証プログラムのご紹介CLOUDIAN KK
 
ZiDOMA data and CLOUDIAN HyperStore
ZiDOMA data and CLOUDIAN HyperStoreZiDOMA data and CLOUDIAN HyperStore
ZiDOMA data and CLOUDIAN HyperStoreCLOUDIAN KK
 
FOBAS CSC and CLOUDIAN HyperStore
FOBAS CSC and CLOUDIAN HyperStoreFOBAS CSC and CLOUDIAN HyperStore
FOBAS CSC and CLOUDIAN HyperStoreCLOUDIAN KK
 
ARCserve backup and CLOUDIAN HyperStore
ARCserve backup and CLOUDIAN HyperStoreARCserve backup and CLOUDIAN HyperStore
ARCserve backup and CLOUDIAN HyperStoreCLOUDIAN KK
 
Cloudian presentation at idc japan sv2016
Cloudian presentation at idc japan sv2016Cloudian presentation at idc japan sv2016
Cloudian presentation at idc japan sv2016CLOUDIAN KK
 
ITコアを刷新するハイブリッドクラウド型ITシステム
ITコアを刷新するハイブリッドクラウド型ITシステムITコアを刷新するハイブリッドクラウド型ITシステム
ITコアを刷新するハイブリッドクラウド型ITシステムCLOUDIAN KK
 
【FOBAS】Data is money. ストレージ分散投資のススメ
【FOBAS】Data is money. ストレージ分散投資のススメ【FOBAS】Data is money. ストレージ分散投資のススメ
【FOBAS】Data is money. ストレージ分散投資のススメCLOUDIAN KK
 
【ARI】ストレージのコスト・利便性・非機能要求項目を徹底比較
【ARI】ストレージのコスト・利便性・非機能要求項目を徹底比較【ARI】ストレージのコスト・利便性・非機能要求項目を徹底比較
【ARI】ストレージのコスト・利便性・非機能要求項目を徹底比較CLOUDIAN KK
 
【SIS】オブジェクトストレージを活用した増え続ける長期保管データの運用の効率化
【SIS】オブジェクトストレージを活用した増え続ける長期保管データの運用の効率化【SIS】オブジェクトストレージを活用した増え続ける長期保管データの運用の効率化
【SIS】オブジェクトストレージを活用した増え続ける長期保管データの運用の効率化CLOUDIAN KK
 
【CLOUDIAN】コード化されたインフラの実装
【CLOUDIAN】コード化されたインフラの実装【CLOUDIAN】コード化されたインフラの実装
【CLOUDIAN】コード化されたインフラの実装CLOUDIAN KK
 
【CLOUDIAN】自動階層化による現有ストレージ活用術
【CLOUDIAN】自動階層化による現有ストレージ活用術【CLOUDIAN】自動階層化による現有ストレージ活用術
【CLOUDIAN】自動階層化による現有ストレージ活用術CLOUDIAN KK
 
【CLOUDIAN】秒間隔RPO(目標復旧時点)の実現
【CLOUDIAN】秒間隔RPO(目標復旧時点)の実現【CLOUDIAN】秒間隔RPO(目標復旧時点)の実現
【CLOUDIAN】秒間隔RPO(目標復旧時点)の実現CLOUDIAN KK
 
【Cloudian】FIT2015における会社製品紹介
【Cloudian】FIT2015における会社製品紹介【Cloudian】FIT2015における会社製品紹介
【Cloudian】FIT2015における会社製品紹介CLOUDIAN KK
 
CLOUDIAN at Support Engineer Night
CLOUDIAN at Support Engineer NightCLOUDIAN at Support Engineer Night
CLOUDIAN at Support Engineer NightCLOUDIAN KK
 
ビッグデータ分析基盤が直面する課題をオブジェクトストレージで解決
ビッグデータ分析基盤が直面する課題をオブジェクトストレージで解決ビッグデータ分析基盤が直面する課題をオブジェクトストレージで解決
ビッグデータ分析基盤が直面する課題をオブジェクトストレージで解決CLOUDIAN KK
 
User interface of CLOUDIAN HyperStore
User interface of CLOUDIAN HyperStoreUser interface of CLOUDIAN HyperStore
User interface of CLOUDIAN HyperStoreCLOUDIAN KK
 

More from CLOUDIAN KK (20)

CLOUDIAN HYPERSTORE - 風林火山ストレージ
CLOUDIAN HYPERSTORE - 風林火山ストレージCLOUDIAN HYPERSTORE - 風林火山ストレージ
CLOUDIAN HYPERSTORE - 風林火山ストレージ
 
クラウディアンのご紹介
クラウディアンのご紹介クラウディアンのご紹介
クラウディアンのご紹介
 
IoT/ビッグデータ/AI連携により次世代ストレージが促進するビジネス変革
IoT/ビッグデータ/AI連携により次世代ストレージが促進するビジネス変革IoT/ビッグデータ/AI連携により次世代ストレージが促進するビジネス変革
IoT/ビッグデータ/AI連携により次世代ストレージが促進するビジネス変革
 
CLOUDIAN Presentation at VERITAS VISION in Tokyo
CLOUDIAN Presentation at VERITAS VISION in TokyoCLOUDIAN Presentation at VERITAS VISION in Tokyo
CLOUDIAN Presentation at VERITAS VISION in Tokyo
 
S3 API接続検証プログラムのご紹介
S3 API接続検証プログラムのご紹介S3 API接続検証プログラムのご紹介
S3 API接続検証プログラムのご紹介
 
ZiDOMA data and CLOUDIAN HyperStore
ZiDOMA data and CLOUDIAN HyperStoreZiDOMA data and CLOUDIAN HyperStore
ZiDOMA data and CLOUDIAN HyperStore
 
FOBAS CSC and CLOUDIAN HyperStore
FOBAS CSC and CLOUDIAN HyperStoreFOBAS CSC and CLOUDIAN HyperStore
FOBAS CSC and CLOUDIAN HyperStore
 
ARCserve backup and CLOUDIAN HyperStore
ARCserve backup and CLOUDIAN HyperStoreARCserve backup and CLOUDIAN HyperStore
ARCserve backup and CLOUDIAN HyperStore
 
Cloudian presentation at idc japan sv2016
Cloudian presentation at idc japan sv2016Cloudian presentation at idc japan sv2016
Cloudian presentation at idc japan sv2016
 
ITコアを刷新するハイブリッドクラウド型ITシステム
ITコアを刷新するハイブリッドクラウド型ITシステムITコアを刷新するハイブリッドクラウド型ITシステム
ITコアを刷新するハイブリッドクラウド型ITシステム
 
【FOBAS】Data is money. ストレージ分散投資のススメ
【FOBAS】Data is money. ストレージ分散投資のススメ【FOBAS】Data is money. ストレージ分散投資のススメ
【FOBAS】Data is money. ストレージ分散投資のススメ
 
【ARI】ストレージのコスト・利便性・非機能要求項目を徹底比較
【ARI】ストレージのコスト・利便性・非機能要求項目を徹底比較【ARI】ストレージのコスト・利便性・非機能要求項目を徹底比較
【ARI】ストレージのコスト・利便性・非機能要求項目を徹底比較
 
【SIS】オブジェクトストレージを活用した増え続ける長期保管データの運用の効率化
【SIS】オブジェクトストレージを活用した増え続ける長期保管データの運用の効率化【SIS】オブジェクトストレージを活用した増え続ける長期保管データの運用の効率化
【SIS】オブジェクトストレージを活用した増え続ける長期保管データの運用の効率化
 
【CLOUDIAN】コード化されたインフラの実装
【CLOUDIAN】コード化されたインフラの実装【CLOUDIAN】コード化されたインフラの実装
【CLOUDIAN】コード化されたインフラの実装
 
【CLOUDIAN】自動階層化による現有ストレージ活用術
【CLOUDIAN】自動階層化による現有ストレージ活用術【CLOUDIAN】自動階層化による現有ストレージ活用術
【CLOUDIAN】自動階層化による現有ストレージ活用術
 
【CLOUDIAN】秒間隔RPO(目標復旧時点)の実現
【CLOUDIAN】秒間隔RPO(目標復旧時点)の実現【CLOUDIAN】秒間隔RPO(目標復旧時点)の実現
【CLOUDIAN】秒間隔RPO(目標復旧時点)の実現
 
【Cloudian】FIT2015における会社製品紹介
【Cloudian】FIT2015における会社製品紹介【Cloudian】FIT2015における会社製品紹介
【Cloudian】FIT2015における会社製品紹介
 
CLOUDIAN at Support Engineer Night
CLOUDIAN at Support Engineer NightCLOUDIAN at Support Engineer Night
CLOUDIAN at Support Engineer Night
 
ビッグデータ分析基盤が直面する課題をオブジェクトストレージで解決
ビッグデータ分析基盤が直面する課題をオブジェクトストレージで解決ビッグデータ分析基盤が直面する課題をオブジェクトストレージで解決
ビッグデータ分析基盤が直面する課題をオブジェクトストレージで解決
 
User interface of CLOUDIAN HyperStore
User interface of CLOUDIAN HyperStoreUser interface of CLOUDIAN HyperStore
User interface of CLOUDIAN HyperStore
 

Auto tiering and Versioning of CLOUDIAN HyperStore

  • 1. Technical Tips on CLOUDIAN HyperStore #2 Technical Tips on CLOUDIAN HyperStore® 自動階層化(Auto-Tiering)とバージョニング機能の解説 ~ AWS SDK for PHP を使用したサンプルコード ~ (CLOUDIAN HyperStore v5.2.x 対応版) Version 1.2 Jan. 27, 2016
  • 2. 《 目 次 》 1. はじめに........................................................................................................ 2 2. 自動階層化(AUTO-TIERING)機能について ...................................................... 3 バケットライフサイクル概要 ............................................................................... 3 自動階層化機能の設定 ................................................................................. 6 ライフサイクルルールの設定 ............................................................................ 10 ① 自動階層化(データの移動)ルールの設定...................................................... 11 ② データの削除ルールの設定.......................................................................... 12 ③ ライフサイクルルールの有効化 ...................................................................... 13 3. バージョニングについて ..................................................................................... 14 バージョニング概要 ...................................................................................... 14 PUT 時の動作.......................................................................................... 16 DELETE/GET 時の動作............................................................................ 17 バケットのバージョニング有効化 ....................................................................... 18 バージョニングされたオブジェクトの削除 .............................................................. 20 4. AWS SDK FOR PHP 2 を使用した PHP サンプルコード .......................................... 25 バージョニング設定状況の表示と状態変更のサンプルコード ....................................... 28 バージョニングされたバケットに対するオブジェクトの複数回 PUT.................................. 38 バージョニングされたオブジェクトのダウンロード(GET)処理..................................... 45 5. おわりに ...................................................................................................... 55
  • 3. Technical Tips on CLOUDIAN HyperStore #2 P.1 Copyright © 2010-2015 Cloudian KK. All rights reserved. 本書では、CLOUDIAN HyperStore®で利用可能な下記 2 つの機能について、その概念と利 用方法を説明します。  自動階層化(Auto-Tiering)機能 (※HyperStore 独自機能)  バージョニング機能 CMC で設定できない設定項目は、本書では AWS SDK for PHP 2 をインストールした PHP 環境 を用意し、PHP から S3 API を呼び出して設定を行っています。 AWS SDK は PHP 以外にも、Java や.NET、Python、Ruby、Node.js、モバイル端末向けの iOS や Android に対応したものが、Amazon Web Services から提供されています。 本書では AWS SDK for PHP 2 を使用した PHP サンプルコードをいくつか掲載し、主にバージョニン グ機能の利用イメージを説明します。 本書では触れないその他言語の AWS SDK や、AWS SDK for PHP 2 ののより詳細な内容・説 明を確認したい場合には、Amazon Web Services 社のホームページをご参照ください。 【対象読者】 システム管理者、システム運用者、アプリケーション開発者 および HyperStore の自動階層化機能 にご興味をお持ち頂いているお客様 《注意事項》 本書に掲載するサンプルコードは、あくまでも S3 API を使用して HyperStore の機能を設定する方法の概要を説明するための、非 常に簡易なものです。そのため、サンプルコードでは最低限の機能しか実装しておらず、例外処理も不十分な状態です。実環境で使用さ れる場合は本書を参考にして、必要な機能や例外処理を実装してください。 本書に掲載するサンプルコードを使用したことにより発生したデータの損失またはお客様のコンピューター・システムへの損傷などのいかな る損害についても、クラウディアン株式会社は一切の責任を負わないものとします。 サンプルコードをそのままご使用になられる場合は、自己判断・自己責任でお願いします。
  • 4. Technical Tips on CLOUDIAN HyperStore #2 P.2 Copyright © 2010-2015 Cloudian KK. All rights reserved. 1. はじめに 本書では、CLOUDIAN HyperStore®(以下、「HyperStore」)の独自機能である自動階層化 (Auto-Tiering)機能と、バージョニングについて説明します。 HyperStore は、HyperStore ストレージにオブジェクトが格納されている期間(ライフサイクルルール) に基づいて異なる HyperStore システム、あるいは Amazon S3 または Glacier へオブジェクトを自動 的に移行させる“自動階層化(Auto-Tiering)”機能を有しています。この機能は、Amazon S3 が持 つバケットライフサイクル管理機能を拡張し、HyperStore 独自の機能として実装したものです。 まず初めに、本機能の基になっているバケットライフサイクル管理機能の概要を説明し、具体的に HyperStore でどのように自動階層化の設定を行うのかをスクリーンショットを掲載し説明します。 次に、HyperStore のバケットに格納されたオブジェクトの過去バージョンを複数保持することができる、 “バージョニング機能”について説明します。 最終章では AWS SDK for PHP 2 を使用し、PHP から S3 API を呼び出してバージョニングの機 能を確認して頂ける PHP サンプルコードをいくつか掲載します。
  • 5. Technical Tips on CLOUDIAN HyperStore #2 P.3 Copyright © 2010-2015 Cloudian KK. All rights reserved. 2. 自動階層化(Auto-Tiering)機能について 本章では、自動階層化(Auto-Tiering)機能の概要を説明します。  バケットライフサイクル概要 HyperStore の自動階層化機能は、Amazon S3 で使用できるバケットライフサイクル管理機能を 拡張し実装されています。HyperStore は、設定されたライフサイクルルールに基づき、ライフサイクルの有 効期限が失効したオブジェクトを Amazon S3/Glacier、あるいは異なる HyperStore システムに移 動させます。 ライフサイクルルールは、バケットに対して設定します。バケット単位で設定できるため、 「バケット A は、オブジェクトを外部のストレージシステムに自動階層化する」 「バケット B は自動階層化せず、ローカルの HyperStore ストレージに保管し続ける」 といった制御も可能です。 オブジェクトが格納されるバケットに対して設定したライフサイクルの有効期間中に、そのバケットに格納 されたオブジェクトをどのように管理するかを定義できます。 ここで言う“管理”とは、  オブジェクトの削除 … 「図1: データの削除(Expiration)」 参照  オブジェクトの移動 … 「図2: データの移動(Transition)」 参照 という操作を、設定したライフサイクルに基づくルールにより自動的に実行することを意味しています。
  • 6. Technical Tips on CLOUDIAN HyperStore #2 P.4 Copyright © 2010-2015 Cloudian KK. All rights reserved. 例えば、下記の例のように  Firewall やサーバー、ネットワーク機器等の IT 機器から出力されるログを毎日、S3 バケットにア ップロードしているが、このログは監査目的で一年間は保持しておく必要があるものの、その後は削 除しても問題無いという社内規定等がある。  ファイルサーバー用途で HyperStore ストレージを利用しているが、調査の結果、約 80%のファ イルが 3 年以上、アクセスされていないことが判明したので、最終アクセス日時から 3 年以上経 過したものは他の HyperStore システム、あるいは Amazon Glacier に移行させても構わな い。  一定期間はすぐにアクセスできる状態でデータを保持しておく必要があるが、その期間を経過する と殆どアクセスされなくなるデータだが、業界基準や法規制により長期間の保管を義務付けられて いる。 等のオブジェクト(データ)に対する保管要件に従って、HyperStore のライフサイクルルールを定義 することができます。 図 1: データの削除 (Expiration) 作成日: 2014 年 8 月 7 日 作成日: 2014 年 8 月 14 日 作成日: 2014 年 7 月 31 日 本日削除 2015 年 8 月 14 日 削除予定 2015 年 7 月 31 日 削除済み 今日: 2015 年 8 月 7 日 ライフサイクル設定期間 <Expiration> <Days>365</Days> </Expiration> 文書① 文書② 文書③ 文書② 文書③ 文書① 365 日
  • 7. Technical Tips on CLOUDIAN HyperStore #2 P.5 Copyright © 2010-2015 Cloudian KK. All rights reserved. 図 2: データの移動 (Transition) さらにオブジェクトの移動(Transition)と削除(Expiration)のルールを組み合わせて定義することによ り、  作成後、1 年経過した財務帳票を異なる HyperStore システムあるいは Amazon Glacier に移行し、作成後から 10 年経過した時点で削除する といった、Transition と Expiration を組み合わせたライフサイクルルールを定義することもできます。 作成日: 2014 年 8 月 7 日 作成日: 2014 年 8 月 14 日 作成日: 2014 年 7 月 31 日 本日移行 今日: 2015 年 8 月 7 日 <Transition> <Days>365</Days> </Transition> Amazon Glacier 文書② 文書① 文書③ 文書① 文書② 文書③ ライフサイクル設定期間 365 日
  • 8. Technical Tips on CLOUDIAN HyperStore #2 P.6 Copyright © 2010-2015 Cloudian KK. All rights reserved.  自動階層化機能の設定 自動階層化先が Amazon S3 あるいは Glacier である場合は、CMC にシステム管理者アカウント でログインし、 [クラスター] → [クラスター設定] → [構成設定] から「Auto-Tiering 有効」および「Auto-Tiering URL」を編集します。
  • 9. Technical Tips on CLOUDIAN HyperStore #2 P.7 Copyright © 2010-2015 Cloudian KK. All rights reserved. 自動階層化先が異なる HyperStore システムや HyperStore をインフラ基盤としてご採用頂いてい るクラウドストレージである場合は前頁の設定(Auto-Tiering の有効化や URL の設定)を行い、さらに HyperStore の設定ファイル「mts-ui.properties.erb」内のパラメータ 「bucket.transitiontocloudian.enabled」を、以下のように編集し保存します。 この設定ファイルは、HyperStore システムのインストールを実行したノードの下記ディレクトリに存在し ています。 格納ディレクトリ: /etc/cloudian-5.2.1-puppet/modules/cmc/templates : (中略) : bucket.transitiontocloudian.enabled = true : (中略) : ● 「mts-ui.properties.erb」設定ファイルの編集(異なる HyperStore システム)
  • 10. Technical Tips on CLOUDIAN HyperStore #2 P.8 Copyright © 2010-2015 Cloudian KK. All rights reserved. さらに自動階層化先が異なる HyperStore システムや HyperStore をインフラ基盤としてご採用頂 いているクラウドストレージである場合は、HyperStore の設定ファイル「tiering-regions.xml.erb」 に階層先の情報を追記し保存します。 この設定ファイルは、HyperStore システムのインストールを実行したノードの下記ディレクトリに存在し ています。 格納ディレクトリ: /etc/cloudian-5.2.1-puppet/modules/cloudians3/templates 有効にできる自動階層化先は、同時にひとつのみです。 例えば、Amazon S3 へオブジェクトを自動階層化している場合には、同時に異なるバケットを異なる HyperStore システムへ自動階層化することはできません。 上記設定を完了したら、Puppet により設定ファイルを HyperStore ノードへ配布してください。 HyperStore のインストール・スクリプト内のメニューに、 「2) Cluster Management → b」 Push Configuration Settings to Cluster」 というメニューがありますので、これを実行します。 : (中略) : <Region> <Name>OSAKA</Name> <Endpoint> <ServiceName>s3</ServiceName> <Http>true</Http> <Https>true</Https> <Hostname>s3-region1.osaka.local</Hostname> </Endpoint> </Region> : (中略) : ● 「tiering-regions.xml.erb」設定ファイルの編集(異なる HyperStore システム) ※ <Http>、<Https>の値(true/false)は、階層先の環境に合わせたものを設定してください。 ※ <Hostname>には、階層先のエンドポイントを設定してください。
  • 11. Technical Tips on CLOUDIAN HyperStore #2 P.9 Copyright © 2010-2015 Cloudian KK. All rights reserved. 変更された設定ファイルの配布が完了すると、CMC のバケットプロパティ画面に後述する 「バケットライフサイクルルール」セクションに、自動階層化の設定を行うことができる“オブジェクトの移動 を有効にする”欄が表示されます。 ※ デフォルトの状態では、“オブジェクトの移動を有効にする”欄は表示されていません。 なお、Auto-Tiering を有効化すると、すべてのユーザーのバケットプロパティ画面に「オブジェクトの移 動を有効にする」欄が表示されます。 システム管理者権限を持つユーザーのみ、グループ管理者以上の権限を持つユーザーのみ、すべての ユーザー、特定の(指定した)ユーザーのみ、またはその組み合わせを指定して表示させるユーザーを制 限したい場合には、このパラメータ―の値を変更してください。 bucket.transition.enabled = { SystemAdmin | GroupAdmin | User | (許可するユーザー名) } bucket.transitiontocloudian.enabled = { SystemAdmin | GroupAdmin | User | (許可するユーザー名) } ※ 複数種別/複数ユーザーを指定する場合は、「 , 」で区切って指定してください。 ※ {許可するユーザー名}は、CMC の“<グループ ID>|<ユーザーID>”の形式で指定します。 【補足】 自動階層化先のストレージシステムに接続するためには S3 クレデンシャル(アクセスキーとシークレットキ ー)が必要になります。 バケットに対して自動階層化機能の設定を行う際に、個別に(異なる)S3 クレデンシャルを設定する こともできますが、システム管理者は事前に下図の CMC 画面から、デフォルトで使用されるアクセスキー とシークレットキーを登録しておくこともできます。 図 3:CMC[クラスター]メニュー → [クラスター設定] → AUTO-TIERING クレデンシャル
  • 12. Technical Tips on CLOUDIAN HyperStore #2 P.10 Copyright © 2010-2015 Cloudian KK. All rights reserved.  ライフサイクルルールの設定 バケットライフサイクルのルールは、Cloudian Management Console(以下、CMC)のバケットプ ロパティ画面内―「バケットライフサイクルルール」から設定できます。 ブラウザで CMC を開き、 [オブジェクト]メニュー ↓ バケット一覧からルールを 設定したいバケットを選択 ↓ 選択状態で下部[設定] ボタンを押下 すると、バケットプロパティ画面 が表示されます。 ルールの適用対象はバケット内に格納されている全てのオブジェクト、またはオブジェクトプレフィックス (後述)にマッチする単一あるいは複数のオブジェクトです。 ルールが適用されるオブジェクトのライフサイクル起算日となる基準は、  作成日時  最終アクセス日時 のいずれかから選択することができます。 例えば、ライフサイクルルールが設定されているバケットに、 「新規にオブジェクトが格納されてから 90 日後に、 Amazon Glacier にデータを移動させる(作成日時基準)」 「最後にオブジェクトにアクセスがあった日から 365 日が経過したオブジェクトを、削除する(最終アクセス日時基準)」 といったように、作成日時と最終アクセス日時を使い分けることができます。 ①CMC を開き、 [オブジェクト]メニューを クリックします。 ②バケット一覧から、ライフサイクルルールを 設定したいバケットを選択します。 ③[設定]ボタンを押下します。
  • 13. Technical Tips on CLOUDIAN HyperStore #2 P.10 Copyright © 2010-2015 Cloudian KK. All rights reserved. 実際の CMC の画面イメージを使いながら、ライフサイクルルールの設定方法を説明します。 バケットライフサイクルルール の設定画面は、左図のように ① データの移動 ② データの削除 ③ ルールの有効化 を設定する領域に分かれてい ます。 以降、領域毎に設定方法 を記載します。 「データの移動」 設定箇所 「データの削除」 設定箇所 ルールの有効化と 保存
  • 14. Technical Tips on CLOUDIAN HyperStore #2 P.11 Copyright © 2010-2015 Cloudian KK. All rights reserved. ① 自動階層化(データの移動)ルールの設定 オブジェクトプレフィックスの設定が空の場合は バケット内のすべてのオブジェクトに、 指定のある場合は、前方一致でマッチする オブジェクトにのみルールが適用されます。 オブジェクトの移動の有効/無効を設定します。 有効にチェックした場合は、オブジェクトの移動先を Amazon S3 (AWS S3 へ転送) あるいは Amazon Glacier(AWS GLACIER へ転送) から選択します。 ルールが適用されたオブジェクトが、指定した移動先に階層化 されるタイミングを設定します。 ① ●日後以降(オブジェクト作成後) あるいは ② 指定日以降 のどちらかの形式で設定可能です。 ①の設定単位は”日”で、1 日後から 2,147,483,647 日後 までの間で指定できます。 ②の設定単位は”年月日時分”で、西暦 9999 年 23 時 59 分までの値を設定できます。 Amazon S3/Glacier に移動されたオブジェクトを取得する際の 動作を、以下の 3 つの方式から選択します。 (1) ストリーム (2) リダイレクト (3) 取得する前にリストアが必要 オブジェクトの自動階層先(Amazon S3/Glacier)に 接続するために使用するアクセスキーとシークレットキー。 管理者が事前に登録したキーを使用する場合は、 [デフォルトの S3 クレデンシャルを使用] にチェックします。 ● 自動階層化(データ移動)の設定
  • 15. Technical Tips on CLOUDIAN HyperStore #2 P.12 Copyright © 2010-2015 Cloudian KK. All rights reserved. ② データの削除ルールの設定 オブジェクトの削除の有効/無効を設定します。 削除(ライフサイクル有効期限の失効)のタイミングは、 次の設定項目で設定します。 ルールが適用されたオブジェクトが、削除されるタイミングを設定 します。 ① ●日後以降(オブジェクト作成後) あるいは ② 指定日以降 のどちらかの形式で設定可能です。 ①の設定単位は”日”で、1 日後から 2,147,483,647 日後 までの間で指定できます。 ②の設定単位は”年月日時分”で、西暦 9999 年 23 時 59 分までの値を設定できます。 ● データ削除の設定
  • 16. Technical Tips on CLOUDIAN HyperStore #2 P.13 Copyright © 2010-2015 Cloudian KK. All rights reserved. ③ ライフサイクルルールの有効化 これまで設定してきたライフサイクルルールを 有効化するには、[ルールの有効化]をチェックします。 ライフサイクルルールの起算日となる基準を、  作成日時  最終アクセス日時 から選択します。 ● ライフサイクルルールの有効化
  • 17. Technical Tips on CLOUDIAN HyperStore #2 P.14 Copyright © 2010-2015 Cloudian KK. All rights reserved. 3. バージョニングについて 本章では、機能が有効化されたバケットに格納されたオブジェクトの過去バージョンを保持すること ができる“バージョニング”の概要を説明します。  バージョニング概要 バージョニングとは、その機能を有効にしたバケットに格納されるオブジェクトの複数バージョンを保持 する機能です。バージョニングを有効にすると、誤ってデータ(オブジェクト)を上書きしてしまった場合 や誤削除してしまった場合でも、過去バージョンのデータを取り出すことが可能になります。 バージョニングは、ディスクストレージの一般的な機能としてよく用いられているスナップショットとは異 なる概念であることに注意してください。 一般的なスナップショットの場合は、スナップショットを取得した時点で存在したディスク上のブロック を Frozen Frame して保存し、ファイルが更新されブロックが書き変わった場合には、Frozen Frame として保存されたブロックは変更せず、ディスク上に更新されたブロックを新たに配置します。そ のため、スナップショットのために必要となるディスク容量は、基本的にはスナップショット取得後からの 差分ブロック分となります。 バージョニングの場合はスナップショットのように、ブロック差分データから過去バージョンを復元するの ではなく、単に更新や削除される前の状態(バージョン)のデータを内部に保持しているだけです。
  • 18. Technical Tips on CLOUDIAN HyperStore #2 P.15 Copyright © 2010-2015 Cloudian KK. All rights reserved. 下表に、HyperStore のバージョニングと一般的なストレージ製品のスナップショットの比較を記載 します。 バージョニング (一般的な) スナップショット 取得される単位 バージョニングが有効にされたバケッ ト内に格納されているオブジェクト ファイルシステムが作成されている ボリューム 取得されるタイミング オブジェクトに変更(更新、上書 き、削除)が発生した時点。 保持されるバージョン数は、オブジェ クトの変更頻度により異なるため、 各オブジェクトで異なる。 手動またはスケジュール実行。 対象のボリューム全体に対して取得さ れるため、ボリューム内のファイルは一 律、同じ世代数を持つ。 取得時に保持されるデータ 変更前のオブジェクト全体 前回取得以降の更新差分ブロック 過去データの削除  手動による削除 (※) ※ S3 API によりプログラミングすることに より、自動化も実現可能  手動による削除  設定した世代数を超過したもの の自動削除 表 1: バージョニングとスナップショットの違い 例えば左図のように、バージョニング が有効化されたバケット 「versioned」内に「test.txt」という ファイルが存在するとします。 通常の PUT/GET 操作ではあまり 意識しませんが、オブジェクトには “バージョン ID”という属性が設定さ れています。 格納バケット名: versioned ファイル名: test.txt ファイルサイズ: 88 bytes バージョン ID: fe1ac32c-2169-2f1f-a160-000c296039b5
  • 19. Technical Tips on CLOUDIAN HyperStore #2 P.16 Copyright © 2010-2015 Cloudian KK. All rights reserved.  PUT 時の動作 例えば、バージョニングが有効にされたバケット「versioned」に同じファイル名(キー)でオブジェク トを PUT した場合、下図のように以前のバージョンは内部的に保持されます。 図 4: バージョニングの動作 (PUT 時) PUT test.txt Key = test.txt ID = fe1ac32c-08ed-a2ef-a160-000c296039b5 isLatest = True Key = test.txt ID = fe1ac32c-0eed-e42f-a160-000c296039b5 isLatest = False Key = test.txt ID = fe1ac32c-14eb-664f-a160-000c296039b5 isLatest = False Key = test.txt ID = fe1ac32c-1ae7-afef-a160-000c296039b5 isLatest = False Key = test.txt ID = fe1ac32c-2169-2f1f-a160-000c296039b5 isLatest = False 最新バージョン 一世代前バージョン 二世代前バージョン 三世代前バージョン 四世代前バージョン
  • 20. Technical Tips on CLOUDIAN HyperStore #2 P.17 Copyright © 2010-2015 Cloudian KK. All rights reserved.  DELETE/GET 時の動作 このオブジェクト「test.txt」を削除すると、最新バージョン(ID: fe1ac32c-08ed-a2ef- a160-000c296039b5)に削除マーカーが付けられます。 バージョン ID を指定しない GET リクエストは最新のバージョンを取得するため、“404 Not Found”エラーが返されます。GET リクエスト時に Bucket、Key 以外に、VersionId を指定する ことで、過去バージョンのオブジェクトを取得することができます。 図 5: バージョニングの動作 (DELETE/GET 時) DELETE test.txt Key = test.txt ID = fe1ac32c-08ed-a2ef-a160-000c296039b5 isLatest = True Key = test.txt ID = fe1ac32c-0eed-e42f-a160-000c296039b5 isLatest = False Key = test.txt ID = fe1ac32c-14eb-664f-a160-000c296039b5 isLatest = False Key = test.txt ID = fe1ac32c-1ae7-afef-a160-000c296039b5 isLatest = False Key = test.txt ID = fe1ac32c-2169-2f1f-a160-000c296039b5 isLatest = False 最新バージョン GET 404 Not Found 二世代前 GET  Bucket  Key  VersionId 削除マーカー
  • 21. Technical Tips on CLOUDIAN HyperStore #2 P.18 Copyright © 2010-2015 Cloudian KK. All rights reserved.  バケットのバージョニング有効化 バケットのバージョニングを有効にする設定は、現行バージョン(HyperStore v5.2.x)の CMC か らは行うことができません。 バージョニングを有効にする方法としては主に、 ① バージョニングを有効にする機能が搭載されている S3 クライアントソフトを利用する ② S3 API を使用して、バケットのバージョニングを有効にする の 2 つの方法が存在します。 本書ではバージョニングを有効にする方法として、上記②の AWS SDK for PHP 2 を用いた PHP コードから S3 API を呼び出して有効化する方法を説明します。 バケットのバージョニングを有効にするには、バージョニングの状態(”status”)を表す属性に “Enabled”を設定します(デフォルトは“Disabled”の状態です)。 上記「注意点」記載のように、一度、バージョニングを有効にしたバケットのバージョニングを再度無 効にすることはできません。“status”属性に“Suspended”を設定することで、バージョニングを一時 停止させることは可能です。 一度、バージョニングを有効にしたバケットのバージョニングをその後、 無効にすることはできません。 過去バージョンのオブジェクトの保持を止めたい場合には、バージョニングを 一時停止(Suspended)させます。 注意点
  • 22. Technical Tips on CLOUDIAN HyperStore #2 P.19 Copyright © 2010-2015 Cloudian KK. All rights reserved. AWS SDK for PHP 2 を使用して PHP から S3 API を呼び出し、バケットのバージョニング・ス テータスを変更するには、S3Client オブジェクトの putBucketVersioning メソッドを使用する 方法が非常に簡単です。 < s3client -> putBucketVersioning メソッド > 以下のサンプルコードは、バケット「test01」のバージョニングの状態(“Status”)を“Enabled”に 変更します。 public Guzzle¥Service¥Resource¥Model putBucketVersioning( array $args = array() ) $args array $args パラメータは、以下のキーを含む連想配列です(黒太字は設定必須です)。 Bucket => (string) MFA => (string) MFADelete => (string: Enabled | Disabled ) Status => (string: Enabled | Suspended ) <?php require_once("vendor/autoload.php"); require_once("./config.php"); use Aws¥S3¥S3Client; $client = S3Client::factory($config); // バケットのバージョニング有効化 $param = array( 'Bucket' => 'test01', 'Status' => 'Enabled' ); $client->putBucketVersioning($param); 構 文 説 明 サンプルコード
  • 23. Technical Tips on CLOUDIAN HyperStore #2 P.20 Copyright © 2010-2015 Cloudian KK. All rights reserved.  バージョニングされたオブジェクトの削除 バージョニングが有効になっているバケットに格納されているオブジェクトは、上書きや削除をしても、 変更前のオブジェクトが内部的に保持され続けます。保持された過去バージョンのオブジェクトは、明 示的に deleteObject(s)しない限り、過去バージョンが残るためデータが増えていきます。 前述の通り、通常のオブジェクトの DELETE リクエストは Bucket と Key の 2 つのパラメータを 使用して行われるため、最新バージョンのオブジェクトが削除対象となります。 過去バージョンのオブジェクトを削除したい場合には、どのバージョンのオブジェクトを削除するかを指 定するために Key と VersionId の組み合わせでオブジェクトを特定し、deleteObject(s)する必 要があります。 以下に、AWS SDK for PHP 2 で使用できる S3Client オブジェクトの deleteObject およ び deleteObjects メソッドのパラメータ一覧を記載します。 単一の過去バージョンのオブジェクトを削除する場合には deleteObject メソッドを、複数の過去 バージョンのオブジェクトを削除する場合には deleteObjects メソッドを用いますが、どちらもポイント は 3 つのパラメータ(Bucket, Key, VersionId)を指定して削除対象の過去バージョンを指定する点 です。
  • 24. Technical Tips on CLOUDIAN HyperStore #2 P.21 Copyright © 2010-2015 Cloudian KK. All rights reserved. < s3client -> deleteObject メソッド > public Guzzle¥Service¥Resource¥Model deleteObject( array $args = array() ) $args array $args パラメータは、以下のキーを含む連想配列です(黒太字は設定必須です)。 Bucket => (string) Key => (string) MFA => (string) VersionId => (string) RequestPayer => (string: requester ) 構 文 説 明
  • 25. Technical Tips on CLOUDIAN HyperStore #2 P.22 Copyright © 2010-2015 Cloudian KK. All rights reserved. < s3client -> deleteObjects メソッド > public Guzzle¥Service¥Resource¥Model deleteObjects( array $args = array() ) $args array $args パラメータは、以下のキーを含む連想配列です(黒太字は設定必須です)。 Bucket => (string) Objects => (array<associative-array>) (associative-array) Key => (string) VersionId => (string) Quiet => (bool) MFA => (string) RequestPayer => (string: requester ) 構 文 説 明
  • 26. Technical Tips on CLOUDIAN HyperStore #2 P.23 Copyright © 2010-2015 Cloudian KK. All rights reserved. 以下のコードは、通常の(最新バージョンを対象とした)deleteObject を実行するために、PHP か ら S3 API を呼び出すサンプルコードです。以下のように、最新バージョンを対象とした deleteObject で指定する必須のパラメータは、  Bucket … このサンプルでは「test01」を設定  Key … このサンプルでは「sample/data.txt」を設定 のみです。 <?php require_once("vendor/autoload.php"); require_once("./config.php"); use Aws¥S3¥S3Client; $client = S3Client::factory($config); // オブジェクトの削除 $param = array( 'Bucket' => 'test01', 'Key' => 'sample/data.txt' ); $client->deleteObject($param); サンプルコード
  • 27. Technical Tips on CLOUDIAN HyperStore #2 P.24 Copyright © 2010-2015 Cloudian KK. All rights reserved. PHP から S3 API を呼び出し、過去バージョンのオブジェクトに対して deleteObjects を実行す るサンプルコードを、以下に掲載します。 Key は同じもの(sample/data.txt)を指定していますが、異なるバージョン ID(VersionId)を 指定していることに注目してください。 <?php require_once("vendor/autoload.php"); require_once("./config.php"); use Aws¥S3¥S3Client; $client = S3Client::factory($config); // オブジェクトの削除 $param = array( 'Bucket' => 'test01', 'Objects' => array( array( 'Key' => 'sample/data.txt', 'VersionId' => 'fe1ac32c-0eed-e42f-a160-000c296039b5', ), array( 'Key' => 'sample/data.txt', 'VersionId' => 'fe1ac32c-14eb-664f-a160-000c296039b5', ), array( 'Key' => 'sample/data.txt', 'VersionId' => 'fe1ac32c-1ae7-afef-a160-000c296039b5', ) ) ); $client->deleteObjects($param); サンプルコード
  • 28. Technical Tips on CLOUDIAN HyperStore #2 P.25 Copyright © 2010-2015 Cloudian KK. All rights reserved. 4. AWS SDK for PHP 2 を使用した PHP サンプルコード 本章で掲載するサンプルコードは、  Apache HTTP サーバー(Win64/2.4.12)  PHP 5.6.7 が導入済みの環境に、Composer を使って AWS SDK for PHP 2 をインストールして動作していま す。 AWS SDK for PHP をインストールする手段はいくつかありますが、Composer を使用することに より aws-sdk-php およびその依存関係にあるパッケージをインストールできるため、非常に簡単に導 入することができます。 Composer https://getcomposer.org/ Composer のインストール方法等の詳細は、下記の Amazon Web Services のインストレーシ ョンガイドをご参照ください。このガイドに記載されているように、Amazon Web Services の推奨も Composer を使用して AWS SDK for PHP をインストールする方法です。 AWS SDK for PHP Installation http://docs.aws.amazon.com/aws-sdk-php/v2/guide/installation.html#installing-using-composer 著者が自 PC に Composer を導入する際に、パッケージの依存関係を記載する 「composer.json」ファイルの内容は以下の記述のみです。 { "require": { "aws/aws-sdk-php": "2.*" } } ● composer.json
  • 29. Technical Tips on CLOUDIAN HyperStore #2 P.26 Copyright © 2010-2015 Cloudian KK. All rights reserved. Composer の導入が完了し、上述の「composer.json」ファイル作成後に、 php composer.phar install を実行し AWS SDK for PHP のインストールを完了させてください。 右図のようなフォルダ構成により、  AWS SDK for PHP  Guzzle がインストールされているはずです。 PHP のソースコード内で "vendor/autoload.php" を require(require_once)すると、AWS SDK for PHP のライブラリが使用できるように なります。 また、著者の環境では、HyperStore に接 続する際に必要となるクレデンシャルの情報を “./config.php” に記載し、ソース冒頭で require_once によ り取り込んでいます。 さらに HTML 禁則文字をエンコードする処 理が記載されている “../Encode.php” を作成し、ソース冒頭で require_once によ り取り込んでいます。
  • 30. Technical Tips on CLOUDIAN HyperStore #2 P.27 Copyright © 2010-2015 Cloudian KK. All rights reserved. <?php // Instantiate the S3 client with your S3 credentials $config = array( 'base_url' => 'http://s3.shibuya.local', 'region' => 'region1', 'key' => '3720a036a0d080b14db7', 'secret' => 'QZa9f0FjvK8JMUQufc3YO667Tc9uJ3jhGOrLSNri', ); <?php function e($str, $charset = 'UTF-8') { print htmlspecialchars($str, ENT_QUOTES, $charset); } サンプルコード ※ サンプルコードが動作している環境は、インターネットに接続できない完全なローカル環境であるため、 分かり易いように’key’(アクセスキー)と’secret’(シークレットキー)を伏せていませんが、通常は アクセスキーとシークレットキーの組み合わせは外部に漏れないよう管理してください。 config.php サンプルコード Encode.php
  • 31. Technical Tips on CLOUDIAN HyperStore #2 P.28 Copyright © 2010-2015 Cloudian KK. All rights reserved.  バージョニング設定状況の表示と状態変更のサンプルコード 以下に掲載するサンプルコードは、アクセスキー/シークレットキーを使用して HyperStore に接 続したアカウントが作成しているバケットの  バージョニング設定状況の表示  バージョニング状態の変更(無効→有効 / 有効→一時停止) を行う PHP プログラムです。 メインフォーム: enableVersioning_form.php をブラウザで開くと、バージョニングの設定状況と 状態変更ができます。 現在の各バケットのバージョニングの状態 (Disabled/Enabled/Suspended)を 表示しています。 操作(状態を変更させる)対象の バケットをリストから選択します。 変更するバージョニングの状態を 選択します。 対象バケットおよび状態の選択が 完了したら[設定変更]ボタンを押下します。
  • 32. Technical Tips on CLOUDIAN HyperStore #2 P.29 Copyright © 2010-2015 Cloudian KK. All rights reserved. 例えば[設定を変更するバケット:]リストボックスから、下図のようにバケット「versioned2」を選 択します。このバケットの現時点のバージョニング設定状況は、“Disabled”(無効)になっていま す。このバケットのバージョニングを有効にするために、[設定する状態:]ラジオボックスから“有効”を 選択し[設定変更]ボタンを押下します。 [設定変更]ボタンを押下して暫く待つと、バケット「versioned2」の[バージョニング設定]列 の値が下図のように“Enabled”に変わり、このバケットのバージョニングが有効になります。 なお、[設定する状態:]で“一時停止”を選択して[設定変更]ボタンを押下すると、以下の ように状態が変化します。
  • 33. Technical Tips on CLOUDIAN HyperStore #2 P.30 Copyright © 2010-2015 Cloudian KK. All rights reserved. この仕組みを実装している PHP プログラムの構成は、下図のようになっています。 enableVersioning_form.php vendor/autoload.php require_once <form method="GET" action="enableVersioning_process1.php"> enableVersioning_process1.php ./config.php ../Encode.php ./checkVersioningStatus.php ./listBuckets.php
  • 34. Technical Tips on CLOUDIAN HyperStore #2 P.31 Copyright © 2010-2015 Cloudian KK. All rights reserved. このアプリケーションフォームを構成する PHP コードを、以下に掲載します。 ① メインフォームの PHP コード冒頭で require_once されるコード  checkVersioningStatus クラス このクラスは、バケットのバージョニング設定状況を返すメソッドを提供します。 定義されている関数 getBucketVersioningStatus 説明 引数で指定された単一バケットのバージョニング設定状況を取得します。 パラメータ $bucket HyperStore に作成済みのバケット名 返り値 指定したバケットのバージョニング設定状況(Disabled、Enabled あるいは Suspended)を返します。 getAllBucketsVersioningStatus 説明 すべてのバケットのバージョニング設定状況を取得します。 パラメータ 無し 返り値 すべてのバケットのバージョニング設定状況(Disabled、Enabled あるいは Suspended)を連想配列で返し ます。 返される連想配列の内容は、次のようになります。 キー 説明 戻り値 “Name” バケット名 バージョニング設定状況 (Disabled、Enabled あるいは Suspended) string getBucketVersioningStatus ( string $bucket ) array getAllBucketsVersioningStatus ( void )
  • 35. Technical Tips on CLOUDIAN HyperStore #2 P.32 Copyright © 2010-2015 Cloudian KK. All rights reserved. <?php class checkBucketVersioningStatus { private $client; private $results; private $bucket; public function __construct($client) { $this->client = $client; } public function getBucketVersioningStatus($bucket) { $this->results = $this->client->getBucketVersioning(array( 'Bucket' => $bucket, )); return isset($this->results['Status']) ? $this->results['Status'] : 'Disabled'; } public function getAllBucketsVersioningStatus() { $this->results = $this->client->listBuckets(array()); foreach ($this->results['Buckets'] as $this->bucket) { $attrs = $this->client->getBucketVersioning(array( 'Bucket' => $this->bucket['Name'], )); $status = isset($attrs['Status']) ? $attrs['Status'] : 'Disabled'; $bucketNameAndVersioningStatus[$this->bucket['Name']] = $status; } return $bucketNameAndVersioningStatus; } } サンプルコード checkVersioningStatus.php
  • 36. Technical Tips on CLOUDIAN HyperStore #2 P.33 Copyright © 2010-2015 Cloudian KK. All rights reserved.  listBuckets クラス このクラスは、バケットに関する情報を返すメソッドを提供します。 定義されている関数 getBucketNames 説明 すべてのバケットの名前を取得します。 パラメータ 無し 返り値 すべての作成済みバケット名を配列で返します。 getBucketsAndCreationDate 説明 すべてのバケットの名前と作成日時を取得します。 パラメータ 無し 返り値 すべてのバケットの名前と作成日時を連想配列で返します。 返される連想配列の内容は、次のようになります。 キー 説明 戻り値 “Name” バケット名 作成日時 ('Y 年 m 月 d 日 H 時 i 分 s 秒') array getBucketNames ( void ) array getBucketsAndCreationDate ( void )
  • 37. Technical Tips on CLOUDIAN HyperStore #2 P.34 Copyright © 2010-2015 Cloudian KK. All rights reserved. <?php class ListBuckets { private $client; private $results; private $bucket; public function __construct($client) { $this->client = $client; } // Return all atributes of all buckets as an associative array. public function getAssocBuckets() { return $this->client->listBuckets(array()); } // Return all bucket names. public function getBucketNames() { $this->results = $this->client->listBuckets(array()); foreach ($this->results['Buckets'] as $this->bucket) { $bucketNameList[] = $this->bucket['Name']; } return $bucketNameList; } // Return pairs of all buckets and creation date as an associative array. public function getBucketsAndCreationDate() { $this->results = $this->client->listBuckets(array()); foreach ($this->results['Buckets'] as $this->bucket) { $date = new DateTime($this->bucket['CreationDate']); $date->setTimezone(new DateTimeZone('Asia/Tokyo')); $bucketNameAndCreationDate[$this->bucket['Name']] = $date->format('Y 年 m 月 d 日 H 時 i 分 s 秒 '); } return $bucketNameAndCreationDate; } } サンプルコード listBuckets.php
  • 38. Technical Tips on CLOUDIAN HyperStore #2 P.35 Copyright © 2010-2015 Cloudian KK. All rights reserved. ② Web 画面のメインフォームとなる PHP コード 以下に掲載する PHP コードは、この Web アプリケーションのメインフォームを生成するもので す。コード冒頭で require_once して取り込んでいる PHP コードは前掲したものになり、このメイ ンフォーム内の[設定変更]ボタンを押下したときに呼び出されるコードは後述 「③ Web 画面のメインフォームから呼び出される PHP コード」 に掲載しています。 <?php require_once("vendor/autoload.php"); require_once("./config.php"); require_once("../Encode.php"); require_once("./checkVersioningStatus.php"); require_once("./listBuckets.php"); use Aws¥S3¥S3Client; // Instantiate the client. $client = S3Client::factory($config); // $versionedBuckets = new checkBucketVersioningStatus($client); ?> <html> <head> <meta content="text/html; charset=utf-8" http-equiv="Content-Type" /> <title>サンプル: バージョニング設定されたバケットの確認</title> <style type="text/css"> .auto-style1 { font-family: "Meiryo UI"; font-size: 1.5em; } .auto-style2 { font-family: "Meiryo UI"; font-size: 1.0em; } .tbl-style1 td { font-family: "Meiryo UI"; font-size: 0.9em; } </style> </head> <body> <p class="auto-style1"> <b>バージョニング設定状況</b> </p> <table class="tbl-style1" border="1"> <tr> <th>バケット名</th> <th>バージョニング設定</th> </tr> ★次頁へつづく..... サンプルコード enableVersioning_form.php
  • 39. Technical Tips on CLOUDIAN HyperStore #2 P.36 Copyright © 2010-2015 Cloudian KK. All rights reserved. ★前頁からの続き <?php foreach ($versionedBuckets->getAllBucketsVersioningStatus() as $versionedBucket => $versioningStatus) { ?> <tr> <td><?php print $versionedBucket; ?></td> <td><?php e($versioningStatus); ?></td> </tr> <?php } ?> </table> <hr> <form method="GET" action="enableVersioning_process1.php"> <div style="text-align: left"> <p class="auto-style2"> 設定を変更するバケット: <select name="bucket"> <?php $buckets = new ListBuckets($client); foreach ($buckets->getBucketNames() as $bucketName) { ?> <option><?php e($bucketName); ?></option> <?php } ?> </select> <br /> 設定する状態: <input type="radio" name="status" value="Enabled">有効 <input type="radio" name="status" value="Suspended">一時停止 <br /><br /> <input type="submit" name="submit" value="設定変更" /> </p> </div> </form> </body> </html>
  • 40. Technical Tips on CLOUDIAN HyperStore #2 P.37 Copyright © 2010-2015 Cloudian KK. All rights reserved. ③ Web 画面のメインフォームから呼び出される PHP コード 以下に掲載する PHP コードは、メインフォーム内の[設定変更]ボタンを押下したときに呼び 出され、バケットのバージョニング状態を変更する PHP コードです。 <?php require_once("vendor/autoload.php"); require_once("./config.php"); use Aws¥S3¥S3Client; // use Aws¥S3¥Exception¥NoSuchKeyException; // use Aws¥S3¥Exception¥InvalidArgumentException; $bucket = $_GET['bucket']; $status = $_GET['status']; $client = S3Client::factory($config); try { // Enable object versioning for the bucket. $result = $client->putBucketVersioning(array( 'Bucket' => $bucket, 'Status' => $status, )); header('Location: http://'.$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']).'/enableVersioning_form.php '); } catch (Exception $ex) { ?> <b><font color="red">何らかしらのエラーが発生しました( ゚ Д ゚)。</font></b><br /> <hr> エラーメッセージ: <b><?php print $ex->getMessage(); ?></b> <?php } サンプルコード enableVersioning_process1.php
  • 41. Technical Tips on CLOUDIAN HyperStore #2 P.38 Copyright © 2010-2015 Cloudian KK. All rights reserved.  バージョニングされたバケットに対するオブジェクトの複数回 PUT 以下に掲載するサンプルコードは、オブジェクトを PUT する“バージョニングが有効になっている”バケ ットをリストから選択し、  PUT するキー(ファイル名)を入力  PUT するファイルに書き込む文字列を入力  10 秒間隔で何回、同名のファイルを PUT するかの回数選択(1~10 回) という条件を設定して、ファイルを複数回、PUT する PHP プログラムです。 バージョニングの動作を確認するためのプログラムであるため、ファイルを PUT するバケットは“すで にバージョニングが有効になっているバケット”しかリストから選択できないようにしています。 また、PUT されるファイルには、[ファイル内に書き込む文字列を入力してください:]欄に記入 した文字列 + 「(YYYY 年 MM 月 DD 日 hh 時 mm 分 ss 秒)」形式の日時が書きこまれま す。 メインフォーム: putVersionedObjects_form.php を開き、各種設定値を確定した後で [書込実行]ボタンを押下すると処理が開始されます。 ファイルを PUT するバケットをリストから選択します。 バージョニングが有効なバケットのみ、選択可能です。 PUT するファイル(キー)名を 入力します。 ファイルに書き込む文字列を 入力します。PUT する回数を選択します。 (1~10 回) 各種設定値の入力後、 [書込実行]ボタンを押下します。
  • 42. Technical Tips on CLOUDIAN HyperStore #2 P.39 Copyright © 2010-2015 Cloudian KK. All rights reserved. 10 秒間隔で指定した回数の putObject 処理を実行し終わると、下図のような「バージョン履 歴」画面が表示されます。 このアプリケーションで同名の ファイルを何回 PUT しても、 CMC からは右図のように1つ のファイルが確認できるだけです が、実際には上図のように複数 の過去バージョンのオブジェクト が保持されています。 格納バケット名 PUT したキー(ファイル)名 オブジェクトのバージョン ID オブジェクトのサイズ(Bytes) オブジェクトの更新日時 最新バージョンのオブジェクトに は、「○」が表示されます。
  • 43. Technical Tips on CLOUDIAN HyperStore #2 P.40 Copyright © 2010-2015 Cloudian KK. All rights reserved. この仕組みを実装している PHP プログラムの構成は、下図のようになっています。 putVersionedObjects_form.php vendor/autoload.php require_once <form method="GET" action="putVersionedObjects_process1.php"> putVersionedObjects_process1.php ./config.php ../Encode.php ./checkVersioningStatus.php
  • 44. Technical Tips on CLOUDIAN HyperStore #2 P.41 Copyright © 2010-2015 Cloudian KK. All rights reserved. このアプリケーションフォームを構成する PHP コードを、以下に掲載します。 ① メインフォームの PHP コード冒頭で require_once されるコード PHP コード冒頭で require_once されているものは既に前掲していますので、割愛します。 ② Web 画面のメインフォームとなる PHP コード 以下に掲載する PHP コードは、この Web アプリケーションのメインフォームを生成するもので す。このメインフォーム内の[書込実行]ボタンを押下したときに呼び出されるコードは後述 「③ Web 画面のメインフォームから呼び出される PHP コード」 に掲載しています。 <?php require_once("vendor/autoload.php"); require_once("./config.php"); require_once("../Encode.php"); require_once("./checkVersioningStatus.php"); use Aws¥S3¥S3Client; // Instantiate the client. $client = S3Client::factory($config); // $versionedBuckets = new checkBucketVersioningStatus($client); ?> <html> <head> <meta content="text/html; charset=utf-8" http-equiv="Content-Type" /> <title>デモ: オブジェクトのバージョニング</title> <style type="text/css"> .auto-style1 { font-family: "Meiryo UI"; font-size: 1.5em; } .auto-style2 { font-family: "Meiryo UI"; font-size: 1.0em; } .tbl-style1 td { font-family: "Meiryo UI"; font-size: 0.9em; } </style> </head> ★次頁へつづく..... サンプルコード putVersionedObjects_form.php
  • 45. Technical Tips on CLOUDIAN HyperStore #2 P.42 Copyright © 2010-2015 Cloudian KK. All rights reserved. ★前頁からの続き <body> <form method="GET" action="putVersionedObjects_process1.php"> <div style="text-align: left"> <p class="auto-style1"> <b>オブジェクトの複数回 PUT 処理</b> </p> <hr> <p class="auto-style2"> オブジェクトを PUT するバケットを選択してください: <select name="bucket"> <?php foreach ($versionedBuckets->getAllBucketsVersioningStatus() as $versionedBucket => $versioningStatus) { if ($versioningStatus == 'Enabled') { ?> <option><?php e($versionedBucket); ?></option> <?php } } ?> </select> <br /> PUT するキー(ファイル名)を入力してください: <input type="text" name="keyname" size="50" maxlength="100" required="required" aria-required="true"/> <br /> ファイル内に書き込む文字列を入力してください: <input type="text" name="content" size="50" maxlength="100" /> <br /> 10 秒間隔で何回、同名ファイルを作成するかを選択してください: <select name="count"> <option value="1">1 回</option> <option value="2">2 回</option> <option value="3">3 回</option> <option value="4">4 回</option> <option value="5" selected>5 回</option> <option value="6">6 回</option> <option value="7">7 回</option> <option value="8">8 回</option> <option value="9">9 回</option> <option value="10">10 回</option> </select> <br /><br /> <input type="submit" name="submit" value="書込実行" /> <input type="reset" name="reset" value="リセット" /> </p> </div> </form> </body> </html>
  • 46. Technical Tips on CLOUDIAN HyperStore #2 P.43 Copyright © 2010-2015 Cloudian KK. All rights reserved. ③ Web 画面のメインフォームから呼び出される PHP コード 以下に掲載する PHP コードは、メインフォーム内の[書込実行]ボタンを押下したときに呼び 出され、指定したファイル名での複数回 putObject 処理を実行する PHP コードです。 <?php // Include the AWS SDK using the Composer autoloader. require_once("vendor/autoload.php"); require_once("./config.php"); require_once("../Encode.php"); use Aws¥S3¥S3Client; $client = S3Client::factory($config); $bucket = $_GET['bucket']; $keyname = $_GET['keyname']; $content = isset($_GET['content']) ? $_GET['content'] : 'ほげほげ hogehoge'; $count = (int)$_GET['count']; ?> <html> <head> <meta content="text/html; charset=utf-8" http-equiv="Content-Type" /> <title>デモ: オブジェクトのバージョニング</title> <style type="text/css"> .auto-style1 { font-family: "Meiryo UI"; font-size: 1.5em; } .auto-style2 { font-family: "Meiryo UI"; font-size: 1.0em; } .tbl-style1 td { font-family: "Meiryo UI"; font-size: 0.9em; } </style> </head> <body> ★次頁へつづく..... サンプルコード putVersionedObjects_process1.php
  • 47. Technical Tips on CLOUDIAN HyperStore #2 P.44 Copyright © 2010-2015 Cloudian KK. All rights reserved. ★前頁からの続き // Put same objects many times. for ($i = 1; $i <= $count; $i++) { $now = new DateTime(); $result = $client->putObject(array( 'Bucket' => $bucket, 'Key' => $keyname, 'Body' => "{$content} (" . $now->format('Y 年 m 月 d 日 H 時 i 分 s 秒') . ")¥n", )); if ($count != 1) { sleep(10); } } ?> <p class="auto-style1"> <b>バージョン履歴</b> </p> <table class="tbl-style1" border="1"> <tr> <th>バケット名</th> <th>キー</th> <th>バージョン ID</th> <th>サイズ(B)</th> <th>最終更新日</th> <th>最新バージョン?</th> </tr> <?php // List the objects versions and get the keys and version IDs etc. $versions = $client->listObjectVersions(array('Bucket' => $bucket)) ->getPath('Versions'); foreach ($versions as $version) { ?> <tr> <td><?php print $bucket; ?></td> <td><?php e($version['Key']); ?></td> <td><?php e($version['VersionId']); ?></td> <td><div align="right"><?php e($version['Size']); ?></div></td> <?php $date = new DateTime($version['LastModified']); $date->setTimezone(new DateTimeZone('Asia/Tokyo')); ?> <td><?php print $date->format('Y 年 m 月 d 日 H 時 i 分 s 秒'); ?></td> <td><div align="center"><?php print $version['IsLatest'] ? '○' : ''; ?></div></td> </tr> <?php } ?> </table> <br /> <input type="button" onclick="location.href='putVersionedObjects_form.php'" value="戻る"> </body> </html>
  • 48. Technical Tips on CLOUDIAN HyperStore #2 P.45 Copyright © 2010-2015 Cloudian KK. All rights reserved.  バージョニングされたオブジェクトのダウンロード(GET)処理 以下に掲載するサンプルコードは、前掲のサンプルコードでバージョニングが有効なバケットに格納さ れたオブジェクト(ファイル)を、バージョン ID を指定してダウンロードする PHP プログラムです。 メインフォーム: getObject_form1.php をブラウザで開き、  ダウンロードするオブジェクトが格納されているバケットをリストから選択  ダウンロードするキー(ファイル)名の入力 を行い、[バージョン選択へ]ボタンを押下すると、バージョン選択画面に遷移します。 下図のようなバージョン選択画面が開き、全画面でバージョニングが有効になっているバケットを選 択した場合は、[GET したいキー(ファイル)のバージョンを選択してください:]のリストボックスから 対象のバージョンを選択できます(バージョニングが有効になっていない場合は、最新バージョンのみ選択できます)。 [ダウンロード]ボタンを押下すると、リストから選択したバージョンのファイルのダウンロードが開始 されます。 オブジェクトが格納されている バケットをリストから選択 GET するファイル名を入力 バージョン選択画面に遷移 GET するオブジェクトの バージョンをリストから選択 [ダウンロード]ボタンを押下すると、対象のオブジェクトを GET
  • 49. Technical Tips on CLOUDIAN HyperStore #2 P.46 Copyright © 2010-2015 Cloudian KK. All rights reserved. 下図は、最新バージョンをダウンロードしたファイルの内容です。 同様の手順で、同名ファイル(キー)の異なるバージョンをダウンロードすると........... というように、ファイルの内容が異なる過去のバージョンを取り出すことができます。 ダウンロードしてメモ帳で開く
  • 50. Technical Tips on CLOUDIAN HyperStore #2 P.47 Copyright © 2010-2015 Cloudian KK. All rights reserved. この仕組みを実装している PHP プログラムの構成は、下図のようになっています。 getObject_form1.php vendor/autoload.php require_once <form method="GET" action="getObject_form2.php"> getObject_process1.php getObject_form2.php ./config.php ../Encode.php ./checkVersioningStatus.php <form method="GET" action="getObject_process1.php">
  • 51. Technical Tips on CLOUDIAN HyperStore #2 P.48 Copyright © 2010-2015 Cloudian KK. All rights reserved. ① メインフォームの PHP コード冒頭で require_once されるコード PHP コード冒頭で require_once されているものは既に前掲していますので、割愛します。 ② Web 画面のメインフォームとなる PHP コード 以下に掲載する PHP コードは、この Web アプリケーションのメインフォーム (getObject_form1.php)を生成するものです。このメインフォーム内の[バージョン選択へ]ボタ ンを押下すると、バージョン選択のフォーム(getObject_form2.php)に画面遷移します。 <?php require_once("vendor/autoload.php"); require_once("./config.php"); require_once("../Encode.php"); require_once("./listBuckets.php"); use Aws¥S3¥S3Client; ?> <html> <head> <meta content="text/html; charset=utf-8" http-equiv="Content-Type" /> <title>デモ: オブジェクトの GET 処理</title> <style type="text/css"> .auto-style1 { font-family: "Meiryo UI"; font-size: 2.0em; } .auto-style2 { font-family: "Meiryo UI"; font-size: 1.0em; } </style> </head> ★次頁へつづく..... サンプルコード getObject_form1.php
  • 52. Technical Tips on CLOUDIAN HyperStore #2 P.49 Copyright © 2010-2015 Cloudian KK. All rights reserved. ★前頁からの続き <body> <p class="auto-style1" align="center"> <b>オブジェクトの GET 処理</b> </p> <form method="GET" action="getObject_form2.php"> <div style="text-align: center"> <p class="auto-style2"> バケットを選択してください: <select name="bucket"> <?php $client = S3Client::factory($config); $buckets = new ListBuckets($client); foreach ($buckets->getBucketNames() as $bucketName) { ?> <option><?php e($bucketName); ?></option> <?php } ?> </select> <br /> GET するキー(ファイル名)を入力してください: <input type="text" name="keyname" size="30" maxlength="60" required="required" aria-required="true"/> <br /><br /> <input type="submit" name="submit" value="バージョン選択へ" /> <input type="reset" name="reset" value="リセット" /> </p> <div style="color: red"><?php print $err[$status]; ?></div> </div> </form> </body> </html>
  • 53. Technical Tips on CLOUDIAN HyperStore #2 P.50 Copyright © 2010-2015 Cloudian KK. All rights reserved. <html> <head> <meta content="text/html; charset=utf-8" http-equiv="Content-Type" /> <title>デモ: オブジェクトの GET 処理</title> <style type="text/css"> .auto-style1 { font-family: "Meiryo UI"; font-size: 2.0em; } .auto-style2 { font-family: "Meiryo UI"; font-size: 1.0em; text-align: center; } .tbl-style1 td { font-family: "Meiryo UI"; font-size: 0.9em; } </style> </head> <body> <p class="auto-style1" align="center"> <b>オブジェクトの GET 処理</b> </p> <?php require_once("vendor/autoload.php"); require_once("./config.php"); require_once("../Encode.php"); require_once("./checkVersioningStatus.php"); use Aws¥S3¥S3Client; use Aws¥S3¥Exception¥NoSuchKeyException; use Aws¥S3¥Exception¥InvalidArgumentException; $bucket = $_GET['bucket']; // $keyname = isset($_GET['keyname'])? $_GET['keyname'] : 'versioned.txt'; $keyname = $_GET['keyname']; $client = S3Client::factory($config); // Get the versioning status of the specified bucket $versionedBuckets = new checkBucketVersioningStatus($client); $versioningStatus = $versionedBuckets->getBucketVersioningStatus($bucket); ★次頁へつづく..... サンプルコード getObject_form2.php
  • 54. Technical Tips on CLOUDIAN HyperStore #2 P.51 Copyright © 2010-2015 Cloudian KK. All rights reserved. ★前頁からの続き try { if (! $client->doesObjectExist($bucket, $keyname)) { throw new NoSuchKeyException("キーが存在しません。"); } $exist = $client->doesObjectExist($bucket, $keyname); if ($versioningStatus == 'Enabled') { $msgStatus = "有効"; } elseif ($versioningStatus == 'Disabled') { $msgStatus = "無効"; } elseif ($versioningStatus == 'Suspended') { $msgStatus = "一時停止"; } if ($versioningStatus == 'Enabled' || $versioningStatus == 'Suspended') { $versions = $client->listObjectVersions(array( 'Bucket' => $bucket, ))->getPath('Versions'); } ?> <div style="text-align: center"> <p class="auto-style2"> 選択したバケット「<?php e($bucket); ?>」は、バージョニングが <b><?php print $msgStatus; ?></b>です。<br /><br /> </p> <form method="GET" action="getObject_process1.php"> <?php if ($versioningStatus == 'Enabled' || $versioningStatus == 'Suspended') { $versions = $client->listObjectVersions(array( 'Bucket' => $bucket, ))->getPath('Versions'); ?> <p class="auto-style2"> GET したいキー(ファイル)のバージョンを選択してください: </p> <select name="versionid"> <?php foreach ($versions as $version) { if ($version['Key'] == $keyname) { $date = new DateTime($version['LastModified']); $date->setTimezone(new DateTimeZone('Asia/Tokyo')); $lastModified = $date->format('Y 年 m 月 d 日 H 時 i 分 s 秒'); ?> <option value="<?php e($version['VersionId']); ?>"> <?php print $version['IsLatest'] ? "{$lastModified} ←最新バージョン " : $lastModified; ?> </option> ★次頁へつづく.....
  • 55. Technical Tips on CLOUDIAN HyperStore #2 P.52 Copyright © 2010-2015 Cloudian KK. All rights reserved. ★前頁からの続き <?php } } } ?> </select> <input type="hidden" name="bucket" value="<?php print $bucket; ?>" /> <input type="hidden" name="keyname" value="<?php print $keyname; ?>" /> <br /><br /> <input type="submit" name="submit" value="ダウンロード" /> <input type="button" onclick="location.href='getObject_form1.php'" value="戻る"> </form> </div> <?php } catch (NoSuchKeyException $ex) { ?> <b><font color="red">指定されたキーは存在しません(´・ω・`)。</font></b><br /> <hr> <!-- エラーコード: <b><?php print $ex->getCode(); ?></b><br /> --> エラーメッセージ: <b><?php print $ex->getMessage(); ?></b> <?php } catch (InvalidArgumentException $ex) { ?> <b><font color="red">無効なバージョン ID が指定されました(*´Д`)。</font></b><br /> <hr> <!-- エラーコード: <b><?php print $ex->getCode(); ?></b><br /> --> エラーメッセージ: <b><?php print $ex->getMessage(); ?></b> <?php } catch (Exception $ex) { ?> <b><font color="red">何らかしらのエラーが発生しました( ゚Д゚)。</font></b><br /> <hr> <!-- エラーコード: <b><?php print $ex->getCode(); ?></b><br /> --> エラーメッセージ: <b><?php print $ex->getMessage(); ?></b> <?php } ?> </body> </html>
  • 56. Technical Tips on CLOUDIAN HyperStore #2 P.53 Copyright © 2010-2015 Cloudian KK. All rights reserved. ③ Web 画面のメインフォームから呼び出される PHP コード 以下に掲載する PHP コードは、バージョン選択フォーム内の[ダウンロード]ボタンを押下したと きに呼び出され、指定したファイルを getObject 処理する PHP コードです。 <?php require_once("vendor/autoload.php"); require_once("./config.php"); use Aws¥S3¥S3Client; use Aws¥S3¥Exception¥NoSuchKeyException; use Aws¥S3¥Exception¥InvalidArgumentException; $client = S3Client::factory($config); $temp_file = tempnam("data", "tmp-"); $bucket = $_GET['bucket']; // $keyname = isset($_GET['keyname'])? $_GET['keyname'] : 'versioned.txt'; $keyname = $_GET['keyname']; $tmp = explode('/', $keyname); $filename = end($tmp); $version = isset($_GET['versionid']) ? $_GET['versionid'] : NULL; $get_args = array( 'Bucket' => $bucket, 'Key' => $keyname, 'SaveAs' => $temp_file, ); if (!is_null($version)) { $get_args['VersionId'] = $version; } ★次頁へつづく..... サンプルコード getObject_process1.php
  • 57. Technical Tips on CLOUDIAN HyperStore #2 P.54 Copyright © 2010-2015 Cloudian KK. All rights reserved. ★前頁からの続き try { // (1) データ取得 $result = $client->getObject($get_args); // (2) データのメタ情報 $size = $result['ContentLength']; // => "20" $type = $result['ContentType']; // => "text/plain" $mtime = $result['LastModified']; // => "Sat, 01 Mar 2014 07:45:45 GMT" header('Content-Type:'.$type); header('Content-Length:'.$size); header('Content-Disposition: attachment; filename="' . $filename . '"'); $body = $result['Body']; //$body->rewind(); $body instanceof Guzzle¥Http¥EntityBody; print $body; $body->close(); unlink($temp_file); } catch (NoSuchKeyException $ex) { ?> <b><font color="red">指定されたキーは存在しません(´・ω・`)。</font></b><br /> <hr> <!-- エラーコード: <b><?php print $ex->getCode(); ?></b><br /> --> エラーメッセージ: <b><?php print $ex->getMessage(); ?></b> <?php } catch (InvalidArgumentException $ex) { ?> <b><font color="red">無効なバージョン ID が指定されました(*´Д`)。</font></b><br /> <hr> <!-- エラーコード: <b><?php print $ex->getCode(); ?></b><br /> --> エラーメッセージ: <b><?php print $ex->getMessage(); ?></b> <?php } catch (Exception $ex) { ?> <b><font color="red">何らかしらのエラーが発生しました( ゚Д゚)。</font></b><br /> <hr> <!-- エラーコード: <b><?php print $ex->getCode(); ?></b><br /> --> エラーメッセージ: <b><?php print $ex->getMessage(); ?></b> <?php }
  • 58. Technical Tips on CLOUDIAN HyperStore #2 P.55 Copyright © 2010-2015 Cloudian KK. All rights reserved. 5. おわりに 本書では、HyperStore 独自機能である自動階層化機能の概要とその設定方法を説明し、(現行 バージョンにおいては)CMC 経由では設定できないバージョニング機能について、その動作を見て頂ける PHP サンプルコードを提示し説明しました。 自動階層化機能を使用することにより、オンプレにある HyperStore とパブリッククラウド上のクラウドス トレージをうまく組み合わせて有効活用するハイブリッドクラウド構成を実現できます。 また、バージョニング機能も有効に活用できれば、ある一定期間、格納されたユーザーデータを保護す るための仕組み/手段として活用して頂ける機能です。 これまで見てきたように、現時点ではまだ CMC から設定できない機能もありますが、HyperStore の 大きな特長のひとつでもある S3 API を活用し、データ操作だけではなくストレージシステムの管理や保守 にもチャレンジしてみてください。Java や Python、PHP 等のプログラムから S3 API を呼び出して様々な 操作や管理が行えるようになれば、例えば業務システムのプログラムに組み込んで直接、業務システムか ら HyperStore にアクセスしデータをアップロード/ダウンロードさせることもでき、より効果的に HyperStore をご使用頂けるものと思います。 なお、本書掲載のサンプルコードは元々、『なかなか目には見えづらいバージョニング機能を、お客様に 視覚的にご理解頂ける術はないものか?』と、著者が試行錯誤して作成したデモ用の PHP コードです。 このように公開するにはお粗末でお恥ずかしい稚拙なコードで、デモや解説に必要な最低限の機能し か実装しておらず、またエラーハンドルもかなり省いていますので、現場でご使用の場合は本書サンプルコ ードを参考にして頂き、より良いコードを作成してください。 以上 著者 松井 良祐 役職 テクニカル プリセールス マネージャー メールアドレス rmatsui@cloudian.com
  • 59. Technical Tips on CLOUDIAN HyperStore #2 《 本書掲載のサンプルコードについて 》 本書にはサンプルコードを別添しませんが、もしサンプルコードが欲しいとご希望を頂けましたら別途、お 送り致します。その際はご面倒をお掛け致しますが、弊社営業部までご連絡ください。
  • 60. Technical Tips on CLOUDIAN HyperStore #2 ホームページ:http://cloudian.jp/ Facebook:https://www.facebook.com/cloudian.cloudstorage.S3 Twitter:https://twitter.com/Cloudian_KK ブログ:http://www.cloudian-blog.com/ 評価版お申込み:http://www.cloudian.jp/cloud-storage-products/cloudian_eval_agr.php クラウディアン株式会社 THANK YOU ! www.cloudian.jp Cloud Storage for Everyone