Amazon S3 dengan CakePHP

Beberapa hari ini saya cukup disibukkan dengan memahami cara kerja Amazon Simple Storage Service (Amazon S3), yang merupakan salah satu layanan dari Amazon Web Service (AWS), dilanjutkan dengan menulis beberapa baris kode agar bisa bekerja dengan CakePHP . Ini adalah salah satu bagian dari situs yang sedang saya kerjakan.

Langsung aja. Library PHP5 untuk mengakses layanan Amazon S3 ini saya gunakan Class S3 dari http://undesigned.org.za/2007/10/22/amazon-s3-php-class, hasil karya dari Donovan Schönknecht.

Agar bisa diakses dalam CakePHP, file class S3 tadi (S3.php) diletakkan di folder app/vendor/. Setelah itu saya buat fungsi baru di dalam controller yang mengakses Amazon S3 nantinya.

function _initAws()
{
// AWS access info
if (!defined('awsAccessKey')) define('awsAccessKey', 'AKHTZQYAXRXHTZQYAUUM'); // Sesuaikan dengan AccessKey anda
if (!defined('awsSecretKey')) define('awsSecretKey', 'VJFcyIksmdnk90kngio'); // Sesuaikan dengan SecretKey anda

App::import('Vendor', 'S3', array('file'=>'S3.php'));
$s3 = new S3(awsAccessKey, awsSecretKey);
return $s3;
}

Kemudian jika di dalam salah satu fungsi controller anda (di dalam controller yang sama), anda ingin mengakses S3, cukup gunakan baris berikut :

$s3 = $this->_initAws();

$s3->putBucket('cdn.labanux.com', S3::ACL_PRIVATE); // Membuat bucket baru

$s3->putObjectFile($file_path, 'cdn.labanux.com', 'image/'.$file_name.'.xcf', S3::ACL_PRIVATE);

// Menyimpan ke bucket cdn.labanux.com, dengan nama file image/$filename.xcf (image itu hanyalah virtual folder, karena Amazon S3 tidak mensupport folder. Dengan dinamai seperti itu, maka file anda kelihatan seperti berada di dalam sebuah folder / subfolder

Oh iya, bucket itu unik, ndak ada yang sama di AWS. Terus asyiknya gini, kalau bucket kita bernama : labanux, maka bucketnya beralamat di s3.amazonaws.com/labanux, ataupun labanux.s3.amazonaws.com. Kalo nama bucketnya cdn-ku.org, maka bisa diakses di cdn-ku.org.s3.amazonaws.com, ataupun s3.amazonaws.com/cdn-ku.org

Nah kalo kita punya domain labanux.com, kita bisa nambahin subdomain cdn.labanux.com kan? Nah, di S3 nya kita bikin bucket dengan nama cdn.labanux.com. Jadi ntar bisa diakses dengan alamat cdn.labanux.com.s3.amazonaws.com.

Lalu gimana biar CDN (Content Delivery Network) nya beralamat di cdn.labanux.com? Gampang, di NS servernya dibuat record CNAME cdn.labanux.com diarahkan ke cdn.labanux.com.s3.amazonaws.com

Lalu bagaimana jika kita ingin mengakses file dari AWS untuk di berikan kepada user (di download user) ?

Kalau file & bucketnya public, bisa langsung diakses secara direct (misal filenya : image/fotoku.jpg) : s3.amazonaws.com/bucket/image/fotoku.jpg. Atau kalau mengikuti contoh di atas jadinya : cdn.labanux.com.s3.amazonaws.com/image/fotoku.jpg, atau (ini yang saya pakai) : cdn.labanux.com/image/fotoku.jpg.

Nah, kalau file / bucketnya private. Ada dua cara. Cara pertama : Continue reading “Amazon S3 dengan CakePHP”