daniel-rhoades.aws-elb

Circle CI

aws-elb-role

Rol de Ansible para simplificar el aprovisionamiento y la desactivación de un ELB dentro de una cuenta de AWS.

Para más información detallada sobre la creación:

Este rol configurará completamente un ELB multi-AZ y lo registrará con un registro de Route 53 en la zona de tu elección.

Requisitos

Requiere los últimos módulos de soporte de EC2 de Ansible junto con Boto.

También necesitarás configurar tu entorno de Ansible para usarlo con AWS, consulta http://docs.ansible.com/ansible/guide_aws.html.

Variables del Rol

Por defecto:

  • elb_purge_subnets: Eliminar oyentes existentes en ELB que no se encuentran en los oyentes, por defecto es verdadero;
  • elb_cross_az_load_balancing: Distribuir carga entre todas las zonas de disponibilidad configuradas, por defecto es verdadero;
  • elb_connection_draining_timeout: Esperar un tiempo de espera específico permitiendo que las conexiones se drenen antes de terminar una instancia, por defecto son 60 segundos;
  • elb_listeners: Oyentes para el ELB, 80:80 está disponible por defecto;
  • elb_health_check: Verificación de salud para ejecutar y determinar la salud de la instancia, la predeterminada es hacer una conexión TCP al puerto 80;
  • route53_overwrite: Sobrescribe entradas existentes si es necesario, por defecto es verdadero;
  • route53_alias_evaluate_target_health: Si deseas que Route 53 monitoree la salud del objetivo, por defecto es verdadero;
  • ec2_elb_state: Estado del ELB, por defecto es "presente";
  • route53_zone_state: Estado de la zona de Route 53, por defecto es "presente".

Variables requeridas:

  • elb_name: Debes especificar el nombre del ELB que deseas crear, por ejemplo, my-elb;
  • elb_security_groups: Debes especificar los grupos de seguridad que se aplicarán al ELB que deseas crear, consulta el libro de ejemplos a continuación;
  • elb_region: Debes especificar la región donde deseas crear el ELB, por ejemplo, eu-west-1;
  • elb_subnets: Debes especificar las subredes donde deseas que el ELB esté disponible, consulta el libro de ejemplos a continuación;
  • route53_zone: Debes especificar el nombre de la zona que deseas definir, por ejemplo, example.com;
  • route53_host: Debes especificar el nombre del host que deseas definir en la zona, por ejemplo, www.example.com.

Dependencias

Aquí debería ir una lista de otros roles hospedados en Galaxy, además de cualquier detalle respecto a parámetros que puedan necesitar ser configurados para otros roles, o variables que se utilicen de otros roles.

Ejemplo de Libro de Jugadas

Antes de usar este rol, necesitarás instalarlo. La forma más sencilla de hacerlo es: ansible-galaxy install daniel-rhoades.aws-elb-role.

Para completar, los ejemplos crean

  • VPC para contener el clúster de ECS, usando el rol: daniel-rhoades.aws-vpc;
  • Grupos de seguridad de EC2 para aplicar a las instancias de EC2, usando el rol: daniel-rhoades.aws-security-group.

Después de la creación, puedes registrar tus instancias de EC2 en el ELB. El ejemplo espera que my_route53_zone se pase como una variable de entorno de línea de comandos.

- name: Mi Sistema | Aprovisionar toda la infraestructura necesaria
  hosts: localhost
  connection: local
  gather_facts: no
  vars:
    my_vpc_name: "mi_ejemplo_vpc"
    my_vpc_region: "eu-west-1"
    my_vpc_cidr: "172.40.0.0/16"
    everywhere_cidr: "0.0.0.0/0"

    # Subredes dentro de la VPC
    my_vpc_subnets:
      - cidr: "172.40.10.0/24"
        az: "{{ my_vpc_region }}a"

      - cidr: "172.40.20.0/24"
        az: "{{ my_vpc_region }}b"

    # Permitir que las subredes se conecten al mundo exterior
    my_public_subnet_routes:
      - subnets:
          - "{{ my_vpc_subnets[0].cidr }}"
          - "{{ my_vpc_subnets[1].cidr }}"
        routes:
          - dest: "{{ everywhere_cidr }}"
            gw: igw

    # Grupos de seguridad entrantes, por ejemplo, servicios con acceso público como un balanceador de carga
    my_inbound_security_groups:
      - sg_name: inbound-web
        sg_description: permitir acceso http y https (público)
        sg_rules:
          - proto: tcp
            from_port: 80
            to_port: 80
            cidr_ip: "{{ everywhere_cidr }}"

          - proto: tcp
            from_port: 443
            to_port: 443
            cidr_ip: "{{ everywhere_cidr }}"

      # Solo permitir acceso SSH desde dentro de la VPC, para acceder a cualquier servicio dentro de la VPC necesitarías crear un
      # host extra temporal
      - sg_name: inbound-ssh
        sg_description: permitir acceso ssh
        sg_rules:
         - proto: tcp
           from_port: 22
           to_port: 22
           cidr_ip: "{{ my_vpc_cidr }}"

    # Grupos de seguridad internos, por ejemplo, servicios que no deberían ser accesibles directamente fuera de la VPC, como
    # los servidores web detrás del balanceador de carga.
    #
    # Esto tiene que ser un archivo ya que necesita ser incluido dinámicamente después de que se hayan creado los grupos de seguridad entrantes
    my_internal_inbound_security_groups_file: "internal-securitygroups.yml"

    # Reglas salientes, es decir, qué servicios pueden acceder los servidores web por sí mismos
    my_outbound_security_groups:
      - sg_name: outbound-all
        sg_description: permite tráfico saliente a cualquier dirección IP
        sg_rules:
          - proto: all
            cidr_ip: "{{ everywhere_cidr }}"

    # Nombre del ELB
    my_elb_name: "mi-elb"

    # Nombre del host a crear en la zona de Route 53
    my_route53_host: "mi-servicio-prueba"

  roles:
    # Aprovisionar redes
    - {
        role: daniel-rhoades.aws-vpc,
        vpc_name: "{{ my_vpc_name }}",
        vpc_region: "{{ my_vpc_region }}",
        vpc_cidr_block: "{{ my_vpc_cidr }}",
        vpc_subnets: "{{ my_vpc_subnets }}",
        public_subnet_routes: "{{ my_public_subnet_routes }}"
      }

    # Aprovisionar grupos de seguridad
    - {
        role: daniel-rhoades.aws-security-groups,
        vpc_region: "{{ my_vpc_region }}",
        vpc_id: "{{ vpc.vpc_id }}",
        ec2_group_inbound_sg: "{{ my_inbound_security_groups }}",
        ec2_group_internal_inbound_sg_file: "{{ my_internal_inbound_security_groups_file }}",
        ec2_group_outbound_sg: "{{ my_outbound_security_groups }}"
      }

    # Aprovisionar un ELB y registrarlo con un alias en Route 53
    - {
        role: aws-elb-role,
        elb_name: "{{ my_elb_name }}",
        vpc_name: "{{ my_vpc_name }}",
        elb_security_groups: [
          "{{ ec2_group_inbound_sg.results[0].group_id }}"
          ],
        elb_region: "{{ my_vpc_region }}",
        elb_subnets: [
           "{{ vpc.subnets[0].id }}",
           "{{ vpc.subnets[1].id }}"
         ],
        route53_zone: "{{ my_route53_zone }}",
        route53_host: "{{ my_route53_host }}"
      }

El ejemplo de internal-securitygroups.yml se ve así:

ec2_group_internal_inbound_sg:
  - sg_name: inbound-web-internal
    sg_description: permitir acceso http y https (solo desde el balanceador de carga)
    sg_rules:
      - proto: tcp
        from_port: 80
        to_port: 80
        group_id: "{{ ec2_group_inbound_sg.results[0].group_id }}"

Para desactivar el ELB:

- name: Mi Sistema | Desactivar toda la infraestructura necesaria
  hosts: localhost
  connection: local
  gather_facts: no
  vars:
    my_vpc_name: "mi_ejemplo_vpc"
    my_vpc_region: "eu-west-1"
    my_vpc_cidr: "172.40.0.0/16"
    everywhere_cidr: "0.0.0.0/0"

    # Subredes dentro de la VPC
    my_vpc_subnets:
      - cidr: "172.40.10.0/24"
        az: "{{ my_vpc_region }}a"

      - cidr: "172.40.20.0/24"
        az: "{{ my_vpc_region }}b"

    # Permitir que las subredes se conecten al mundo exterior
    my_public_subnet_routes:
      - subnets:
          - "{{ my_vpc_subnets[0].cidr }}"
          - "{{ my_vpc_subnets[1].cidr }}"
        routes:
          - dest: "{{ everywhere_cidr }}"
            gw: igw

    # Nombre del clúster de ECS a crear
    my_ecs_cluster_name: "mi-cluster"

    # Nombre del ELB
    my_elb_name: "mi-elb"

    # Nombre del host a crear en la zona de Route 53
    my_route53_host: "mi-servicio-prueba"

  roles:
    # Aprovisionar redes
    - {
        role: daniel-rhoades.aws-vpc,
        vpc_name: "{{ my_vpc_name }}",
        vpc_region: "{{ my_vpc_region }}",
        vpc_cidr_block: "{{ my_vpc_cidr }}",
        vpc_subnets: "{{ my_vpc_subnets }}",
        public_subnet_routes: "{{ my_public_subnet_routes }}"
      }

    # Aprovisionar grupos de seguridad
    - {
        role: daniel-rhoades.aws-security-groups,
        vpc_region: "{{ my_vpc_region }}",
        vpc_id: "{{ vpc.vpc_id }}",
        ec2_group_inbound_sg: "{{ my_inbound_security_groups }}",
        ec2_group_internal_inbound_sg_file: "{{ my_internal_inbound_security_groups_file }}",
        ec2_group_outbound_sg: "{{ my_outbound_security_groups }}"
      }

    # Desactivar el ELB (punto final REST)
    - {
        role: aws-elb-role,
        ec2_elb_state: "ausente",
        vpc_name: "{{ my_vpc_name }}",
        elb_name: "{{ my_elb_name }}",
        route53_zone: "{{ my_route53_zone }}",
        route53_host: "{{ my_route53_host }}"
      }

Licencia

MIT

Información del Autor

Daniel Rhoades (https://github.com/daniel-rhoades)

Acerca del proyecto

Ansible role for simplifying the provisioning and decommissioning of an ELB within an AWS account

Instalar
ansible-galaxy install daniel-rhoades.aws-elb
Licencia
mit
Descargas
83
Propietario
Strategist, Technologist and Engineer