Acelera tu éxito en la nube
Amazon Web Services Trambo Training Por Brayan Lemus
Introducción La siguiente guía es una adaptación de diferentes materiales de entrenamiento y
documentación específica de Amazon Web Services (AWS). El objetivo servir como apoyo en
la formación de conocimientos de uso práctico e integral de los diferentes servicios que
AWS ofrece, utilizando arquitecturas confiables, elásticas, tolerante a fallos y de alta
disponibilidad.
Indice Objetivos y expectativas
Amazon Web Services (AWS) Creación de cuenta
Ingreso a la cuenta de AWS Consola de AWS Crear un usuario de IAM
Optimizando flujos de trabajo ¿Qué es un desarrollador de software? ¿Qué es un administrador de sistemas? El esquema convencional
¿Que es DevOps?
La cultura DevOps y sus herramientas Herramientas DevOps
Source Code Repository Servidor de construcción Gestión de la configuración Infraestructura virtual Automatización de pruebas
AWS CloudFormation - Infraestructura as a Code Anatomía de plantilla
JSON YAML
Secciones de plantilla Format Version (optional) Description (optional) Metadata (optional) Parameters (optional) Mappings (optional) Conditions (optional) Transform (optional) Resources (required) Outputs (optional)
Definiendo un Parámetro en una Plantilla
2
Referencia a un parámetro dentro de una plantilla Resources
¿Qué es Amazon VPC? Conceptos de Amazon VPC
VPC y subredes Acceso a Internet
¿Qué es Amazon S3? Uso de buckets de Amazon S3
Trabajo con objetos de Amazon S3
¿Qué es Amazon EC2? Recurso de CloudFormation para EC2 Características de Amazon EC2 Instancias Amazon EC2 de Linux Conectarse a la instancia de Linux
Roles de IAM CloudFormation Resource: Políticas y permisos
Docker Contenedores e imágenes Contenedores y máquinas virtuales. Installación Ejecución y administración de imágenes Definir un contenedor con Dockerfile
La applicación Requirements.txt app.py
Construir la aplicación Ejecuta la aplicación Etiqueta la imagen
AWS ECR Instale la CLI de AWS Pasos para subir una image Docker a ECR
Amazon Elastic Container Service (ECS) Definiciones de tareas de Amazon ECS Servicios
3
Elastic Load Balancing Balanceador de carga clásico Balanceador de carga de red Balanceador de carga de aplicaciones
Beneficios Características clave
Equilibrio de carga en la capa 7 Compatibilidad con HTTPS Indicación de nombre de servidor (SNI) Direcciones IP como destinos Funciones de AWS Lambda como destinos
Grupos de destino para los Application Load Balancers Agentes de escucha para Application Load Balancer
Objetivos y expectativas
No se pretende que el estudiante aprenda a profundidad los diferentes conceptos
practicados en este curso, más bien, se pretende implantar la semilla de curiosidad para
que el estudiante tenga las herramientas necesarias para comenzar el camino de
aprendizaje de esta emergente cultura estructural de una forma práctica.
Por lo tanto, el objetivo general de este taller es crear una perspectiva general sobre las
tendencias tecnológicas actuales sobre el desarrollo, integración e infraestructura de una
manera concreta, práctica y útil.
Los objetivos específicos de este taller consolidan la utilización de infraestructura como
código para crear los distintos componentes que al unificarse constituyen la lógica base de
los sistemas de automatización de infraestructura de funcionamiento integral, estos
conceptos pueden expandirse mediante la exploración individual a necesidades
específicas. Los componentes pueden identificarse de la siguiente manera:
● Infraestructura como código.
● Redes virtuales.
● Sistemas de almacenamiento.
● Sistemas de cómputo escalables.
4
● Seguridad y acceso.
● Sistemas distribuidos y contenerización.
● Distribución de carga.
● Monitoreo.
Al final del curso, el estudiante se llevará consigo infraestructura como código portable y
funcional incluyendo los atributos descritos anteriormente.
Nuevamente se especifica que el objetivo no es la comprensión total de estos temas, si no
la introducción a los mismos.
Amazon Web Services (AWS)
Amazon Web Services ofrece (AWS) un amplio conjunto de productos globales basados en
la nube, incluidas aplicaciones para cómputo, almacenamiento, bases de datos, análisis,
redes, dispositivos móviles, herramientas para desarrolladores, herramientas de
administración, IoT, seguridad y aplicaciones empresariales. Estos servicios ayudan a las
empresas a avanzar con mayor rapidez, reducir los costos de TI y escalar. AWS cuenta con
la confianza de las mayores compañías y las empresas emergentes más innovadoras para
respaldar una amplia variedad de cargas de trabajo, como las aplicaciones web y móviles,
el desarrollo de juegos, el almacenamiento y procesamiento de datos, el almacenamiento
en general o el archivado, entre muchas otras.
Creación de cuenta
La capa gratuita de AWS le permite obtener experiencia práctica gratuita con la plataforma,
los productos y los servicios de AWS. El proceso de creación sencillo, para comenzar
ingresar al siguiente link.
https://portal.aws.amazon.com/gp/aws/developer/registration/index.html
5
En la parte superior derecha, es posible
seleccionar el idoma predefinido.
Para iniciar, es necesario ingresar todos los
datos solicitados en la forma y luego presionar
Continuar .
En la siguiente página, es necesario
ingresar la información de contacto. Las
6
cuentas pueden ser profesionales o personales. No existe diferencia alguna entre estas
opciones, en cuestión de recursos o la capa gratuita. Luego presionar Crear cuenta y
continuar .
En la siguiente página, es necesario ingresar la información de pago. La capa gratuita es
auténticamente gratuita, pero, todos los servicios tienen un límite de consumo. Por lo
tanto, es necesario ingresar información de pago para poder cubrir la utilización de los
recursos que excedan el límite establecido.
7
IMPORTANTE: Trambo Cloud o el Campus Tecnológico, no se hacen responsables por la
utilización o consumo de recursos en AWS, y por defecto, cualquier cargo asociado a los
mismos. Durante el curso, se darán a conocer los distintos procesos para la eliminación de
recursos luego su utilización y queda bajo total responsabilidad del estudiante ejecutar
dichos procesos en su debido tiempo.
Luego, es necesario validar la cuenta utilizando su número telefónico. Es necesario
ingresar el número y presionar Ponerse en contacto conmigo.
8
Una número se desplegará en la pantalla, debe ingresarlo en su teléfono utilizando las
teclas de numeración. Luego del ingreso, el sistema automatizado confirmara su ingreso y
la pantalla de la página web cambiará.
En la siguiente sección, debe presionar Basic Plan - Gratis -. Todos los planes incluyen la
capa gratuita. La diferencia está en el tipo de soporte adquirido, el cual determina la
velocidad de respuesta ante distintos incidentes o peticiones.
9
Éste es el último paso. AWS validará su cuenta y enviará un correo de confirmación
10
Ingreso a la cuenta de AWS
AWS cuenta con la consola WEB, la cual provee el acceso a los distintos recursos de AWS.
https://console.aws.amazon.com/
11
AWS cuenta con dos modalidades de ingreso.
● Cuenta maestra
● Usuario de IAM
AWS Identity and Access Management (IAM) le permite administrar el acceso a los servicios
y recursos de AWS de manera segura. Con IAM, puede crear y administrar usuarios y
grupos de AWS, así como utilizar permisos para conceder o denegar el acceso de estos a
los recursos de AWS. Para iniciar por primera vez, es necesario hacerlo con la cuenta
maestra. Por lo tanto, debe ingresar el correo electrónico utilizado para crear la cuenta y,
luego de presionar continuar, la contraseña asociada.
Consola de AWS
La documentación y la consola web de AWS, tienen traducciones a variedad de idiomas,
mas no por completo. Obviamente dada la diversidad de contenido, recursos y opciones, la
mayoria de texto se encuentra en inglés.
La navegación en la consola es relativamente intuitiva.
Uno de los objetivos de este curso es dar a conocer la nomenclatura que tienen los
distintos servicios de AWS, los cuales servirán para identificar los recursos a utilizar y
navegar la consola web.
12
Cuando ya se tiene familiaridad con los recursos y sus iconos, es posible guardar accesos
rápidos a la pagina de los recursos que más se utilizan dando click a pin en la parte
superior de la página.
Crear un usuario de IAM
13
Cómo es posible observar en la figura, es posible cambiar el idioma al español en la parte
inferior izquierda. Ésta opción está disponible en muchos recursos, pero no en todos.
La seguridad la cuenta maestra es de suma importancia. Por lo que es importante no
utilizar esta cuenta para tareas que no requieren los privilegios especiales de la misma. Por
lo que la primera actividad será crear un usuario administrador, el cual tendrá acceso a
todos los recursos disponibles.
AWS cuenta con distintos tipos de acceso.
14
● Acceso mediante programación:
○ Habilita una ID de clave de acceso y una clave de acceso secreta para el SDK,
la CLI y la API de AWS, además de otras herramientas de desarrollo.
● Acceso a la consola de administración de AWS:
○ Habilita una contraseña que permite a los usuarios iniciar sesión en la
consola de administración WEB de AWS.
AWS utiliza políticas de seguridad para permitir o denegar el acceso a distintos recursos.
Estas políticas pueden ser asociadas a usuarios o roles. Los roles son conjuntos de políticas
que pueden ser asociadas tanto a usuarios como a recursos de AWS, los cuales veremos
más adelante. AWS cuenta con ciertas políticas predefinidas, las cuales en este momento
utilizaremos para dar permisos de administrador al usuario de trabajo.
Para crear un usuario es necesario seguir los siguientes pasos:
15
1. Seleccionar Usuarios.
2. En la parte superior izquierda, seleccionar Añadir Usuario(s).
3. Ingresar el nombre de usuario.
4. Seleccionar el tipo de acceso, en este caso los 2.
5. Crear la contraseña o permitir que sea generada automáticamente.
6. Si se ha colocado una contraseña personalizada, no seleccionar el restablecimiento
de la misma en la próxima sesión.
7. Presionar continuar en la parte inferior izquierda.
8. En establecer permisos, seleccionar Asociar directamente las políticas existentes.
Como se muestra en la imagen anterior.
9. Buscar y seleccionar la política llamada AdministratorAccess.
10. Seleccionar etiquetas de nombramiento si se desea.
11. Verificar la información recolectada a efectuar.
12. Presionar Crear Usuario.
13. Descargar las claves de acceso.
En esta etapa se mostrarán claves de acceso para application programming interface(API).
Las cuales constan de
● Identificador de clave de acceso (AWS_ACCESS_KEY_ID)
● Clave de acceso secreta (AWS_SECRET_ACCESS_KEY)
Es importante recalcar que estas claves pueden ser utilizadas para administrar los
recursos de AWS al que el usuario asociado tenga permisos de acceder, lo cual puede
repercutir en cargos inesperados si dichas claves son expuestas públicamente o
vulnerables a ataques de personas inescrupulosas, por lo que es de suma importancia que
las mismas se conserven en un lugar seguro y confiable. Por otro lado, es posible invalidar,
borrar y generar nuevas claves. Por lo que tampoco es indispensable conservarlas.
16
Luego de este proceso, es necesario salir de la sesión actual para ingresar con el usuario
recién creado. Para esto primero debemos regresar al panel principal de IAM y copiar el
link de acceso para usuarios específicamente de la cuenta creada.
El link tiene contiene el número de cuenta. Al dar click en las hojas al lado derecho, se
copiara el link en el portapapeles de su sistema operativo. El formato es el siguiente:
https//NUMERO_DE_CUENTA.signin.aws.amazon.com/console
Por lo que el número de cuenta puede adquirirlo de esta manera. Evidentemente no es la
única. Pero este número es el necesario para el ingreso de usuarios regulares.
Luego de obtener el link, es necesario salir de la sesión actual. Esto se logra en la parte
superior derecha en Sign Out.
17
Luego, ingresar al link obtenido. Esto debe enviar su conexión hacia el sitio adecuado de
autenticación para usuarios.
El número de cuenta debe estar pre populado. Si no fuera el caso, debe ingresar el número
de cuenta obtenido en el link. Si ya no cuenta con el link, puede ingresar con la cuenta
maestra utilizando el link Iniciar sesión utilizando credenciales de cuenta raíz y obtener el link
nuevamente en el panel principal de IAM utilizando los pasos anteriormente descritos.
Con estos pasos realizados, puede comenzar a explorar la consola de AWS. Los servicios
incluidos en la capa gratuita están especificados en el siguiente link.
https://aws.amazon.com/es/free/
Es importante estar familiarizado con este detalle para evitar sorpresas de facturación.
El contenido del curso será utilizando únicamente recursos incluidos en la capa gratuita, se
impartirá una guia de destrucción de recursos en cada uno de los módulos a seguir para
que cada cursante tenga las herramientas necesarias para hacerlo responsable e
individualmente.
18
Optimizando flujos de trabajo
El flujo de trabajo es el estudio de los aspectos operacionales de una actividad de trabajo:
cómo se estructuran las tareas, cómo se realizan, cuál es su orden correlativo, cómo se
sincronizan, cómo fluye la información que soporta las tareas y cómo se le hace
seguimiento al cumplimiento de las tareas
¿Qué es un desarrollador de software?
La función del desarrollador de software recae en un programador o una compañía
comercial que se dedica a uno o más aspectos del proceso de desarrollo de software. Se
trata de un ámbito más amplio de la programación algorítmica para el desarrollo de:
● Nuevos productos.
● Nuevas características.
● Actualizaciones de seguridad.
● Corrección de errores.
¿Qué es un administrador de sistemas?
El administrador de sistemas tiene por objeto garantizar el tiempo de actividad (uptime),
rendimiento, uso de recursos y la seguridad de los servidores que administra de forma
dinámica.
En las organizaciones que cuentan con diversos sistemas informáticos, se torna más
compleja la administración. De esta forma, las funciones del administrador de sistemas se
dividen en roles: administrador de servidores, de bases de datos, de redes, de correo
electrónico, de servidores web, de seguridad, de respaldo etc. Cada uno con sus
correspondientes tareas específicas.
19
El esquema convencional
Antes del desarrollo de la aplicación DevOps, los equipos de desarrollo se encargaban de
reunir los requisitos comerciales para un programa de software y escribir un código. Luego,
un equipo de control de calidad por separado, prueba el programa en un entorno de
desarrollo aislado, y libera el código, si se cumplen los requisitos, a los operaciones para su
implementación. Los equipos de implementación están más fragmentados en grupos
aislados como redes y bases de datos. Cada vez que un programa de software se "lanza" a
un equipo independiente, agrega cuellos de botella. El problema con este paradigma es
que cuando los equipos trabajan por separado:
● Los desarrolladores no son conscientes de los obstáculos de control de calidad y
operaciones que impiden que el programa funcione como se esperaba.
● El control de calidad y las operaciones normalmente trabajan considerando
múltiples escenarios funciones y tienen poco contexto del propósito comercial y/o
el valor del software.
● Cada grupo tiene objetivos opuestos que pueden conducir a la ineficiencia y se tiene
la tendencia a culpar a otros equipos de trabajo del mal funcionamiento de
características del producto.
20
¿Que es DevOps?
DevOps se ha convertido en una palabra de moda sobrecargada que significa muchas
cosas diferentes para mucha gente. Eso es un desafío cuando intenta comprender qué es
DevOps o definir DevOps. En lugar de tratar de definir DevOps, es mejor describir los
conceptos fundamentales que diferentes personas asocian con DevOps como una
evolución pensamiento respecto a la visión integral de flujos de trabajo.
DevOps integra a los desarrolladores y equipos de operaciones para mejorar la
colaboración y la productividad mediante la automatización de la infraestructura, los flujos
de trabajo y la medición continua del rendimiento de las aplicaciones.
DevOps aborda los desafíos del desarrollo de una aplicación al establecer equipos de
colaboración multifuncionales que comparten la responsabilidad de mantener el sistema
que ejecuta el software y preparar el software para que se ejecute en ese sistema, con una
mayor retroalimentación respecto a calidad y automatización.
Por lo tanto, DevOps va más allá de la unión de los equipos que integran los flujos de
trabajo y desarrollo. DevOps es la adopción de una cultura de automatización e integración
de procesos de desarrollo con el objetivo de mejorar la colaboración entre todas las partes
interesadas por medio de la automatización; desde la planificación hasta proceso de
entrega. Ésto con el objetivo de:
● Mejorar la frecuencia de despliegue.
● Lograr un tiempo de comercialización más rápido.
● Bajar la tasa de fallos de nuevos lanzamientos.
● Acortar el tiempo de espera entre correcciones.
● Mejorar el tiempo medio de recuperación.
● Incrementar la seguridad de las estructuras.
● Incrementar la disponibilidad los ambientes de desarrollo y producción.
● Tener una alta tolerancia a fallos inesperados.
21
La cultura DevOps y sus herramientas
Una forma útil de percibir la cultura, es ver los diferentes aspectos de DevOps. El eje
horizontal inferior representa lo que las personas perciben como más fundamental.
Algunas personas creen firmemente que los DevOps deberían centrarse en la cultura más
que en herramientas, mientras que en otras personas tienden a valorar las herramientas
sobre la cultura.
22
El eje vertical representa los tres niveles de la cadena de entrega de DevOps: integración
continua, entrega continua y despliegue continuo. La comunidad de DevOps se refiere a las
organizaciones, que han dominado la cultura DevOps, como unicornios rosados porque
actualmente hay muy pocas de ellas y no se ven en la naturaleza muy a menudo. Ejemplos
populares de estos unicornios son compañías como Netflix, Etsy, Amazon, Pinterest, Flicker,
IMVU y Google.
Herramientas DevOps
Las herramientas de DevOps consisten en administración de configuración, sistemas de
prueba y compilación, implementación de aplicaciones, control de versiones y
herramientas de monitoreo. La integración continua, la entrega continua y el despliegue
continuo requieren herramientas diferentes. Si bien las tres prácticas pueden usar las
mismas herramientas, necesitará más herramientas a medida que avance en la cadena de
entrega.
23
Estas son algunas de las herramientas y prácticas clave que debe conocer.
Source Code Repository
Un repositorio de código fuente es un lugar donde los desarrolladores registran y cambian
código. El repositorio de código fuente administra las distintas versiones de código que se
registran, por lo que los desarrolladores no escriben sobre el trabajo de los demás.
El control de la fuente probablemente haya existido durante cuarenta años, pero es un
componente importante de la integración continua. Las herramientas populares de
repositorio de código fuente son Git, Subversion, Cloudforce, Bitbucket y TFS.
Servidor de construcción
El servidor de compilación es una herramienta de automatización que compila el código en
el repositorio de código fuente en una base de código ejecutable. Las herramientas
populares son Jenkins, SonarQube y Artifactory.
Gestión de la configuración
La gestión de la configuración define la configuración de un servidor o un entorno. Las
herramientas de gestión de configuración más populares son Puppet y Chef.
Infraestructura virtual
Amazon Web Services y Microsoft Azure son ejemplos de infraestructuras virtuales. Las
infraestructuras virtuales son proporcionadas por proveedores en la nube que venden
infraestructura o plataforma como un servicio (PaaS). Estas infraestructuras tienen API que
le permiten crear nuevas máquinas mediante programación con herramientas de
administración de configuración como Puppet y Chef.
24
Automatización de pruebas
La automatización de pruebas ha existido durante mucho tiempo. Las pruebas de DevOps
se centran en las pruebas automatizadas dentro de su canal de compilación para
garantizar que, en el momento en que tenga una compilación desplegable, esté seguro de
que esté listo para implementarse. No puede llegar al punto de entrega continua en el que
está bastante seguro sin ninguna intervención humana de que su código se puede
implementar sin una estrategia de prueba automatizada extensa. Las herramientas
populares son el Selenium y el Water.
AWS CloudFormation - Infraestructura as a Code
AWS CloudFormation es un servicio de Amazon dedicado a solventar la necesidad de
estandarizar y replicar las arquitecturas que tenemos dentro de nuestra cuenta en
diferentes regiones.
El objetivo de AWS CloudFormation es facilitar la ejecución y optimización de
aprovisionamiento de recursos de AWS, mejorar costos de entrega de aplicaciones.
De la forma en que AWS CloudFormation es implementado es a través de plantillas que
puede ser formato json o yaml el cual no debe ser memorizado ya que la documentación
de AWS es bastante amplia y sería impráctico e imposible aprenderse todos los recursos y
sus propiedades. La creación de plantillas nos permite tener una biblioteca propietaria de
recursos y arquitecturas capaces de entregar en cualquier momento y de manera
organizada un set de recursos a través del código que las componen.
Más información acerca de AWS CloudFormation (CFN) en la documentación oficial de AWS.
https://aws.amazon.com/es/cloudformation/?nc1=h_ls
25
Anatomía de plantilla
Una plantilla es un archivo de texto con formato JSON o YAML que describe su
infraestructura de AWS. Los siguientes ejemplos muestran una estructura de plantillas de
AWS CloudFormation y sus secciones.
JSON
{
"AWSTemplateFormatVersion" : "version date",
"Description" : "JSON string",
"Metadata" : { template metadata },
"Parameters" : { set of parameters },
"Mappings" : { set of mappings },
"Conditions" : { set of conditions },
"Transform" : { set of transforms },
"Resources" : { set of resources },
"Outputs" : { set of outputs }
}
26
YAML
---
AWSTemplateFormatVersion: "version date"
Description:
String
Metadata:
template metadata
Parameters:
set of parameters
Mappings:
set of mappings
Conditions:
set of conditions
Transform:
set of transforms
Resources:
set of resources
Outputs:
set of outputs
27
Secciones de plantilla
Las plantillas incluyen varias secciones principales. La sección de Recursos es la única
sección requerida. Algunas secciones en una plantilla pueden estar en cualquier orden. Sin
embargo, a medida que construye su plantilla, puede ser útil usar el orden lógico que se
muestra en la siguiente lista porque los valores de una sección pueden referirse a los
valores de una sección anterior.
Format Version (optional)
La versión de la plantilla de AWS CloudFormation que cumple la plantilla. La versión del
formato de la plantilla no es la misma que la versión de la API o WSDL. La versión del
formato de la plantilla puede cambiar independientemente de las versiones de API y WSDL.
Description (optional)
Una cadena de texto que describe la plantilla. Esta sección debe seguir siempre la sección
de versión de formato de plantilla.
Metadata (optional)
Objetos que proporcionan información adicional sobre la plantilla.
Parameters (optional)
Valores que se pasan a su plantilla en tiempo de ejecución (cuando crea o actualiza una
pila). Puede consultar los parámetros de las secciones Recursos y Salidas de la plantilla.
Mappings (optional)
Una asignación de claves y valores asociados que puede usar para especificar valores de
parámetros condicionales, similar a una tabla de búsqueda. Puede hacer coincidir una
clave con un valor correspondiente utilizando la función intrínseca Fn :: FindInMap en las
secciones Recursos y Resultados.
28
Conditions (optional)
Condiciones que controlan si se crean ciertos recursos o si se asigna un valor a ciertas
propiedades de recursos durante la creación o actualización de la pila. Por ejemplo, podría
crear condicionalmente un recurso que depende de si la pila es para un entorno de
producción o prueba.
Transform (optional)
Para aplicaciones sin servidor (también conocidas como aplicaciones basadas en Lambda),
especifica la versión del Modelo de aplicación sin servidor de AWS (AWS SAM) que se debe
usar. Cuando especifica una transformación, puede usar la sintaxis de AWS SAM para
declarar recursos en su plantilla. El modelo define la sintaxis que puede utilizar y cómo se
procesa.
También puede usar las transformaciones de AWS :: Include para trabajar con fragmentos
de plantillas que se almacenan por separado de la plantilla principal de AWS
CloudFormation. Puede almacenar sus archivos de fragmentos en un depósito de Amazon
S3 y luego reutilizar las funciones en varias plantillas.
Resources (required)
Especifica los recursos de la pila y sus propiedades, como una instancia de Amazon Elastic
Compute Cloud o un grupo de Amazon Simple Storage Service. Puede consultar los
recursos en las secciones de Recursos y Resultados de la plantilla.
Outputs (optional)
Describe los valores que se devuelven cuando ves las propiedades de tu pila. Por ejemplo,
puede declarar una salida para un nombre de depósito S3 y luego llamar al comando AWS
CLI de aws cloudformation describe-stacks para ver el nombre.
29
Definiendo un Parámetro en una Plantilla
El siguiente ejemplo declara un parámetro llamado InstanceTypeParameter. Este
parámetro le permite especificar el tipo de instancia de Amazon EC2 para que la pila la use
cuando cree o actualice la pila.
"Parameters" : { "InstanceTypeParameter" : { "Type" : "String", "Default" : "t2.micro", "AllowedValues" : ["t2.micro", "m1.small", "m1.large"], "Description" : "Enter t2.micro, m1.small, or m1.large. Default is t2.micro."
}
}
Parameters:
InstanceTypeParameter:
Type: String
Default: t2.micro AllowedValues:
- t2.micro - m1.small - m1.large Description: Enter t2.micro, m1.small, or m1.large. Default is t2.micro.
30
Referencia a un parámetro dentro de una plantilla "Ec2Instance" : { "Type" : "AWS::EC2::Instance", "Properties" : { "InstanceType" : { "Ref" : "InstanceTypeParameter" }, "ImageId" : "ami-0ff8a91507f77f867" }
}
Ec2Instance:
Type: AWS::EC2::Instance Properties:
InstanceType:
Ref: InstanceTypeParameter ImageId: ami-0ff8a91507f77f867
Mas información:
https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/parameters-section-s
tructure.html
Resources
La sección de Recursos requeridos declara los recursos de AWS que desea incluir en la pila,
como una instancia de Amazon EC2 o un depósito de Amazon S3.
La sección de Recursos consiste en el nombre clave de Recursos. La siguiente pseudo
plantilla describe la sección de Recursos:
"Resources" : { "MyInstance" : { "Type" : "AWS::EC2::Instance", "Properties" : { "UserData" : { "Fn::Base64" : { "Fn::Join" : [ "", [ "Queue=", { "Ref" : "MyQueue" } ] ] } },
"AvailabilityZone" : "us-east-1a", "ImageId" : "ami-0ff8a91507f77f867" }
},
31
"MyQueue" : { "Type" : "AWS::SQS::Queue", "Properties" : { }
}
}
Resources:
MyInstance:
Type: "AWS::EC2::Instance" Properties:
UserData:
"Fn::Base64": !Sub |
Queue=${MyQueue}
AvailabilityZone: "us-east-1a" ImageId: "ami-0ff8a91507f77f867" MyQueue:
Type: "AWS::SQS::Queue" Properties: {}
Ejemplos estructurados: https://github.com/TramboCloud/AWS-101
¿Qué es Amazon VPC?
Amazon Virtual Private Cloud (Amazon VPC) le permite iniciar los recursos de AWS en una
red virtual que ha definido. Esta red virtual se parece mucho a una red tradicional que
operaría en su propio centro de datos, con los beneficios de usar la infraestructura
escalable de AWS.
Conceptos de Amazon VPC
A medida que vaya utilizando Amazon VPC, comprenderá los conceptos clave de esta red
virtual, así como las similitudes y diferencias con respecto a sus propias redes. Esta sección
proporciona una descripción breve de los conceptos clave de Amazon VPC.
Amazon VPC es la capa de red de Amazon EC2. Si no conoce Amazon EC2, consulte ¿Qué es
Amazon EC2? en la Guía del usuario de Amazon EC2 para instancias de Linux para obtener
información general.
32
VPC y subredes
Una nube virtual privada (VPC) es una red virtual dedicada para su cuenta de AWS. Esta
infraestructura en la nube está aislada lógicamente de otras redes virtuales de la nube de
AWS. Por lo tanto, puede lanzar a su VPC recursos de AWS como, por ejemplo, instancias de
Amazon EC2. Puede especificar un intervalo de direcciones IP para la VPC, añadir subredes,
asociar grupos de seguridad y configurar tablas de ruteo.
Una subred es un rango de direcciones IP en su VPC. Puede lanzar recursos de AWS a
cualquier subred que especifique. Utilice una subred pública para los recursos que deben
conectarse a Internet y una subred privada para los recursos que no dispondrán de
conexión a Internet. Para obtener más información acerca de las subredes públicas y
privadas, consulte Conceptos básicos de VPC y subredes.
Para proteger los recursos de AWS de cada subred, puede utilizar varias capas de
seguridad, incluidos grupos de seguridad y las listas de control de acceso (ACL) a la red.
Para obtener más información, consulte Seguridad.
Acceso a Internet
Es posible controlar el modo en que las instancias lanzadas en la VPC tienen acceso a los
recursos externos a la VPC.
La VPC predeterminada incluye un gateway de Internet, y las subredes predeterminadas
son subredes públicas. Las instancias que se lanzan en subredes predeterminadas tienen
dirección IPv4 privada y dirección IPv4 pública. Dichas instancias pueden comunicarse con
Internet a través del gateway de Internet. Un gateway de Internet permite que las
instancias se conecten a Internet a través del límite de la red de Amazon EC2.
De forma predeterminada, las instancias que se lanzan en subredes no predeterminadas
disponen de dirección IPv4 privada; sin embargo, no disponen de dirección IPv4 pública a
no ser que asigne específicamente una en el lanzamiento o que modifique el atributo de
dirección IP pública de la subred. Dichas instancias pueden comunicarse entre sí, pero no
pueden tener acceso a Internet.
33
De manera alternativa, para permitir que una instancia de su VPC inicie conexiones
salientes a Internet y bloquear las conexiones entrantes no deseadas, puede utilizar un
dispositivo de conversión de direcciones de red (NAT) para el tráfico IPv4. El dispositivo NAT
asigna varias direcciones IPv4 privadas a una única dirección IPv4 pública. Los dispositivos
NAT tienen dirección IP elástica y están conectados a Internet a través de gateways de
Internet. Puede conectar una instancia de una subred privada a Internet a través del
dispositivo NAT, que direcciona el tráfico desde la instancia al gateway de Internet y
direcciona las respuestas a la instancia.
Plantilla técnica de CloudFormation:
https://github.com/TramboCloud/AWS-101/blob/master/network/vpc.yaml
34
¿Qué es Amazon S3?
Amazon Simple Storage Service es un servicio de almacenamiento para Internet. Está
diseñado para facilitar a los desarrolladores recursos de computación escalables basados
en Web.
Amazon S3 tiene una interfaz de servicios web simple que puede utilizar para almacenar y
recuperar cualquier cantidad de datos, en cualquier momento, desde cualquier parte de la
web. Ofrece a cualquier desarrollador acceso a la misma infraestructura de
almacenamiento de datos económica, altamente escalable, fiable, segura y rápida que
utiliza Amazon para mantener su propia red global de sitios web. Este servicio tiene como
fin maximizar los beneficios del escalado y trasladarlos a los desarrolladores.
En esta guía se explican los conceptos principales de Amazon S3, como los de bucket y
objeto, y cómo trabajar con estos recursos con la interfaz de programación de aplicaciones
(API) de Amazon S3.
Uso de buckets de Amazon S3
Amazon S3 es un almacenamiento en la nube para Internet. Para poder cargar sus datos
(fotos, vídeos, documentos, etc.) primero debe crear un bucket en una de las regiones de
AWS. Luego puede cargar la cantidad de objetos que desee en el bucket.
En términos de implementación, los buckets y objetos son recursos y Amazon S3
proporciona Application Program Interfaces (API, Interfaces de programación de
aplicaciones) para que pueda administrarlos. Por ejemplo, puede crear un bucket y cargar
objetos con la API de Amazon S3. También puede usar la consola de Amazon S3 para
realizar estas operaciones. La consola utiliza las API de Amazon S3 para enviar solicitudes a
Amazon S3.
Un nombre de bucket de Amazon S3 es globalmente único y todas las cuentas de AWS
comparten el espacio de nombres. Esto significa que, una vez que se crea un bucket,
ninguna otra cuenta de AWS de ninguna otra región de AWS puede usar el nombre de ese
35
bucket hasta que el bucket se elimina. No debe confiar en convenciones específicas de
nomenclatura de buckets para propósitos de verificación de la seguridad o disponibilidad.
Para conocer las directrices de nomenclatura de buckets, consulte Restricciones y
limitaciones de los buckets.
Trabajo con objetos de Amazon S3
Amazon S3 es un almacén sencillo de valores claves diseñado para almacenar tantos
objetos como quiera. Puede almacenar estos objetos en uno o varios buckets. Un objeto
consiste en lo siguiente:
● Clave: nombre que se le asigna a un objeto. La clave de objeto se usa para
recuperar el objeto.
● Para obtener más información, consulte Clave y metadatos de objetos.
● ID de versión: en un bucket, una clave y un ID de versión identifican exclusivamente
un objeto.
● El ID de versión es una cadena que genera Amazon S3 cuando se agrega un objeto a
un bucket. Para obtener más información, consulte Control de versiones de objetos.
● Valor: contenido que se está almacenando.
● El valor de un objeto puede ser cualquier secuencia de bytes. El tamaño de los
objetos puede variar desde cero hasta 5 TB. Para obtener más información,
consulte Carga de objetos.
● Metadatos: conjunto de pares nombre-valor con el que puede almacenar
información relativa al objeto.
● Puede asignar metadatos, que se denominan metadatos definidos por el usuario, a
sus objetos en Amazon S3. Amazon S3 asigna también metadatos de sistema a
estos objetos, que se usan para administrar objetos. Para obtener más información,
consulte Clave y metadatos de objetos.
36
● Subrecursos: Amazon S3 usa el mecanismo de subrecursos para almacenar la
información adicional específica al objeto.
● Dado que los subrecursos están subordinados a los objetos, siempre están
asociados con otras entidades, como objetos o buckets. Para obtener más
información, consulte Subrecursos de objeto.
● Información de control de acceso: puede controlar el acceso a los objetos que
almacena en Amazon S3.
● Amazon S3 admite tanto el control de acceso basado en recursos, como con una
lista de control de acceso (ACL) o políticas de bucket, como el control de acceso
basado en usuarios. Para obtener más información, consulte Administración de
permisos de acceso para los recursos de Amazon S3.
Para obtener más información acerca del trabajo con objetos, consulte las siguientes
secciones. Los recursos de Amazon S3 (por ejemplo, buckets y objetos) son privados de
manera predeterminada. Se deben conceder permisos explícitos para que otras personas
puedan obtener acceso a estos recursos. Por ejemplo, puede que quiera compartir un
video o una fotografía almacenada en el bucket de Amazon S3 en su sitio web. Eso solo
funciona si se hace que el objeto sea público o si se usa una URL prefirmada en el sitio web.
Para obtener más información acerca de compartir objetos, consulte Compartir un objeto
con otros.
¿Qué es Amazon EC2?
Amazon Elastic Compute Cloud (Amazon EC2) proporciona capacidad de computación
escalable en la nube de Amazon Web Services (AWS). El uso de Amazon EC2 elimina la
necesidad de invertir inicialmente en hardware, de manera que puede desarrollar e
implementar aplicaciones en menos tiempo. Puede usar Amazon EC2 para lanzar tantos
servidores virtuales como necesite, configurar la seguridad y las redes y administrar el
almacenamiento. Amazon EC2 le permite escalar hacia arriba o hacia abajo para controlar
cambios en los requisitos o picos de popularidad, con lo que se reduce la necesidad de
prever el tráfico.
37
Recurso de CloudFormation para EC2 Ec2Instance: Type: AWS::EC2::Instance Properties: ImageId: ami-1651d5f8718dfsg6 KeyName: Ref: "KeyName" NetworkInterfaces: - AssociatePublicIpAddress: "true" DeviceIndex: "0" GroupSet: - Ref: "myVPCEC2SecurityGroup" SubnetId: Ref: "PublicSubnet"
Para más información, puede buscar en google: AWS::EC2::Instance
Características de Amazon EC2
Amazon EC2 ofrece las siguientes características:
● Entornos informáticos virtuales, conocidos como instancias
● Plantillas preconfiguradas para las instancias, conocidas como imágenes de
máquina de Amazon (AMI), que empaquetan las partes que necesita para el
servidor (incluido el sistema operativo y el software adicional)
● Varias configuraciones de CPU, memoria, almacenamiento y capacidad de red de las
instancias, conocidos como tipos de instancias
● Información de inicio de sesión segura para las instancias con pares de claves (AWS
almacena la clave pública y usted guarda la clave privada en un lugar seguro)
● Volúmenes de almacenamiento para datos temporales que se eliminan cuando
detiene o termina la instancia, conocidos como volúmenes de almacén de instancias
38
● Volúmenes de almacenamiento persistente para los datos usando Amazon Elastic
Block Store (Amazon EBS), conocidos como volúmenes de Amazon EBS
● Varias ubicaciones físicas para los recursos, como las instancias y los volúmenes de
Amazon EBS, conocidas como regiones y zonas de disponibilidad
● Un firewall que permite especificar los protocolos, los puertos y los rangos de
direcciones IP que pueden alcanzar las instancias mediante el uso de grupos de
seguridad
● Direcciones IPv4 estáticas para informática en la nube dinámica, conocidas como
direcciones IP elásticas
● Metadatos, conocidos como etiquetas, que se pueden crear y asignar a los recursos
de Amazon EC2
● Redes virtuales que puede crear que están aisladas lógicamente del resto de la
nube de AWS y que, opcionalmente, puede conectar a su propia red, conocidas
como nubes privadas virtuales (VPC)
Instancias Amazon EC2 de Linux
La instancia es una instancia con respaldo Amazon EBS (lo que significa que el volumen raíz
es un volumen de EBS). Puede especificar la zona de disponibilidad en la que se ejecuta la
instancia o dejar que Amazon EC2 seleccione una zona de disponibilidad por usted. Al
lanzar la instancia, la protege especificando con un par de claves y un grupo de seguridad.
Al conectarse a la instancia, debe especificar la clave privada del par de claves que
especificó cuando lanzó la instancia.
39
Conectarse a la instancia de Linux
Para conectarse a la instancia de Linux mediante un cliente SSH, use el siguiente
procedimiento. Si aparece un error al intentar conectarse a la instancia, consulte Solución
de problemas con la conexión a la instancia.
1. En un shell de línea de comandos, cambie los directorios a la ubicación del archivo
de clave privada que creó cuando lanzó la instancia.
2. Use el siguiente comando para configurar los permisos del archivo de clave privada
para que solo usted pueda leerlo.
chmod 400 /path/my-key-pair.pem
3. Si no configura estos permisos, no podrá conectarse a la instancia con este par de
claves. Para obtener más información, consulte Error: Unprotected Private Key File.
4. Utilice el comando ssh para conectarse a la instancia. Especifique el archivo (.pem)
de clave privada y nombre_de_usuario@nombre_dns_público. Por ejemplo, si ha
utilizado Amazon Linux 2 o la AMI de Amazon Linux, el nombre de usuario es
ec2-user.
40
ssh -i /path/my-key-pair.pem [email protected]
5. Debería ver una respuesta como lo siguiente:
The authenticity of host 'ec2-198-51-100-1.compute-1.amazonaws.com (10.254.142.33)'
can't be established. RSA key fingerprint is 1f:51:ae:28:bf:89:e9:d8:1f:25:5d:37:2d:7d:b8:ca:9f:f5:f1:6f. Are you sure you want to continue connecting (yes/no)?
6. (Solo IPv6) También puede conectarse a la instancia mediante su dirección IPv6.
Especifique el comando ssh con la ruta al archivo de clave privada (.pem), el nombre
de usuario adecuado y la dirección IPv6. Por ejemplo, si ha utilizado Amazon Linux 2
o la AMI de Amazon Linux, el nombre de usuario es ec2-user.
ssh -i /path/my-key-pair.pem ec2-user@2001:db8:1234:1a00:9691:9503:25ad:1761
7. (Opcional) Verifique que la huella digital en la alerta de seguridad coincide con la
huella digital que obtuvo en el paso 1. Si estas huellas digitales no coinciden, alguien
podría intentar un ataque man-in-the-middle (MITM). Si coinciden, continúe con el
siguiente paso.
8. Escriba yes.
9. Debería ver una respuesta como lo siguiente:
Warning: Permanently added 'ec2-198-51-100-1.compute-1.amazonaws.com' (RSA) to the list of known hosts.
Para conectarse con windows utilizando Putty:
https://docs.aws.amazon.com/es_es/AWSEC2/latest/UserGuide/putty.html
41
Roles de IAM
Un rol de IAM es una identidad de IAM que se puede crear en una cuenta y que tiene
permisos específicos. Un rol de IAM es similar a un usuario de IAM, ya que se trata de una
identidad de AWS con políticas de permisos que determinan lo que la identidad puede
hacer o no en AWS. Sin embargo, en lugar de asociarse exclusivamente a una persona, la
intención es que cualquier usuario pueda asumir un rol que necesite. Además, un rol no
tiene asociadas credenciales a largo plazo estándar, como una contraseña o claves de
acceso. En su lugar, cuando se asume un rol, este proporciona credenciales de seguridad
temporales para la sesión de rol.
Puede utilizar roles para delegar el acceso a usuarios, aplicaciones o servicios que
normalmente no tendrían acceso a los recursos de AWS. Por ejemplo, es posible que desee
conceder a los usuarios de la cuenta de AWS el acceso a los recursos que no suelen tener, o
conceder a los usuarios de una cuenta de AWS el acceso a los recursos de otra cuenta. O
también puede que quiera permitir que una aplicación móvil utilice los recursos de AWS,
pero no desea integrar las claves de AWS en la aplicación (donde serían difíciles de cambiar
y donde los usuarios pueden potencialmente extraerlas). En ocasiones, es posible que
quiera conceder acceso a AWS a los usuarios que ya tienen identidades definidas fuera de
AWS, como en su directorio corporativo. O bien, es posible que quiera conceder acceso a
su cuenta a terceros para que puedan realizar una auditoría en los recursos.
En estas situaciones, puede delegar el acceso a los recursos de AWS con un rol de IAM. En
esta sección se presentan los roles y las distintas formas de utilizarlos, cuándo y cómo
elegir entre enfoques y cómo crear, administrar, cambiar (o asumir) y eliminar roles.
42
CloudFormation Resource: AWSTemplateFormatVersion: "2010-09-09" Resources:
RootRole:
Type: "AWS::IAM::Role" Properties:
AssumeRolePolicyDocument:
Version: "2012-10-17" Statement:
-
Effect: "Allow" Principal:
Service:
- "ec2.amazonaws.com" Action:
- "sts:AssumeRole" Path: "/" Policies:
-
PolicyName: "root" PolicyDocument:
Version: "2012-10-17" Statement:
-
Effect: "Allow" Action: "*" Resource: "*" RootInstanceProfile:
Type: "AWS::IAM::InstanceProfile" Properties:
Path: "/" Roles:
-
Ref: "RootRole"
43
Políticas y permisos
Puede administrar el acceso en AWS creando políticas y asignándoselas a identidades de
IAM (usuarios, grupos de usuarios o roles) o a recursos de AWS. Una política es un objeto
de AWS que, cuando se asocia a una identidad o un recurso, define sus permisos. AWS
evalúa estas políticas cuando una entidad principal (usuario o rol) realiza una solicitud. Los
permisos en las políticas determinan si la solicitud se permite o se deniega. La mayoría de
políticas se almacenan en AWS como documentos JSON. AWS admite seis tipos de políticas:
basadas en identidad, basadas en recursos, límites de permisos, SCP de Organizaciones,
ACL y políticas de sesión.
Las políticas de IAM definen permisos para una acción independientemente del método
que se utilice para realizar la operación. Por ejemplo, si una política permite la acción
GetUser, un usuario con dicha política puede obtener información de los usuarios desde la
Consola de administración de AWS, la AWS CLI o la API de AWS. Cuando se crea un usuario
de IAM, se le puede permitir el acceso a la consola o el acceso mediante programación. Si
se permite el acceso a la consola, el usuario de IAM pueden iniciar sesión en la consola con
un nombre de usuario y una contraseña. Si se permite acceso mediante programación, el
usuario puede utilizar claves de acceso para trabajar con la CLI o la API.
En este ejemplo se muestra cómo crear una política que puede asociarse a un rol de
servicio. La política permite que la instancia EC2 especificada asocie o desasocie
volúmenes. La instancia se especifica con un ARN en el elemento Condition.Esta política
proporciona los permisos necesarios para llevar a cabo esta acción únicamente desde la
API o la AWS CLI de AWS.Para utilizar esta política, sustituya el texto rojo en cursiva del
ejemplo de política por su propia información.
Las instancias Amazon EC2 pueden ejecutar comandos de AWS con permisos concedidos
por un rol de servicio de AWS para una instancia EC2 que esté asociada al perfil de
instancia. Puede asociar esta política al rol o añadir esta instrucción a una política existente.
Solo la instancia identificada por INSTANCE-ID puede asociar volúmenes, o desasociarlos, a
las instancias de la cuenta, incluida la misma instancia
44
{
"Version": "2012-10-17", "Statement": [
{
"Effect": "Allow", "Action": [
"ec2:AttachVolume", "ec2:DetachVolume" ],
"Resource": [
"arn:aws:ec2:*:*:volume/*", "arn:aws:ec2:*:*:instance/*" ],
"Condition": {
"ArnEquals": {"ec2:SourceInstanceARN":
"arn:aws:ec2:*:*:instance/instance-id"} }
}
]
}
45
Docker
Docker es una plataforma para desarrolladores y administradores de sistemas para
desarrollar, implementar y ejecutar aplicaciones con contenedores. El uso de contenedores
de Linux para implementar aplicaciones se denomina contenedorización. Los contenedores
no son nuevos, pero su uso para implementar aplicaciones fácilmente sí lo es.
La contenedorización es cada vez más popular porque los contenedores son:
● Flexible: Incluso las aplicaciones más complejas se pueden transportar en
contenedores.
● Ligero: los contenedores aprovechan y comparten el núcleo del host.
● Intercambiable: puede implementar actualizaciones y actualizaciones sobre la
marcha.
● Portátil: puede compilar localmente, implementarlo en la nube y ejecutar en
cualquier lugar.
● Escalable: puede aumentar y distribuir automáticamente réplicas de contenedores.
● Apilable: puede apilar servicios verticalmente y sobre la marcha.
Contenedores e imágenes
Se ejecuta un contenedor ejecutando una imagen. Una imagen es un paquete ejecutable
que incluye todo lo necesario para ejecutar una aplicación: el código, el tiempo de
ejecución, las bibliotecas, las variables de entorno y los archivos de configuración.
Un contenedor es una instancia de tiempo de ejecución de una imagen: En lo que se
convierte la imagen en la memoria cuando se ejecuta (es decir, una imagen con estado o
un proceso de usuario). Puede ver una lista de sus contenedores en ejecución con el
comando, docker ps, tal como lo haría en Linux.
46
Contenedores y máquinas virtuales.
Un contenedor se ejecuta de forma nativa en Linux y comparte el kernel de la máquina
host con otros contenedores. Ejecuta un proceso discreto, no ocupa más memoria que
cualquier otro ejecutable, lo que lo hace liviano.
Por el contrario, una máquina virtual (VM) ejecuta un sistema operativo "invitado" completo
con acceso virtual a los recursos del host a través de un hipervisor. En general, las
máquinas virtuales proporcionan un entorno con más recursos de los que necesitan la
mayoría de las aplicaciones.
Installación
Existen muchas maneras de instalar Docker dependiendo de su sistema operativo
OSX: https://docs.docker.com/docker-for-mac/install/
Windows: https://docs.docker.com/docker-for-windows/install/
Linux: https://docs.docker.com/v17.12/install/#time-based-release-schedule
47
Ejecución y administración de imágenes
Una vez instalado
docker --version Docker version 18.06.1-ce, build e68fc7a215d7
Pruebe que su instalación funciona ejecutando la imagen simple de Docker, hello-world:
docker run hello-world
Unable to find image 'hello-world:latest' locally latest: Pulling from library/hello-world 1b930d010525: Pull complete
Digest:
sha256:2557e3c07ed1e38f26e389462d03ed943586f744621577a99efb77324b0fe535 Status: Downloaded newer image for hello-world:latest
Hello from Docker! This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps: 1. The Docker client contacted the Docker daemon. 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. (amd64)
3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading. 4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with: $ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID: https://hub.docker.com/
For more examples and ideas, visit: https://docs.docker.com/get-started/
48
Listar las imágenes descargadas o creadas
docker image ls
Listar la lista de contenedores.
docker container ls --all
Definir un contenedor con Dockerfile
Dockerfile define lo que sucede en el entorno dentro de su contenedor. El acceso a
recursos como las interfaces de red y las unidades de disco está virtualizado dentro de este
entorno, que está aislado del resto de su sistema, por lo que necesita asignar puertos al
mundo exterior y ser específico sobre los archivos que desea "copiar" en ese ambiente Sin
embargo, después de hacer eso, puede esperar que la compilación de su aplicación
definida en este Dockerfile se comporte exactamente igual donde se ejecute. El archivo
debe llamarse Dockerfile. Cree este archivo en una carpeta de cualquier nombre.
# Use an official Python runtime as a parent image
FROM python:2.7-slim
# Set the working directory to /app
WORKDIR /app
# Copy the current directory contents into the container at /app
ADD . /app
# Install any needed packages specified in requirements.txt
RUN pip install --trusted-host pypi.python.org -r requirements.txt
# Make port 80 available to the world outside this container
EXPOSE 80
# Define environment variable
ENV NAME World
# Run app.py when the container launches
CMD ["python", "app.py"]
49
La applicación
Este Dockerfile se refiere a un par de archivos que aún no hemos creado. Cree dos archivos
más, requirements.txt y app.py, y colóquelos en la misma carpeta con el Dockerfile. Esto
completa nuestra aplicación, que como puedes ver es bastante simple. Cuando el
Dockerfile anterior está integrado en una imagen, app.py y requirements.txt están
presentes debido al comando ADD de Dockerfile, y se puede acceder a la salida desde
app.py a través de HTTP (puerto 80) gracias al comando EXPOSE.
Requirements.txt
Flask
Redis
app.py
from flask import Flask from redis import Redis, RedisError import os import socket
# Connect to Redis
redis = Redis(host="redis", db=0, socket_connect_timeout=2, socket_timeout=2)
app = Flask(__name__)
@app.route("/") def hello():
try:
visits = redis.incr("counter") except RedisError:
visits = "<i>cannot connect to Redis, counter disabled</i>"
html = "<h3>Hello {name}!</h3>" \ "<b>Hostname:</b> {hostname}<br/>" \ "<b>Visits:</b> {visits}" return html.format(name=os.getenv("NAME", "world"), hostname=socket.gethostname(), visits=visits)
if __name__ == "__main__": app.run(host='0.0.0.0', port=80)
50
Ahora vemos que pip install -r requirements.txt instala las bibliotecas Flask y Redis para
Python, y la aplicación imprime la variable de entorno NAME, así como la salida de una
llamada a socket.gethostname (). Finalmente, debido a que Redis no se está ejecutando (ya
que solo hemos instalado la biblioteca de Python y no a Redis en sí), debemos esperar que
el intento de usarlo aquí falle y produzca el mensaje de error.
¡Eso es! No necesita Python ni nada en requirements.txt en tu sistema, ni la construcción o
ejecución de esta imagen los instala en tu sistema. No parece que realmente haya
configurado un entorno con Python y Flask, pero lo ha hecho.
Construir la aplicación
Estamos listos para construir la aplicación. Asegúrese de estar en el nivel superior de su
nuevo directorio.
docker build -t friendlyhello .
¿Dónde está su imagen construida? Está en el registro local de imágenes Docker de su
máquina:
docker image ls
Ejecuta la aplicación
Ejecute la aplicación, asignando el puerto 4000 de su máquina al puerto 80 publicado del
contenedor usando -p:
docker run -p 4000:80 friendlyhello
Debería ver un mensaje de que Python está sirviendo su aplicación en http://0.0.0.0:80. Pero
ese mensaje proviene del interior del contenedor, que no sabe que usted asignó el puerto 80
de ese contenedor a 4000, lo que hace que la URL correcta sea http://localhost:4000.
Puede terminar la ejecución presionando simultáneamente CTRL+c.
Ahora ejecutemos la aplicación en segundo plano, en modo separado:
docker run -d -p 4000:80 friendlyhello
51
Obtiene el ID de contenedor largo para su aplicación y luego lo devuelven a su terminal. Su
contenedor se está ejecutando en segundo plano. También puede ver el ID del contenedor
abreviado con el contenedor docker ls (y ambos funcionan de manera intercambiable cuando
se ejecutan comandos):
docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS
PORTS NAMES
a7109e7dca76 friendlyhello "python app.py" 10 seconds ago Up 9 seconds 0.0.0.0:4000->80/tcp infallible_brown
Tenga en cuenta que la ID DEL CONTENEDOR coincide con lo que está en http://localhost:4000.
Ahora use el contenedor de la ventana acoplable para finalizar el proceso, usando la ID DEL
CONTENEDOR, de esta manera:
docker container stop a7109e7dca76
Etiqueta la imagen
La notación para asociar una imagen local con un repositorio en un registro es nombre de
usuario / repositorio: etiqueta. La etiqueta es opcional, pero se recomienda, ya que es el
mecanismo que los registros utilizan para dar una versión a las imágenes de Docker.
Proporcione al repositorio y etiquetas nombres significativos para el contexto, como
get-started: part2. Esto coloca la imagen en el repositorio de inicio y la etiqueta como
parte2.
Ahora, ponlo todo junto para etiquetar la imagen. Ejecute la imagen de la etiqueta docker
con su nombre de usuario, repositorio y nombres de etiquetas para que la imagen se
cargue en el destino deseado. La sintaxis del comando es:
docker tag friendlyhello john/get-started:part2
Sube tu imagen etiquetada al repositorio:
docker push username/repository:tag
52
AWS ECR
Amazon Elastic Container Registry (ECR) es un registro de contenedores de Docker
completamente administrado que facilita a los desarrolladores las tareas de
almacenamiento, administración e implementación de imágenes de contenedores de
Docker. Amazon ECR se integra con Amazon Elastic Container Service (ECS), lo que permite
simplificar el desarrollo para el flujo de trabajo de producción. Con Amazon ECR, ya no es
necesario que utilice sus propios repositorios de contenedores ni que se preocupe por
escalar la infraestructura subyacente. Amazon ECR hospeda sus imágenes en una
arquitectura escalable y de alta disponibilidad, lo que le permite implementar
contenedores para sus aplicaciones con fiabilidad. La integración con AWS Identity and
Access Management (IAM) ofrece un control de cada repositorio a nivel de recurso. Con
Amazon ECR no hay cuotas predefinidas ni compromisos. Solo tiene que pagar por la
cantidad de datos almacenados en los repositorios y por los datos transferidos a Internet.
Instale la CLI de AWS
Puede utilizar las herramientas de línea de comandos de AWS para emitir comandos en la
línea de comandos de su sistema para realizar tareas de Amazon ECS y AWS. Esto puede
ser más rápido y más conveniente que usar la consola. Las herramientas de la línea de
comandos también son útiles para crear scripts que realizan tareas de AWS.
Para utilizar AWS CLI con Amazon ECR, instale la última versión de AWS CLI (la
funcionalidad de Amazon ECR está disponible en AWS CLI a partir de la versión 1.9.15).
Puede verificar su versión de AWS CLI con el comando aws --version. Para obtener
información sobre la instalación de la CLI de AWS o su actualización a la última versión,
consulte Instalación de la interfaz de línea de comandos de AWS en la Guía del usuario de
la interfaz de línea de comandos de AWS.
53
Pasos para subir una image Docker a ECR
Recupere el comando de inicio de sesión que se usará para autenticar su cliente Docker en
su registro.
Utilice el CLI de AWS:
$(aws ecr get-login --no-include-email --region us-east-1)
Construya su imagen Docker usando el siguiente comando.
docker build -t friendlyhello .
Una vez que se complete la compilación, etiquete su imagen para que pueda empujar la
imagen a este repositorio:
docker tag friendlyhello:latest 470331809785.dkr.ecr.us-east-1.amazonaws.com/friendlyhello:latest
Ejecute el siguiente comando para enviar esta imagen a su nuevo repositorio de AWS:
docker push
470331809785.dkr.ecr.us-east-1.amazonaws.com/friendlyhello:latest
Amazon Elastic Container Service (ECS)
Amazon Elastic Container Service (Amazon ECS) es un servicio de administración de
contenedores altamente escalable y rápido que facilita la tarea de ejecutar, detener y
administrar contenedores de Docker en un clúster. Puede alojar el clúster en una
infraestructura sin servidor administrada por Amazon ECS. Para ello, lance los servicios o
las tareas con el tipo de lanzamiento Fargate. Si desea más control, puede alojar las tareas
en un clúster de instancias de Amazon Elastic Compute Cloud (Amazon EC2) administrado
mediante el tipo de lanzamiento EC2. Para obtener más información acerca de los tipos de
lanzamiento, consulte Tipos de lanzamiento de Amazon ECS.
Amazon ECS es un servicio regional que simplifica la ejecución de contenedores de
aplicación con alta disponibilidad en diversas zonas de disponibilidad dentro de una región.
54
Puede crear clústeres de Amazon ECS dentro de una VPC nueva o existente. Después de
que el clúster esté activo y en ejecución, puede definir servicios y definiciones de tareas
que especifican las imágenes de contenedores Docker que ejecutar en los clústeres. Las
imágenes de contenedor se almacenan y se extraen desde registros de contenedor, que
podrían existir dentro o fuera de la infraestructura de AWS.
Para más información:
https://docs.aws.amazon.com/es_es/AmazonECS/latest/developerguide/Welcome.html
Definiciones de tareas de Amazon ECS Para ejecutar contenedores Docker en Amazon ECS se necesita una definición de tarea. Entre los parámetros que se pueden especificar en una definición de tarea se incluyen:
● La imagen de Docker que se va a utilizar con cada contenedor en su tarea ● La cantidad de CPU y de memoria que se va a utilizar con cada tarea o cada
contenedor dentro de una tarea ● El tipo de lanzamiento que utilizar, que determina la infraestructura en la que se
alojan sus tareas ● El modo de red de Docker que utilizar para los contenedores en la tarea ● La configuración de registros que se va a utilizar para sus tareas ● Si la tarea se debe seguir ejecutando si el contenedor finaliza o falla ● El comando que el contenedor debe ejecutar al iniciarse ● Los volúmenes de datos que deben utilizarse con los contenedores en la tarea ● El rol de IAM que las tareas deben utilizar
Puede definir varios contenedores en una definición de tarea. Los parámetros que usa dependen del tipo de lanzamiento que elija para la tarea. No todos los parámetros son válidos. Para obtener más información acerca de los parámetros disponibles y para qué tipos de lanzamiento son válidos en una definición de tarea, consulte Parámetros de definición de tarea. Toda la pila de la aplicación no tiene que existir en una definición de tarea única y, en la mayoría de los casos, no debería. La aplicación puede abarcar varias definiciones de tareas combinando contenedores relacionados en sus propias definiciones de tareas, cada una de ellas representando un único componente. Para obtener más información, consulte Arquitectura de aplicaciones. Para más información: https://docs.aws.amazon.com/es_es/AmazonECS/latest/developerguide/task_definitions.html
55
56
Servicios Amazon ECS le permite ejecutar y mantener un número determinado de instancias de una definición de tarea simultáneamente en un clúster de Amazon ECS. Esto se denomina un servicio. En caso de que alguna de las tareas falle o se pare por algún motivo, el programador de servicio de Amazon ECS lanza otra instancia de la definición de tarea para sustituirla y mantener el número deseado de tareas en el servicio en función de la estrategia de programación utilizada. Además de mantener el recuento deseado de tareas en el servicio, opcionalmente puede ejecutar el servicio tras un balanceador de carga. El balanceador de carga distribuye el tráfico entre las tareas que están asociadas al servicio.
Elastic Load Balancing Adquiera tolerancia a errores para cualquier aplicación mediante el logro de escalabilidad, rendimiento y seguridad. Elastic Load Balancing distribuye automáticamente el tráfico de aplicaciones entrantes a través de varios destinos, tales como instancias de Amazon EC2, contenedores, direcciones IP y funciones Lambda. Puede controlar la carga variable del tráfico de su aplicación en una única zona o en varias zonas de disponibilidad. Elastic Load Balancing ofrece tres tipos de balanceadores de carga que cuentan con el nivel necesario de alta disponibilidad, escalabilidad automática y seguridad para que sus aplicaciones sean tolerantes a errores. Más información: https://aws.amazon.com/es/elasticloadbalancing/features/#Details_for_Elastic_Load_Balancing_Products Balanceador de carga clásico El balanceador de carga clásico proporciona equilibrio de carga básico en varias instancias de Amazon EC2 y funciona tanto en el nivel de solicitud como en el nivel de conexión. El balanceador de carga clásico está diseñado para aplicaciones que se construyeron dentro de la red EC2-Classic. Balanceador de carga de red El balanceador de carga de red es el más adecuado para equilibrar la carga del tráfico del protocolo de control de transmisión (TCP) y de la seguridad de capa de transporte (TLS) para la que se requiere un rendimiento extremo. El balanceador de carga de red, en funcionamiento a nivel de conexión (capa 4), dirige el tráfico hacia destinos dentro de Amazon Virtual Private Cloud (Amazon VPC) y es capaz de controlar millones de solicitudes por segundo mientras mantiene las latencias ultrabajas. El balanceador de carga de red también se optimiza para controlar patrones de tráfico repentinos y volátiles.
57
Balanceador de carga de aplicaciones El balanceador de carga de aplicaciones es el más adecuado para el equilibrio de carga del tráfico HTTP y HTTPS. Proporciona un direccionamiento de solicitudes avanzado dirigido a la entrega de arquitecturas de aplicaciones modernas, incluidos microservicios y contenedores. El balanceador de carga de aplicaciones, en funcionamiento a nivel de solicitud individual (capa 7), dirige el tráfico a los destinos dentro de Amazon Virtual Private Cloud (Amazon VPC) en función del contenido de la solicitud. Beneficios
● Alta disponibilidad: El acuerdo de nivel de servicios de Amazon Elastic Load Balancing prevé una disponibilidad del 99,99% para los balanceadores de carga.
● Seguridad: Elastic Load Balancing interactúa con Amazon Virtual Private Cloud (VPC) para proporcionar funciones de seguridad sólidas, incluida la administración integrada de certificados, la autenticación de usuarios y el descifrado SSL/TLS.
● Elasticidad: Elastic Load Balancing es capaz de controlar cambios rápidos en los patrones de tráfico de la red. Además, la integración profunda con Auto Scaling asegura una capacidad de aplicación suficiente para satisfacer diferentes niveles de carga de aplicaciones sin que haya intervención manual.
● Flexibilidad: Elastic Load Balancing también le permite utilizar direcciones IP para direccionar las solicitudes a los destinos de las aplicaciones. Este proceso otorga flexibilidad en torno a la manera de virtualizar los destinos de sus aplicaciones, lo que le permite alojar más aplicaciones en la misma instancia. También permite que estas aplicaciones tengan grupos de seguridad individuales y usen el mismo puerto de red para simplificar la comunicación entre aplicaciones en la arquitectura basada en microservicios.
● Monitorización y auditoría sólidas: Elastic Load Balancing le permite monitorizar las aplicaciones y su rendimiento en tiempo real con métricas, registros y rastreo de solicitudes de Amazon CloudWatch. De esta manera se mejora la visibilidad del comportamiento de las aplicaciones, lo que permite detectar problemas e identificar cuellos de botella de rendimiento en la pila de aplicaciones en la granularidad de una solicitud individual.
● Equilibrio de cargas híbrido: Elastic Load Balancing permite equilibrar cargas entre recursos locales y de AWS con el mismo balanceador de carga. Esto facilita la migración, la transmisión en modo burst o la conmutación por error de aplicaciones locales a la nube.
Características clave Equilibrio de carga en la capa 7
Puede equilibrar la carga de las aplicaciones HTTP/HTTPS y utilizar características
58
específicas de la capa 7, como encabezados X-Forwarded-For. Compatibilidad con HTTPS
Un balanceador de carga de aplicaciones es compatible con la terminación HTTPS entre los clientes y el balanceador de carga. Los balanceadores de carga de aplicaciones también ofrecen la administración de certificados SSL a través de AWS Identity and Access Management (IAM) y AWS Certificate Manager para establecer políticas de seguridad predefinidas. Indicación de nombre de servidor (SNI)
La indicación de nombre de servidor (SNI) es una extensión del protocolo TLS mediante la cual un cliente indica el nombre de host al cual se debe realizar la conexión al inicio del protocolo de enlace TLS. El balanceador de carga puede presentar varios certificados mediante el mismo agente de escucha seguro, lo que le permite admitir varios sitios web seguros a través del uso de un único agente de escucha seguro. El balanceador de carga de aplicaciones también es compatible con el algoritmo de selección de certificados inteligentes con SNI. Si el nombre de host indicado por un cliente coincide con varios certificados, el balanceador de carga establece cuál es el certificado más adecuado en función de varios factores, entre ellos, las capacidades del cliente. Direcciones IP como destinos
Puede equilibrar la carga de cualquier aplicación local o alojada en AWS mediante el uso de direcciones IP de los backends de las aplicaciones como destinos. Esto permite equilibrar cargas a un backend de aplicación alojado en cualquier dirección IP y con cualquier interfaz de una instancia. Cada aplicación alojada en la misma instancia puede tener un grupo de seguridad asociado y utilizar el mismo puerto. También puede usar direcciones IP como destinos para equilibrar cargas de aplicaciones alojadas en ubicaciones locales (a través de una conexión de VPN o de Direct Connect), VPC emparejadas y EC2-Classic (con ClassicLink). La capacidad para equilibrar cargas entre recursos locales y alojados en AWS lo ayuda a migrar a la nube, solicitar ráfagas a la nube y conmutar por error en la nube. Funciones de AWS Lambda como destinos
Los balanceadores de carga de aplicaciones son compatibles con las funciones de Lambda para poder atender solicitudes HTTP, permitiendo a los usuarios acceder a aplicaciones sin servidor desde cualquier cliente HTTP, incluyendo navegadores web. Puede registrar sus funciones Lambda como destinos para un balanceador de carga y utilizar el soporte para reglas de direccionamiento basadas en contenido para dirigir solicitudes a distintas funciones Lambda. Puede utilizar el balanceador de carga de aplicaciones como un punto de enlace HTTP común para aplicaciones que utilizan servidores e informática sin servidor. Puede crear un sitio web completo utilizando funciones Lambda o combinar instancias EC2, contenedores, servidores locales y funciones Lambda para crear aplicaciones.
59
Grupos de destino para los Application Load Balancers Cada grupo de destino se utiliza para direccionar solicitudes a uno o varios destinos registrados. Cuando se crea la regla de cada agente de escucha, se especifican un grupo de destino y las condiciones. Cuando se cumple la condición de una regla, el tráfico se reenvía al grupo de destino correspondiente. Puede crear grupos de destino diferentes para los distintos tipos de solicitudes. Por ejemplo, puede crear un grupo de destino para las solicitudes generales y otros grupos de destino para las solicitudes destinadas a los microservicios de la aplicación. Para obtener más información, consulte Componentes de Balanceador de carga de aplicaciones. Puede definir la configuración de comprobación de estado del balanceador de carga para cada grupo de destino. Cada grupo de destino utiliza la configuración de comprobación de estado predeterminada, a menos que la anule al crear el grupo de destino o la modifique posteriormente. Después de especificar un grupo de destino en una regla para un agente de escucha, el balanceador de carga monitoriza constantemente el estado de todos los destinos registrados en el grupo de destino que se encuentran en una zona de disponibilidad habilitada para el balanceador de carga. El balanceador de carga direcciona las solicitudes a los destinos registrados que se encuentran en buen estado. Más información: https://docs.aws.amazon.com/es_es/elasticloadbalancing/latest/application/load-balancer-target-groups.html Agentes de escucha para Application Load Balancer Antes de comenzar a utilizar Balanceador de carga de aplicaciones, debe agregar uno o varios agentes de escucha. Un agente de escucha es un proceso que comprueba las solicitudes de conexión utilizando el protocolo y el puerto configurados. Las reglas que se definen para un agente de escucha determinan cómo el balanceador de carga va a direccionar las solicitudes a los destinos de uno o varios grupos de destino. Más información: https://docs.aws.amazon.com/es_es/elasticloadbalancing/latest/application/load-balancer-listeners.html
Amazon CloudWatch Visibilidad completa de sus aplicaciones y recursos de la nube Amazon CloudWatch es un servicio de monitoreo y administración creado para desarrolladores, operadores de sistemas, ingenieros de fiabilidad de sitio (SRE) y gerentes de TI. CloudWatch le ofrece datos e información procesable para monitorear sus aplicaciones, comprender cambios de rendimiento que afectan a todo el sistema y tomar acciones, optimizar el uso de recursos y lograr una vista unificada del estado de las operaciones. CloudWatch recopila datos de monitoreo y operaciones en formato de
60
registros, métricas y eventos, lo que le ofrece una vista unificada de los recursos, las aplicaciones y los servicios de AWS que se ejecutan en servidores locales y de AWS. Puede usar CloudWatch para definir alarmas de alta resolución, ver registros y métricas lado a lado, tomar acciones automatizadas, resolver errores y descubrir información para optimizar sus aplicaciones y asegurarse de que se estén ejecutando sin problemas. Características de Amazon CloudWatch Amazon CloudWatch es un servicio de monitoreo y administración que suministra datos e información procesable para aplicaciones y recursos de infraestructura locales, híbridos y de AWS. Con CloudWatch, puede recopilar y obtener acceso a todos los datos de rendimiento y operaciones en formato de registros y métricas a partir de una sola plataforma. Esto le permite superar el desafío de monitorear aplicaciones y sistemas individuales aislados (servidor, red, base de datos, etc.). CloudWatch le permite monitorear una pila completa (aplicaciones, infraestructura y servicios) y utilizar alarmas, registros y datos de eventos para tomar acciones automatizadas y disminuir el tiempo de resolución (MTTR). Esto libera recursos importantes y le permite enfocarse en la creación de aplicaciones y valor comercial. CloudWatch le suministra información procesable que lo ayuda a optimizar el rendimiento de las aplicaciones, a administrar el uso de recursos y a conocer el estado de las operaciones de todo el sistema. CloudWatch ofrece una visibilidad de hasta 1 segundo de las métricas y los datos de los registros, 15 meses de retención de datos (métricas) y la capacidad para realizar cálculos con las métricas. Esto le permite realizar análisis históricos para optimizar costos y obtener información en tiempo real sobre los recursos de la infraestructura y la optimización de las aplicaciones. Más información: https://aws.amazon.com/es/cloudwatch/ https://aws.amazon.com/es/cloudwatch/features/
Amazon ElastiCache Almacén de datos en memoria administrado y compatible con Memcached o Redis. Amazon ElastiCache ofrece Redis y Memcached de forma completamente administrada. Implemente, ejecute y ajuste la escala de almacenes de datos en memoria compatibles, de código abierto y conocidos sin inconvenientes. Cree aplicaciones con uso intensivo de datos o mejore el nivel de desempeño de aplicaciones existentes mediante la recuperación de datos a partir de almacenes de datos en memoria de baja latencia y alto grado de procesamiento. Amazon ElastiCache es una excelente opción para videojuegos, tecnología publicitaria, servicios financieros, sanidad y aplicaciones con IoT.
61
Motores de Amazon ElastiCache
● ElastiCache para Redis: Administre y analice datos rápidamente cambiantes con un almacén de datos en memoria.
● ElastiCache para Memcached: Cree una capa de almacenamiento en caché escalable para aplicaciones con uso intensivo de datos.
62