Una de las primeras dudas que nos entran a la hora de pensar en Azure, es si Windows Azure es algún tipo de instancia virtual a la que podemos acceder vía escritorio remoto y configurar lo que necesitemos en nuestro servidor. Sentimos decirte… que no.
Azure es un concepto distinto a esto; un planteamiento o paradigma nuevo a la hora de pensar en el alojamiento de nuestras aplicaciones web en internet. Exige en un principio estar abiertos a un cambio, un cambio necesario que se impondrá sin ninguna duda durante los próximos años.
Azure es un entorno formado por varios roles a los que subiremos según el tipo de rol de nuestra instancia, nuestra aplicación, nuestra base de datos, nuestros archivos estáticos y nuestros procesos backend. Todo está pensado para ser modular y escalable sin provocar dolores de cabeza al desarrollador. Estos roles se comunicarán entre sí mediante Rest vía HTTP o sockets TCP/IP. El coste será por horas de servicio y, aunque las instancias estén paradas se seguirán cobrando.
En Windows Azure principalmente tenemos los siguientes roles:
Adicionalmente tenemos estos otros servicios en Windows Azure:
En este primer acercamiento me voy a centrar en el WebRole y por la naturaleza de nuestra aplicación web, será de tipo FastCGI para poder ejecutar aplicaciones PHP.
Para programar en PHP bajo entorno Microsoft uso Visual Studio 2008 + vs.php o netbeans (en este caso usaré lo primero). Si no usas Visual Studio, dispones de herramientas que te permiten trabajar de una forma similar pero utilizando Eclipse. Recuerda que si estás en la universidad o has terminado hace poco, existen descargas gratuitas completas de Visual Studio y horas de servicio Azure en Dreamspark.
Lo primero es crear un servicio tipo Windows Azure en el panel de control de la plataforma Azure.
Una vez creado el servicio vemos que disponemos de dos entornos, uno de integración y otro de producción. Nos cobrarán por tener instancias en ambos entornos, estén levantadas o no.
Para poder trabajar con Azure desde Visual Studio, nos tenemos que descargar el SP1 y las Windows Azure Tools for Microsoft Visual Studio que nos permitirán disponer de un entorno basado en IIS similar a Azure.
Una vez hecho esto, en Visual Studio podremos seleccionar un tipo de proyecto Windows Azure Cloud Service.
Tras seleccionar el tipo de proyecto, nos preguntará qué rol vamos a asignar a este proyecto. En nuestro caso al ser una aplicación PHP, le asignamos el rol WebCGI role.
Una vez completado este paso, se nos crearán dos proyectos en el árbol de soluciones de Visual Studio y se nos mostrará el contenido del archivos de configuración del WebRole: el Web.roleconfig. Este es un archivo XML tipo al Web.config y en el que aparece entre las llaves FastCGI el siguiente comentario:
<-- Set the "Enable Full Trust" property to true on the corresponding Web Role in the Cloud Service project. --> <-- Define the fastCgi application here. The application must be located under the role root folder or subfolder. The handler is defined in the Web.config file. Ensure that all of the handler binaries have their "Build Action" Solution Explorer file property set to "Content". <application fullPath="%RoleRoot%approotcgi-handler.exe" arguments="arg1 arg2 ..." /> -->
Nos pide que realicemos las siguientes tareas:
Vamos a ello:
1) Primero nos descargamos los binarios o instalamos el msi (te recomiendo lo segundo) la última versión de PHP en windows.php.net
2) Una vez descargado o instalado PHP, copiamos sus binarios tal cual al directorio raíz de nuestro proyecto (a un directorio llamado /php). Si has instalado PHP, normalmente te dejará los binarios en «c:archivos de programaphp».
3) Si ya tenemos el directorio PHP en nuestra raíz del proyecto, indicaremos donde se encontrará la aplicación en el Web.roleconfig
<?xml version="1.0"?> <configuration> <system.webServer> <fastCgi&gt; <application fullPath="%RoleRoot%approotphpphp-cgi.exe" arguments="" /> </fastCgi> </system.webServerp> </configuration>
4) En el web.config descomentamos las líneas dedicadas al Handler FastCGI y las dejamos como siguen:
<add name="FastGGI Handler" verb="*" path="*.php" scriptProcessor="%RoleRoot%approotphpphp-cgi.exe" modules="FastCgiModule" resourceType="Unspecified" />
5) En las propiedades del Rol WebCgi nos aseguramos que está activada la propiedad Full Trust de .net
6) Subimos nuestra aplicación PHP. En este caso, subiré una sencilla aplicación que hará una tirada basándose en el bastante poco óptimo sistema aleatorio de PHP para otorgarme puntos en diferentes niveles de ataque y defensa.
Después de hacerlo, escribirá el resultado en un archivo de texto pero estará disponible tan sólo de forma temporal. Si quisiéramos almacenarlo de forma persistente, deberíamos almacenarlo en Azure Storage.
El código es el siguiente:
<php $poderes = array( "resistencia al fuego", "resistencia al frio", "aguante", "formulas de excel", "mirada penetrante", "escalabilidad", "ROI", "SEO", "SEM", "SMO", "pensamiento deslumbrante"); $resultado = null; for($i=1;$i<;10;$i++){ $puntos = $i*1E2*rand(5,11); $poder = $poderes[rand(0,10)]; $resultado .= $puntos . " puntos en " . $poder; $resultado .= "n"; echo "Asier ha obtenido " . $puntos . " puntos en " . $poder . "&<br/>"; } $fp = fopen("resultados.txt","w+"); fwrite($fp, $resultado, strlen($resultado)); fclose($fp);
7) Si estamos ejecutando Visual Studio como Administrador podemos compilar el proyecto. Sino, lo cerramos y ejecutamos Visual Studio con privilegios de Administrador. Una vez compilada la aplicación se nos abrirá nuestro navegador ejecutando nuestra aplicación PHP.
Por defecto, si no le indicamos un archivo raíz, nos dará un error que nos detalla que no tenemos permiso para listar el directorio raíz.
Para que nos cargue un archivo inicial, podemos agregarle la clave defaultDocument a la configuración system.webServer en el web.config.
<system.webServer> <defaultDocument enabled="true"> <files> <add value="index.php"/> </files> </defaultDocument>
8) Vale en principio tenemos todo funcionando en local, ya que vemos que se ejecuta la aplicación y que escribe las puntuaciones en el archivo de texto.
Ahora necesitamos subir todo esto a Azure.
Si volvemos al panel de control de windows.azure.com, y pulsamos en el botón deploy en el entorno de integración vemos que se nos pide subir dos archivos; El paquete de la aplicación y el archivo de configuraciones.
Desde Visual Studio podemos generar muy fácilmente estos dos archivos al hacer clic en la opción Publicar, que aparece al hacer clic en el botón derecho sobre el proyecto de Azure.
Cuando lo hagamos, se nos abrirá la ventana en el navegador del Panel de control de Azure y una ventana en el explorador de Windows con la ruta donde se han generado los archivos.
Una vez subidos le damos a Run, e iniciará la instancia. Tarda varios minutos.
Tras la espera podemos ejecutar nuestra aplicación desde la ruta que nos indique el panel de control.
Hay otras herramientas de las que podemos beneficiarnos al crear aplicaciones en Azure, una de ellas es el gran módulo de rewrite de IIS7 con el que podemos utilizar URLs amigables en nuestras aplicaciones web.
Vamos a hacer que nuestra aplicación otorgue le de poderes a un usuario que le indiquemos por URL.
Para ello tenemos que añadir una regla de rewrite en el web.config, dentro de system.webserver, en la que le indiquemos por la ruta /user/[nick] se le pasará como parámetro GET al script index.php.
<rewrite> <rules>; <rule name="Rewrite"> <match url="^user/([a-z]+)" /> <action type="Rewrite" url="index.php?user={R:1}" /> </rules> </rules> </rewrite>
En la aplicación recuperamos el parámetro GET. Tendríamos el siguiente código en el index.php
<php $poderes = array( "resistencia al fuego", "resistencia al frio", "aguante", "formulas de excel", "mirada penetrante", "escalabilidad", "ROI", "SEO", "SEM", "SMO", "pensamiento deslumbrante"); $resultado = null; $usuario = "asier"; if(!empty($_GET) ; is_array($_GET) ; key_exist("user", $_GET)){ $usuario = ucfirst($_GET["user"]); } for($i=1;$i < 10;$i++){ $puntos = $i*1E2*rand(5,11); $poder = $poderes[rand(0,10)]; $resultado .= $puntos . " puntos en " . $poder; $resultado .= "n"; echo $usuario . " ha obtenido " . $puntos . " puntos en " . $poder . "<br/> } $fp = fopen("resultados.txt","w+"); fwrite($fp, $resultado, strlen($resultado)); fclose($fp);
Una función que me resulta imprescindible también es poder visualizar los logs de nuestra instancia. Esto podemos hacerlo desde el panel de control de Azure y una cuenta de storage.
Con esto hemos visto como ejecutar aplicaciones web sencillas PHP en Azure, en las próximas entregas veremos como usar los Worker Roles, SQL Azure y cómo trabajar con PHP Azure para almacenar y recuperar archivos en Azure Storage.
Entre las cosas que he echado en falta, y desconozco por ahora si Azure las permite de forma nativa o con herramientas de terceros, pueden ser las siguientes:
Nuestro sitio web utiliza cookies para mejorar la navegación y obtener datos estadísticos sobre las visitas obtenidas.
Leer más