Azure para Arquitectos

Cada varios años, surge una innovación tecnológica que cambia de manera permanente todo el panorama y el ecosistema que la rodea. Si nos remontamos en el tiempo, las décadas de 1970 y 1980 fueron la época de los grandes sistemas centrales. Estos sistemas eran enormes; a menudo ocupaban prácticamente la totalidad de grandes salas y se encargaban de forma exclusiva de llevar a cabo casi todo el trabajo de computación. Puesto que la tecnología era difícil de adquirir y su uso requería mucho tiempo, muchas empresas solían realizar pedidos de grandes sistemas centrales con un mes de antelación antes de que pudieran tener una configuración de sistema central operativa.

A continuación, a principios de la década de 1990, presenciamos un auge de la demanda de ordenadores personales e Internet. El resultado fue que los ordenadores redujeron considerablemente sus dimensiones y pasaron a ser más fáciles de adquirir para el público general. Las innovaciones constantes en cuanto a ordenadores personales e Internet cambió con el tiempo todo el sector informático. Muchas personas contaban con ordenadores personales en los que podían ejecutar varios programas y conectarse a Internet. El auge de Internet también derivó en el aumento de las implementaciones de soluciones cliente-servidor. Ahora, hay servidores centralizados que hospedan aplicaciones y servicios a los que puede acceder cualquier persona que tenga una conexión a Internet en cualquier lugar del mundo. Este fue también un momento en que la tecnología de los servidores cobró relevancia; Windows NT se lanzó en aquel entonces y pronto le siguieron Windows 2000 y Windows 2003 a finales de siglo.

La innovación más notable de la primera década del siglo XXI fue el desarrollo y la adopción
de dispositivos portátiles, especialmente de los smartphones, y, con ellos, de un sinfín
de aplicaciones. Las aplicaciones podían conectarse a servidores centralizados en Internet
y operar sin problemas. Los usuarios ya no dependían de los navegadores para hacer este
trabajo. Todos los servidores eran autohospedados u hospedados a través de un proveedor
de servicios, como un Proveedor de servicios de Internet (ISP).
Los usuarios no gozaban de mucho control sobre sus servidores. Numerosos clientes
y sus implementaciones formaban parte del mismo servidor sin que los propios clientes
lo supieran.
Sin embargo, algo más sucedió entre mediados y finales de la primera década del siglo
XXI: el auge de la computación en el cloud, tecnología que, nuevamente, transformó por
completo el sector de las TI. Al principio, la adopción fue lenta y el público se acercó a esta
solución con precaución; ya sea porque la tecnología estaba aún en ciernes y todavía tenía
que madurar o porque la opinión del público sobre ella era negativa.
Para comprender mejor la tecnología revolucionaria, abordaremos los siguientes temas
en este capítulo:

  • Computación en el cloud
  • Infraestructura como servicio (IaaS), Plataforma como servicio (PaaS) y Software
    como servicio (SaaS)
  • Descripción de Azure
  • Azure Resource Manager (ARM)
  • Virtualización, contenedores y Docker
  • Interactuar con el cloud inteligente

Computación en el cloud
Actualmente, la computación en el cloud es una de las tecnologías más prometedoras y con
un gran potencial. Y las empresas, independientemente de su tamaño, la están adoptando
como parte de su estrategia de TI. Hoy en día, resulta difícil mantener una conversación
significativa sobre una estrategia de TI sin incluir la computación en el cloud en los debates
sobre soluciones generales.
La computación en el cloud, o simplemente el cloud, hace referencia a la disponibilidad
de recursos en Internet. Estos recursos se ponen a disposición de los usuarios en Internet
en forma de servicios. Por ejemplo, el almacenamiento está disponible para los usuarios a
petición a través de Internet para que estos puedan almacenar sus archivos o documentos,
entre otros. En este ejemplo, el almacenamiento es un servicio prestado por un proveedor
de cloud.

Un proveedor de cloud es una empresa o consorcio de empresas que brinda servicios
cloud a otras empresas y a los consumidores. Organizan y gestionan estos servicios en
representación del usuario. Son responsables de permitir y mantener el buen estado
de los servicios. Se dispone de centros de datos de gran tamaño distribuidos por todo
el mundo abiertos por los proveedores de cloud con el propósito de atender las demandas
de TI de los usuarios.
Los recursos de cloud constan de servicios de hosting en infraestructura a petición,
como infraestructuras de computación, redes e instalaciones de almacenamiento.
Esta característica del cloud se conoce como IaaS.
Ventajas de la computación en el cloud
La adopción del cloud se encuentra en su nivel más alto y este crecimiento se debe
a sus múltiples ventajas, entre ellas:

  • Modelo de pago por uso: los clientes no necesitan comprar hardware ni software
    para los recursos del cloud. El uso de los recursos del cloud no implica gasto alguno;
    los clientes solo tienen que pagar por el tiempo durante el que utilicen o reserven
    un recurso.
  • Acceso global: los recursos del cloud están disponibles a través de Internet en todo
    el mundo. Los clientes pueden acceder a sus recursos a petición desde cualquier lugar.
  • Recursos ilimitados: la capacidad de escalado de la tecnología del cloud es ilimitada;
    los clientes pueden aprovisionar tantos recursos como deseen, sin restricciones.
    Es lo que también se conoce como escalabilidad ilimitada.
  • Servicios administrados: los proveedores de cloud proporcionan numerosos servicios
    administrados por ellos para los clientes. Esto elimina todas las cargas técnicas y
    económicas para el cliente.
    ¿Por qué la computación en el cloud?
    Para entender la necesidad de la computación en el cloud, debemos entender la perspectiva
    del sector.

Flexibilidad y agilidad
En lugar de crear una gran aplicación monolítica mediante una metodología de
implementación con enfoque de «big bang», hoy en día, las aplicaciones comprenden
servicios más pequeños que utilizan el paradigma de los microservicios. Los microservicios
ayudan a crear servicios de una manera independiente y autónoma que puede evolucionar
de manera aislada sin derribar toda la aplicación. Ofrecen una enorme flexibilidad y agilidad
para llevar los cambios a la producción de una manera más rápida y mejor. Hay numerosos
microservicios que se unen para crear una aplicación y proporcionar soluciones integradas
a los clientes. Estos microservicios deben ser detectables y tener puntos de conexión bien
definidos para la integración. El número de integraciones con el enfoque de microservicios
es muy alto en comparación con las aplicaciones monolíticas tradicionales. Estas
integraciones añaden complejidad tanto en el desarrollo como en la implementación
de aplicaciones.
Velocidad, estandarización y coherencia
A continuación, la metodología para las implementaciones también debe experimentar
cambios para adaptarse a las necesidades de estos servicios, es decir, cambios
e implementaciones frecuentes. Para los cambios e implementaciones frecuentes,
es importante utilizar procesos que ayuden a hacer posibles estos cambios de una
manera predecible y coherente. Se deben usar procesos ágiles automatizados de
modo que se puedan implementar y probar de forma aislada cambios más pequeños.
Seguir siendo relevante
Por último, se deben volver a definir los objetivos de implementación. No solo los objetivos
de implementación deben poder crearse fácilmente en cuestión de segundos, sino que
también el entorno creado debe ser coherente entre versiones, con binarios, tiempos
de ejecución, marcos y configuración apropiados. Las máquinas virtuales se utilizaban
con aplicaciones monolíticas, pero los microservicios necesitan más agilidad, flexibilidad
y una opción más ligera que las máquinas virtuales. La tecnología de contenedores es
el mecanismo preferido para los objetivos de implementación de estos servicios y más
adelante hablaremos de ello en este capítulo.
Escalabilidad
Algunos principios importantes del uso de los microservicios son que tienen una
capacidad de escalado ilimitada de forma aislada, alta disponibilidad global, recuperación
ante desastres con un punto de recuperación cerca de cero y objetivos de tiempo. Estas
cualidades de los microservicios necesitan una infraestructura que pueda escalarse de
manera ilimitada. No debe haber restricciones de recursos. Aunque esto es así, también
es importante que una organización no pague por recursos por adelantado cuando no
se utilizan.

Rentabilidad
El principio fundamental de la computación en el cloud es pagar por los recursos que se
consumen y usarlos de forma óptima mediante el aumento y la disminución automáticos
de los recuentos de recursos y la capacidad. Estos requisitos emergentes de las aplicaciones
exigen que el cloud como plataforma preferida escale fácilmente, que tenga una alta
disponibilidad, que sea resistente a desastres, que incorpore cambios con facilidad y que
logre implementaciones automatizadas predecibles y coherentes de una manera rentable.
Paradigmas de implementación en Azure
Hay tres patrones de implementación diferentes disponibles en Azure, que son los
siguientes:

  • IaaS
  • PaaS
  • SaaS
    La diferencia entre estos tres patrones de implementación es el nivel de control que ejercen
    los clientes a través de Azure. En la Figura 1.1 se muestran los diferentes niveles de control
    dentro de cada uno de estos patrones de implementación:

De la Figura 1.1 se deduce claramente que los clientes tienen más control al utilizar
implementaciones de IaaS y este nivel de control disminuye de manera continua
a medida que se avanza de las implementaciones de PaaS a SaaS.
IaaS
IaaS es un tipo de modelo de implementación que permite a los clientes aprovisionar
su propia infraestructura en Azure. Azure proporciona varios recursos de infraestructura
y los clientes pueden aprovisionarlos a petición. Los clientes son responsables
de mantener y gestionar su propia infraestructura. Azure garantizará el mantenimiento
de la infraestructura física en la que se hospedan estos recursos de infraestructura virtual.
Conforme a este enfoque, los clientes requieren administración y operaciones activas
en el entorno de Azure.
PaaS
PaaS evita al cliente la necesidad de implementar y controlar la infraestructura. Se trata de
un nivel más alto de abstracción en comparación con la IaaS. Según este enfoque, los clientes
aportan su aplicación, su código y sus datos, y los implementan en la plataforma proporcionada
por Azure. Estas plataformas se administran y rigen a través de Azure y los clientes tan solo son
responsables de sus aplicaciones. Los clientes únicamente realizan actividades relacionadas
con la implementación de aplicaciones. Este modelo proporciona opciones más rápidas
y sencillas para la implementación de aplicaciones en comparación con la IaaS.
SaaS
El SaaS ofrece un nivel más alto de abstracción en comparación con la PaaS. En este
enfoque, el software y sus servicios están disponibles para el consumo de los clientes.
Los clientes solo traen sus datos a estos servicios: no tienen ningún control sobre ellos.
Ahora que contamos con una comprensión básica de los tipos de servicio en Azure,
vamos a profundizar en Azure y entenderlo desde cero.
Descripción de Azure
Azure proporciona todas las ventajas del cloud al mismo tiempo que ofrece un enfoque
abierto y flexible. Azure es compatible con una amplia variedad de sistemas operativos,
lenguajes, herramientas, plataformas, utilidades y marcos. Por ejemplo, es compatible
con Linux y Windows, SQL Server, MySQL y PostgreSQL. Admite la mayoría de los lenguajes
de programación, incluidos C#, Python, Java, Node.js y Bash. Admite bases de datos
NoSQL, como MongoDB y Cosmos DB, y también admite herramientas de integración
continua, como Jenkins y Azure DevOps Services (anteriormente Visual Studio Team
Services (VSTS)). La idea detrás de este ecosistema consiste en permitir a los clientes
tener la libertad de elegir su propio lenguaje, plataforma, sistema operativo, base de datos,
almacenamiento, y herramientas y utilidades. Los clientes no deben verse limitados desde
un punto de vista tecnológico; por el contrario, deben tener la capacidad de construir
y centrarse en su solución de negocios, y Azure pone a su disposición toda una oferta
tecnológica de primer nivel.

Azure es perfectamente compatible con la oferta tecnológica que escoja el cliente.
Por ejemplo, Azure es compatible con todos los entornos de bases de datos (de código
abierto y comerciales) más conocidos. Azure ofrece los servicios Azure SQL, MySQL
y PaaS Postgres. Ofrece, además, el ecosistema de Hadoop y HDInsight, un PaaS basado
íntegramente en Apache Hadoop. También permite la implementación de un Hadoop en
una máquina virtual (MV) con Linux para clientes que opten por un tipo de servicio de IaaS.
Asimismo, Azure presta el servicio de caché de Redis y admite otros entornos de bases de
datos populares, como Cassandra, Couchbase y Oracle en forma de implementación de IaaS.
El número de servicios aumenta cada día en Azure y la lista de servicios más actualizada
se encuentra en https://azure.microsoft.com/services.
Azure también ofrece un concepto único de computación en el cloud, conocido como cloud
híbrido. Este concepto engloba una estrategia de implementación en la que un subconjunto
de servicios se implementa en un cloud público, mientras que los demás servicios
se implementan en un centro de datos o cloud privado on-premises. Hay una conexión
de red privada virtual (VPN) entre los clouds público y privado. Azure ofrece a los clientes
la flexibilidad de dividir e implementar su carga de trabajo tanto en clouds públicos como
en centros de datos on-premises.
Azure cuenta con centros de datos en todo el mundo y combina estos centros de datos en
regiones. Cada región dispone de varios centros de datos para garantizar una recuperación
ante desastres rápida y eficiente. En el momento en que hemos redactado este documento,
eran 58 las regiones de todo el mundo. Esto otorga a los clientes la flexibilidad de
implementar sus servicios en la ubicación que prefieran. Además, pueden combinar
estas regiones para implementar una solución resistente a desastres e implementarla
cerca de su base de clientes.

Nota
En China y Alemania, los servicios cloud de Azure son independientes para
uso general y para uso gubernamental. Esto significa que los servicios cloud
se mantienen en centros de datos independientes.

Azure como un cloud inteligente
Azure proporciona infraestructura y servicios para ingerir miles de millones de transacciones
mediante un procesamiento a gran escala. Dispone de petabytes de almacenamiento para
los datos y ofrece una serie de servicios interconectados que pueden pasar datos entre
sí. Al contar con tales capacidades, se pueden procesar datos para generar información
y conocimiento significativos. Hay varios tipos de información que pueden generarse
a través del análisis de los datos, que son los siguientes:

  • Descriptivo: este tipo de análisis proporciona información sobre lo que está
    sucediendo o ha sucedido en el pasado.
  • Predictivo: este tipo de análisis proporciona información sobre lo que va a suceder
    en el futuro.
  • Preceptivo: este tipo de análisis proporciona información sobre qué se debe hacer
    para mejorar o prevenir los eventos actuales o futuros.
  • Cognitivo: este tipo de análisis realmente ejecuta las acciones determinadas por
    el análisis prescriptivo de forma automatizada.
    Aunque la obtención de información a partir de los datos es importante, lo es igualmente
    actuar conforme a estos. Azure proporciona una plataforma enriquecida para ingerir
    grandes volúmenes de datos, procesar y transformarlos, almacenar y generar conocimientos
    a partir de ellos, y mostrarlos en paneles en tiempo real. También es posible tomar medidas
    automáticamente a partir de los conocimientos adquiridos. Estos servicios están disponibles
    para todos los clientes de Azure y proporcionan un ecosistema en el que estos pueden
    crear soluciones. Debido a la gran disponibilidad de estos servicios inteligentes de Azure,
    que se pueden combinar para crear valor significativo para los clientes finales, las empresas
    están creando numerosos servicios y aplicaciones que están transformando por completo
    los mercados. Azure garantiza que los servicios que no sean comercialmente viables de
    implementar en pequeñas y medianas empresas ahora puedan consumirse e implementarse
    fácilmente en pocos minutos.
    Azure Resource Manager
    Azure Resource Manager (ARM) es el servicio de orquestación y la plataforma tecnológica
    de Microsoft que fusiona todos los componentes descritos anteriormente. Reúne grupos
    de recursos, recursos y proveedores de recursos de Azure para formar una plataforma
    de cloud cohesionada. Hace posible que los servicios de Azure estén disponibles como
    suscripciones, pone a disposición los diferentes tipos de recursos para los grupos de
    recursos, permite el acceso a los recursos y las API de recursos a otros clientes y al portal,
    además de autenticar el acceso a estos recursos. También habilita características, como
    el etiquetado, la autenticación, el control de acceso basado en roles (RBAC), el bloqueo
    de recursos, y la aplicación de políticas para las suscripciones y sus grupos de recursos.
    También proporciona características de implementación y administración mediante
    Azure Portal, Azure PowerShell y las herramientas de interfaz de línea de comandos (CLI).

Arquitectura de ARM
En la Figura 1.2 se muestran la arquitectura de ARM y sus componentes. Como podemos
ver una suscripción de Azure se compone de varios grupos de recursos. Cada uno de
estos contiene instancias de recursos que se crean a partir de tipos de recursos disponibles
en el proveedor de recursos:

¿Por qué ARM?
Antes de ARM, el marco utilizado por Azure se denominaba Azure Service Manager (ASM).
Es importante realizar una pequeña introducción para que podamos entender con claridad
la aparición de ARM y la lenta y constante obsolescencia de ASM.

Limitaciones de ASM
ASM tiene limitaciones inherentes. Por ejemplo, las implementaciones de ASM son lentas
y generan bloqueos: las operaciones se bloquean si una operación anterior ya está en curso.
Estas son algunas de las limitaciones de ASM:

  • Paralelismo: el paralelismo constituye todo un desafío en ASM. No es posible ejecutar
    con éxito varias transacciones a la vez. Las operaciones en ASM son lineales y, por lo
    tanto, se ejecutan una tras otra. Si se ejecutan varias transacciones al mismo tiempo,
    se producirán errores de operaciones paralelas o las transacciones se bloquearán.
  • Recursos: los recursos en ASM se aprovisionan y administran de manera aislada
    unos de los otros, es decir, no hay ninguna relación entre los recursos de ASM.
    No es posible agrupar servicios y recursos ni configurarlos de manera conjunta.
  • Servicios cloud: los servicios cloud son las unidades de implementación en ASM.
    Dependen de grupos de afinidad y, dado su diseño y arquitectura, no pueden
    ampliarse.
    Los permisos y roles específicos e individuales no pueden asignarse a los recursos en ASM.
    Los clientes son administradores de servicios o coadministradores en la suscripción.
    Gozan de un control total sobre los recursos o no tienen ningún acceso a ellos. ASM no
    proporciona ningún tipo de soporte en la implementación. Las implementaciones se
    realizan manualmente o debemos basarnos en scripts de procesos en .NET o PowerShell.
    Las API de ASM no son uniformes entre los diversos recursos.
    Ventajas de ARM
    ARM ofrece una serie de ventajas y beneficios diferenciados en comparación con ASM,
    que son los siguientes:
  • Agrupación: ARM permite agrupar recursos en un contenedor lógico. Estos recursos
    pueden administrarse juntos y experimentar un ciclo de vida común como grupo.
    Esto facilita la identificación de recursos relacionados y dependientes.
  • Ciclos de vida comunes: los recursos de un grupo tienen el mismo ciclo de vida.
    Estos recursos pueden evolucionar y administrarse juntos como una unidad.
  • RBAC: se pueden asignar roles y permisos específicos a recursos para ofrecer
    acceso individual a los clientes. Los clientes pueden tener únicamente los derechos
    que se les haya asignado.
  • Soporte de implementación: ARM ofrece soporte de implementación en forma de
    plantillas que permiten el uso de DevOps y de infraestructura como código (IaC).
    Estas implementaciones son más rápidas, coherentes y predecibles.
  • Tecnología superior: el coste y la facturación de recursos pueden administrarse como
    una unidad. Cada grupo de recursos puede proporcionar información sobre su uso
    y costes.
  • Capacidad de administración: ARM ofrece características avanzadas, como seguridad,
    supervisión, auditoría y etiquetado para una mejor administración de los recursos.
    Se pueden consultar recursos basados en etiquetas. Las etiquetas también incluyen
    información de costes y facturación para los recursos con etiquetas similares.
  • Migración: la migración y la actualización de los recursos son más sencillas, dentro
    de los grupos de recursos y entre ellos.
    Conceptos de ARM
    Con ARM, todo en Azure es un recurso. Algunos ejemplos de recursos son las máquinas
    virtuales, las interfaces de red, las direcciones IP públicas, las cuentas de almacenamiento
    y las redes virtuales. ARM se basa en conceptos relacionados con los proveedores
    de recursos y los consumidores de recursos. Azure proporciona recursos y servicios
    a través de varios proveedores de recursos que se utilizan e implementan en grupos.
    Proveedores de recursos
    Se trata de servicios que se encargan de proporcionar diferentes tipos de recursos
    a través de ARM. El proveedor de recursos ocupa el nivel superior en ARM. Estos
    proveedores son contenedores de los tipos de recursos. Los tipos de recursos se agrupan
    en proveedores de recursos. Son responsables de la implementación y administración
    de los recursos. Por ejemplo, un proveedor de recursos denominado recurso Microsoft.
    Compute/virtualMachines proporciona un tipo de recurso de MV. A las operaciones de
    API de transferencia de estado representacional (REST) se les asigna una versión para
    distinguirlas. La denominación de la versión se basa en las fechas de lanzamiento de
    Microsoft. Es necesario que un proveedor de recursos esté disponible en una suscripción
    para implementar un recurso. No todos los proveedores de recursos están disponibles en
    una suscripción «out of the box». Si un recurso no está disponible para una suscripción,
    tendremos que comprobar si el proveedor de recursos requerido está disponible en
    las regiones correspondientes. Si está disponible, el cliente puede registrarse para
    esa suscripción específica.

Tipos de recursos
Los tipos de recursos son especificaciones de recursos reales que definen la implementación
y la interfaz de la API pública de cada recurso. Implementan el funcionamiento y las
operaciones admitidas por el recurso. Al igual que los proveedores de recursos, los tipos
de recursos también evolucionan con el tiempo en términos de implementación interna
y existen varias versiones de sus esquemas e interfaces de API públicas. Los nombres
de las versiones se basan en las fechas de lanzamiento de Microsoft en forma de preview
o de disponibilidad general (GA). Los tipos de recursos estarán disponibles como
suscripción una vez que un proveedor de recursos los haya registrado. Además, no todos
los tipos de recursos están disponibles en todas las regiones de Azure. La disponibilidad
de un recurso depende de la disponibilidad y del registro de un proveedor de recursos
en una región de Azure y debe ser compatible con la versión de API necesaria para su
aprovisionamiento.
Grupos de recursos
Los grupos de recursos son unidades de implementación en ARM. Son contenedores que
agrupan varias instancias de recursos dentro de un límite de seguridad y administración.
A los grupos de recursos se les asigna un nombre único en una suscripción. Los recursos
pueden aprovisionarse en diferentes regiones de Azure y seguir perteneciendo al mismo
grupo de recursos. Los grupos de recursos proporcionan servicios adicionales a todos los
recursos que contienen. Los grupos de recursos ofrecen servicios de metadatos, como el
etiquetado, que permite la categorización de los recursos; la administración de recursos
basada en políticas; el RBAC; la protección de los recursos contra eliminaciones accidentales
o actualizaciones; y muchos más. Como se ha mencionado anteriormente, cuentan con un
límite de seguridad y los usuarios que no tienen acceso a un grupo de recursos determinado
no pueden acceder a los recursos que este contiene. Cada instancia de recurso debe formar
parte de un grupo de recursos o, de lo contrario, no se puede implementar.
Recursos e instancias de recursos
Los recursos se crean a partir de tipos de recursos y deben ser una instancia de un tipo
de recurso. Una instancia puede ser única globalmente o en un nivel de grupo de recursos.
Esta exclusividad se define mediante el nombre del recurso y su tipo. Si comparamos esto
con construcciones de programación orientadas a objetos, las instancias de recursos se
pueden ver como objetos y los tipos de recursos se pueden ver como clases. Los servicios
se consumen a través de las operaciones admitidas e implementadas por las instancias
de recursos. El tipo de recurso define las propiedades y cada instancia debe configurar
las propiedades obligatorias durante el aprovisionamiento de una instancia. Algunas
son propiedades obligatorias, mientras que otras son opcionales. Heredan la seguridad
y configuración de acceso del grupo de recursos al que pertenecen. Estas asignaciones
de roles y estos permisos heredados se pueden omitir en recursos individuales. Se puede
bloquear un recurso de tal manera que algunas de sus operaciones puedan estar bloqueadas
o no disponibles para determinados roles, usuarios y grupos aunque tengan acceso a este.
Los recursos se pueden etiquetar para facilitar su localización y administración.

Características de ARM
Estas son algunas de las características principales que proporciona ARM:

  • RBAC: Azure Active Directory (Azure AD) autentica a los usuarios para otorgar
    acceso a las suscripciones, los grupos de recursos y los recursos. ARM implementa
    OAuth y RBAC dentro de la plataforma, lo que permite la autorización y el control
    de acceso a los recursos, los grupos de recursos y las suscripciones según los roles
    asignados a un usuario o grupo. Un permiso define el acceso a las operaciones en un
    recurso. Estos permisos pueden permitir o denegar el acceso a un recurso. Un rol
    puede definirse como un conjunto de estos permisos. Los roles asignan usuarios y
    grupos de Azure AD a permisos específicos. Posteriormente, los roles se asignan a un
    ámbito, que puede ser un ámbito individual, una colección de recursos, un grupo de
    recursos o una suscripción. Las identidades de Azure AD (usuarios, grupos y entidades
    de servicio) que se agregan a un rol obtienen acceso al recurso de acuerdo con los
    permisos definidos en el rol. ARM ofrece varios roles de manera inmediata («out of
    the box»). Proporciona roles de sistema, como propietario, colaborador y lector.
    También ofrece funciones basadas en roles, como colaborador de base de datos
    SQL o colaborador de MV. ARM también permite la creación de roles personalizados.
  • Etiquetas: las etiquetas son parejas de nombre y valor que añaden información
    adicional y metadatos a los recursos. Tanto los recursos como los grupos de recursos
    pueden marcarse con varias etiquetas. Las etiquetas ayudan en la categorización
    de los recursos para mejorar su visibilidad y capacidad de administración. Los recursos
    se pueden buscar rápidamente e identificarse fácilmente. También se puede recopilar
    la información de facturación y de costes para los recursos que tengan las mismas
    etiquetas. Si bien esta función la proporciona ARM, un administrador de TI define su
    uso y su taxonomía con respecto a los recursos y los grupos de recursos. Por ejemplo,
    la taxonomía y las etiquetas pueden estar relacionadas con departamentos, uso de
    recursos, ubicaciones, proyectos o cualquier otro criterio que se considere pertinente
    desde el punto de vista de los costes, la utilización, la facturación o la búsqueda.
    Posteriormente, estas etiquetas podrán aplicarse a los recursos. Sus recursos no
    heredan las etiquetas definidas en el nivel de grupo de recursos.
  • Políticas: otra característica de seguridad proporcionada por ARM son las políticas
    personalizadas. Se pueden crear políticas personalizadas para controlar el acceso
    a los recursos. Las políticas se definen como convenciones y reglas que deben
    respetarse al interactuar con los recursos y los grupos de recursos. La definición
    de políticas comprende la negación explícita de acciones en recursos o de acceso
    a recursos. De forma predeterminada, los accesos que no se mencionen en la
    definición de una política están permitidos. Estas definiciones de políticas se asignan
    al recurso, a los grupos de recursos y a las suscripciones. Es importante señalar que
    estas políticas no sustituyen ni reemplazan el RBAC. De hecho, se complementan y
    trabajan en combinación con el RBAC. Las políticas se evalúan tras haber autenticado
  • a un usuario a través de Azure AD y una vez que este ha obtenido la autorización del
  • servicio RBAC. Para definir las políticas, ARM proporciona un lenguaje de definición
  • de políticas basado en JSON. Algunos ejemplos de definiciones de políticas son que
  • una política debe etiquetar cada recurso aprovisionado y que los recursos solo se
  • pueden aprovisionar en regiones específicas de Azure.
  • Bloqueos: las suscripciones, los grupos de recursos y los recursos se pueden bloquear
    para evitar eliminaciones accidentales y actualizaciones por parte de un usuario
    autenticado. Los bloqueos aplicados en los niveles superiores se aplican de manera
    descendente en los niveles inferiores. Alternativamente, los bloqueos aplicados en
    el nivel de suscripción bloquean todos los grupos de recursos y los recursos que
    la conforman.
  • Varias regiones: Azure proporciona varias regiones para el aprovisionamiento
    y el hosting de recursos. ARM permite el aprovisionamiento de los recursos en
    diferentes ubicaciones, aunque estos pertenezcan al mismo grupo de recursos.
    Un grupo de recursos puede contener recursos de diferentes regiones.
  • Idempotente: esta función asegura la previsibilidad, la estandarización y la
    coherencia en la implementación de recursos, de forma que se garantiza que cada
    implementación resultará en el mismo estado de los recursos y de su configuración
    con independencia del número de veces que se lleve a cabo.
  • Extensible: ARM proporciona una arquitectura extensible que permite la creación
    y conexión de nuevos proveedores de recursos y tipos de recursos en la plataforma.
    Virtualización
    La virtualización supuso toda una revolución que transformó por completo la manera
    de considerar los servidores físicos. Esta tecnología se entiende como la abstracción
    de un objeto físico en un objeto lógico.
    La virtualización de los servidores físicos condujo a los servidores virtuales conocidos
    como MV. Estas MV consumen y comparten la CPU física, memoria, almacenamiento y otro
    hardware del servidor físico en el que están hospedadas. Esto permite el aprovisionamiento
    más rápido y sencillo de los entornos de aplicaciones a demanda, lo que deriva en una alta
    escalabilidad y disponibilidad a un coste reducido. Un servidor físico es suficiente para
    hospedar varias MV, cada una de las cuales contiene su propio sistema operativo y hospeda
    servicios en ella.
    Se eliminó la necesidad de comprar servidores físicos adicionales para implementar nuevas
    aplicaciones y servicios. Los servidores físicos existentes eran suficientes para hospedar
    más MV. Además, como parte del proceso de racionalización y gracias a la virtualización,
    muchos servidores físicos se unificaron reduciendo así su número.

Cada MV contiene todo el sistema operativo y se encuentra completamente aislada de
otras MV, incluidos los hosts físicos. Aunque una MV utiliza el hardware proporcionado
por el servidor de host físico, tiene control total sobre el entorno y los recursos que
se le han asignado. Estas MV se pueden hospedar en una red, por ejemplo, un servidor
físico con su propia identidad.
Azure puede crear MV Linux y Windows en pocos minutos. Microsoft proporciona sus propias
imágenes, junto con las imágenes de sus partners y la comunidad; los usuarios también pueden
proporcionar sus propias imágenes. Las MV se crean utilizando estas imágenes.
Contenedores
Los contenedores son una solución perteneciente a la tecnología de la virtualización.
No obstante, no pueden virtualizar un servidor físico. Por el contrario, un contenedor es
una virtualización en el nivel del sistema operativo. Esto quiere decir que los contenedores
comparten el kernel del sistema operativo (proporcionado por el host) entre sí junto con el
host. Varios contenedores que se ejecuten en un host (físico o virtual) comparten el kernel
del sistema operativo del host. Los contenedores garantizan que se vuelve a usar el kernel
del host en lugar de tener que contar con un kernel específico para cada uno.
Los contenedores están completamente aislados de su host o de otros contenedores que
se ejecutan en el host. Los contenedores de Windows utilizan controladores de filtro de
almacenamiento de Windows y el aislamiento de la sesión para aislar servicios del sistema
operativo, como el sistema de archivos, el registro, los procesos y las redes. Esto mismo
se aplica a contenedores de Linux que se ejecutan en hosts de Linux. Los contenedores
de Linux utilizan el espacio de nombres de Linux, grupos de control y el sistema de archivos
de unión para virtualizar el sistema operativo del host.
El contenedor aparenta tener un sistema operativo y recursos completamente nuevos
y sin utilizar. Esta disposición ofrece numerosos beneficios, como los siguientes:

  • Los contenedores son rápidos de aprovisionar y requieren menos tiempo de
    aprovisionamiento en comparación con las máquinas virtuales. La mayoría de
    los servicios del sistema operativo de un contenedor los proporciona el sistema
    operativo host.
  • Los contenedores son ligeros y requieren menos recursos de computación en
    comparación con las MV. Con los contenedores ya no se requiere una sobrecarga
    de recursos del sistema operativo.
  • Los contenedores son mucho más pequeños que las MV.
  • Los contenedores pueden ayudar a resolver los problemas relacionados con la
    administración de múltiples dependencias de aplicaciones de una manera intuitiva,
    automatizada y sencilla.
  • Los contenedores proporcionan infraestructura para definir todas las dependencias
    de aplicaciones en un solo lugar.

Los contenedores son una característica inherente de Windows Server 2016 y Windows

  1. Sin embargo, se administran y se accede a ellos a través de un cliente de Docker y
    un demonio de Docker. Los contenedores se pueden crear en Azure utilizando una SKU
    de Windows Server 2016 como imagen. Cada contenedor cuenta con un único proceso
    principal que debe ejecutarse para que el contenedor exista. Un contenedor se detendrá
    cuando termine este proceso. Además, un contenedor puede ejecutarse en modo
    interactivo o en modo individual como un servicio:

En la Figura 1.3 se muestran todas las capas técnicas que permiten el uso de contenedores.
La capa inferior proporciona la infraestructura básica en términos de red, almacenamiento,
equilibradores de carga y tarjetas de red. En la parte superior de la infraestructura
se encuentra la capa de computación, que consta de un servidor físico o de servidores
físicos y virtuales sobre un servidor físico. Esta capa contiene el sistema operativo con
capacidad para hospedar contenedores. El sistema operativo proporciona el controlador
de ejecución que las capas superiores utilizan para llamar al código del kernel y a los
objetos para ejecutar los contenedores. Microsoft ha creado Host Container System Shim
(HCSShim) para la administración y creación de contenedores, y utiliza los controladores
de filtro de almacenamiento de Windows para la administración de imágenes y archivos.
Para la sesión de Windows, se habilita el aislamiento del entorno del contenedor.
Windows Server 2016 y Windows Nano Server proporcionan el sistema operativo, habilitan
las funciones del contenedor y ejecutan el motor de Docker y el cliente de Docker en el
nivel de usuario. El motor de Docker utiliza los servicios de HCSShim, los controladores
de filtro de almacenamiento y las sesiones para generar varios contenedores en el servidor,
cada uno con un servicio, una aplicación o una base de datos.

Docker
Docker proporciona funciones de administración para los contenedores de Windows.
Consta de los dos ejecutables siguientes:

  • Demonio de Docker
  • Cliente de Docker
    El demonio de Docker es el caballo de batalla para la administración de los contenedores.
    Se trata de un servicio de Windows encargado de administrar todas las actividades en el
    host relacionadas con los contenedores. El cliente de Docker interactúa con el demonio
    de Docker y es responsable de la captura de entradas, así como de su envío a través del
    demonio de Docker. El demonio de Docker proporciona el entorno de ejecución, bibliotecas,
    controladores de gráficos y el motor para crear, administrar y supervisar los contenedores
    y las imágenes en el servidor host. También crea imágenes personalizadas que se utilizan
    en la creación y el envío de aplicaciones a múltiples entornos.
    Interactuar con el cloud inteligente
    Azure proporciona varias formas de conectarse, automatizar e interactuar con el
    cloud inteligente. Todos estos métodos requieren la autenticación de los usuarios con
    credenciales válidas antes de que se puedan utilizar. Estas son las diferentes formas de
    conectarse a Azure:
  • Azure Portal
  • PowerShell
  • La CLI de Azure
  • API de REST de Azure
    Azure Portal
    Azure Portal es el lugar ideal para comenzar. Con Azure Portal, los usuarios pueden iniciar
    sesión y empezar a crear y administrar recursos de Azure manualmente. El portal te
    proporciona una interfaz de usuario intuitiva y fácil de usar a través del navegador, además
    de una manera cómoda de explorar los recursos con ayuda de las hojas. Las hojas muestran
    todas las propiedades de un recurso, incluidos sus registros, los costes, la relación con otros
    recursos, las etiquetas y las opciones de seguridad, entre otras. Una implementación del
    cloud puede administrarse por completo a través del portal.

PowerShell
PowerShell es un shell de línea de comandos basado en objetos y un lenguaje de scripting
que se utiliza para la administración, configuración y gestión de infraestructuras y entornos.
Se basa en .NET Framework y proporciona capacidades de automatización. PowerShell
se ha convertido en uno de los grandes protagonistas en el sector de los desarrolladores
de automatización y administradores de TI a la hora de administrar y controlar el entorno
de Windows. Actualmente, casi todos los entornos de Windows y numerosos entornos
de Linux pueden administrarse mediante PowerShell. De hecho, casi todos los elementos
que conforman Azure también pueden administrarse con PowerShell. Azure ofrece
una amplia compatibilidad con PowerShell. Ofrece un módulo de PowerShell para cada
proveedor de recursos que contiene cientos de cmdlets. Los usuarios pueden utilizar estos
cmdlets en sus scripts para automatizar la interacción con Azure. El módulo de PowerShell
de Azure está disponible a través del instalador de plataforma web y a través de la Galería
de PowerShell. Windows Server 2016 y Windows 10 proporcionan los módulos PowerShellGet
y de administración de paquetes para facilitar y acelerar la descarga e instalación de los
módulos PowerShell de la Galería de PowerShell. El módulo PowerShellGet ofrece el cmdlet
Install-Module para descargar e instalar módulos en el sistema.
La instalación de un módulo consiste simplemente en copiar archivos de módulos en las
ubicaciones de módulos bien establecidas, que puede llevarse a cabo de la forma siguiente:

Import-module PowerShellGet
Install-Module -Name az -verbose


El comando Import-Module importa un módulo y sus funciones relacionadas dentro
del ámbito de ejecución actual e Install-Module ayuda en la instalación de módulos.

La CLI de Azure
Azure también incluye Azure CLI 2.0, que se puede implementar en sistemas operativos
Linux, Windows y Mac. Azure CLI 2.0 es una nueva utilidad de línea de comandos de Azure
para la administración de recursos de Azure. Azure CLI 2.0 se ha optimizado para la gestión
y administración de recursos de Azure desde la línea de comandos, además de para generar
scripts de automatización que funcionen para ARM. La CLI se puede utilizar para ejecutar
comandos mediante el shell de Bash o la línea de comandos de Windows. La CLI de Azure
es muy popular entre los usuarios que no utilizan Windows, ya que permite interactuar con
Azure en sistemas Linux y MacOS. Los pasos para instalar Azure CLI 2.0 están disponibles
en https://docs.microsoft.com/cli/azure/install-azure-cli?view=azure-cli-latest.

API de REST de Azure
Todos los recursos de Azure están expuestos a los usuarios a través de los puntos
de conexión de REST. Las API de REST son puntos de conexión del servicio que
implementan las operaciones HTTP (o métodos), que permiten crear, recuperar,
actualizar o eliminar (CRUD) el acceso a los recursos del servicio. Los usuarios pueden
consumir estas API para crear y administrar recursos. De hecho, los mecanismos de
CLI y PowerShell utilizan estas API de REST de manera interna para interactuar con
recursos en Azure.

Plantillas de ARM
En una sección anterior, hemos analizado las características de implementación, como
multiservicios, multirregionalidad, extensibilidad e idempotencia, proporcionadas por ARM.
Las plantillas de ARM son el principal medio de aprovisionamiento de recursos en ARM.
Las plantillas de ARM permiten la implementación de las características de implementación
de ARM.
Las plantillas de ARM ofrecen un modelo declarativo a través del cual se especifican los
recursos, su configuración, los scripts y las extensiones. Estas se basan en el formato
JavaScript Object Notation (JSON). Utilizan las convenciones y la sintaxis JSON para
declarar y configurar los recursos. Los archivos JSON son archivos basados en texto,
fáciles de usar y fáciles de leer.
Pueden almacenarse en un repositorio de código fuente y tienen control sobre las
versiones. También son un medio de representación de la IaC que puede utilizarse para
aprovisionar recursos en un grupo de recursos de Azure de manera reiterada, predecible
y uniforme. Una plantilla precisa de un grupo de recursos para su implementación. Solo se
puede implementar en un grupo de recursos y dicho grupo debe existir antes de ejecutarse
la implementación de la plantilla. Una plantilla no puede crear un grupo de recursos.
Las plantillas se caracterizan por su flexibilidad debido a su diseño e implementación
genéricos y modulares. Las plantillas ofrecen la posibilidad de aceptar parámetros de los
usuarios, declarar variables internas, definir dependencias entre recursos, enlazar recursos
dentro del mismo grupo de recursos o en diferentes grupos de recursos, así como ejecutar
otras plantillas. Ofrecen, además, funciones y expresiones de tipo de lenguaje de scripting
que las convierten en herramientas dinámicas y personalizables en el entorno de ejecución.

Implementaciones
PowerShell permite los dos modos de implementación de plantillas siguientes:

  • Incremental: la implementación incremental añade los recursos declarados en la
    plantilla que no existen en un grupo de recursos; no modifica los recursos de un grupo
    de recursos que no forme parte de la definición de una plantilla ni tampoco modifica
    los recursos de un grupo de recursos que exista tanto en la plantilla como en el grupo
    de recursos con el mismo estado de configuración.
  • Completa: la implementación completa añade recursos declarados en una plantilla
    al grupo de recursos, elimina recursos que no existen en la plantilla del grupo de
    recursos y no modifica los recursos que existen en el grupo de recursos y en la
    plantilla con el mismo estado de configuración.
    Resumen
    El cloud es un paradigma relativamente nuevo que todavía está en ciernes. Con el tiempo
    se irán agregando numerosas innovaciones y capacidades. Actualmente, Azure es uno
    de los principales proveedores de cloud y ofrece capacidades sofisticadas a través de las
    implementaciones híbridas, IaaS, PaaS y SaaS. De hecho, Azure Stack, una implementación
    del cloud privado de Microsoft, se lanzará pronto al mercado. Contará con las mismas
    características disponibles tanto en el cloud privado como en el público. En realidad, ambos
    se conectarán y trabajarán juntos de forma transparente y sin problemas.
    Resulta muy fácil comenzar a trabajar con Azure. No obstante, los desarrolladores y los
    arquitectos pueden caer en la trampa de no crear un diseño y una arquitectura adecuados
    para sus soluciones. El objetivo de este libro es servir de orientación y guía para el
    correcto diseño de soluciones con los recursos y servicios adecuados. Todos los servicios
    de Azure son un recurso. Es importante entender cómo se organizan y administran estos
    recursos en Azure. Este capítulo te ha ofrecido un contexto sobre ARM y los grupos, que
    constituyen los marcos de trabajo principales que facilitan los bloques de creación de
    recursos. ARM ofrece un conjunto de servicios a los recursos que ayudan a proporcionar
    uniformidad, estandarización y coherencia en su administración. Los servicios, como
    el RBAC, las etiquetas, las políticas y los bloqueos están disponibles para cada proveedor
    de recursos y para cada recurso. Azure también proporciona sofisticadas características
    de automatización que permiten automatizar los recursos e interactuar con ellos.
    Herramientas como PowerShell, las plantillas de ARM y la CLI de Azure pueden incorporarse
    como parte de las canalizaciones de lanzamiento, además de como herramientas de
    implementación y entrega continuas. Los usuarios pueden conectarse a Azure desde
    una gran variedad de entornos gracias a estas herramientas de automatización.
    En el siguiente capítulo analizaremos algunos de los aspectos más importantes sobre
    la arquitectura que ayudan a solucionar problemas frecuentes relacionados con la
    implementación basada en el cloud, al tiempo que garantizan la seguridad, la disponibilidad,
    la capacidad de ampliación y el mantenimiento a largo plazo de las aplicaciones.