Web Design Blog / Programowanie:

Amazon S3 – Integracja AWS SDK z PHP

Tworząc aplikację, która będzie przechowywać bardzo wiele plików, dobrze jest pomyśleć zawczasu o zakupie serwera plików lub integracji naszej aplikacji z profesjonalną usługą internetową do przechowywania dużych zbiorów danych. Jedną z takich usług jest Amazon Simple Storage Service w skrócie (Amazon S3).

Zaletą drugiego rozwiązania jest przede wszystkim cena. Koszt jednego gigabajta to kilka zaledwie centów a przestrzeń jest praktycznie nielimitowana.

W tym przewodniku wykonamy prostą aplikację, która wyśle konkretny plik z naszego zwykłego serwera wirtualnego do usługi S3 Amazona.

Funkcjonalności Amazon S3

  • Zapis, odczyt i usuwanie plików które mogą ważyć nawet 5TB!
  • Nieograniczona ilość plików
  • Pliki można przechowywać w kilkunastu węzłach rozsianych po całym świecie. Można wybrać region ze względu na czas dostępu, koszt i szczegóły prawne.
  • Dostęp do plików może być publiczny lub prywatny, możliwość organizowania plików w kubły (bucket), do których dostęp możemy nadawać użytkownikom według szczegółowych polityk dostępu.
  • Możliwość skorzystania z integracji REST i SOAP pozwalające na dowolną integrację i rozwój istniejących serwisów

1. Tworzenie konta AWS, dysku S3, tworzenie użytkownika i generowanie Access Key

Do zabawy potrzebne nam będzie oczywiście konto w Amazon Web Services (AWS). To zakładamy na stronie: https://aws.amazon.com/

Po zalogowaniu do konsoli i podaniu danych do karty kredytowej należy przejść do działu S3.

Warto stworzyć własny „bucket” i nadać mu jakąś sensowną nazwę.

Teraz przechodzimy do Identity and Access Management (IAM) gdzie zarządzamy danymi dostępowymi, których używamy do komunikowania się z interfejsem S3. Tworzymy użytkownika, dla ułatwienia nadajemy mu wszystkie możliwe uprawnienia. Klikamy w zakładkę Security credentials i tworzymy nowy Access Key.

Integracja PHP z Amazon S3 - access key

2. Instalacja AWS SDK dla PHP

Instalujemy Amazon SDK, czyli całe środowisko umożliwiające komunikację z usługami Amazona. W tym celu najprościej włączyć konsolę SSH i jeżeli jeszcze nie mamy, instalujemy sobie Composera:

curl -sS https://getcomposer.org/installer | php

Dzięki kolejnej komendzie instalujemy najnowszą wersję AWS SDK dla PHP:

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

Jest też oczywiście alternatywna metoda instalacji za pomocą paczki zip dostępnej na stronie : https://aws.amazon.com/sdk-for-php/

4. Właściwy kod aplikacji

Krok 1: Na początku dołączamy autoloader:

require '/ścieżka/do/vendor/autoload.php';

Krok 2: Dołączamy klienta S3:

use Aws\S3\S3Client;
use Aws\S3\Exception\S3Exception;

Krok 3: Dołączamy nazwę dysku i deklarujemy sobie zmienne przechowujące klucz i secret otrzymany z IAM:

$bucketName = 'mansfeld';
$IAM_KEY = 'ABCDEFGHIJK123456';
$IAM_SECRET = 'abcdef1234567890abcdef1234567890';

Krok 4: Próba połączenia z AWS. Tutaj trzeba zwrócić uwagę na region – musi odpowiadać temu który użyliśmy przy tworzeniu dysku S3. Jeżeli wystąpi jakiś wyjątek dla uproszczenia korzystamy z funkcji die():

try {
$s3 = S3Client::factory(
array(
'credentials' => array(
'key' => $IAM_KEY,
'secret' => $IAM_SECRET
),
'version' => 'latest',
'region' => 'eu-central-1'
)
);
} catch (Exception $e) {
die("Error: " . $e->getMessage());
}

Krok 5: Próba wysłania pliku:

try {
$file = "ścieżka/do/pliku.jpg";
$name = "nazwapliku.jpg";

$s3->putObject(
array(
'Bucket'=>$bucketName,
'Key' => 'ścieżka/do/zapisania/pliku/'.$name,
'SourceFile' => $file,
'StorageClass' => 'REDUCED_REDUNDANCY',
'ContentType' => "image/jpg"
/* Tutaj można dołączyć dodatkowe meta np. nagłówki Cache-Control, ACL itd... wszystko jest w dokumentacji */
)
);

} catch (S3Exception $e) {
die('Error:' . $e->getMessage());
} catch (Exception $e) {
die('Error:' . $e->getMessage());
}

No i to wszystko!

Podsumowanie

Teraz nic nie stoi na przeszkodzie by np. taki dysk S3 połączyć sobie z usługą CloudFront i mamy rozwiązanie do serwowania plików statycznych najwyższej klasy. Wdrożenie tego typu rozwiązań we własnej aplikacji to przede wszystkim oszczędność. Dla mnie to spora satysfakcja, że korzystam z rozwiązań z jakich korzystają największe światowe aplikacje w tym sam sklep Amazona i np. Instagram 🙂

Źródła:

Oficjalna dokumentacja AWS SDK: https://aws.amazon.com/documentation/sdk-for-php/

Amazon S3 – Integracja AWS SDK z PHP
4.7 (94.29%) głosów: 7

Autor: (29 lat)

Służę pomocą w razie wykonania / odnowienia strony lub sklepu internetowego dla twojej firmy niezależnie od twojej lokalizacji czy skali przedsięwziecia.

Tego typu wpisy piszę w wolnych chwilach lub pomiędzy projektami. Tylko pomyśl co mogę dla Ciebie zrobić w ramach usługi :-)

Zadaj pytanie lub skomentuj

Wyrażam zgodę na przetwarzanie moich danych osobowych przez firmę Paweł Mansfeld z siedzibą w Jastrzębiu-Zdroju, ul. Plebiscytowa 10, w celu udzielenia odpowiedzi, w tym przedłożenia oferty jeśli o nią pytam. Moje dane osobowe będą przetwarzane do czasu cofnięcia zgody lub przez okres niezbędny do ustalenia, dochodzenia lub obrony roszczeń. Mam prawo dostępu do danych, sprostowania, usunięcia lub ograniczenia przetwarzania, prawo sprzeciwu, prawo wniesienia skargi do organu nadzorczego i prawo do przeniesienia danych.

Komentarze publiczne

Brak komentarzy.
Otrzymuj powiadomienie o nowych artykułach

Wyrażam zgodę na przetwarzanie moich danych osobowych przez firmę Paweł Mansfeld z siedzibą w Jastrzębiu-Zdroju, ul. Plebiscytowa 10, w celu udzielenia odpowiedzi, w tym przedłożenia oferty jeśli o nią pytam. Moje dane osobowe będą przetwarzane do czasu cofnięcia zgody lub przez okres niezbędny do ustalenia, dochodzenia lub obrony roszczeń. Mam prawo dostępu do danych, sprostowania, usunięcia lub ograniczenia przetwarzania, prawo sprzeciwu, prawo wniesienia skargi do organu nadzorczego i prawo do przeniesienia danych.

*Bez obaw, nie udostępniam nikomu twojego adresu e-mail