明日も楽をするために

めんどくさがりなITエンジニアが書くメモ帳

aws-sdk-phpでIDCFとMinioのオブジェクトストレージに投稿する設定

AWS

aws-sdk-phpの3.x系で動作確認済み

<?php
$s3 = Aws\S3\S3Client::factory(array(
    'credentials' => [
        'key'    => '',
        'secret' => '',
    ],
    'region' => 'ap-northeast-1',
    'version' => '2006-03-01', //latestでもいい
));
$result = $s3->putObject(array(
    'Bucket' => 'bucket-test',
    'Key'    => 'key',
    'Body'   => 'body',
    'ACL'    => 'public-read',
    //'ContentType' => 'image/jpeg',
));
echo $result['ObjectURL'];

Minio

aws-sdk-phpの3.x系で動作確認済み

<?php
$s3 = Aws\S3\S3Client::factory(array(
    'credentials' => [
        'key'    => '',
        'secret' => '',
    ],
    'region' => '', //値はなくても構わないがkeyは必要
    'version' => '2006-03-01', //latestでもいい
    'endpoint' => 'http://127.0.0.1:9000', //minioのipでhttpから記述する必要がある
    'use_path_style_endpoint' => true,
));
$result = $s3->putObject(array(
    'Bucket' => 'bucket-test',
    'Key'    => 'key',
    'Body'   => 'body',
    'ACL'    => 'public-read',
    //'ContentType' => 'image/jpeg',
));
echo $result['ObjectURL'];

IDCF

aws-sdk-phpの2.x系で動作確認済み
※3.x系はsignatureの関係なのか動かない・・・

<?php
$s3 = Aws\S3\S3Client::factory(array(
    'credentials' => [
        'key'    => '',
        'secret' => '',
    ],
    'endpoint' => 'http://ds.jp-east.idcfcloud.com',
    'signature' => 's3', //IDCFはsignatureV4に対応していないのでsignatureV2にする必要がありs3でsignatureV2の指定になる
));
$result = $s3->putObject(array(
    'Bucket' => 'bucket-test',
    'Key'    => 'key',
    'Body'   => 'body',
    'ACL'    => 'public-read',
    //'ContentType' => 'image/jpeg',
));
echo $result['ObjectURL'];

s3はバケットURLが複数ある
例:bucket-testをバケット名とした場合
https://s3-ap-northeast-1.amazonaws.com/bucket-test/
https://bucket-test.s3-ap-northeast-1.amazonaws.com/

aws-sdk-php3.x系だとバケットサブドメインでリクエストが投げられるのでMinioなどipで指定したい場合は'use_path_style_endpoint' => true,を指定してバケット名パスを有効にする必要がある
IDCFもAWSと同じ両方のURLパターンに対応しているがsignatureはまだ完全に対応しきれていないっぽい?