2.4.4. PHP S3 の例
S3 アクセスには PHP スクリプトを使用することもできます。PHP を使用して Ceph Object Gateway サーバーにアクセスするために使用されるノードで以下の手順を実行します。
以下は、php v5.4.16
および aws-sdk v2.8.24
に対してテストされています。php >= 5.5+ が必要なため、
ない でください。php
には aws-sdk
の最新バージョンを使用しPHP 5.5
は、RHEL 7
のデフォルトリポジトリーでは利用できません。php 5.5
を使用する場合は、epel
およびその他のサードパーティーのリポジトリーを有効にする必要があります。また、php 5.5
および最新バージョンの aws-sdk
の設定オプションも異なります。
PHP/AWS SDK の設定
PHP を設定するには、以下の手順を実行します。
root
として、php
をインストールします。# yum install php
php の
aws-sdk
をインストールします。php 用に
aws-sdk
の zip アーカイブを ダウンロード し、展開します。
コネクションの作成
プロジェクトディレクトリーを作成します。
$ mkdir php_s3 $ cd php_s3
展開した
aws
ディレクトリーをプロジェクトのディレクトリーにコピーします。以下に例を示します。$ cp -r ~/Downloads/aws/ ~/php_s3/
コネクションファイルを作成します。
$ vim conn.php
conn.php
ファイルに以下のコンテンツを貼り付けます。<?php define('AWS_KEY', 'my_access_key'); define('AWS_SECRET_KEY', 'my_secret_key'); define('HOST', '<FQDN_of_gateway_node>'); define('PORT', '8080'); // require the AWS SDK for php library require '/path_to_aws/aws-autoloader.php'; use Aws\S3\S3Client; // Establish connection with host using S3 Client $client = S3Client::factory(array( 'base_url' => HOST, 'port' => PORT, 'key' => AWS_KEY, 'secret' => AWS_SECRET_KEY )); ?>
<
;FQDN_of_gateway_node>
をゲートウェイノードの FQDN に置き換えます。Red Hat Ceph Storage オブジェクトゲートウェイガイド で説明されているように、my-access-key
およびmy-secret-key
は、S3
アクセスのradosgw
が作成されたときに生成されたaccess_key
およびsecret_key
に置き換えます。また、path_to_aws
を、php
プロジェクトディレクトリーにコピーした展開したaws
ディレクトリーへの絶対パスに置き換えます。接続ファイルの例を以下に示します。
<?php define('AWS_KEY', '{key}'); define('AWS_SECRET_KEY', '{secret}'); define('HOST', 'http://{hostname}'); // require the AWS SDK for php library require '/home/ceph/php_s3/aws/aws-autoloader.php'; use Aws\S3\S3Client; // Establish connection with host using S3 Client $client = S3Client::factory(array( 'base_url' => HOST, 'port' => PORT, 'key' => AWS_KEY, 'secret' => AWS_SECRET_KEY )); ?>
ファイルを保存して、エディターを終了します。
コマンドを実行します。
$ php -f conn.php | echo $?
ファイルに正しく値を指定した場合は、コマンドの出力は
0
になります。
バケットの作成
新しいファイルを作成します。
vim create_bucket.php
以下のコンテンツをファイルに貼り付けます。
<?php include 'conn.php'; $client->createBucket(array('Bucket' => 'my-new-bucket3')); ?>
ファイルを保存して、エディターを終了します。
コマンドを実行します。
php -f create_bucket.php
所有するバケットの一覧表示
新しいファイルを作成します。
vim list_owned_buckets.php
以下のコンテンツをファイルに貼り付けます。
<?php include 'conn.php'; $blist = $client->listBuckets(); echo " Buckets belonging to " . $blist['Owner']['ID'] . ":\n"; foreach ($blist['Buckets'] as $b) { echo "{$b['Name']}\t{$b['CreationDate']}\n"; } ?>
ファイルを保存して、エディターを終了します。
コマンドを実行します。
php -f list_owned_buckets.php
出力は以下のようになります。
my-new-bucket3 2016-01-21 10:33:19 UTC
オブジェクトの作成
ソースファイル
hello.txt
を作成します。echo "Hello World!" > hello.txt
新しい php ファイルを作成します。
vim create_object.php
以下のコンテンツをファイルに貼り付けます。
<?php include 'conn.php'; $key = 'hello.txt'; $source_file = './hello.txt'; $acl = 'private'; $bucket = 'my-new-bucket3'; $client->upload($bucket, $key, fopen($source_file, 'r'), $acl); ?>
ファイルを保存して、エディターを終了します。
コマンドを実行します。
php -f create_object.php
これにより、バケット
my-new-bucket3
でオブジェクトhello.txt
が作成されます。
バケットの内容の一覧表示
新しいファイルを作成します。
vim list_bucket_content.php
以下のコンテンツをファイルに貼り付けます。
<?php include 'conn.php'; $o_iter = $client->getIterator('ListObjects', array( 'Bucket' => 'my-new-bucket3' )); foreach ($o_iter as $o) { echo "{$o['Key']}\t{$o['Size']}\t{$o['LastModified']}\n"; } ?>
ファイルを保存して、エディターを終了します。
コマンドを実行します。
php -f list_bucket_content.php
出力は以下のようになります。
hello.txt 12 Fri, 22 Jan 2016 15:54:52 GMT
空のバケットの削除
新しいファイルを作成します。
vim del_empty_bucket.php
以下のコンテンツをファイルに貼り付けます。
<?php include 'conn.php'; $client->deleteBucket(array('Bucket' => 'my-new-bucket3')); ?>
ファイルを保存して、エディターを終了します。
コマンドを実行します。
php -f del_empty_bucket.php | echo $?
バケットが正常に削除されると、コマンドは
0
を出力として返します。注記create_bucket.php
ファイルを編集し、my-new-bucket4
、my-new-bucket5
などの空のバケットを作成し、空のバケットの削除を試みる前に、del_empty_bucket.php
ファイルを適宜編集します。
空でないバケットの削除(強制的に実行)
現在、空でないバケットの削除は、php 2
以降のバージョンの aws-sdk
ではサポートされていません。
オブジェクトの削除
新しいファイルを作成します。
vim delete_object.php
以下のコンテンツをファイルに貼り付けます。
<?php include 'conn.php'; $client->deleteObject(array( 'Bucket' => 'my-new-bucket3', 'Key' => 'hello.txt', )); ?>
ファイルを保存して、エディターを終了します。
コマンドを実行します。
php -f delete_object.php
これにより、オブジェクト
hello.txt
が削除されます。