Cómo configurar un entorno de desarrollo PHP para trabajar con Microsoft Azure

Microsoft Azure tiene un excelente soporte de PHP en todos los productos que ofrece, Máquinas Virtuales, Sitios Web y Servicios en la nube. Además de soporte incluye también un SDK con el que se puede acceder a las características específicas de Azure directamente desde PHP. En este artículo se va mostrar la manera de configurar un entorno de trabajo para PHP utilizando el SDK de Azure. Esto es extensible para Windows, Linux y MacOSx.

Runtime de PHP / Servidor Web

Lo primero que se necesita para poder empezar a trabajar con PHP es el propio runtime de PHP instalado en un servidor web. En Internet hay muchísimos artículos de cómo instalar Apache+PHP así que está fuera del ámbito de este articulo contar eso, pero si se va a contar como se Instala en Windows.

Para instalar en Windows se puede utilizar Web Platform Installer directamente en IIS.

Una vez que se ha instalado PHP en el sistema, desde la línea de comandos se puede ejecutar el comando php.

Instalando el SDK de PHP para Microsoft Azure

El SDK de Azure para PHP se puede instalar de dos maneras utilizando Composer y Pear. Ambos son un gestor de paquetes para PHP, que permiten instalar el paquete y las dependencias de las que depende el mismo. Ambos son ficheros individuales que tienen la extensión phar, esa extensión define un paquete único de php que contiene a su vez más fichero, como una especie de fichero zip con todo lo necesario para ejecutar ese programa.

Composer se puede descargar desde http://getcomposer.org/composer.phar.

Pear se puede descargar desde http://pear.php.net/go-pear.phar.

Además en Windows se necesita tener la línea de comando de Git.

Instalando y configurando Pear

Antes de poder instalar el paquete de Microsoft Azure, se tiene que instalar e inicializar Pear correctamente en el sistema, para ello, lo recomendable es crear un directorio en la raíz llamada pear y ahí sea donde se instale Pear y todos los paquetes que se requieran. Se pueden hacer dos instalaciones una local y otra a nivel de sistema.

Para instalar Pear ejecutar este comando en la carpeta pear:

php go-pear.phar

Solo hay que seguir las preguntas en pantalla para instalar Pear. Una vez hecho recomienda, en el caso de Windows, ejecutar el comando PEAR_ENV.reg para que registre globalmente en el sistema. Además es recomendable agregar la ruta de la carpeta de pear a la variable PATH del sistema.

Instalando el SDK de PHP

En la página oficina de Microsoft Azure, http://azure.microsoft.com/en-us/documentation/articles/php-download-sdk se indica cómo se hace el proceso de instalación del SDK, se indica que hay que generar un fichero llamado composer.json en la raíz de la carpeta que contenga el proyecto en donde se desea usar el SDK de PHP.

El contenido del fichero, según la web anterior, debería de ser:

{
"require": {
"microsoft/windowsazure": "*"
},
"repositories": [
{
"type": "pear",
"url": "http://pear.php.net"
}
],
"minimum-stability": "dev"
}

Pero en este fichero hay un error que hace, que cuando Composer intente resolver las dependencias que se definen en el paquete de microsoft/windowsazure no puede resolverlo y falla el proceso de instalación, aunque se instalen desde Pear, cuando se intente hacer desde Composer fallará.


Loading composer repositories with package information
Initializing PEAR repository http://pear.php.net
Installing dependencies (including require-dev)
Your requirements could not be resolved to an installable set of packages.
Problem 1
- microsoft/windowsazure v0.4.0 requires pear-pear/http_request2 * -> no
mat
ching package found.
- microsoft/windowsazure dev-master requires pear-pear/http_request2 * ->
no
matching package found.
- microsoft/windowsazure dev-dev requires pear-pear/http_request2 * -> no
ma
tching package found.
- Installation request for microsoft/windowsazure * -> satisfiable by
micros
oft/windowsazure[dev-dev, dev-master, v0.4.0].
Potential causes:
- A typo in the package name
- The package is not available in a stable-enough version according to your
min
imum-stability setting
see
<https://groups.google.com/d/topic/composer-dev/_g3ASeIFlrc/discussion> f
or more details.
Read <http://getcomposer.org/doc/articles/troubleshooting.md> for
further common
problems.

Para solucionar este problema hay que utilizar un fichero composer.json que contenga las dependencias del paquete de microsoft/windowsazure tal como este:

{
"require": {
"microsoft/windowsazure": "dev-dev",
"pear-pear.php.net/http_request2": "*",
"pear-pear.php.net/mail_mime": "*",
"pear-pear.php.net/mail_mimedecode": "*"
},
"repositories": [
{
"type": "pear",
"url": "http://pear.php.net"
}
]
}

A partir de ese fichero y teniendo en la misma carpeta el fichero de composer.phar se puede ejecutar este comando:

php composer.phar install

Y ahora ya si empezará a resolver todas las dependencias.

Loading composer repositories with package information
Initializing PEAR repository http://pear.php.net
Installing dependencies (including require-dev)
- Installing pear-pear.php.net/mail_mime (1.8.8)
Downloading: 100%
- Installing pear-pear.php.net/mail_mimedecode (1.5.5)
Downloading: 100%
- Installing pear-pear.php.net/net_url2 (2.0.5)
Downloading: 100%
- Installing pear-pear.php.net/xml_util (1.2.1)
Downloading: 100%
- Installing pear-pear.php.net/console_getopt (1.3.1)
Downloading: 100%
- Installing pear-pear.php.net/structures_graph (1.0.4)
Downloading: 100%
- Installing pear-pear.php.net/archive_tar (1.3.11)
Downloading: 100%
- Installing pear-pear.php.net/pear (1.9.4)
Downloading: 100%
- Installing pear-pear.php.net/http_request2 (2.2.1)
Downloading: 100%
- Installing microsoft/windowsazure (dev-dev f9a0ba6)
Cloning f9a0ba6612cbcb73fe237948eec7b5974f99e52e
Writing lock file
Generating autoload files

De esta manera se ha generado un sistema de archivos que contiene todo lo necesario para empezar a trabajar con PHP y el SDK de Microsoft Azure.

clip_image001

Cómo usar el SDK de PHP desde una aplicación web

Para empezar a consumir los servicios de Microsoft Azure desde PHP hay que escribir al menos unas líneas de PHP. En PHP cuando se requiere una librería externa lo que se hace es referenciar el código fuente de esa Liberia utilizando una función de PHP llamada require_once.

Si la librería se ha instalado con Pear o Git:

require_once "WindowsAzure/WindowsAzure.php";

Si la libreria se ha instalado con Composer:

require_once "vendor/autoload.php";

A partir de aquí se pueden empezar a referenciar clases del SDK para tareas en concreto como inserter un elemento en la tabla de Storage.

Luis Guerrero.

Technical Evangelist Microsoft Azure.

@guerrerotook

Envío de correos utilizando SendGrid desde Node.js

SendGrid es un servicio que se ofrece en el portal de Microsoft Azure que permite el envío de correos electrónicos desde diferentes API’s. Lo primero de todo es que hay que dar de alta una cuenta de SendGrid desde el portal de Azure para luego poder consumir ese servicio.

Cómo crear una cuenta de SendGrid

Desde el portal de Microsoft Azure hay que pulsar en el botón de nuevo servicio, navegar hasta la tienda y una vez allí seleccionar el servicio de SendGrid.

clip_image002

Se pueden elegir entre muchos tipos de suscripción, que van desde una versión gratuita, que te permite enviar 25000 emails al mes, hasta una cuenta Premier que te permite enviar 2.500.000 emails al mes.

clip_image004

Una vez que se ha finalizado el proceso de compra del servicio en el portal de Azure aparece SendGrid como una aplicación que podemos utilizar. Como todo servicio SendGrid tiene unas credenciales que se van a necesitar para hacer el envío de correos desde Node.js.

clip_image005

Utilizando el módulo de sendgrid en Node.js

Como se ha visto en artículos anteriores, Node.js utiliza módulos que ofrecen funcionalidad para el desarrollador. En este caso no iba a ser diferente y existe un módulo llamado sendgrid que se puede utilizar para hacer el envío de correos. El código fuente del módulo está disponible en GitHub.

El paquete se puede instalar con npm o en el caso de tener una aplicación de Node.js incluirlo como dependencia en el fichero package.json. A partir de ahí se puede referenciar el módulo en código:

var SendGrid = require('sendgrid')

Cómo crear un correo

Antes de poder enviar un correo electrónico hay que crearlo y configurar todas las propiedades necesarias. Este es el código que se necesita para configurarlo.

var mail = new SendGrid.Email({
to: 'john@contoso.com',
from: 'anna@contoso.com',
subject: 'test mail',
text: 'This is a sample email message.'
});

También se puede utilizar una propiedad llamad html para establecer código HTML en el cuerpo del email. E

Esta operación simplemente genera el objeto Email que será utilizado para poder enviar el correo.

Estás son todas las propiedades que puede tener un correo:

var params = {
smtpapi: new sengrid.SmtpapiHeaders(),
to: [],
toname: [],
from: '',
fromname: '',
subject: '',
text: '',
html: '',
bcc: [],
replyto: '',
date: new Date(),
files: [
{
filename: '', // required only if file.content is used.
contentType: '', // optional
cid: '', // optional, used to specify cid for inline content
path: '', //
url: '', // == One of these three options is required
content: ('' | Buffer) //
}
],
file_data: {},
headers: {}
};

Cómo enviar un correo electrónico

El siguiente paso es enviar el correo utilizando las credenciales que se obtuvieron del paso anterior, en el que se creaba la cuenta de SendGrid.

var sender = new SendGrid.SendGrid('user','key');

De esta manera se crea el objeto sender que permite enviar correos, se pueden utilizar dos API una SMTP que se conecta directamente con el servidor de correo y otra WebAPI que permite hacer el envío del correo a través de una API HTTP. Esto es así porque en determinados escenario el puerto de envío de correos para SMTP puede estar cerrado, así que utilizar WebAPI es una buena alternativa para saltarse la protección de los Firewalls.

SMTP

sender.smtp(mail, function(success, err){
if(success) console.log('Email sent');
else console.log(err);
});

Web API

sender.send(mail, function(success, err){
if(success) console.log('Email sent');
else console.log(err);
});

Adjuntos

Otro aspecto importante de los correos son los ficheros adjuntos al email, esto es útil si, por ejemplo, se están generado documentos pdf (facturas) o imágenes como parte del negocio de la aplicación y se quieren enviar por correo.

sender.send({
to: 'john@contoso.com',
from: 'anna@contoso.com',
subject: 'test mail',
text: 'This is a sample email message.',
files: {
'file1.txt': __dirname + '/file1.txt',
'image.jpg': __dirname + '/image.jpg'
}
});

Los ficheros son leídos con fs.readFile con lo que tienen que estar en el disco duro local de la máquina que ejecuta el código. Si, por ejemplo, los ficheros están guardados en Azure Storage Blobs, primero se tiene que acceder al fichero, copiarlo en local y luego especificar esa ruta local.

Luis Guerrero

Technical Evangelist Microsoft Azure

@guerrerotook