[PHP] AWS S3にファイルをアップロードする
AWS S3にファイルをアップロードするには以下の方法で行うことができる
目次
Composerをインストールする
curl -sS https://getcomposer.org/installer | php
AWS SDK for PHPのインストール
プログラムを実行したいフォルダまで移動し、AWS SDK for PHPのインストールする
cd /var/www/htdocs
php composer.phar require aws/aws-sdk-php
インストールが成功すると、vendorというフォルダが作成され、その中にawsというフォルダが作成されている
IAMでユーザの作成と権限の付与
AWS console→IAMを開き、S3バケットにファイルをアップロードできる権限を持ったユーザを作成するので、IAM→ユーザ→作成を選択

今回に適した既存のポリシーが無いので「ポリシーの作成」をクリック

新しいウィンドウが開くので、サービスを「S3」を選択、アクションは「リスト」「読み込み」「書き込み」にチェックする。ファイルの読み込みとリストは必要なければチェックしなくとも良い

できれば対象バケット以外へのバケットへの操作はさせたくないので、今回ファイルをアップロードしたいバケット名を指定して、制限をかける
リソース欄をクリックして、bucket欄のARNの追加をクリック

バケット名を入力するとARN名にしてくれる

ポリシーの確認をクリックして、ポリシーの名前と説明を入力
ポリシーの内容に問題なければ、ポリシーの作成をクリック

IAMユーザのウィンドウに戻り、先程作成したポリシーをアタッチして、次に進む
タグは必要があれば追加

ユーザの作成の確認をして作成ボタンをクリック

ユーザが作成されると「アクセスキー」と「シークレットーキー」が生成されるので、両方ともメモする。この2つはこの時のみ表示されるので注意

これでAWSコンソールでの作業は完了
後はphpコードを以下のように書き、vendorフォルダと同じ場所に配置すればOK
バケット名、リージョン名、アクセスキー、シークレットキーは適宜変更すること
//S3にアップロードする準備
require_once "vendor/autoload.php";
use Aws\S3\S3Client;
$bucket = 'バケットの名前';
$key = 'アクセスキー';
$secret= 'シークレットキー';
// S3クライアントを作成
$s3 = new S3Client(array(
'version' => 'latest',
'credentials' => array(
'key' => $key,
'secret' => $secret,
),
'region' => 'リージョン名', // アジアリージョン
));
$folderName= 'tmp';
func_uploadFileToS3($s3, $bucket, $folderName, $filePath);
//アップロード関数
function func_uploadFileToS3($s3, $bucket, $folderName,$filePath){
$fileName = basename($filePath);
// S3バケットにファイルをアップロード
$result = $s3->putObject(array(
'Bucket' => $bucket,
'Key' => $folderName.'/'.$fileName,
'Body' => fopen($filePath, 'rb'),
'ACL' => 'public-read', // 一般公開
'ContentType' => mime_content_type($filePath),
));
}