Wie man

Erstellen und Konfigurieren von AWS Application Load Balancer mit CloudFormation

Erstellen und Konfigurieren von AWS Application Load Balancer mit CloudFormation

Dieses Tutorial soll den Leser durch das Erstellen eines Application Load Balancer und seiner Abhängigkeiten mit CloudFormation führen. Die Vorlage erstellt:

Die AWS-Cloud-Plattform bietet verwaltete Load Balancer mit dem Elastic Load Balancer-Service. Man hat Optionen zum Erstellen einer Anwendung (Layer7), Netzwerk (Layer 4) oder Classic Load Balancer (sowohl Layer 4 als auch 7). Für dieses Tutorial erstellen wir einen Application Load Balancer.

Ein Load Balancer ist aus folgenden Gründen nützlich:

Es verleiht unseren Anwendungen eine hohe Verfügbarkeit. Die Verwendung eines Load Balancers in unseren Anwendungen ermöglicht es, den Datenverkehr an mehrere Back-End-Server weiterzuleiten. Fällt ein Server aus, wird der Datenverkehr an die anderen Server weitergeleitet. Dies ist auch gut, um eine gleichmäßige Verteilung des Datenverkehrs zwischen den verschiedenen Servern zu gewährleisten.

Es ist auch nützlich, um den Verkehr basierend auf den konfigurierten Regeln zu leiten/zu filtern. Durch hostbasiertes, pfadbasiertes Routing oder eine Kombination aus beidem kann der Datenverkehr an verschiedene Server geleitet werden.

Voraussetzungen für die Einrichtung

Der Benutzer muss Folgendes haben:

Hinweis: Ein Benutzer kann Zertifikate, die von anderen Zertifikatsgenerierungseinheiten generiert wurden, in den AWS-Zertifikatsmanager importieren und verwenden.

Schritt 1: CloudFormation-Vorlage erstellen

Verwenden Sie den folgenden Code für Ihre CloudFormation-Vorlage. Der Benutzer kann die verschiedenen Teile der Vorlage bearbeiten, wie im nächsten Abschnitt beschrieben.

AWSTemplateFormatVersion: "2010-09-09" Beschreibung: "ALB, ALB-Sicherheitsgruppe, Zielgruppen, Listener und Listener-Regeln erstellen" Parameter: VPC: Typ: String Beschreibung: Der vpc zum Starten des Dienstes Standard: vpc-ID PublicSubnet1: Typ : String Beschreibung: Das Subnetz, in dem der Dienst gestartet werden soll Standard: Subnetz-ID PublicSubnet2: Typ: Zeichenfolge Beschreibung: das Subnetz, in dem der Dienst gestartet werden soll Standard: Subnetz-ID Ressourcen: ALBSecurityGroup: Typ: "AWS::EC2::SecurityGroup" Eigenschaften: GroupDescription: "Sicherheitsgruppe für ALB" GroupName: "test-ALB-SG" Tags: - Schlüssel: "Projekt" Wert: "test-blog" - Schlüssel: "createdBy" Wert: "Maureen Barasa" - Schlüssel: " Umgebung“ Wert: „test“ - Schlüssel: „Name“ Wert: „test-ALB-SG“ VpcId: !Ref VPC SecurityGroupIngress: - CidrIp: "0.0.0.0/0" FromPort: 80 IpProtocol: "tcp" ToPort: 80 - CidrIp: "0.0.0.0/0" FromPort: 443 IpProtocol: "tcp" ToPort: 443 ApplicationLoadBalancer: Typ: "AWS::ElasticLoadBalancingV2::LoadBalancer" Eigenschaften: Name: "test-Application-Load-Balancer" Schema: "internet-facing" Typ: "Anwendung"-Subnetze: - !Ref PublicSubnet1 - !Ref PublicSubnet2 SecurityGroups: - !Ref ALBSecurityGroup IpAddressType: "ipv4" LoadBalancerAttributes: - Schlüssel: "access_logs.s3.aktiviert" Wert: "false" - Schlüssel: "idle_timeout.timeout_seconds" Wert: "60" - Schlüssel: "deletion_protection.aktiviert" Wert: "false" - Schlüssel: "routing.http2.enabled" Wert: "true" - Schlüssel: "routing.http.drop_invalid_header_fields.enabled" Wert: "false" HTTPSlistener: Typ: "AWS::ElasticLoadBalancingV2::Listener" Eigenschaften: LoadBalancerArn: !Ref ApplicationLoadBalancer Port: 443 Protokoll: "HTTPS" SslPolicy: "ELBSecurityPolicy-2016-08" Zertifikate: - CertificateArn: arn:aws:acm:eu-central-1:**************** :certificate/************************ DefaultActions: - Order: 1 TargetGroupArn: !Ref Test1TargetGroup Typ: "forward" HTTPListener: Typ: "AWS::ElasticLoadBalancingV2::Listener" Eigenschaften: LoadBalancerArn: !Ref ApplicationLoadBalancer Port: 80 Protocol: "HTTP" DefaultActions: - Order: 1 RedirectConfig: Protocol: "HTTPS" Port: "443" Host: "#host" Path: "/#path" Query: "# query" StatusCode: "HTTP_301" Typ: "redirect" Test1TargetGroup: Typ: "AWS::ElasticLoadBalancingV2::TargetGroup" Properties: HealthCheckIntervalSeconds: 30 HealthCheckPath: "/" Port: 80 Protocol: "HTTP" HealthCheckPort: "traffic-port " HealthCheckProtocol: "HTTP" HealthCheckTimeoutSeconds: 5 UnhealthyThresholdCount: 2 TargetType: "instance" Matcher: HttpCode: "200" HealthyThresholdCount: 5 VpcId: !VPC-Referenzname: "target-group-1" HealthCheckEnabled: true TargetGroupAttributes: - Schlüssel: "stickiness.enabled" Wert: "false" - Schlüssel: "deregistration_delay.timeout_seconds" Wert: "300" - Schlüssel: "klebrigkeit.type" Wert: "lb_cookie" - Schlüssel: "stickiness.lb_cookie.Dauer_Sekunden" Wert: "86400" - Schlüssel: "slow_start.Dauer_Sekunden" Wert: "0" - Schlüssel: "load_balancing.Algorithmus.type" Wert: "round_robin" Test2TargetGroup: Typ: "AWS::ElasticLoadBalancingV2::TargetGroup" Eigenschaften: HealthCheckIntervalSeconds: 30 HealthCheckPath: "/" Port: 80 Protokoll: "HTTP" HealthCheckPort: "traffic-port" HealthCheckProtocol: "HTTP" HealthCheckTimeoutSeconds: 5 UnhealthyThresholdCount: 2 TargetType: "instance" Matcher: HttpCode: "200" HealthyThresholdCount: 5 VpcId: !Ref VPC-Name: "target-group-2" HealthCheckEnabled: true TargetGroupAttributes: - Schlüssel: "stickiness.enabled" Wert: "false" - Schlüssel: "deregistration_delay.timeout_seconds" Wert: "300" - Schlüssel: "klebrigkeit.type" Wert: "lb_cookie" - Schlüssel: "stickiness.lb_cookie.Dauer_Sekunden" Wert: "86400" - Schlüssel: "slow_start.Dauer_Sekunden" Wert: "0" - Schlüssel: "load_balancing.Algorithmus.type" Wert: "round_robin" TestListenerRule1: Typ: "AWS::ElasticLoadBalancingV2::ListenerRule" Eigenschaften: Priorität: "1" ListenerArn: !Ref HTTPSListener Bedingungen: - Feld: "host-header" Werte: - "test1.Blog.avrc.com" Aktionen: - Typ: "weiter" TargetGroupArn: !Ref Test1TargetGroup Order: 1 ForwardConfig: TargetGroups: - TargetGroupArn: !Ref Test1TargetGroup Weight: 1 TargetGroupStickinessConfig: Enabled: false TestListenerRule2: Typ: "AWS::ElasticLoadBalancingV2::ListenerRule" Eigenschaften: Priorität: "2" ListenerArn: !Ref HTTPSListener Bedingungen: - Feld: "host-header" Werte: - "test2.Blog.com" Aktionen: - Typ: "weiter" TargetGroupArn: !Ref Test2TargetGroup Order: 1 ForwardConfig: TargetGroups: - TargetGroupArn: !Ref Test2TargetGroup Weight: 1 TargetGroupStickinessConfig: Enabled: false Ausgaben: ALB: Beschreibung: Der erstellte Loadbalancer-Wert: !Ref ApplicationLoadBalancer TargetGroup1: Beschreibung: Der erstellte TargetGroup 1 Wert: !Ref Test1TargetGroup TargetGroup2: Beschreibung: Der erstellte TargetGroup 2-Wert: !Ref Test2TargetGroup LoadBalancerSecurityGroup: Beschreibung: die Sicherheitsgruppe für den ALB-Wert: !Ref ALBSecurityGroup

Die CloudFormation-Vorlage erklärt

Die Vorlage enthält 3 Abschnitte. Parameter, Ressourcen und Ausgaben.

Parameterbereich

Im Parameterbereich gibt der Benutzer seine dynamischen Variablen ein. In unserer Vorlage sollte der Benutzer die Vorlage anpassen, indem er seine VPC- und Subnetz-IDs eingibt. In unserem Fall ist der Load Balancer mit dem Internet verbunden, daher muss er in öffentlichen Subnetzen erstellt werden. Wenn der Benutzer einen internen Load Balancer erstellen möchte, ist es ratsam, ihn in privaten Subnetzen erstellen zu lassen.

Abschnitt "Ressourcen"

Im Ressourcenabschnitt kann der Benutzer die AWS-Ressourcen definieren, die er erstellen wird.

In unserer Vorlage erstellen wir zunächst die Load Balancer-Sicherheitsgruppe. Die erstellte Sicherheitsgruppe erlaubt eingehenden Datenverkehr von Port 80 und 443. Der Benutzer kann die Sicherheitsgruppe auch anpassen oder weitere Regeln hinzufügen.

Als Nächstes erstellt die Vorlage einen Load Balancer. Der Benutzer kann den Namen des Load Balancers, das Schema oder ob es intern oder mit dem Internet verbunden ist, anpassen. Wenn es intern ist, stellen Sie bitte sicher, dass Sie die Subnetze von öffentlich auf privat ändern. Sie können auch die Load-Balancer-Attribute an ihre spezifischen Anforderungen anpassen.

Seit wir den Hafen geöffnet haben 80 und 443 In der Load Balancer-Sicherheitsgruppe erstellt die Vorlage die beiden Listener für den Load Balancer. Ein Listener auf Port 80 (HTTP) und der andere auf Port 443 (HTTPS). Dann ist für den HTTP-Listener die Vorlage so konfiguriert, dass eine Standardaktion erstellt wird, um alle Anfragen standardmäßig an den HTTPS-Listener weiterzuleiten. Dies kann auch an die Bedürfnisse des Benutzers angepasst werden.

Für den HTTPS-Listener haben wir das von uns generierte Zertifikat für unseren Domainnamen eingefügt. Der Benutzer sollte den Zertifikats-ARN in seine eigene Zertifikats-ARN-ID ändern. Außerdem haben wir eine Standardaktion erstellt, um Traffic an eine Zielgruppe weiterzuleiten. Dadurch wird der gesamte Verkehr weitergeleitet, der sonst nicht an die Zielgruppe geroutet wird. Auch hier kann der Benutzer die Standardaktionen des HTTPS-Listeners an seine spezifischen Bedürfnisse anpassen.

Als nächstes erstellt die Vorlage zwei Zielgruppen. Der Benutzer kann die Eigenschaften der Zielgruppen an seine spezifischen Bedürfnisse anpassen. Wichtig zu beachten ist, dass der Zieltyp entweder eine Instanz (EC2) oder eine IP sein kann.

Schließlich erstellt die Vorlage Listener-Regeln. Für unseren Fall basierend auf hostbasiertem Routing haben wir Listener-Regeln erstellt, die an die spezifischen Zielgruppen weiterleiten. Der Benutzer hat die Möglichkeit, die Regeln anzupassen. Außerdem können sie von hostbasiertem zu pfadbasiertem Routing wechseln.

Ausgänge Abschnitt

Der Abschnitt Ausgaben gibt die Namen der von Ihnen erstellten Ressourcen aus.

Schritt 2: CodePipeline erstellen, um die Vorlage bereitzustellen

Erstellen Sie die CodePipeline-Rolle, um die Vorlage in CloudFormation bereitzustellen. Verwenden Sie die folgende Cloudformationsvorlage, um die Rolle zu erstellen.

AWSTemplateFormatVersion: "2010-09-09" Beschreibung: "Vorlage zum Erstellen von Centos ec2-Instanzen und Installieren von ssm darauf" Ressourcen: IAMInstanceRole: Typ: 'AWS::IAM::Role' Eigenschaften: Beschreibung: Das SSM-Instance-Profil Rollenname: codepipeline -test AssumeRolePolicyDocument: Version: 2012-10-17 Aussage: - Wirkung: Principal zulassen: Dienst: - Cloudformation.Amazonaws.com Aktion: - 'sts:AssumeRole' ManagedPolicyArns: - arn:aws:iam::aws:policy/AWSCloudFormationFullAccess - arn:aws:iam::aws:policy/CloudWatchFullAccess - arn:aws:iam::aws:policy/AmazonEC2FullAccess Tags: - Schlüssel: "Projekt" Wert: "test-blog" - Schlüssel: "Umgebung" Wert: "test" - Schlüssel: "createdBy" Wert: "Maureen Barasa" - Schlüssel: "Name" Wert: "codepipeline-test " IAMInstanceProfile: Typ: AWS::IAM::InstanceProfile-Eigenschaften: InstanceProfileName: codepipeline-test Rollen: - !Ref IAMInstanceRole Ausgaben: Profil: Beschreibung: Der erstellte Instanzprofilwert: !Ref IAMInstanceProfile Rolle: Beschreibung: Die erstellte Rolle Wert: !Ref IAMInstanceRole 

Gehen Sie als Nächstes zur CodeCommit-Konsole. Erstellen Sie dann ein Code-Commit-Repository. Übertragen Sie Ihre Alben-Vorlage in das Repository.

Wählen Sie in der CodePipeline-Konsole Pipeline erstellen . aus.

Pipeline erstellen

Wählen Sie anschließend die Pipeline-Einstellungen. Entscheiden Sie sich für die Servicerolle, eine neue Servicerolle zu erstellen.

Wählen Sie Pipeline-Einstellungen

Wählen Sie außerdem unter Erweiterte Einstellungen den S3-Bucket aus, den Sie zum Speichern Ihrer Artefakte verwenden art. Wählen Sie als Verschlüsselungsschlüssel den standardmäßigen AWS-Schlüssel. Dann klicke weiter.

Erweiterte Einstellungen

Wählen Sie auf dem Bildschirm zum Hinzufügen der Quellstufe Code-Commit als Quellanbieter aus.

Quellstufe hinzufügen

Geben Sie die Details Ihres CodeCommit-Repository-Namens und des Zweigs ein. Belassen Sie auch für die Änderungserkennung die Einstellung auf Amazon CloudWatch Events. Dadurch kann CloudWatch Änderungen an Ihrem Code erkennen und die Pipeline automatisch starten, um diese Änderungen zu aktualisieren. Wenn Sie fertig sind, klicken Sie auf Weiter.

Quellstufeneinstellungen hinzufügen

Klicken Sie im Bildschirm Build-Phase hinzufügen auf Build-Phase überspringen.

Bauphase überspringen

Wählen Sie schließlich auf dem Bildschirm zum Hinzufügen der Bereitstellungsphase CloudFormation als Bereitstellungsoption aus.

Wählen Sie CloudFormation als Bereitstellungsoption

Geben Sie die Details für Ihre CloudFormation-Bereitstellung ein. Hinweis: Verwenden Sie für die Rolle die Rolle, die Sie mit der CloudFormation-Vorlage am Anfang des Abschnitts erstellt haben created.

Details zur Bereitstellungsphase hinzufügen

In der nächsten Phase kann der Benutzer alle vorgenommenen Konfigurationen überprüfen. Wenn alle Konfigurationen korrekt sind, klicken Sie auf Pipeline erstellen.

Sie haben jetzt Ihre erste Pipeline zum Bereitstellen einer CloudFormation-Vorlage erstellt.

Eine erfolgreiche Bereitstellungspipeline

Wichtige Links

Weitere Anleitungen zu AWS:

Glückliches Bauen!!!!

So beheben Sie die Benachrichtigung Ihre Outlook-Kontoeinstellungen sind veraltet
Die Benachrichtigung Ihre Outlook-Kontoeinstellungen sind veraltet kann aus verschiedenen Gründen passieren. In diesem Artikel haben wir versucht, fas...
So entfernen Sie das UAC-Schild von einem Symbol auf Ihrem Desktop
Sind alle Anwendungssymbole unten rechts auf Ihrem Desktop mit einem Schild versehen?? Wenn Sie diese Schilde auf Ihren Symbolen sehen, besteht die Mö...
So aktivieren und deaktivieren Sie den Energiesparmodus in Windows 10
Der Batteriesparmodus kann verwendet werden, um Strom zu sparen, wenn der Akku des Systems fast leer ist. Nehmen wir an, wir haben einen langen Tag un...