Wenn es um das Management von Infrastruktur in der Cloud geht, bietet AWS mehrere leistungsstarke Werkzeuge, die helfen, die Erstellung und Verwaltung von Ressourcen zu automatisieren.
Eine der effektivsten Methoden zur Handhabung von Bereitstellungen ist AWS CloudFormation. Es ermöglicht Ihnen, Ihre Infrastruktur deklarativ zu definieren, was die Automatisierung der Bereitstellung von AWS-Diensten erleichtert, einschließlich Elastic Beanstalk, serverloser Anwendungen, EC2-Instanzen, Sicherheitsgruppen, Load Balancern und mehr.
In diesem Leitfaden werden wir untersuchen, wie man AWS CloudFormation verwendet, um Infrastruktur programmgesteuert bereitzustellen. Wir werden auch behandeln, wie man Ressourcen manuell über die AWS Management Console bereitstellt und wie man Dienste wie Elastic Beanstalk, serverlose Funktionen, EC2, IAM und andere AWS-Ressourcen in Ihren automatisierten Workflow integriert.
Verwendung von AWS CloudFormation für Infrastructure as Code
AWS CloudFormation ermöglicht es Ihnen, Ihre Infrastruktur mit Code zu definieren. CloudFormation bietet einen einheitlichen Rahmen, um Ihre Infrastruktur zu automatisieren und zu versionieren, indem Sie Elastic Beanstalk, EC2-Instanzen, VPCs, IAM-Rollen, Lambda-Funktionen oder serverlose Anwendungen einrichten.
CloudFormation-Vorlagen werden im YAML- oder JSON-Format geschrieben und definieren die Ressourcen, die Sie bereitstellen müssen. Mit CloudFormation können Sie alles von einfachen Anwendungen bis hin zu komplexen, mehrdienstlichen Umgebungen automatisieren.
Hauptmerkmale von CloudFormation
- Deklarative Konfiguration. Beschreiben Sie den gewünschten Zustand Ihrer Infrastruktur, und CloudFormation sorgt dafür, dass der aktuelle Zustand übereinstimmt.
- Ressourcenmanagement. Automatisch Provisionierung und Verwaltung von AWS-Ressourcen wie EC2-Instanzen, RDS-Datenbanken, VPCs, Lambda-Funktionen, IAM-Rollen und mehr.
- Deklarative Stack-Updates. Wenn Sie Ihre Infrastruktur ändern müssen, aktualisieren Sie einfach die CloudFormation-Vorlage, und sie wird Ihre Ressourcen an den neuen gewünschten Zustand anpassen.
Schritte zur Verwendung von CloudFormation für verschiedene AWS-Bereitstellungen
Elastic Beanstalk-Bereitstellung mit CloudFormation
1. Schreiben Sie eine CloudFormation-Vorlage
Erstellen Sie eine YAML- oder JSON-CloudFormation-Vorlage, um Ihre Elastic Beanstalk-Anwendung und -Umgebung zu definieren. Diese Vorlage kann Ressourcen wie EC2-Instanzen, Sicherheitsgruppen, Skalierungsrichtlinien und sogar die Elastic Beanstalk-Anwendung selbst enthalten.
Beispiel einer CloudFormation-Vorlage (Elastic Beanstalk):
yaml
Resources
MyElasticBeanstalkApplication
Type'AWS::ElasticBeanstalk::Application'
Properties
ApplicationName"my-application"
Description"Elastic Beanstalk Application for my React and Spring Boot app"
MyElasticBeanstalkEnvironment
Type'AWS::ElasticBeanstalk::Environment'
Properties
EnvironmentName"my-app-env"
ApplicationName !Ref MyElasticBeanstalkApplication
SolutionStackName"64bit Amazon Linux 2 v3.4.9 running Docker"
OptionSettings
Namespace"aws:autoscaling:asg"
OptionName"MaxSize"
Value"3"
Namespace"aws:autoscaling:asg"
OptionName"MinSize"
Value"2"
Namespace"aws:ec2:vpc"
OptionName"VPCId"
Value"vpc-xxxxxxx"
Namespace"aws:ec2:vpc"
OptionName"Subnets"
Value"subnet-xxxxxxx,subnet-yyyyyyy"
2. Bereitstellung des CloudFormation-Stacks
Verwenden Sie die AWS CLI oder die AWS Management Console, um den CloudFormation-Stack bereitzustellen. Sobald er bereitgestellt ist, erstellt CloudFormation automatisch alle in der Vorlage definierten Ressourcen.
Bereitstellung über die AWS CLI:
bash
aws cloudformation create-stack --stack-name MyElasticBeanstalkStack --template-body file://my-template.yml
Serverless-Bereitstellung mit AWS Lambda, API Gateway und DynamoDB
CloudFormation eignet sich auch hervorragend für die Bereitstellung von serverlosen Anwendungen. Mit Diensten wie AWS Lambda, API Gateway, DynamoDB und S3 können Sie serverlose Arbeitslasten einfach verwalten.
1. Erstellen Sie eine serverlose CloudFormation-Vorlage
Diese Vorlage enthält eine Lambda-Funktion, ein API Gateway zum Zugriff auf die Funktion und eine DynamoDB-Tabelle.
Beispiel einer CloudFormation-Vorlage (serverlos):
yaml
Resources
MyLambdaFunction
Type'AWS::Lambda::Function'
Properties
FunctionName"MyServerlessFunction"
Handler"index.handler"
Role arn aws iam 123456789012 role/lambda-execution-role
Code
S3Bucket"my-serverless-code-bucket"
S3Key"function-code.zip"
Runtime nodejs14.x
MyAPIGateway
Type'AWS::ApiGateway::RestApi'
Properties
Name"MyAPI"
Description"API Gateway for My Serverless Application"
MyDynamoDBTable
Type'AWS::DynamoDB::Table'
Properties
TableName"MyTable"
AttributeDefinitions
AttributeName"id"
AttributeType"S"
KeySchema
AttributeName"id"
KeyType"HASH"
ProvisionedThroughput
ReadCapacityUnits5
WriteCapacityUnits5
2. Bereitstellen des serverlosen Stapels
Bereiten Sie Ihre serverlose Anwendung mithilfe der AWS CLI oder der AWS Management Console vor.
bash
aws cloudformation create-stack --stack-name MyServerlessStack --template-body file://serverless-template.yml
VPC- und EC2-Bereitstellung
CloudFormation kann die Erstellung eines Virtual Private Cloud (VPC), von Subnetzen, Sicherheitsgruppen und EC2-Instanzen für traditionellere Arbeitslasten automatisieren.
1. CloudFormation-Vorlage für VPC und EC2
Diese Vorlage definiert eine einfache EC2-Instanz innerhalb eines VPCs mit einer Sicherheitsgruppe, die HTTP-Verkehr erlaubt.
Beispiel einer CloudFormation-Vorlage (VPC und EC2):
Resources
MyVPC
Type'AWS::EC2::VPC'
Properties
CidrBlock"10.0.0.0/16"
EnableDnsSupport"true"
EnableDnsHostnames"true"
MySecurityGroup
Type'AWS::EC2::SecurityGroup'
Properties
GroupDescription"Allow HTTP and SSH traffic"
SecurityGroupIngress
IpProtocol"tcp"
FromPort"80"
ToPort"80"
CidrIp"0.0.0.0/0"
IpProtocol"tcp"
FromPort"22"
ToPort"22"
CidrIp"0.0.0.0/0"
MyEC2Instance
Type'AWS::EC2::Instance'
Properties
InstanceType"t2.micro"
ImageId"ami-xxxxxxxx"
SecurityGroupIds
!Ref MySecurityGroup
SubnetId !Ref MyVPC
2. Stapel bereitstellen
aws cloudformation create-stack --stack-name MyEC2Stack --template-body file://vpc-ec2-template.yml
Erweiterte Funktionen von CloudFormation
AWS CloudFormation bietet mehr als nur einfache Ressourcenbereitstellung. Hier sind einige der erweiterten Funktionen, die CloudFormation zu einem leistungsstarken Tool für die Automatisierung von Infrastruktur machen:
- Stack-Sets. Erstellen und verwalten Sie Stapel über mehrere AWS-Konten und Regionen hinweg, um eine konsistente Bereitstellung von Infrastruktur in Ihrer Organisation zu ermöglichen.
- Änderungssets. Bevor Sie Änderungen an Ihrem CloudFormation-Stack vornehmen, können Sie die Änderungen mit einem Änderungsset überprüfen, um das gewünschte Ergebnis sicherzustellen.
- Ausgaben. Ausgabewerte von CloudFormation, die Sie für andere Stacks oder Anwendungen verwenden können. Geben Sie beispielsweise die URL eines API-Gateways oder die IP-Adresse einer EC2-Instanz aus.
- Parameter. Übergeben Sie Parameter, um Ihren Stack anzupassen, ohne die Vorlage selbst zu ändern, sodass er in verschiedenen Umgebungen wiederverwendbar ist.
- Zuordnungen. Erstellen Sie Schlüssel-Wert-Paare zur Zuordnung von Konfigurationswerten, wie AWS regionspezifische Werte, Instanztypen oder andere umgebungsspezifische Parameter.
Verwendung von CloudFormation mit AWS-Diensten jenseits von Elastic Beanstalk
CloudFormation ist nicht nur auf Bereitstellungen mit Elastic Beanstalk beschränkt – es ist ein flexibles Werkzeug, das mit einer Vielzahl von AWS-Diensten verwendet werden kann, einschließlich:
- AWS Lambda. Automatisieren Sie die Bereitstellung serverloser Funktionen zusammen mit Triggern wie API Gateway, S3 oder DynamoDB-Ereignissen.
- Amazon S3. Verwenden Sie CloudFormation, um S3-Buckets zu erstellen und deren Konfiguration zu verwalten.
- AWS IAM. Automatisieren Sie die Erstellung von IAM-Rollen und -Richtlinien, um den Zugriff auf Ihre Ressourcen zu steuern.
- Amazon RDS. Definieren Sie RDS-Datenbanken (MySQL, PostgreSQL usw.) mit allen zugehörigen Konfigurationen wie VPC-Einstellungen, Subnetzen und Sicherheitsgruppen.
- Amazon SQS, SNS. Verwenden Sie CloudFormation, um Warteschlangen und Themen für Ihre Anwendungsarchitektur zu verwalten.
- Amazon ECS und EKS. Automatisieren Sie die Erstellung und Bereitstellung von containerisierten Anwendungen mit Diensten wie ECS und EKS.
Manuelle Bereitstellung von Infrastruktur über die AWS Management Console
Während CloudFormation den Prozess automatisiert, ist manchmal manuelles Eingreifen erforderlich. Die AWS Management Console ermöglicht es Ihnen, Ressourcen manuell bereitzustellen.
1. Elastic Beanstalk-Anwendung
- Gehen Sie zur Elastic Beanstalk-Konsole.
- Klicken Sie auf Anwendung erstellen, folgen Sie den Schritten, um den Anwendungsnamen und die Plattform (z. B. Docker, Node.js) zu definieren, und konfigurieren Sie dann manuell die Umgebung, Skalierung und Sicherheitsoptionen.
2. Serverless-Anwendungen (Lambda + API Gateway)
- Gehen Sie zur Lambda-Konsole, um Funktionen zu erstellen und bereitzustellen.
- Verwenden Sie die API Gateway-Konsole, um APIs für Ihre Lambda-Funktionen zu erstellen.
3. EC2-Instanzen
- Starten Sie EC2-Instanzen manuell über die EC2-Konsole und konfigurieren Sie sie mit Ihrem gewählten Instanztyp, Sicherheitsgruppen und Schlüsselpaaren.
Fazit
AWS CloudFormation bietet eine konsistente und wiederholbare Möglichkeit, die Infrastruktur für Elastic Beanstalk-Anwendungen, serverlose Architekturen und EC2-basierte Anwendungen zu verwalten. Mit seinen erweiterten Funktionen wie Stack Sets, Change Sets und Parametern kann CloudFormation skalieren, um den Anforderungen komplexer Umgebungen gerecht zu werden.
Für alle, die große oder dynamische AWS-Umgebungen verwalten, ist CloudFormation ein unverzichtbares Werkzeug, um Konsistenz, Sicherheit und Automatisierung über alle Ihre AWS-Bereitstellungen hinweg sicherzustellen.
Source:
https://dzone.com/articles/automate-aws-infrastructure-deployment