Notas sobre el uso de templates en Azure

Hola Mundo:

Usar templates para la creación de recursos en Azure es una característica que existe desde hace algunos añ os en Azure. Esto fue traído por la tecnología implementada Azure Resource Manager, que cambia la forma en la cual se crean y de administran recursos.
Éstas son algunas notas para tener en consideración




Herramientas adecuadas

En mi caso, trabajo con un MacBook Pro y afortunadamente está Visual Studio Code , que es un IDE gratuito y multi plataforma, orientado a desarrollos en la nube y también funciona como editor de texto para otros lenguajes. 
Este IDE trae la posibiliad de trabajar con extensiones que potenciarán el desarrollo. Hay uno para Azure Resource Manager llamado Azure Resource Manager Tools.

Variables, parámetros y funciones definidas

Es importante conocer la diferencia entre parámetros y variables. Básicamente, los parámetros son los que se reciben desde un formulario generado de forma automática y deben ir encasillados desde el espacio de parameters. Las variables son justamente eso, variables. Sirven para la utilización de complejas estructuras de forma simple. Las variables pueden tomar como valor el valor de un parámetro.  
Las funciones definidas apoyarán en tareas como concatenación o trabajar con las propiedades de un resource group, por ejemplo.
Mas información sobre estas funciones se pueden encontrar en: https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-group-template-functions
Ejemplos
Si no sabes donde empezar a trabajar con templates, es recomendado basarte en ejemplos.  Existe un completo repositorio de templates que pueden servir para armar templates para la mayoría de los escenarios. La documentación sobre como usarlos se puede encontrar en https://azure.microsoft.com/en-us/resources/templates/ y el repositorio en Github se puede acceder desde https://github.com/Azure/azure-quickstart-templates
Espero que estas notas guíen el inicio  de trabajo con Azure ARM Templates.
Chau! 

Mover base de datos de una region a otra en Azure

Hola mundo:
En esta entrega, revisaremos un procedimiento altamente solicitado por administradores de infraestructura en Azure. Este consiste en migrar una base de datos de una región a otra con muy bajo downtime y, prácticamente, sin pérdida de datos, utilizando la geo replicación y las características de alta disponibilidad.
Para este ejemplo, tendré una base de datos de prueba (AdventureWorks)  en la región East US. Para efectos de la prueba, es una base de datos de bajo costo.
Dentro del panel del recurso, iremos al menú de la izquierda y ubicaremos la opción Geo-Replication
Abrirá una ventana asi. Se muestra un mapa con las regiones disponibles para hacer la replicación

Para hacer la replicación, escogeré la región West US 2 del listado. Una vez seleccionada la región, abrirá un asistente donde se pide configurar algunos parámetros. Entre los parámetros a configurar es la creación de un servidor SQL Server donde residirá la base de datos réplica. 
Una vez seteados los parámetros, la replicación comenzará a ejecutarse:

 
Aparece la base de datos replicada en el apartado de Secondaries y en el mapa se ve una gráfica de la replicación.
Al entrar en la réplica de la base de datos, veremos la opción de hacer un failover forzado.
Al hacer el failover aparece una advertencia diciendo que todas las sesiones van a ser desconectadas y que podría perder datos. Entendiendo los riesgos, procedemos.
Al volver a la vista principal de geo replicación, se ve que el estado de la base de datos secundaria está en proceso de failover.
Luego de esperar el cambio, se puede observar que la base de datos secundaria ya es primaria:
Ahora queda cumplir el cometido: Eliminar la base de datos para que solo quede en una sola region. Para esto hay que ir a la vista de las bases de datos y eliminar la que corresponde. Tomar en cuenta que aparece cual es el rol de la base de datos (primaria o secundaria). 
Confirmación de eliminación
Con este procedimiento, la geo replicación queda desactivada y la base de datos operando en la nueva región.  Es importante cambiar la conexión en las aplicaciones que hagan uso de esta base de datos. Recordar que es un nuevo servidor SQL Server, con un nombre distinto.
Espero que les sea de utilidad.

Mover la ubicación de la base de datos de SCCM

Hola Mundo

La organización del almacenamiento de un servidor de base de datos es crucial para el rendimiento y
correcta operación de ésta. Requiere de constante monitoreo y cambios, en el caso de ser necesario, para mantener la continuidad operativa del servicio.

Mover el archivo de datos y archivo de log de una base de datos de un directorio a otro puede sonar una tarea trivial. Este tipo de operación requiere de una planificación previa, ventana de mantenimiento para bajar el servicio y un plan de rollback, en caso de fallo.

La base de datos de SCCM es crucial para el funcionamiento de la plataforma completa. Es aquí donde se almacenan todos los datos y configuraciones. Por lo que un mal funcionamiento de la base de datos, provocaría un comportamiento errático, o bien, dejaría fuera de servicio a la solución.

Cuando se mueve la base de datos de SCCM de un directorio físico a otro, conservando el servidor, es necesario volver a setear la propiedad TRUSTWORTHY de la base de datos.

Básicamente, esta propiedad indica si la instancia de SQL Server confía en la base de datos o no. Para la operación de la solución, la instancia debe confiar en la base de datos posterior al cambio.

En el caso que no se configure la propiedad, se generarán muchos problemas al momento de distribuir  una actualización a través del rol Software Update Point y WSUS.
El error que van a encontrar es:

*** *** Unknown SQL Error! SMS Provider 14-03-2012 07:56:47 2016 (0x07E0) 
*~*~*** Unknown SQL Error! ThreadID : 2016 , DbError: 50000 , Sev: 16~*~* SMS Provider 14-03-2012 07:56:47 2016 (0x07E0)
*** [24000][0][Microsoft][SQL Server Native Client 10.0]Invalid cursor state SMS Provider 14-03-2012 07:56:48 2016 (0x07E0)
*~*~[24000][0][Microsoft][SQL Server Native Client 10.0]Invalid cursor state *** Unknown SQL Error! ThreadID : 2016 ,
DbError: 0 , Sev: 0~*~* SMS Provider 14-03-2012 07:56:48 2016 (0x07E0)

El caso está descrito en el sitio de soporte de Microsoft y tiene los pasos precisos para la solución
https://support.microsoft.com/en-us/help/3057073/after-the-system-center-2012-configmgr-sql-site-database-is-moved,-you-cannot-create-a-software-update-package-or-application

Espero que les sirva.

Cambio de hora 2017

Hola Mundo:

El día de hoy Microsoft liberó un nuevo hotfix opcional para el cambio de hora en Chile.

Lo único que cambia con respecto al anterior, es que se agrega la nueva zona horaria para la región de Magallanes.

El código del hotfix opcional es KB4015193 y pueden encontrar más referencia en:

https://support.microsoft.com/en-us/help/4015193/dst-changes-in-windows-for-magallanes-chile

Esta actualización ya está disponible para ser distribuida por WSUS o para ser descargada desde el catalogo http://www.catalog.update.microsoft.com/search.aspx?q=4015193

Es importante tener en cuenta que para distribuir este hotfix en máquinas Windows 8.1 o Windows Server 2012 R2, es necesario tener instalado el siguiente update rollup:
https://support.microsoft.com/en-us/help/2919355/windows-rt-8.1,-windows-8.1,-and-windows-server-2012-r2-update-april-2014

¡A parchar, a parchar!

Enviar datos a Azure Mobile Apps usando jQuery

Hola Mundo:

Este artículo es un tanto distinto a los que siempre se publican. Esta vez es sobre desarrollo, pero
consumiendo servicios publicados en Microsoft Azure.

Azure Mobile Apps es un servicio de Microsoft Azure que permite levantar, sin mayor esfuerzo, un backend para aplicaciones móviles. Este backend puede estar construido con ASP.NET o Node.js.
De cualquier manera, provee las herramientas para generar una REST API lista para ser consumida desde las aplicaciones cliente.

Me refiero a aplicaciones cliente y no móviles, porque estos servicios pueden ser consumidos desde cualquier lugar. Incluso desde un sistema web usando Javascript.

En este caso puntual, compartiré una ayuda de memoria para enviar datos usando jQuery usando el método AJAX:

$.ajax({
type: "POST",
contentType: "application/json; charset=UTF-8",
url: "https://xxxxxxx.azurewebsites.net/tables/xxxxxx",
headers: {'ZUMO-API-VERSION': '2.0.0', 'Content-Type': 'application/json'},
data: JSON.stringify({
"Campo1": "Valor1",
"Campo2": "Valor2"
}),
dataType: "json",
accept: "json",
success: function(datos){
console.log(datos)
alert('Datos reportados correctamente')
},
error: function(jqXHR, estado, error){
console.log(estado)
console.log(error)
},
complete: function(jqXHR, estado){
console.log(estado)
},
timeout: 1000000000
});

Lo relevante:

  • El type es POST. No olvidar que estamos enviando datos al servidor. Si tienes duda sobre esto, revisa este link: http://www.restapitutorial.com/lessons/httpmethods.html
  • contentType debe ser «application/json; charset=UTF-8». El servidor recibe datos en formato JSON. De otra forma, arrojará error 500.
  • La url es la dirección web del servicio. Esta es la forma más estándar si es que no han creado una personalizada.
  • La cabecera de la petición se indica en headers. Siempre debe estar incluido ‘ZUMO-API-VERSION’: ‘2.0.0’ y  ‘Content-Type’: ‘application/json’. En el caso que alguno falte, la consola indicará que hace falta una de las dos y arrojará un error 500 o 400.
  • En data se indican los datos que se enviarán. El método stringify del objeto JSON es el encargado de hacer que los datos que estamos enviando sigan el formato de JSON.  Recuerden que en contentType y en la cabecera se indica que estamos enviando datos en formato JSON. Si esto no está, recibirán un error 400.
  • El atributo accept le indica al servidor el formato en el que se requiere la respuesta.
  • El atributo dataType es usado por jQuery para «formatear» la respuesta antes de dejarla disponible para el trabajo con ella.
  • Success indica la función que se ejecutará cuando los datos se reporten correctamente.
  • Error indica la función que se ejecutará cuando se produzca un error en el reporte de datos.
  • Complete indica la función que se ejecutará luego de la ejecución de lo indicado en Success o Error.
  • Timeout indica el tiempo total de espera, en milisegundos, antes de cancelar la operación. Previene una ejecución casi infinita de la solicitud.
Nada más quería estar a la moda y jugar un rato con Javascript y Azure.
Espero que les sea de su total utilidad.

Error al instalar AD RMS en Windows Server 2008 R2

Hola Mundo:
Para la implementación del rol de AD RMS, se puede utilizar una base de datos interna del rol o se puede utilizar un servidor SQL Server externo.
La instalación no es compleja. Es un asistente que pide datos bastante precisos.
El problema está cuando muestra el siguiente error:
El error hace referencia a la falta de un procedimiento almacenado. El SP se llama sp_dboptions y fue retirado en SQL Server Denali (Pre SQL Server 2012) y el fallo se va arrastrando para las próximas versiones de SQL Server.
El hotfix que se debe es instalar es el KB2619256 y se descarga desde el mismo sitio de Microsoft: https://support.microsoft.com/es-cl/kb/2619256
Para complementar la lectura, sugiero leer la documentación en Technet: https://technet.microsoft.com/en-us/library/dd772673(v=ws.10).aspx

Creando tareas programadas en Windows Server

Hola Mundo:
 Para las tareas de administración de cualquier sistema operativo o infraestructura es necesario ejecutar tareas de formas periódicas. Todas las familias de sistemas operativos incluyen sus propias herramientas para crear tareas programadas. En Windows se llama «Task Scheduler» o «Programador de tareas» y en los derivados de Unix se llama «Cron».

 Dejemos el bla bla y vamos a la acción:

 

Consultar servicio local desde Win8 App

Es muy común que las aplicaciones consulten contenido que está en internet, como por ejemplo, algún servicio REST o algo en XML o en cualquier formato que los datos vengan.
Todos los lenguajes tienen clases y métodos que, de alguna u otra forma, permiten la descarga del contenido y la lectura.

Como ven, consultar contenido externo es una tarea común que todos los lenguajes modernos y sistemas operativos de hoy hacen posible. Esto también incluye a Windows 8.

En Windows 8 ocurre un fenómeno particular. Consultar contenido externo no es complejo. Ni en el desarrollo de aplicaciones usando .NET (VB.NET o C# y XAML) ni usando las bibliotecas de WinJS, pero consultar contenido local es distinto.

Por medidas de seguridad en Windows 8 no se puede consultar por contenido alojado en la misma máquina. Ni contenido HTML ni servicios… ¡Nada!

Esta restricción se puede desactivar con la siguiente orden en Powershell

checknetisolation loopbackexempt –a –n=el_nombre_del_paquete

Ejecutando esa orden, ya se podrá consultar servicios en la misma máquina.

Pueden encontrar más información en el siguiente enlace:
http://blogs.msmvps.com/luisabreu/blog/2012/01/05/windows-8-adventures-getting-external-data-from-a-local-server-might-not-be-as-easy-as-you-expect/

¡Chau!

Solucionar error 18456 de SQL Server

Hola Mundo:

Algunos creen que con el cambio de trabajo me he ido olvidando de SQL Server y ocupándome de otras tecnologías. En parte es cierto ya que tengo que trabajar con un amplio abanico de software, pero de SQL Server no me olvido.

Es por esto que les traigo la solución a un problema que tuve yo hoy en la oficina. Un compañero de trabajo me pidió un usuario y password de SQL Server para hacer unas pruebas con una base de datos y otras cosas y el software que el estaba usando no soportaba la autenticación de Windows.

Les recuerdo que SQL Server, al igual que muchos productos de Microsoft, soporta autenticación de Windows y todo es controlado a través del controlador de dominio (que debe ser Active Directory).  Lo habitual es trabajar con esta modalidad de autenticación, ya que los usuarios se crean una sola vez para muchas plataformas y no tiene que estar escribiendo su usuario y password para cualquier cosa donde el quiera entrar. Es por un tema de comodidad y seguridad. En fin.

Nuestro servidor de desarrollo estaba configurado solo para la autenticación por Windows.

Tal como el me lo pidió, le entregué un usuario y una password. El intentó conectarse y recibió un error de login fallido. El código del error era 18456.

Revisó la password y estaba todo en orden. El problema estaba en que a mi se me había ido configurar el SQL Server para que soportara la autenticación de SQL Server (la típica del usuario con la clave).

Solucionarlo fue simple. En el Management Studio me fui a las propiedades de la instancia y en la parte de Security seleccioné el radiobutton que dice «SQL Server and Windows authentication mode».

Autenticacion SQL Server

 

Espero que esto les sirva y les salve el pellejo 🙂

Solucionar error de idioma y localizacion de SQL Server en la instalacion

Hola Mundo.

Después de algunas semanitas de ausencia vuelvo otra vez con un tip para solucionar un problema bastante recurrente en la instalacion de SQL Server cuando se realiza sobre Windows que no coincide con el medio de instalación.

Este error aparece por primera vez en SQL Server 2008 R2 por una nueva política de localización.

El error es este:

Error Localizacion SQL Server Instalacion
Error Localizacion SQL Server Instalacion

El error dice: SQL Server setup media does not support the language of the OS or does not have ENU localized files. Use the matching language-specific SQL Server media or change the OS locale through control panel.

Solucionarlo es muy simple:

  • Ir a Panel de Control
  • Abrir propiedades de Region y Localización
  • Cambiar el formato y la ubicacion a la raiz del idioma del sistema operativo. Por ejemplo, si estás usando es-cl (Español de Chile) debes cambiarlo a es-es (Español de España).
  • Aplicar cambios, guardar y cerrar.
  • Volver a intentar la instalación.

Con este workaround no debieras tener problemas.