Введение в инфраструктуру как код

В постоянно меняющемся мире разработки программного обеспечения управление инфраструктурой стало критически важным аспектом обеспечения масштабируемости, надёжности и эффективности. Именно здесь на помощь приходит инфраструктура как код (IaC), позволяя обращаться с конфигурацией инфраструктуры так же, как и с любым другим кодом. Одним из самых мощных инструментов для реализации IaC на AWS является CloudFormation. В этой статье мы погрузимся в мир CloudFormation, изучим его преимущества, принципы работы и шаг за шагом разберёмся, как начать работу.

Что такое AWS CloudFormation?

AWS CloudFormation — это сервис, предлагаемый AWS, который позволяет создавать и управлять ресурсами AWS с помощью шаблонов. Эти шаблоны написаны на JSON или YAML и описывают ресурсы AWS, которые вы хотите создать и настроить. CloudFormation является декларативным сервисом, что означает, что вы определяете, что хотите создать, а он заботится о деталях того, как это сделать.

Преимущества использования CloudFormation:

  • Упрощённое управление: с CloudFormation можно управлять инфраструктурой согласованно и воспроизводимо. Вы можете хранить файлы конфигурации в системе контроля версий, отслеживать изменения и проверять их во время обзоров кода.
  • Повышение производительности: декларативный подход CloudFormation экономит ваше время, автоматизируя упорядочивание и создание ресурсов. Это повышает производительность и избавляет от утомительных ручных задач.
  • Эффективное управление кодом: CloudFormation позволяет структурировать код инфраструктуры с использованием стеков, что облегчает управление кодом, повторное использование ресурсов и применение лучших практик разработки программного обеспечения.

Прежде чем погрузиться в CloudFormation, необходимо настроить свою среду.

Шаг 1: установка и настройка AWS CLI Чтобы работать с CloudFormation, вам потребуется установить и настроить AWS CLI на вашем компьютере. Вот как вы можете это сделать:

# Установить AWS CLI
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscli-exe-linux-x86_64.zip"
unzip awscli-exe-linux-x86_64.zip
sudo ./aws/install

# Настроить AWS CLI
aws configure

Шаг 2: создание шаблона CloudFormation Шаблон CloudFormation — сердце вашего определения инфраструктуры. Вот простой пример шаблона, который создаёт VPC, подсеть, интернет-шлюз и экземпляр EC2:

AWSTemplateFormatVersion: '2010-09-09'

Resources:
  VPC:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: 10.0.0.0/16

  Subnet:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref VPC
      CidrBlock: 10.0.1.0/24
      AvailabilityZone: us-east-1a

  InternetGateway:
    Type: AWS::EC2::InternetGateway

  AttachGateway:
    Type: AWS::EC2::VPCGatewayAttachment
    Properties:
      VpcId: !Ref VPC
      InternetGatewayId: !Ref InternetGateway

  RouteTable:
    Type: AWS::EC2::RouteTable
    Properties:
      VpcId: !Ref VPC

  Route:
    Type: AWS::EC2::Route
    Properties:
      RouteTableId: !Ref RouteTable
      DestinationCidrBlock: 0.0.0.0/0
      GatewayId: !Ref InternetGateway

  RouteTableAssociation:
    Type: AWS::EC2::SubnetRouteTableAssociation
    Properties:
      SubnetId: !Ref Subnet
      RouteTableId: !Ref RouteTable

  SecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: Allow SSH from anywhere
      VpcId: !Ref VPC
      SecurityGroupIngress:
        - IpProtocol: tcp
          FromPort: 22
          ToPort: 22
          CidrIp: 0.0.0.0/0

  EC2Instance:
    Type: AWS::EC2::Instance
    Properties:
      InstanceType: t2.micro
      ImageId: ami-0c94855ba95c71c99 # Замените на желаемый AMI
      SubnetId: !Ref Subnet
      SecurityGroupIds:
        - !Ref SecurityGroup
      KeyName: your-ssh-key # Замените на имя вашего SSH-ключа

Шаг 3: создание стека CloudFormation Для создания стека CloudFormation вы можете использовать AWS CLI или консоль управления AWS. Вот как это можно сделать с помощью AWS CLI:

aws cloudformation create-stack --stack-name my-first-stack --template-body file://path/to/your/template.yaml --capabilities CAPABILITY_IAM

Понимание шаблонов CloudFormation

Шаблоны CloudFormation являются основой вашей конфигурации инфраструктуры. Вот некоторые ключевые компоненты шаблона CloudFormation:

  • Ресурсы — это компоненты AWS, которые вы хотите создать. В приведённом выше примере мы определили ресурсы, такие как VPC, подсеть, интернет-шлюз, таблица маршрутов, группа безопасности и экземпляр EC2.
  • Параметры позволяют вводить значения при создании или обновлении стека. Это делает ваши шаблоны более гибкими и повторно используемыми.
Parameters:
  VpcCidrBlock:
    Type: String
    Default: 10.0.0.0/16
    Description: CIDR-блок для VPC

Resources:
  VPC:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: !Ref VpcCidrBlock
  • Сопоставления позволяют определять пары «ключ-значение», которые можно использовать для настройки ресурсов.
Mappings:
  RegionMap:
    us-east-1:
      AMI: ami-0c94855ba95c71c99
    us-west-1:
      AMI: ami-0d70546e43a941d70

Resources:
  EC2Instance:
    Type: AWS::EC2::Instance
    Properties:
      ImageId: !FindInMap [RegionMap, !Ref 'AWS::Region', AMI]
  • Условия позволяют контролировать создание ресурсов на основе логических условий.
Conditions:
  CreateProdResources: !Equals [Ref EnvironmentType, prod]

Resources:
  EC2Instance:
    Type: AWS::EC2::Instance
    Condition: CreateProdResources
    Properties:
      InstanceType: t2.micro
      ImageId: ami-0c94855ba95c71c99

Управление изменениями и обновлениями

Одной из мощных функций CloudFormation является его способность управлять изменениями и обновлениями инфраструктуры.

  • Наборы изменений создаются, когда вам нужно обновить стек. Они описывают изменения, которые будут внесены. Перед применением набора изменений его можно просмотреть и одобрить.
aws cloudformation create-change-set --stack-name my-first-stack --template-body file://path/to/your/updated-template.yaml --change-set-name my-change-set
aws cloudformation describe-change-set --stack-name my-first-stack --change-set-name my-change-set
aws cloudformation execute-change-set --stack-name my-first-stack --change-set-name my-change-set
  • Механизм отката гарантирует, что ваша инфраструктура будет восстановлена до предыдущего состояния в случае возникновения ошибки.

Лучшие практики и советы

  • Используйте вложенные стеки, чтобы повторно использовать шаблоны в других шаблонах, делая ваш код инфраструктуры более модульным и удобным в обслуживании.
Resources:
  VPCStack:
    Type: AWS::CloudFormation::Stack
    Properties:
      TemplateURL: https://s3.amazonaws.com/my-bucket/vpc-template.yaml
  • Всегда проверяйте свои шаблоны перед их развёртыванием в рабочей среде. CloudFormation предоставляет механизм проверки, который сканирует шаблон на наличие синтаксических и семантических ошибок.

Заключение

Внедрение инфраструктуры как кода с AWS CloudFormation представляет собой мощный способ управления и развёртывания облачных ресурсов. Используя CloudFormation, вы можете обеспечить согласованность, воспроизводимость и масштабируемость инфраструктуры. Не забывайте следовать передовым методам, таким как использование вложенных стеков, проверка шаблонов и их хранение в системе управления версиями.

Приступая к этому путешествию, помните, что IaC — это не просто написание шаблонов; это создание культуры автоматизации и постоянного улучшения в вашей команде. Поэтому вперёд, погружайтесь в мир CloudFormation и наблюдайте, как управление вашей инфраструктурой становится проще.