daniel-rhoades.aws-elb
aws-elb-role
Ansible-Rolle zur Vereinfachung der Bereitstellung und Stilllegung eines ELB innerhalb eines AWS-Kontos.
Für detaillierte Informationen zur Erstellung:
- Auto-Scaling-Gruppen: http://docs.ansible.com/ansible/ec2_elb_lb__module.html;
- Route 53: http://docs.ansible.com/ansible/route53_module.html.
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)
Ansible role for simplifying the provisioning and decommissioning of an ELB within an AWS account
ansible-galaxy install daniel-rhoades.aws-elb