Veremos agora como começar a trabalhar com PHP no Windows Azure. Depois iremos fazer um serviço work role passo a passo.
Bem, outro dia eu escrevi sobre como começar a trabalhar com PHP no Windows. Novamente não quero ensinar sobre PHP e sim dar dicar de como trabalhar nesse ambiente. A ideia é que depois deste texto eu escreva o tão esperado texto sobre Symfony e sobre uma pequena tool que estou pensando em fazer que vai usar PHP no Azure e a api do Twitter.
Para começar temos duas opções: Azure Web Sites e o Azure Work Role. Vamos pelo mais simples primeiro:
Azure Web Sites for PHP (Web Role)
Azure Web Sites é a forma mais simples de se levantar um site na nuvem. Sério. Com esse serviço você cria seu site, sobe, e o Azure cuida da infra e inclusive cuida do CDN. Quando você utiliza Web Role você retorna um end point http ou https, e também consegue escalar o serviço.
Quando você cria uma conta no Windows Azure, você pode entrar no Manager dele. Na barra lateral esquerda você encontra um painel com serviços diferentes. Ao entrar na opção web, ou adicionar uma nova, você vê a seguinte janelinha:
Criando uma Web Role no Windows Azure
Você tem praticamente duas opções: ‘criação rápida’ ou ‘da galeria’. Caso escolha a opção ‘da galeria’, você é mandado para uma galeria de opções de cms e outras ferramentas prontas Open Sorce. Entre elas o WordPress e o Joomla. Daí é next next next finish. Windows Style.
Essas opções vão de Wordpres a phpBB. Ao escolher uma você já pode acessar o site diretamente, configurar e tudo sem nenhuma complicação.
Galeria de soluções do Windows Azure
Se você cria na primeira opção (criação rápida), ele cria um ambiente para você em que você só precisa fazer o deploy de seu site (inclusive usando GIT). Logo depois de criado, você só precisa dar um push no seu site. Automaticamente o Azure entende que é um site em php e configura o necessário. Agora é só commitar o seu projeto.
Caso seu projeto já esteja pronto em outro lugar, como GitHub, BitBucket, DropBox, Team Foundation, CodPlex ou um servidor mercurial ou GIT, você pode configurar para o Azure puxar seu código automaticamente e assim a cada um de seus commits nesses lugares ele irá pegando seu projeto. Se quiser começar seu projeto do nada, ele te dá um endpoint para começar com git subindo pro seu projeto.
Depois a cada commit que você fizer, seu código irá diretamente para a produção. Ele ainda verifica se não ocorreram erros, caso ocorram, a versão final será a do seu último commit estável.
Work Role
Você pode trabalhar com três tipos de serviço: web roles, work roles e virtual machines. As duas primeiras são do tipo PaaS, Plataforma como Serviço, e suportam PHP tranquilamente. A terceira também, mas com um maior controle, pois a máquina, digamos, está em suas mãos. Bem, falamos já da web role, agora vamos para a work role.
Um serviço em work role é um procedimento que roda em loop (enquanto estiver ligado) trabalhando. Você pode fazer um serviço que durma durante algumas horas, fazendo ele rodar de tanto em tanto tempo ou direto.
Primeiro você precisa baixar o SDK do Azure – não precisa ter conta ainda. Esse SDK fornece um ambiente simples se você trabalhar com Azure Tables, Azure Blobs, Azure Storage Queues, Azure Service Bus, Azure Service Runtime e etc.
Depois de baixar, você pega a pasta WindowsAzure e deixa no diretório da sua app. A lib do WindowsAzure depende de outras libs, a HTTP_Request2, Mail_mine e Mail_mimeDecode.
Claro que você pode usar o Composer, que é o gerenciador de dependencias mais usado para PHP. Se você usar ele, crie o arquivo composer.json com o seguinte trecho de código:
[code]
{
“require”: {
“microsoft/windowsazure”: “*”
},
“repositories”: [
{
“type”: “pear”,
“url”: “http://pear.php.net”
}
],
“minimum-stability”: “dev”
}[/code]
IDE e Plugins
Você pode trabalhar com PHP em qualquer IDE que preferir e ir subindo os código tranquilamente, mas se preferir, a dica é usar Eclipe com plugin de Windows Azure ou o Visual Studio Web Express com plugin de PHP e SDK instalado.
Alguns exemplos de códigos com o SDK
Em breve teremos um artigo com o passo a passo em que construiremos um serviço, mas ficam aqui alguns exemplos para você se familiarizar com o código:
Configurar o serviço
Como se fosse um manifesto do seu serviço ou aplicação, você precisa conter esse código que mostra o nome do serviço, versão e o necessário para definir ele:
[code]
$hostedServiceName = “DeletTwittFurado”;
$deploymentName = “v0.666”;
$slot = DeploymentSlot::PRODUCTION;
$packageUrl = “URL_for_.cspkg_file”;
$configuration = file_get_contents(‘path_to_.cscfg_file’);
$label = base64_encode($hostedServiceName);
$result = $serviceManagementRestProxy->createDeployment($hostedServiceName,
$deploymentName,
$slot,
$packageUrl,
$configuration,
$label);
$status = $serviceManagementRestProxy->getOperationStatus($result);
echo “Operation status: “.$status->getStatus().”
“;[/code]
Table Storage
Table Storage é um serviço para armazenagem de dados noSQL em que cada Table possui um grupo de Entidades. Cada uma, por sua vez, possui suas propriedades que são guardadas no tipo chave valor.
Cada Entidade comporta até 1MB de dados, o que, em se tratando de texto, é muita coisa. Caso precise de mais, é provável que você use o Blob Storage.
Depois de criada uma Table, você pode acessá-la de uma forma parecida com o endereço abaixo, onde entre sinais de maior e menor está o valor referente a sua Table:
http://<storage account>.table.core.windows.net/<table>
Veremos rapidamente o básico de lidar com elas:
Criar uma Table
O exemplo mais simples desse artigo: necessário somente chamar o método createTable e passra o nome dela.
[code]
try {
// Create table.
$tableRestProxy->createTable(“meusTwitts”);
} catch(ServiceException $e){
$code = $e->getCode();
$error_message = $e->getMessage();
echo $code.”: “.$error_message.”
“;
}[/code]
Adicionar um novo item na Table
Você primeiro cria uma nova entidade, adiciona a key dela e os valores das propriedades, sempre lembrando de serem chave, tipo, valor. Por fim, você chamará o método insertEntity que recebe o nome da tabela e a entidade.
[code]
$entity = new Entity();
$entity->setPartitionKey(“user”);
$entity->setRowKey(“MayogaX”);
$entity->addProperty(“Texto”, EdmType::STRING, “Queria ir no TDC Porto Alegre <img src=”http://dev.mayogax.me/wp-includes/images/smilies/icon_sad.gif” alt=”:(” class=”wp-smiley”> “);
try{
$tableRestProxy->insertEntity(“meustwits”, $entity);
} catch(ServiceException $e){
$code = $e->getCode();
$error_message = $e->getMessage();
echo $code.”: “.$error_message.”
“;
}
[/code]
Selecionar um item da Table
Como Table não é uma tabela relacional, é natural que suas querys não sejam SQL. Nesse exemplo criei uma query que busca entidades com o valor de user igual ao meu nickname. Por fim, executo a query. Fora do bloco Try você vai encontrar um método para pegar os valores da entidade, seguido de um loop para mostrar os valores de cada propriedade.
[code]
$filter = “User eq ‘MayogaX'”;
try {
$result = $tableRestProxy->queryEntities(“meusTwitts”, $filter);
} catch(ServiceException $e){
$code = $e->getCode();
$error_message = $e->getMessage();
echo $code.”: “.$error_message.”
“;
}
$entities = $result->getEntities();
foreach($entities as $entity){
echo $entity->getPartitionKey().”:”.$entity->getRowKey().”
“;
}
[/code]
Criar uma fila
O método necessário é o createQueueue, passar o nome da fila e as opções, caso configure algo.
[code]
try {
$queueRestProxy->createQueue(“cTwit”, $createQueueOptions);
} catch(ServiceException $e){
$code = $e->getCode();
$error_message = $e->getMessage();
echo $code.”: “.$error_message.”
“;
}
[/code]
Conclusão e fonte
Bem, vimos o básico de como começar a desenvolver com PHP no Windows Azure. Falta agora fazermos o nosso servicinho juntos. Fique ligado que será em breve.
Ah, a fonte desse artigo é a PHP Dev Center do Winows Azure.