daniel-rhoades.aws-elb

aws-elb-role

Rola Ansible do uproszczenia tworzenia i usuwania ELB w koncie AWS.

Aby uzyskać szczegółowe informacje na temat tworzenia:

Ta rola całkowicie skonfiguruje ELB z wieloma strefami dostępowymi (multi-AZ) i zarejestruje go w rekordzie Route 53 w wybranej strefie.

Wymagania

Wymaga najnowszych modułów wsparcia EC2 Ansible oraz Boto.

Będziesz musiał również skonfigurować swoje środowisko Ansible do pracy z AWS, zobacz http://docs.ansible.com/ansible/guide_aws.html.

Zmienne Roli

Domyślne:

  • elb_purge_subnets: Usuwa istniejące nasłuchiwacze na ELB, które nie są w listach, domyślnie true;
  • elb_cross_az_load_balancing: Rozkłada obciążenie na wszystkie skonfigurowane strefy dostępowe, domyślnie true;
  • elb_connection_draining_timeout: Czeka określony czas, pozwalając na zakończenie połączeń przed wyłączeniem instancji, domyślnie 60 sekund;
  • elb_listeners: Nasłuchiwacze dla ELB, domyślnie dostępny port 80:80;
  • elb_health_check: Sprawdzenie stanu do wykonania w celu określenia stanu instancji, domyślnie wykonuje połączenie TCP do portu 80;
  • route53_overwrite: Zastępuje istniejące wpisy, jeśli to konieczne, domyślnie true;
  • route53_alias_evaluate_target_health: Jeśli chcesz, aby Route 53 monitorował stan celu, domyślnie true;
  • ec2_elb_state: Stan ELB, domyślnie "obecny";
  • route53_zone_state: Stan strefy Route 53, domyślnie "obecny".

Wymagane zmienne:

  • elb_name: Musisz określić nazwę ELB, który chcesz utworzyć, np. my-elb;
  • elb_security_groups: Musisz określić grupy zabezpieczeń, które mają być zastosowane do ELB, zobacz przykładowy skrypt poniżej;
  • elb_region: Musisz określić region, w którym chcesz utworzyć ELB, np. eu-west-1;
  • elb_subnets: Musisz określić podsieci, w których chcesz udostępnić ELB, zobacz przykładowy skrypt poniżej;
  • route53_zone: Musisz określić nazwę strefy, którą chcesz zdefiniować, np. example.com;
  • route53_host: Musisz określić nazwę hosta, którą chcesz zdefiniować w strefie, np. www.example.com.

Zależności

Tutaj powinna się znaleźć lista innych ról hostowanych w Galaxy, a także szczegóły dotyczące parametrów, które mogą być potrzebne dla innych ról lub zmiennych wykorzystywanych z innych ról.

Przykładowy Skrypt

Przed użyciem tej roli musisz zainstalować rolę, najprostszy sposób, aby to zrobić: ansible-galaxy install daniel-rhoades.aws-elb-role.

Dla pełności przykłady tworzą

  • VPC do trzymania klastra ECS, przy użyciu roli: daniel-rhoades.aws-vpc;
  • Grupy zabezpieczeń EC2, które mają być stosowane do instancji EC2, przy użyciu roli: daniel-rhoades.aws-security-group.

Po utworzeniu możesz zarejestrować swoje instancje EC2 w ELB. Przykład oczekuje, że my_route53_zone zostanie przekazane jako zmienna środowiskowa w wierszu poleceń.

- name: Mój system | Utwórz całą wymaganą 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"

    # Podsieci w 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"

    # Pozwól podsieciom na kierowanie do świata zewnętrznego
    my_public_subnet_routes:
      - subnets:
          - "{{ my_vpc_subnets[0].cidr }}"
          - "{{ my_vpc_subnets[1].cidr }}"
        routes:
          - dest: "{{ everywhere_cidr }}"
            gw: igw

    # Grupy zabezpieczeń przychodzących, np. usługi publiczne, takie jak load balancer
    my_inbound_security_groups:
      - sg_name: inbound-web
        sg_description: pozwól na dostęp http i https (publiczny)
        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 }}"

      # Pozwól na dostęp SSH tylko z VPC, aby uzyskać dostęp do usług w VPC, musisz utworzyć
      # tymczasowy host bastion
      - sg_name: inbound-ssh
        sg_description: pozwól na dostęp ssh
        sg_rules:
         - proto: tcp
           from_port: 22
           to_port: 22
           cidr_ip: "{{ my_vpc_cidr }}"

    # Wewnętrzne grupy zabezpieczeń przychodzących, np. usługi, do których dostęp nie powinien być bezpośredni zewnętrzny,
    # jak serwery internetowe za load balancerem.
    #
    # To musi być plik, ponieważ musi być dynamicznie dołączony po utworzeniu grup zabezpieczeń przychodzących
    my_internal_inbound_security_groups_file: "internal-securitygroups.yml"

    # Zasady wychodzące, np. jakie usługi mogą serwery internetowe używać samodzielnie
    my_outbound_security_groups:
      - sg_name: outbound-all
        sg_description: pozwala na ruch wychodzący do dowolnego adresu IP
        sg_rules:
          - proto: all
            cidr_ip: "{{ everywhere_cidr }}"

    # Nazwa ELB
    my_elb_name: "my-elb"

    # Nazwa hosta, który ma być utworzony w strefie Route 53
    my_route53_host: "my-service-test"

  roles:
    # Provision networking
    - {
        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 }}"
      }

    # Provision security groups
    - {
        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 }}"
      }

    # Provision an ELB and register it with an alias in 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 }}"
      }

Przykład internal-securitygroups.yml wygląda następująco:

ec2_group_internal_inbound_sg:
  - sg_name: inbound-web-internal
    sg_description: pozwól na dostęp http i https (tylko z load balancera)
    sg_rules:
      - proto: tcp
        from_port: 80
        to_port: 80
        group_id: "{{ ec2_group_inbound_sg.results[0].group_id }}"

Aby usunąć ELB:

- name: Mój system | Zlikwiduj całą wymaganą 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"

    # Podsieci w 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"

    # Pozwól podsieciom na kierowanie do świata zewnętrznego
    my_public_subnet_routes:
      - subnets:
          - "{{ my_vpc_subnets[0].cidr }}"
          - "{{ my_vpc_subnets[1].cidr }}"
        routes:
          - dest: "{{ everywhere_cidr }}"
            gw: igw

    # Nazwa klastra ECS do utworzenia
    my_ecs_cluster_name: "my-cluster"

    # Nazwa ELB
    my_elb_name: "my-elb"

    # Nazwa hosta do utworzenia w strefie Route 53
    my_route53_host: "my-service-test"

  roles:
    # Provision networking
    - {
        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 }}"
      }

    # Provision security groups
    - {
        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 }}"
      }

    # Zlikwiduj ELB (punkt końcowy REST)
    - {
        role: aws-elb-role,
        ec2_elb_state: "nieobecny",
        vpc_name: "{{ my_vpc_name }}",
        elb_name: "{{ my_elb_name }}",
        route53_zone: "{{ my_route53_zone }}",
        route53_host: "{{ my_route53_host }}"
      }

Licencja

MIT

Informacje o autorze

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

O projekcie

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

Zainstaluj
ansible-galaxy install daniel-rhoades.aws-elb
Licencja
mit
Pobrania
83
Właściciel
Strategist, Technologist and Engineer