Problem

PHP를 이용할 경우 별도의 컴포넌트 설치가 필요하므로 처음 작업에 어려움이 있을 수도 있어 정리가 필요했다. PHP를 이용해서 AWS S3에 파일을 업로드 하기 위한 방법과 샘플 코드를 정리해 본다.

Solution

먼저 디렉터리에 아래 명령으로 먼저 Composer를 설치한다. Composer에 대해 더 자세한 정보는 여기에서 확인이 가능하다.

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === 'e0012edf3e80b6978849f5eff0d4b4e4c79ff1609dd1e613307e16318854d24ae64f26d17af3ef0bf7cfb710ca74755a') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"

Composer를 설치했다면 aws-sdk-php 라이브러리 설치할 차례이다. 아래 명령으로 설치가 가능하다.

composer require aws/aws-sdk-php
composer require aws/aws-php-sns-message-validator

또는

php -d memory_limit=-1 composer.phar require aws/aws-sdk-php
php -d memory_limit=-1 composer.phar require aws/aws-php-sns-message-validator

설치가 완료되면 아래처럼 vender 폴더가 생성된 것을 확인할 수 있다.

파일 업로드하기 위한 샘플 코드는 아래와 같다. KEY, SECRET, BUCKET$source는 상황에 맞게 설정하면 된다.

<?
require '../../vendor/autoload.php';

use Aws\S3\S3Client;
use Aws\Exception\AwsException;
use Aws\S3\MultipartUploader;
use Aws\Exception\MultipartUploadException;

$s3Client = new S3Client([
    'version' => 'latest',
    'region'  => 'ap-northeast-2',
    'credentials' => [
        'key' => '[KEY]',
        'secret' => '[SECRET]'
    ]
]);

$bucket = '[BUCKET]';
$source = 'sample.mp4';
$uploadKey = uniqid('video_', true) . '.' . end(explode('.', $source));
$uploader = new MultipartUploader($s3Client, $source, [
    'bucket' => $bucket,
    'key' => $uploadKey,
]);

try {
    $result = $uploader->upload();
    echo "Upload complete: {$result['ObjectURL']}\n";
} catch (MultipartUploadException $e) {
    echo $e->getMessage() . "\n";
}

그리고 파일 업로드가 가능하도록 S3 버킷에 권한을 추가해 준다. ResourceSourceIP 정보는 상황에 맞게 변경해 한다.