PHP oraz platforma Azure

Udostępnij na: Facebook

Autor: Piotr Zieliński

Opublikowano: 2010-12-22

Wprowadzenie

Windows Azure został zaprojektowany do wspierania różnych języków i technologii. Programiści nie są więc ograniczeni wyłącznie do technologii .NET. Dzięki architekturze Azure jesteśmy w stanie wywołać niemal dowolny kod. Staje się to możliwe dzięki Worker Role. Dla przypomnienia: Worker Role może być utożsamiany z usługą Windows – wykonuje w tle jakąś operację. W przeciwieństwie do Web Role, nie jest hostowany na IIS, a  mimo to mamy dostęp do Worker Role za pomocą protokołu HTTP. W odpowiednim zdarzeniu Worker Role można zatem wywołać proces z serwerem PHP oraz odpowiednio go skonfigurować. W ten sposób nasze skrypty PHP, tak jak inne aplikacje .NET, będą wykorzystywać Load Balancera do zarządzania ruchem w Azure.

Dodatkowe oprogramowanie (pominięto standardowe biblioteki Azure):

  • Eclipse Galileo/Helios 3.5 lub 3.6 (sposób instalacji pominięty w artykule),
  • Windows Azure Tools for Eclipse (instalacja opisana w artykule).
  • Windows Azure SDK for PHP  (instalacja polega po prostu na skopiowaniu do projektu wymaganych plików).

Windows Azure Tools for Eclipse

Podstawowym zestawem narzędzi i bibliotek jest Windows Azure Tools for Eclipse. Biblioteki z tego pakietu umożliwiają m.in. integrację z Azure oraz korzystanie z Windows Azure Blobs,Tables i Queues. Najłatwiej zainstalować to narzędzie z poziomu Eclipse:

  1. otwieramy środowisko Eclipse i z menu głównego wybieramy Help->Install New Software:

  2. klikamy w przycisk Add,

  3. w otworzonym oknie w polu Location wpisujemy http://www.windowsazure4e.org/update.  Pole Name wypełnia użytkownik:

  4. po kliknięciu OK zostanie pobrana lista dostępnego oprogramowania. Zaznaczamy stosowny węzeł i przechodzimy dalej (Next),

  5. teraz możemy obejrzeć, co dokładnie zostanie zainstalowane:

  6. w następnych etapach zapoznajemy się z licencją i kończymy pracę, klikając Finish.

Po kilku minutach oprogramowanie zostanie ściągnięte i zainstalowane automatycznie.

Utworzenie aplikacji PHP Azure

Zainstalowane pluginy ułatwiają tworzenie projektów PHP Azure.  Stwórzmy więc prostą aplikację typu „Hello World!”:

  1. z menu głównego wybieramy File->New->Other,

  2. spośród zainstalowanych szablonów wyszukujemy Windows Azure PHP Project i klikamy Next:

  3. wpisujemy nazwę projektu i ponowne klikamy Next.

  4. następnie wpisujemy nazwę głównej roli (która uruchamia PHP Runtime) – możemy również skonfigurować Windows Azure Data Storage i PHP Runtime:

    Po wpisaniu poprawnych danych kończymy pracę z kreatorem (Finish).

Utworzona solucja bardzo przypomina tę tworzoną w Visual Studio. Występują dwa projekty – jeden z plikami konfiguracyjnymi Azure (service project), drugi z rolą PHP:

Projekt z rolą zawiera plik konfiguracyjny Web.config oraz przykładową stronę PHP index.php.

Wdrożenie aplikacji w środowisku symulacyjnym

Przed wdrożeniem aplikacji zmodyfikujmy trochę zawartość pliku index.php – np. dodajmy tekst „Hello World”. Wdrożenie aplikacji w lokalnym środowisku uruchomieniowym jest bardzo proste: z menu głównego wybieramy WindowsAzure, a następnie Run Windows Azure PHP Project in Development Fabric. Po chwili aplikacja zostanie wdrożona i będziemy mogli przetestować ją w przeglądarce:

Warto również przyjrzeć się DevFabric:

Wdrożenie aplikacji w realnym środowisku (w chmurze)

Również publikacja aplikacji PHP w chmurze opiera się na tym samym schemacie znanym z Visual Studio. Najpierw tworzymy paczkę, a później poprzez portal wdrażamy ją.

Aby stworzyć wymagany pakiet z menu Windows Azure, wybieramy Create Windows Azure Service Package for Windows Azure PHP Project. Po chwili zostaniemy przekierowani do folderu z wygenerowanymi plikami (HelloWorldPhpAzure.cspkg, ServiceConfiguration.cscfg). Następnie wchodzimy na portal windows.azure.com i przesyłamy wspomniane pliki:

Po instalacji (proces może chwilę potrwać, ponieważ paczka zawiera również PHP Runtime) możemy już przetestować aplikację:

Windows Azure Storage

W PHP mamy również do dyspozycji Windows Azure Storage (blobs, queues, tables).

Przede wszystkim należy zaimportować wymagane skrypty (oczywiście najpierw należy je skopiować do projektu z Windows Azure SDK for PHP ):

require_once 'Microsoft/WindowsAzure/Storage/Blob.php';

W aplikacji będziemy również potrzebowali nazwę konta Azure oraz klucz:

$accountName = "nazwa konta";

$accountKey = „klucz”

Spróbujmy uzyskać dostęp do bloba przechowującego plik tekstowy. Załóżmy, że odpowiedni blob jest już utworzony. Można go stworzyć np. za pomocą widoku dostępnego w Eclipse – Windows Azure Storage Explorer. Dostęp do bloba z poziomu kodu jest dość łatwy:

  1. Tworzymy klienta blob:

    $blobStorageClient = new Microsoft_WindowsAzure_Storage_Blob("127.0.0.1:10000",$accountName,$accountKey,true,null);

  2. Pobieramy boba (funkcja zapisze bloba do pliku podanego w trzecim parametrze). GetBlob przyjmuje kolejno: nazwę kontenera, nazwę bloba oraz plik docelowy.

    $blobStorageClient->getBlob("examplecontainer",
                                        "hello.txt",
                                        "downloaded_hello.txt" );

  3. Na końcu wystarczy wczytać ściągnięty plik i wyświetlić jego zawartość:

    $text=file_get_contents('downloaded_hello.txt', FILE_USE_INCLUDE_PATH);
    echo $text        

Powyższy kod można wdrożyć i przetestować np. w środowisku symulacyjnym, w którym nazwa konta oraz klucz mają zawsze następujące wartości:

Nazwa konta: devstoreaccount1

Klucz konta: Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==

Zakończenie

PHP jest kolejną technologią, która działa znakomicie na platformie Azure. Przedstawione narzędzia umożliwiają publikację aplikacji PHP w sposób podobny do wdrażania oprogramowania opartego na .NET  Dzięki elastycznej architekturze jesteśmy w stanie uruchomić niemal każdą aplikację – również napisaną w konkurencyjnych technologiach.


          

Piotr Zieliński

Absolwent informatyki o specjalizacji inżynieria oprogramowania Uniwersytetu Zielonogórskiego. Posiada szereg certyfikatów z technologii Microsoft (MCP, MCTS, MCPD). W 2011 roku wyróżniony nagrodą MVP w kategorii Visual C#. Aktualnie pracuje w General Electric pisząc oprogramowanie wykorzystywane w monitorowaniu transformatorów . Platformę .NET zna od wersji 1.1 – wcześniej wykorzystywał głównie MFC oraz C++ Builder. Interesuje się wieloma technologiami m.in. ASP.NET MVC, WPF, PRISM, WCF, WCF Data Services, WWF, Azure, Silverlight, WCF RIA Services, XNA, Entity Framework, nHibernate. Oprócz czystych technologii zajmuje się również wzorcami projektowymi, bezpieczeństwem aplikacji webowych i testowaniem oprogramowania od strony programisty. W wolnych chwilach prowadzi blog o .NET i tzw. patterns & practices.