daniel-rhoades.aws-elb

Circle CI

aws-elb-role

Ansible-Rolle zur Vereinfachung der Bereitstellung und Stilllegung eines ELB innerhalb eines AWS-Kontos.

Für detaillierte Informationen zur Erstellung:

Diese Rolle richtet ein Multi-AZ ELB vollständig ein und registriert es mit einem Route 53 Eintrag in einer von Ihnen gewählten Zone.

Anforderungen

Benötigt die neuesten Ansible EC2-Support-Module zusammen mit Boto.

Sie müssen auch Ihre Ansible-Umgebung für die Verwendung mit AWS konfigurieren. Weitere Informationen finden Sie unter http://docs.ansible.com/ansible/guide_aws.html.

Rollenvariablen

Standardwerte:

  • elb_purge_subnets: Bestehende Zuhörer im ELB, die nicht in den Zuhörern gefunden werden, werden gelöscht, Standardwert ist wahr;
  • elb_cross_az_load_balancing: Verteilung der Last auf alle konfigurierten Verfügbarkeitszonen, Standardwert ist wahr;
  • elb_connection_draining_timeout: Wartezeit, um Verbindungen abzulassen, bevor eine Instanz beendet wird, Standardwert ist 60 Sekunden;
  • elb_listeners: Zuhörer für den ELB, 80:80 ist standardmäßig verfügbar;
  • elb_health_check: Gesundheitsprüfung zur Bestimmung der Instanzgesundheit, Standard ist eine TCP-Verbindung zu Port 80 herzustellen;
  • route53_overwrite: Überschreibt vorhandene Einträge, falls erforderlich, Standardwert ist wahr;
  • route53_alias_evaluate_target_health: Wenn Sie möchten, dass Route 53 die Zielgesundheit überwacht, Standardwert ist wahr;
  • ec2_elb_state: Zustand des ELB, Standardwert ist "present";
  • route53_zone_state: Zustand der Route 53 Zone, Standardwert ist "present".

Erforderliche Variablen:

  • elb_name: Sie müssen den Namen des ELB angeben, den Sie erstellen möchten, z. B. my-elb;
  • elb_security_groups: Sie müssen die Sicherheitsgruppen angeben, die auf den ELB angewendet werden sollen, siehe das untenstehende Beispiel-Playbook;
  • elb_region: Sie müssen die Region angeben, in der Sie den ELB erstellen möchten, z. B. eu-west-1;
  • elb_subnets: Sie müssen die Subnetze angeben, in denen der ELB verfügbar sein soll, siehe das untenstehende Beispiel-Playbook;
  • route53_zone: Sie müssen den Namen der Zone angeben, die Sie definieren möchten, z. B. example.com;
  • route53_host: Sie müssen den Namen des Hosts angeben, den Sie in der Zone definieren möchten, z. B. www.example.com.

Abhängigkeiten

Hier sollte eine Liste anderer Rollen stehen, die auf Galaxy gehostet sind, sowie alle Details zu Parametern, die möglicherweise für andere Rollen festgelegt werden müssen, oder Variablen, die von anderen Rollen verwendet werden.

Beispiel-Playbook

Bevor Sie diese Rolle verwenden, müssen Sie die Rolle installieren. Der einfachste Weg dies zu tun, ist: ansible-galaxy install daniel-rhoades.aws-elb-role.

Zum vollständigen Verständnis erstellt das Beispiel

  • VPC, um den ECS-Cluster zu halten, unter Verwendung der Rolle: daniel-rhoades.aws-vpc;
  • EC2-Sicherheitsgruppen, die auf die EC2-Instanzen angewendet werden, unter Verwendung der Rolle: daniel-rhoades.aws-security-group.

Nach der Erstellung können Sie Ihre EC2-Instanzen mit dem ELB registrieren. Das Beispiel erwartet, dass my_route53_zone als Umgebungsvariable über die Befehlszeile übergeben wird.

- name: Mein System | Bereitstellung aller erforderlichen Infrastruktur
  hosts: localhost
  connection: local
  gather_facts: no
  vars:
    my_vpc_name: "my_example_vpc"
    my_vpc_region: "eu-west-1"
    my_vpc_cidr: "172.40.0.0/16"
    everywhere_cidr: "0.0.0.0/0"

    # Subnetze innerhalb der 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"

    # Erlauben Sie den Subnetzen, ins Internet zu routen
    my_public_subnet_routes:
      - subnets:
          - "{{ my_vpc_subnets[0].cidr }}"
          - "{{ my_vpc_subnets[1].cidr }}"
        routes:
          - dest: "{{ everywhere_cidr }}"
            gw: igw

    # Eingehende Sicherheitsgruppen, z.B. öffentlich zugängliche Dienste wie ein Load Balancer
    my_inbound_security_groups:
      - sg_name: inbound-web
        sg_description: Erlaubt HTTP- und HTTPS-Zugriff (öffentlich)
        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 }}"

      # Nur SSH-Zugriff aus dem VPC erlauben, um auf Dienste innerhalb des VPC zuzugreifen, müssten Sie einen
      # temporären Bastion-Host erstellen
      - sg_name: inbound-ssh
        sg_description: Erlaubt SSH-Zugriff
        sg_rules:
         - proto: tcp
           from_port: 22
           to_port: 22
           cidr_ip: "{{ my_vpc_cidr }}"

    # Interne eingehende Sicherheitsgruppen, z.B. Dienste, die nicht direkt außerhalb des VPC zugänglich sein sollten, wie
    # die Webserver hinter dem Load Balancer.
    #
    # Dies muss eine Datei sein, da sie dynamisch nach der Erstellung der eingehenden Sicherheitsgruppen eingebunden werden muss
    my_internal_inbound_security_groups_file: "internal-securitygroups.yml"

    # Ausgehende Regeln, z.B. auf welche Dienste die Webserver selbst zugreifen können
    my_outbound_security_groups:
      - sg_name: outbound-all
        sg_description: Erlaubt ausgehenden Verkehr zu jeder IP-Adresse
        sg_rules:
          - proto: all
            cidr_ip: "{{ everywhere_cidr }}"

    # Name des ELB
    my_elb_name: "my-elb"

    # Name des Hosts, der auf der Route 53-Zone erstellt werden soll
    my_route53_host: "my-service-test"

  roles:
    # Netzwerk bereitstellen
    - {
        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 }}"
      }

    # Sicherheitsgruppen bereitstellen
    - {
        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 }}"
      }

    # ELB bereitstellen und es mit einem Alias in Route 53 registrieren
    - {
        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 }}"
      }

Das Beispiel internal-securitygroups.yml sieht so aus:

ec2_group_internal_inbound_sg:
  - sg_name: inbound-web-internal
    sg_description: Erlaubt HTTP- und HTTPS-Zugriff (nur von Load Balancer)
    sg_rules:
      - proto: tcp
        from_port: 80
        to_port: 80
        group_id: "{{ ec2_group_inbound_sg.results[0].group_id }}"

Um den ELB stillzulegen:

- name: Mein System | Stilllegung aller erforderlichen Infrastruktur
  hosts: localhost
  connection: local
  gather_facts: no
  vars:
    my_vpc_name: "my_example_vpc"
    my_vpc_region: "eu-west-1"
    my_vpc_cidr: "172.40.0.0/16"
    everywhere_cidr: "0.0.0.0/0"

    # Subnetze innerhalb der 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"

    # Erlauben Sie den Subnetzen, ins Internet zu routen
    my_public_subnet_routes:
      - subnets:
          - "{{ my_vpc_subnets[0].cidr }}"
          - "{{ my_vpc_subnets[1].cidr }}"
        routes:
          - dest: "{{ everywhere_cidr }}"
            gw: igw

    # Name des ECS-Clusters, der erstellt werden soll
    my_ecs_cluster_name: "my-cluster"

    # Name des ELB
    my_elb_name: "my-elb"

    # Name des Hosts, der auf der Route 53-Zone erstellt werden soll
    my_route53_host: "my-service-test"

  roles:
    # Netzwerk bereitstellen
    - {
        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 }}"
      }

    # Sicherheitsgruppen bereitstellen
    - {
        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 }}"
      }

    # Stilllegen des ELB (REST-Endpunkt)
    - {
        role: aws-elb-role,
        ec2_elb_state: "absent",
        vpc_name: "{{ my_vpc_name }}",
        elb_name: "{{ my_elb_name }}",
        route53_zone: "{{ my_route53_zone }}",
        route53_host: "{{ my_route53_host }}"
      }

Lizenz

MIT

Autoreninformationen

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

Über das Projekt

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

Installieren
ansible-galaxy install daniel-rhoades.aws-elb
GitHub Repository
Lizenz
mit
Downloads
83
Besitzer
Strategist, Technologist and Engineer