LoginSignup
15
15

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してみる。

  • 使うもの

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

  • 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単位で出し入れ

  • 使うもの

  • 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