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:
- Grupy auto-skalowania: http://docs.ansible.com/ansible/ec2_elb_lb__module.html;
- Route 53: http://docs.ansible.com/ansible/route53_module.html.
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)
Ansible role for simplifying the provisioning and decommissioning of an ELB within an AWS account
ansible-galaxy install daniel-rhoades.aws-elb