Когда дело доходит до управления инфраструктурой в облаке, AWS предоставляет несколько мощных инструментов, которые помогают автоматизировать создание и управление ресурсами.
Одним из самых эффективных способов управления развертываниями является AWS CloudFormation. Он позволяет вам определять вашу инфраструктуру декларативным образом, что упрощает автоматизацию предоставления услуг AWS, включая Elastic Beanstalk, безсерверные приложения, экземпляры EC2, группы безопасности, балансировщики нагрузки и многое другое.
В этом руководстве мы рассмотрим, как использовать AWS CloudFormation для программного развертывания инфраструктуры. Мы также обсудим, как вручную развертывать ресурсы через консоль управления AWS и как интегрировать такие сервисы, как Elastic Beanstalk, безсерверные функции, EC2, IAM и другие ресурсы AWS в ваш автоматизированный рабочий процесс.
Использование AWS CloudFormation для инфраструктуры как кода
AWS CloudFormation позволяет вам определять вашу инфраструктуру с помощью кода. CloudFormation предоставляет единый фреймворк для автоматизации и версионирования вашей инфраструктуры, настраивая Elastic Beanstalk, экземпляры EC2, VPC, роли IAM, функции Lambda или безсерверные приложения.
Шаблоны CloudFormation написаны в формате YAML или JSON и определяют ресурсы, которые вам необходимо предоставить. С помощью CloudFormation вы можете автоматизировать все, от простых приложений до сложных много-сервисных окружений.
Ключевые возможности CloudFormation
- Декларативная конфигурация. Опишите желаемое состояние вашей инфраструктуры, и CloudFormation обеспечит соответствие текущего состояния этому.
- Управление ресурсами. Автоматически предоставляет и управляет ресурсами AWS, такими как экземпляры EC2, базы данных RDS, VPC, функции Lambda, роли IAM и многим другим.
- Декларативные обновления стеков. Если вам нужно изменить вашу инфраструктуру, просто обновите шаблон CloudFormation, и он приведет ваши ресурсы в новое желаемое состояние.
Шаги для использования CloudFormation для различных развертываний AWS
Развертывание Elastic Beanstalk с CloudFormation
1. Напишите шаблон CloudFormation
Создайте шаблон CloudFormation в формате YAML или JSON для определения вашего приложения Elastic Beanstalk и окружения. Этот шаблон может включать ресурсы, такие как экземпляры EC2, группы безопасности, политики масштабирования и даже само приложение Elastic Beanstalk.
Пример шаблона CloudFormation (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. Разверните стек CloudFormation
Используйте AWS CLI или AWS Management Console для развертывания стека CloudFormation. После развертывания CloudFormation автоматически создаст все ресурсы, определенные в шаблоне.
Развертывание через AWS CLI:
bash
aws cloudformation create-stack --stack-name MyElasticBeanstalkStack --template-body file://my-template.yml
Безсерверное развертывание с AWS Lambda, API Gateway и DynamoDB
CloudFormation также отлично подходит для развертывания безсерверных приложений. С такими сервисами, как AWS Lambda, API Gateway, DynamoDB и S3, вы можете легко управлять безсерверными загрузками.
1. Создайте шаблон CloudFormation для безсерверных приложений
Этот шаблон будет включать функцию Lambda, API Gateway для доступа к функции и таблицу DynamoDB.
Пример шаблона CloudFormation (безсерверный):
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. Разверните безсерверный стек
Разверните ваше безсерверное приложение с помощью AWS CLI или AWS Management Console.
bash
aws cloudformation create-stack --stack-name MyServerlessStack --template-body file://serverless-template.yml
Развертывание VPC и EC2
CloudFormation может автоматизировать создание виртуальной частной сети (VPC), подсетей, групп безопасности и экземпляров EC2 для более традиционных загрузок.
1. Шаблон CloudFormation для VPC и EC2
Этот шаблон определяет простой экземпляр EC2 в рамках VPC с группой безопасности, разрешающей HTTP-трафик.
Пример шаблона CloudFormation (VPC и 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. Разверните стек
aws cloudformation create-stack --stack-name MyEC2Stack --template-body file://vpc-ec2-template.yml
Расширенные функции CloudFormation
AWS CloudFormation предлагает больше, чем просто простое предоставление ресурсов. Вот некоторые из расширенных функций, которые делают CloudFormation мощным инструментом для автоматизации инфраструктуры:
- Наборы стеков. Создавайте и управляйте стеками в нескольких учетных записях и регионах AWS, что позволяет обеспечить единообразное развертывание инфраструктуры в вашей организации.
- Наборы изменений. Перед применением изменений к стеку CloudFormation предварительно просмотрите изменения с помощью набора изменений, чтобы убедиться в достижении желаемого результата.
- Выходные значения. Выходные значения из CloudFormation, которые можно использовать для других стеков или приложений. Например, выведите URL API Gateway или IP-адрес экземпляра EC2.
- Параметры. Передайте параметры для настройки вашего стека без изменения самого шаблона, делая его переиспользуемым в различных окружениях.
- Отображения. Создайте пары ключ-значение для сопоставления конфигурационных значений, таких как значения, зависящие от региона AWS, типы экземпляров или другие параметры, зависящие от окружения.
Использование CloudFormation с AWS-сервисами, выходящими за рамки Elastic Beanstalk
CloudFormation не ограничивается только развертыванием через Elastic Beanstalk — это гибкий инструмент, который можно использовать с различными сервисами AWS, включая:
- AWS Lambda. Автоматизируйте развертывание безсерверных функций вместе с триггерами, такими как API Gateway, S3 или события DynamoDB.
- Amazon S3. Используйте CloudFormation для создания ведер S3 и управления их конфигурацией.
- AWS IAM. Автоматизируйте создание ролей и политик IAM для управления доступом к вашим ресурсам.
- Amazon RDS. Определите базы данных RDS (MySQL, PostgreSQL и др.) со всеми соответствующими конфигурациями, такими как настройки VPC, подсети и группы безопасности.
- Amazon SQS, SNS. Управляйте очередями и темами для архитектуры вашего приложения с помощью CloudFormation.
- Amazon ECS и EKS. Автоматизируйте создание и развертывание контейнеризованных приложений с помощью таких сервисов, как ECS и EKS.
Ручное развертывание инфраструктуры из консоли управления AWS
Хотя CloudFormation автоматизирует процесс, иногда требуется ручное вмешательство. Консоль управления AWS позволяет вам вручную развертывать ресурсы.
1. Приложение Elastic Beanstalk
- Перейдите в консоль Elastic Beanstalk.
- Нажмите Создать приложение, следуйте инструкциям, чтобы определить имя приложения и платформу (например, Docker, Node.js), а затем вручную настройте окружение, масштабирование и параметры безопасности.
2. Безсерверные приложения (Lambda + API Gateway)
- Перейдите в консоль Lambda, чтобы создать и развернуть функции.
- Используйте консоль API Gateway для создания API для ваших функций Lambda.
3. Экземпляры EC2
- Вручную запускайте экземпляры EC2 из консоли EC2 и настраивайте их с выбранным типом экземпляра, группами безопасности и парами ключей.
Заключение
AWS CloudFormation предоставляет последовательный и повторяемый способ управления инфраструктурой для приложений Elastic Beanstalk, безсерверных архитектур и приложений на базе EC2. С его расширенными функциями, такими как Stack Sets, Change Sets и Параметры, CloudFormation может масштабироваться для удовлетворения потребностей сложных сред.
Для всех, кто управляет большими или динамичными окружениями AWS, CloudFormation является важным инструментом для обеспечения согласованности, безопасности и автоматизации во всех ваших развертываниях AWS.
Source:
https://dzone.com/articles/automate-aws-infrastructure-deployment