Apuntes

Aquí encontrarás mis apuntes para aprobar la certificación de AWS Cloud Practitioner

Automatizando flujos de trabajo

La automatización ofrece algunos de los siguientes beneficios:


  • Rapidez en el testing y en la experimentación.

  • Reducción de gastos.

  • Minimización de errores humanos.

  • Echar para atrás cambios de forma segura.


La aproximación imperativa

El caso más común de automatización es el scripting mediante lenguajes como Bash, PowerShell o incluso AWS CLI donde se explicitan los pasos necesarios para llevar a cabo una tarea.


La aproximación imperativa se centra en operaciones paso a paso muy específicas como por ejemplo:


  • Crear instancia EC2

  • Instalar Nginx en instancia EC2

  • Copiar assets a un bucket S3


La aproximación declarativa

Al usar la aproximación declarativa de automatización se escribe el código en el que se declara el resultado esperado de una tarea en lugar de cómo llevarla a cabo.


Por ejemplo, en lugar de usar AWS CLI para crear una VPC y sus subnets, podrías usar código declarativo para especificar la configuración de la VPC y sus subnets.


Esta aproximación requiere como es obvio algún tipo de inteligencia en el software para que sepa cómo interpretar esas tareas.


AWS CloudFormattion es un servicio AWS el cual toma la aproximación declarativa para construir tu infraestructura AWS.

Infraestructure as Code

Definir IaC es un elemento fundamental en la automatización de la nube.


Como la automatización se basa en la ejecución del código por parte de una máquina, reduce el riesgo de error humano inherente a la realización del mismo trabajo de forma manual.


  • CloudFormation: permite automatizar el aprovisionamiento y configuración de recursos AWS.

  • AWS Developer Tools: CodeCommit, CodeBuild, CodeDeploy y CodePipeline:** automatiza el testing, building y deployment de aplicaciones en instancias EC2 y on-premise.

  • EC2 Auto Scaling: automáticamente lanza, configura y termina instancias EC2 según la demanda fluctuante de recursos.

  • Systems Manager: automatiza operaciones comunes como la instalación de parches en volúmenes EBS.

  • OpsWorks: una colección de tres ofertas diferentes que ayudan a automatizar la configuración de instancias y la implantación de aplicaciones mediante las populares plataformas de gestión de la configuración Chef y Puppet.


CloudFormation

Este servicio AWS automátciamente crea y configura tu infraestructura AWS desde código en el que se define los recursos que quieres crear y como quieres que estén configurados.

Templates

Todo esto se hace en las plantillas o templates que utilizan un lenguaje propio de CloudFormation el cual puede ser escrito en JSON o YAML.


Estos templates contienen una descripción de los recursos AWS que quieres crear.


A los templates se les puede pasar parámetros en tiempo de ejecución por lo que todavía más se puede llegar a parametrizar esto.

Stacks

Para aprovisionar un recurso desde una plantilla es necesario especificar un nombre de stack único en tu cuenta AWS.


Un stack es un contenedor que organiza los recursos descritos en una template de forma relacionada entre ellos.


Si borras un stack, CloudFormation borrará automáticamente todos los recursos asociados a ese stack.


Se puede llegar incluso a crear una stack-policy que evite realizar actualizaciones en el stack. Esta policy es un documento JSON separado de la template el cual especifica qué recursos deben ser actualizados o no.

AWS Developer Tools

Éstas son un conjunto de herramientas que ayudar a los desarrolladores a desarrollar, probar, hacer los builds y desplegar en instancias EC2 y en servidores on-premise.


Éstas herramientas facilitan y automatizan las tareas que implican el lanzar una aplicación a un entorno de producción.

CodeCommit

CodeCommit permite crear repositorio Git privados que se integran facilmente con otros servicios AWS.

CodeBuild

CodeBuild es un servicio de compilación totalmente gestionado. Una compilación es un conjunto de acciones realizadas en el código para prepararlo para su despliegue.


Una compilación puede incluir la comprobación del código en busca de errores o transformarlo en un lenguaje accesible para la máquina, pero las acciones de compilación específicas dependen de la aplicación.


Se puede usar CodeBuild incluso para crear contenedores docker o Amazon Machine Images (AMIs)


Se definen tareas específicas en los ficheros de CodeBuild y ese puede obtener el código fuente de repositorios como CodeCommit, Github, Bitbucket o un bucket S3.


AWS ofrece entornos build preconfigurados para Java, Ruby, Puthon, Go, Node, Android, NET, PHP y Docker aunque siempre puedes crear tu propio entorno build.


Puedes elegir entre los siguientes tres tipos de computación para su entorno build (de compilación) para su entorno de construcción:


  • build.general1.small: 3GB ram y 2vCPU

  • build.general1.medium: 7GB ram y 4vCPU

  • build.general1.large: 15GB ram y 8vCPU


Los build.medium y large soportan Windows.

CodeDeploy

CodeDeploy puede automatizar el despliegue en instancias EC2, Lambda o servidores on-premise.


Para deployar a una instancia hay que instalar el agente de CodeDeploy. Este agente le da permiso a CodeDeploy para copiar ficheros a la instancia y realizar las tareas de deploy en el.


Puede desplegar en instancias de acuerdo con etiquetas de recursos específicas, basándose en la pertenencia al grupo de Auto Scaling o simplemente seleccionándolas manualmente.


En función del deploy que sea, CodeDeploy puede realizar dos tipos de deploys diferentes:


  • In-place deployment: despliega la aplicación en una instancia existente. Si la aplicación está corriendo CodeDeploy puede pararla, realizar cualquier clean-up, desplegar la nueva versión y reiniciar la aplicación.

  • Blue/Green deployment: despliega la aplicación a un nuevo conjunto de instancias que tanto tu como CodeDeploy puede crear replicando un grupo existente de AutoScaling. También puede incluso dar de baja las instancias antiguas y redirigir el tráfico a las nuevas instancias si estás utilizando un balanceador de carga.


CodePipeline

CodePipeline ayuda a orquestar y automatizar cualquier tarea que se necesite para mover software de un entorno de desarrollo a otro de producción. Trabaja tomando tu código fuente y procesándolo a través de una serie de stages.


CodePipeline puede tomar automáticamente una aplicación en el repositorio de CodeCommit y desencadenar CodeBuild para realizar pruebas automatizadas contra ella. Una vez que las pruebas pasan, CodePipeline empaqueta los archivos de la aplicación y los coloca en un bucket S3.


Cada stage consiste en al menos una acción y estas acciones pueden ocurrir secuencialmente o en paralelo. Estas son las tareas que puedes incluir en un pipeline:


  • Source: source providers incluyendo S3, CodeCommit, Github y el Contenedor de Registro Elástico (ECR) el cual almacena los contendores dockers para Elastic Container Service (ECS)

  • Build: build & test providers incluyendo CodeBuild, CodeBees, Jenkins y TeamCity.

  • Test
  • Approval: aprovaciones manuales de código a la espera para pasar al siguiente stage.

  • Deploy
  • Invoke: invocar una función Lambda


EC Auto Scaling

EC2 Auto Scaling se encarga de lanzar automáticamente instancias EC2 ya preconfiguradas. Su función es asegurar que tienes los suficientes recursos para hacer frente a la demanda de tus usuarios.


Funciona spawneando instancias desde ficheros de configuración o desde templates de lanzamiento.


Se puede incluso instalar software y hacer configuraciones custom poniéndolas en un scrip Userdata que automáticamente correrá cuando Auto Scaling lance una nueva instancia.


Usar templates de lanzamiento sirven para spawnear instancias EC2 manualmente y puedes modificarlas después de crearlas.


Usar configuraciones de lanzamiento sólo se pueden usar con Auto Scaling y no permite modificarlas una vez las creas.

Auto Scaling Groups

Las instancias lanzadas con Auto Scaling se organizan en grupos. Todas las instancias de un grupo puede ser automáticamente registradas en un balanceador de carga de aplicación el cual distribuye el tráfico entre isntancias.

Auto curación

Si una instancia falla o termina sin haber completado sus stages, Auto Scaling intentará crearla de nuevo y sustituirla.


Auto Scaling puede utilizar los checks de salud (health checks) de los Elastic Load Balancers (ELB) para determinar si una instancia está sana o no.


Se considera que una instancia está sana cuando está corriendo y tiene conectividad.

System Manager

System manager usa la aproximación imperativa para llevar a tus instancias y entornos AWS al estado que deseas en cuanto a configuración se refiere.

Command Documents

Son scripts que pueden correr una vez o periódicamente para llevar al sistema al estado que quieres.


Puedes usarlos para instalar sofware en una instancia, instalar parches de seguridad o hacer un inventario del software instalado en una instancia.


Se pueden usar con Bash o PowerShell y con instancias Linux o Windows.

Configuration Compliance

Es una característica de System Manager que muestra si las instancias cumplen con el estado de configuración deseado ya sea tener las versiones correctas de software o estar al día en cuanto a parches de seguridad.

Distributor

Con Distributor podemos desplegar software “instalable” a las diferentes instancias. Se crea un zip con los instaladores y Distributor se encarga de instalarlos en cada instancia.