AWS S3へのファイルアップロード
[環境]
AWS EC2
php:5.6.30
FuelPHP:1.8
AWS SDK for PHPを使って、S3にファイルをアップロード・ダウンロードする方法をまとめます。
バージョンによって違ったりするので、今回使用した一連のパターンをまとめました。
なお、使用したバージョンはAWS SDK for PHP(バージョン3)です。
公式サイト
S3にアクセスするユーザとポリシーを作成
IAMにてユーザとポリシーを作成します。
ポリシーには、利用したいActionの権限を指定します。(今回はs3:GetObjectとs3:PutObjectのみ。)
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:PutObject", ], "Resource": "arn:aws:s3:::dms-*" } ] }
AWS SDK for PHPパッケージのインストール
fuel配下にあるcomposer.jsonをviで開き、requireの配列に下記を追加します。
"aws/aws-sdk-php": "3.*"
コンソールに戻り、composerでアップデート処理を行います。
php composer.phar update
アップロード用のクラスを作成
[classaws.php]
<?php use \Aws\S3\S3Client; use \Aws\S3\Exception\S3Exception; class ClassAWS{ private static function uploadS3($filepath,$filenm){ $s3 = S3Client::factory(\Config::get('s3_access_key')); // バケット名 try { $result = $s3->putObject(array( 'Bucket' => \Config::get('s3_contents_bucket'), 'Key' => 'logo/' . $filenm, 'Body' => fopen($filepath,'rb'), )); } catch (S3Exception $exc) { echo "アップロード失敗"; echo $exc->getMessage(); } } }
必要最低限のものしか指定していません。
その他のパラメータの記載は公式のAPI仕様を参照ください。
AWS SDK for PHP 3.x
ステージ環境と本番環境でキーやバケットが異なるので、環境別のConfig.phpに追記しました。
[config.php]
<?php return array( /* AWS設定 */ 's3_access_key' => array( "key" => "XXXXXXXXXXXXXXXXXXXX", // IAMでユーザ作成時に入手したaws_access_key_id "secret" => "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", //IAMでユーザ作成時に入手したaws_secret_access_key "region" => 'ap-northeast-1',//Region::AP_NORTHEAST_1 // AP_NORTHEAST_1はtokyo region 'version' => '2006-03-01', 'signature_version' => 'v4' ), 's3_contents_bucket' => 'static-contents', //静的コンテンツ格納バケット名
このクラスを呼びだして使用します。
\ClassAWS::uploadS3($filepath,$filenm);
まとめ
一度設定してしまえば、あとは簡単にS3を利用したアップロード&ダウンロードができます。
ぜひ一度使ってみてください。