15
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

S3の基本的な操作をしたメモ(AWS SDK for PHP 3.x)

Posted at

##やってみた感想

##環境 EC2 + S3

  • EC2
    t2.nano (region=us-west-2a)
    Amazon Linux AMI release 2016.03
    PHP 7.0.7 (cli) (built: May 25 2016 18:36:46) ( NTS )
    Server version: Apache/2.2.31 (Unix)

  • S3 (region=us-west-2)

##S3の構築

###バケットの作成

任意のバケット名を入力してクリッククリック。

###S3アクセス用IAMユーザ作成

credentials.csv をダウンロードしておく。
中身はこんな感じ

credentials.csv
User Name,Access Key Id,Secret Access Key
"IAMのユーザ名",アクセスキーID文字列,アクセスキー文字列

###作成したIAMユーザにポリシー設定

IAM ポリシーの概要

iam-user-policies
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:DeleteObject",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::作成したバケット名",
                "arn:aws:s3:::作成したバケット名/*"
            ]
        }
    ]
}

credentials.ini 作成

credentials.csvを元に適切な場所に作る。

credentials.ini
[任意のセクション名]
aws_access_key_id = アクセスキーID文字列
aws_secret_access_key = アクセスキー文字列

##AWS SDK for PHP v3の取得

今回はzipを落としてきてやってみました。

wget
$ sudo wget http://docs.aws.amazon.com/aws-sdk-php/v3/download/aws.zip

これを解凍して使います。

##a.jpgをPUT,GET,DELETEしてみる。

  • 使うもの

  • S3Client

  • この例はtry-catchとか省略してます。

  • 参照 Aws\S3\Exception

  • key にセットする任意の文字列で識別

  • key に 'subdir\filename' と指定するとsubdirがバケット内に自動で作られる。

  • 当然ですが、GET時にsaveAsの /path/toに書き込み権限が必要。

sample1.php
<?php
require '/path/to/aws/aws-autoloader.php';

use Aws\Credentials\CredentialProvider;
$ini = '/path/to/credentials.ini';
$iniProvider = CredentialProvider::ini('任意のセクション名', $ini);
$iniProvider = CredentialProvider::memoize($iniProvider);

$client = new Aws\S3\S3Client([
    'region'   => 'us-west-2',
    'version'  => '2006-03-01',
    'credentials' => $iniProvider
]);

//a.jpgをバケットに入れる。
$bucketName = '作成したバケット名';
$keyName = 'a.jpg';
$srcFile = '/path/to/a.jpg';

$client->putObject([
    'Bucket' => $bucketName,
    'Key' => $keyName,
    'SourceFile' => $srcFile,
    'ContentType'=> mime_content_type($srcFile)
]);

//バケットからa.jpgを取り出して、save.jpgとして保存
$saveFile = '/path/to/save.jpg';

$client->getObject([
    'Bucket' => $bucketName,
    'Key' => $keyName,
    'SaveAs' => $saveFile
]);

//バケット内のa.jpgを削除
$client->deleteObject([
    'Bucket' => $bucketName,
    'Key' => $keyName
]);

##dir単位で出し入れ

  • 使うもの

  • Amazon S3 Transfer Manager

  • php-xml が必要です。

  • installされてないと 'SimpleXMLElement' not found となる。

  • バケットにsubdir指定可能

sample2.php
<?php
require '/path/to/aws-autoloader.php';

use Aws\Credentials\CredentialProvider;
$ini = '/path/to/credentials.ini';
$iniProvider = CredentialProvider::ini('任意のセクション名', $ini);
$iniProvider = CredentialProvider::memoize($iniProvider);

$client = new Aws\S3\S3Client([
    'region'    => 'us-west-2',
    'version'   => '2006-03-01',
    'credentials' => $iniProvider
]);

$bucketName = 's3://作成したバケット名';
//$bucketName = 's3://作成したバケット名/subdir';

$s3Transfer = new \Aws\S3\Transfer($client, '/path/to/uploadDir', $bucketName);
$s3Transfer->transfer(); //upload

$s3Transfer = new \Aws\S3\Transfer($client, $bucketName, '/path/to/downloadDir');
$s3Transfer->transfer(); //download

sampleにコピペミスあったらすみません。
一応動いた物を元にしたメモです。

15
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?