amazon s3

Cloud computing to pojęcie, które ostatnimi czasy elektryzuje wszystkie osoby związane z branżą IT. Niektórzy snują przypuszczenia, iż w niedalekiej przyszłości wyprze on chociażby, dotychczasowy model usługi hostingowej (link). Jednym z liderów na rynku tego typu rozwiązań, jest bez wątpienia Amazon.com. Na przykładzie jednego z oferowanych przez tą firmę produktów - Simple Storage Service (S3), chciałbym pokazać przykładowe jego wykorzystanie, w aplikacjach webowych PHP. Na początek jednak parę słów o samej chmurze obliczeniowej. Na stronie Wikipedii możemy odnaleźć następującą jej definicję:

model przetwarzania oparty na użytkowaniu usług dostarczonych przez zewnętrzne organizacje. Funkcjonalność jest tu rozumiana jako usługa (dająca wartość dodaną użytkownikowi) oferowana przez dane oprogramowanie (oraz konieczną infrastrukturę). Oznacza to eliminację konieczności zakupu licencji czy konieczności instalowania i administracji oprogramowaniem.

Osoby zainteresowane poszerzeniem wiedzy w tej tematyce, polecam zapoznanie się z artykułem dostępnym TUTAJ.

Case study

Nasz cel to użycie S3 do przechowywania wszystkich plików przesyłanych za pomocą prostego formularza, umieszczonego na stronie www. W tym celu pierwszym krokiem jest rejestracja na stronie http://aws.amazon.com. W jej trakcie lub w czasie aktywacji usługi Simple Storage Service, wymaganym etapem będzie dodanie karty kredytowej, jako formy płatności. Wszelkie informacje można uzyskać TUTAJ – w tym dokładny opis, system opłat i FAQ. Po pomyślnej rejestracji, logujemy się na nasze konto, przechodzimy do zakładki w której uzyskamy API Key i Secret Key (Account -> Account Activity -> Security Credentials). Będą nam potrzebne w trakcie pisania skryptu.

W tym momencie mamy już wszystko, oprócz odpowiednich bibliotek PHP, których użycie pozwoli nam na szybką implementację usługi Amazonu. W poniższym przykładzie posłużę się rozwiązaniem, udostępnionym przez programistów framework’a Zend (kliknij aby pobrać pliki). Z pobranego archiwum interesuje nas katalog library/Zend.

Amazon S3

Zanim przejdziemy do kodowania, parę dość istotnych uwag o samym Simple Storage Service. Wszystkie obiekty przechowywane w S3 są gromadzone w tzw. „buckets” – a ich nazwy są unikalne w obrębie całego systemu, a nie indywidualnego konta. Każdy obiekt w chmurze posiada również zdefiniowane uprawnienia i metadane oraz ścieżkę dostępu: http[s]://[subdomena].amazonaws.com/[unikalna_nazwa_bucket]/[nazwa zasobu]. Oczywiście w nazwach mogą wystąpić tylko określone zestawy znaków. Więcej na ten temat można dowiedzieć się z dokumentacji, do której odsyłam osoby zainteresowane (link). Przejdźmy do praktyki!

Kodujemy

Na poniższym, archaicznym skrypcie zobrazowałem proces umieszczania plików bezpośrednio w chmurze. Jak widać,  procedura jest dość prosta i nie wymaga dużego nakładu pracy po stronie dewelopera.

include_once 'Zend/Service/Amazon/S3.php';

if ($_FILES && is_uploaded_file($_FILES['test']['tmp_name'])) {

    if ($data = file_get_contents($_FILES['test']['tmp_name'])) {
        // tworzymy obiekt z danymi API KEY i SECRET KEY
        $s3 = new Zend_Service_Amazon_S3('API_KEY', 'API_SECRET');
        // ustalamy permissions - kazdy moze odczytac zasob otwierajac link
        $meta = array(
            Zend_Service_Amazon_S3::S3_ACL_HEADER
            =>
            Zend_Service_Amazon_S3::S3_ACL_PUBLIC_READ
        );
        // Co wazne sciezka musi zawierac nazwe bucketu.
        // Zakladamy tez, ze jest on juz zdefiniowany przez nas,
        // a nazwa pliku nie posiada zakazanych znakow
        if ($s3->putObject('nazwa_bucketu/'.$_FILES['test']['name'], $data,$meta))
            echo 'UDALO SIE';
        else
            echo 'Nie UDALO SIE';

    }
}

I do tego formularz:

<form enctype="multipart/form-data" method="post" action="amazon.php">
<input type="file" name="test" />
<input type="submit" value="slij" />
</form>

Możliwości klasy Zend_Service_Amazon_S3 nie ograniczają się tylko do metody putObject($object,$data,$meta).
Zarządzanie bucketami:

  • createBucket($name) – tworzenie nowego bucketu o nazwie $name
  • cleanBucket($name) – czyszczenie bucketu $name z wszystkich obiektów
  • removeBucket($name) – usuwanie bucketu $name
  • getBuckets() – zwraca listę wszystkich bucketów użytkownika
  • isBucketAvailable($name) – sprawdza dostępność nazwy bucketu

Zarządzanie obiektami:

  • putObject($object, $data, $meta) – umieszczanie zasobu w chmurze, musi zawierać w prefiksie nazwę bucketu użytkownika.
  • getObject($object) – pobranie obiektu o nazwie $object, musi zawierać w prefiksie nazwę bucketu użytkownika.
  • removeObject($object) – usuwanie obiektu o nazwie $object, musi zawierać w prefiksie nazwę bucketu użytkownika.

Z pozostałymi metodami klasy Zend’a można się zapoznać, przeglądając dokumentację. Zachęcam do eksperymentów i tworzenia bardziej zaawansowanych implementacji w oparciu o cloud computing.

3 Odpowiedzi : “amazon s3”

  1. Prosimy o wpis z porównaniem wydajności zwykłego hostingu z chmurą! :)

  2. RalF napisał:

    Niebawem Piotrze coś na ten temat napiszę :)

  3. Prosimy o wpis z porównaniem cen zwykłego hostingu z chmurą!

Trackbacks/Pingbacks

  1. youtube API | Blog o PHP - [...] udostępniane przez Zend’a. Osoby nie czujące się w tym temacie zbyt dobrze, odsyłam tutaj, gdzie w sposób prosty i ...

Pozostaw Odpowiedź