クラウドインフラ構築記

現在AWSの構築支援に携わっております。今注視しているのは、GKE、BigQuery、Google Dataflowなどサービスを展開しているGoolge Cloud Platformです。

CloudnのObjectStorageで、MultipartUploadがうまくいかない。(Try編)

CloudnのObjectStorageで、MultipartUploadを試してみました。

AWS SDK for PHP 2は、getcomposer.org よりインストールしました。インストール方法はこちらの記事を参照。

<?php
require_once("aws/vendor/autoload.php");

use Aws\Common\Aws;
use Aws\Common\Enum\Size;
use Aws\S3\Enum\CannedAcl;
use Aws\Common\Enum\Region;
use Aws\Common\Exception\MultipartUploadException;
use Aws\S3\Model\MultipartUpload\UploadBuilder;
use Aws\S3\S3Client;

$access_key = '--access_key---';
$secret_key = '---secret_key---';

$region = Region::AP_NORTHEAST_1; // Region::AP_NORTHEAST_1 = Tokyo Region
$end_point_url = 'http://str.cloudn-service.com';
$bucket = 'devstore';

try {
 // S3
// $s3 = Aws::factory(array(
// 'key' => $access_key,
// 'secret' => $secret_key,
// 'base_url' => $end_point_url
// ))->get('s3');
 $config = array(
 'key' => $access_key,
 'secret' => $secret_key,
 'base_url' => $end_point_url
 );
 $s3 = S3Client::factory($config);
 $filename = 'P1000267.JPG';
 $transfer = UploadBuilder::newInstance()
 ->setClient($s3)
 ->setSource($filename)
 ->setBucket($bucket)
 ->setKey($filename)
 ->setMinPartSize ( 5 * Size::MB)
 ->build();

$transfer->upload();

} catch (MultipartUploadException $e) {
 echo $e->getPrevious();
 $transfer->abort();
}

実行させると、以下エラーとなってしまう。過去のフォーラムの投稿をみていると、AWS SDK for PHP 2のバグでBucketに”(ダブルコーティション)を利用しているとエラーになることがあるが、SDK自体は最新を使っている(と思う。たぶん)のでこのケースは考えにくい。S3に正常にアップロードできるので、あとはCloudn側しか原因が考えられない。


$ php upload-test2.php
Aws\S3\Exception\MalformedXMLException: AWS Error Code: MalformedXML, Status Code: 400, AWS Request ID: ACEE3A10F51811E2, AWS Error Type: client, AWS Error Message: The XML you provided was not well-formed or did not validate against our published schema., User-Agent: aws-sdk-php2/2.4.1 Guzzle/3.7.1 curl/7.19.7 PHP/5.3.3 MUP[

また、S3で対応しているブラウザからストレージにアップロードを行える『 Browser-Based Uploaded by POST』にはObject StorageではPOST Objectをサポートしていないので、使うことができない。(同じクラウドストレージ基盤を使用しているニフティクラウドストレージも未サポートでした。)

上記の件でCloudnのサポートから以下の回答を頂きました。結論分割送信は現時点で動作しないとことです。

こちらでも、調査確認させていただきましたが、お客様と同様のエラーとなることを確認
させていただきました。
現時点では、もうしわけございませんが、確固たる原因およびその対策について明確に返信
することがでません。
引き続き、調査を進めてまいります。情報にアップデートがございましたら、FAQサイトに
追記させていただきたく思います。

S3が一番使い勝手がいい。S3の場合、トラフィック課金があるので、トラフィック量によっては、コストが掛かる場合もありうる。アップロードは、ブラウザを使わず、Javaで実装がいいのか。

CompleteMultiUploadにバグがあった模様。バグfixする前も、S3では問題ない動作をしていたのは疑問が残るところ。

https://twitter.com/tatsuya6502/status/383525950907904000

コメントは受け付けていません。