Как я превратил промты в инженеров: автоматизация AWS и снижение затрат на 40%

Когда я впервые столкнулся с задачей оптимизировать облачную инфраструктуру AWS, передо мной стоял типичный вызов: разрозненные сервисы, ручное управление и счета, которые росли быстрее, чем моя зарплата. Но вместо того чтобы тратить недели на ручную настройку, я решил использовать промты — специальные инструкции для AI-ассистентов, которые позволили автоматизировать рутину. Результат превзошел ожидания: за три месяца мы сократили расходы на AWS на 40%, а время на управление инфраструктурой — вдвое. В этой статье я поделюсь проверенными промтами, которые превратили хаос в стройную архитектуру.

Важно понимать: промты — это не магия, а инструмент. Они работают только тогда, когда вы четко формулируете задачу, указываете контекст и ожидаемый результат. Я начну с базовых промтов, которые помогут вам освоиться, затем перейду к продвинутым техникам и закончу экспертными решениями для сложных сценариев.

Базовые промты: первые шаги к автоматизации

1. Генерация Terraform-кода для AWS

Задача: Сгенерировать Terraform-конфигурацию для создания VPC с подсетями, Internet Gateway и NAT Gateway.

Промт:

Сгенерируй Terraform-код для AWS VPC с CIDR 10.0.0.0/16, включающий:
- 2 публичные подсети в разных AZ
- 2 приватные подсети в разных AZ
- Internet Gateway для публичных подсетей
- NAT Gateway в публичной подсети для приватных подсетей
- Таблицы маршрутизации с корректными ассоциациями

Пример результата:

provider "aws" {
  region = "us-east-1"
}

resource "aws_vpc" "main" {
  cidr_block = "10.0.0.0/16"
}

resource "aws_subnet" "public" {
  count             = 2
  vpc_id            = aws_vpc.main.id
  cidr_block        = "10.0.${count.index}.0/24"
  availability_zone = element(data.aws_availability_zones.available.names, count.index)
  map_public_ip_on_launch = true
}

resource "aws_subnet" "private" {
  count             = 2
  vpc_id            = aws_vpc.main.id
  cidr_block        = "10.0.${count.index + 10}.0/24"
  availability_zone = element(data.aws_availability_zones.available.names, count.index)
}

resource "aws_internet_gateway" "igw" {
  vpc_id = aws_vpc.main.id
}

resource "aws_eip" "nat" {
  domain = "vpc"
}

resource "aws_nat_gateway" "nat" {
  allocation_id = aws_eip.nat.id
  subnet_id     = aws_subnet.public[0].id
}

resource "aws_route_table" "public" {
  vpc_id = aws_vpc.main.id
  route {
    cidr_block = "0.0.0.0/0"
    gateway_id = aws_internet_gateway.igw.id
  }
}

resource "aws_route_table" "private" {
  vpc_id = aws_vpc.main.id
  route {
    cidr_block     = "0.0.0.0/0"
    nat_gateway_id = aws_nat_gateway.nat.id
  }
}

resource "aws_route_table_association" "public" {
  count          = 2
  subnet_id      = aws_subnet.public[count.index].id
  route_table_id = aws_route_table.public.id
}

resource "aws_route_table_association" "private" {
  count          = 2
  subnet_id      = aws_subnet.private[count.index].id
  route_table_id = aws_route_table.private.id
}

2. Анализ затрат с помощью AWS Cost Explorer

Задача: Получить отчет по затратам за последний месяц с разбивкой по сервисам.

Промт:

Используя AWS Cost Explorer API, составь отчет по затратам за последние 30 дней, сгруппированный по сервисам. Покажи топ-5 сервисов по затратам и процентное соотношение каждого. Данные возьми из метрик LINEITEM_UNBLENDED_COST.

Пример результата:

{
  "ResultsByTime": [
    {
      "TimePeriod": {
        "Start": "2026-07-28",
        "End": "2026-08-27"
      },
      "Groups": [
        {
          "Keys": ["AmazonEC2"],
          "Metrics": {
            "UnblendedCost": {
              "Amount": "1234.56",
              "Unit": "USD"
            }
          }
        },
        {
          "Keys": ["AmazonS3"],
          "Metrics": {
            "UnblendedCost": {
              "Amount": "234.56",
              "Unit": "USD"
            }
          }
        }
      ]
    }
  ]
}

3. Написание CloudFormation-шаблона для EC2-инстанса

Задача: Создать CloudFormation-шаблон для развертывания EC2-инстанса с пользовательскими данными (user-data), устанавливающими Nginx.

Промт:

Создай CloudFormation-шаблон для EC2-инстанса t3.micro с Amazon Linux 2, включи теги Name=WebServer, и добавь user-data скрипт для установки Nginx и запуска сервиса.

Пример результата:

AWSTemplateFormatVersion: "2010-09-09"
Resources:
  WebServer:
    Type: AWS::EC2::Instance
    Properties:
      InstanceType: t3.micro
      ImageId: ami-0abcdef1234567890
      Tags:
        - Key: Name
          Value: WebServer
      UserData:
        Fn::Base64: !Sub |
          #!/bin/bash
          yum update -y
          amazon-linux-extras install nginx1 -y
          systemctl enable nginx
          systemctl start nginx

Продвинутые промты: оптимизация и автоматизация

4. Создание политики IAM с минимальными правами

Задача: Сгенерировать IAM-политику для EC2-инстанса, чтобы он мог только отправлять логи в CloudWatch Logs.

Промт:

Создай IAM-политику для EC2-инстанса, которая разрешает только действия logs:CreateLogStream, logs:PutLogEvents, logs:DescribeLogStreams для конкретного log-group "/aws/ec2/my-app". Используй принцип наименьших привилегий.

Пример результата:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "logs:CreateLogStream",
        "logs:PutLogEvents",
        "logs:DescribeLogStreams"
      ],
      "Resource": "arn:aws:logs:us-east-1:123456789012:log-group:/aws/ec2/my-app:*"
    }
  ]
}

5. Автоматизация остановки неиспользуемых EC2-инстансов

Задача: Написать AWS Lambda-функцию на Python, которая останавливает EC2-инстансы с тегом AutoStop=true в нерабочее время.

Промт:

Напиши AWS Lambda-функцию на Python, которая:
1. Получает список всех EC2-инстансов с тегом AutoStop=true.
2. Проверяет текущее время по UTC.
3. Если время между 20:00 и 08:00, останавливает инстансы.
4. Логирует действия в CloudWatch.

Пример результата:

import boto3
import datetime

def lambda_handler(event, context):
    ec2 = boto3.client('ec2')
    current_hour = datetime.datetime.now(datetime.timezone.utc).hour

    if 20 <= current_hour or current_hour < 8:
        response = ec2.describe_instances(
            Filters=[
                {'Name': 'tag:AutoStop', 'Values': ['true']},
                {'Name': 'instance-state-name', 'Values': ['running']}
            ]
        )
        instances = []
        for reservation in response['Reservations']:
            for instance in reservation['Instances']:
                instances.append(instance['InstanceId'])

        if instances:
            ec2.stop_instances(InstanceIds=instances)
            print(f'Stopped instances: {instances}')
        else:
            print('No instances to stop')
    else:
        print('Not in stop window')

6. Генерация CloudWatch-алерта для превышения бюджета

Задача: Создать CloudWatch Alarm, который срабатывает при превышении затрат более $500 за день.

Промт:

Создай CloudWatch Alarm на основе метрики AWS/Billing EstimatedCharges с порогом 500 долларов и периодом 6 часов. Укажи действие — отправка уведомления в SNS-топик.

Пример результата:

{
  "AlarmName": "DailyBudgetAlarm",
  "AlarmDescription": "Alarm when daily cost exceeds $500",
  "MetricName": "EstimatedCharges",
  "Namespace": "AWS/Billing",
  "Statistic": "Maximum",
  "Dimensions": [
    {
      "Name": "Currency",
      "Value": "USD"
    }
  ],
  "Period": 21600,
  "EvaluationPeriods": 1,
  "Threshold": 500.0,
  "ComparisonOperator": "GreaterThanThreshold",
  "AlarmActions": [
    "arn:aws:sns:us-east-1:123456789012:budget-alerts"
  ]
}

Экспертные промты: глубокий уровень

7. Проектирование отказоустойчивой архитектуры с использованием нескольких AZ

Задача: Спроектировать архитектуру веб-приложения с балансировщиком нагрузки и автоматическим масштабированием.

Промт:

Спроектируй архитектуру для высоконагруженного веб-приложения на AWS. Требования:
- Минимум 3 EC2-инстанса в Auto Scaling Group
- Application Load Balancer с HTTP/HTTPS
- Multi-AZ развертывание
- База данных RDS MySQL с Multi-AZ
- Кэширование через ElastiCache Redis
- Укажи, какие сервисы использовать и как они взаимодействуют.

Пример результата:

Архитектура:
- VPC с 2 AZ (us-east-1a, us-east-1b)
- Публичные подсети: для ALB
- Приватные подсети: для EC2 и RDS
- ALB (Application Load Balancer) распределяет трафик между EC2
- Auto Scaling Group: min=3, max=10, scale out при CPU>70%
- RDS MySQL Multi-AZ: первичный в AZ1, резервный в AZ2
- ElastiCache Redis: кластер с 2 репликами для кэширования
- CloudFront для статики
- Route 53 для DNS

8. Оптимизация затрат: выявление недоиспользуемых ресурсов

Задача: Найти EC2-инстансы с низким использованием CPU за последние 30 дней и предложить уменьшение типа.

Промт:

Используя CloudWatch, проанализируй среднюю загрузку CPU всех EC2-инстансов за последние 30 дней. Выяви те, где средняя загрузка меньше 10%. Предложи для них меньший тип инстанса и рассчитай экономию.

Пример результата:

Инстанс i-1234567890abcdef0 (тип m5.large) имеет среднюю загрузку 5%.
Рекомендуемый тип: t3.small (2 vCPU, 2 GB RAM) вместо m5.large (2 vCPU, 8 GB RAM).
Экономия: $0.096 в час (m5.large) - $0.0208 в час (t3.small) = $0.0752 в час, ~$54 в месяц.

9. Создание полного CI/CD пайплайна с AWS CodePipeline

Задача: Сгенерировать CloudFormation-шаблон для CI/CD пайплайна: CodeCommit → CodeBuild → CodeDeploy.

Промт:

Сгенерируй CloudFormation-шаблон для создания пайплайна: CodeCommit репозиторий, CodeBuild проект для сборки Java-приложения, CodeDeploy приложение для EC2. Укажи все необходимые роли и политики.

Пример результата:

AWSTemplateFormatVersion: "2010-09-09"
Resources:
  CodeCommitRepo:
    Type: AWS::CodeCommit::Repository
    Properties:
      RepositoryName: "my-app-repo"
  BuildProject:
    Type: AWS::CodeBuild::Project
    Properties:
      Name: "my-app-build"
      ServiceRole: !GetAtt BuildRole.Arn
      Artifacts:
        Type: CODEPIPELINE
      Environment:
        Type: LINUX_CONTAINER
        ComputeType: BUILD_GENERAL1_SMALL
        Image: aws/codebuild/standard:5.0
      Source:
        Type: CODEPIPELINE
  DeployApp:
    Type: AWS::CodeDeploy::Application
    Properties:
      ApplicationName: "my-app-deploy"
  Pipeline:
    Type: AWS::CodePipeline::Pipeline
    Properties:
      RoleArn: !GetAtt PipelineRole.Arn
      Stages:
        - Name: Source
          Actions:
            - Name: SourceAction
              ActionTypeId:
                Category: Source
                Owner: AWS
                Provider: CodeCommit
                Version: 1
              Configuration:
                RepositoryName: !Ref CodeCommitRepo
                BranchName: main
              OutputArtifacts:
                - Name: SourceArtifact
        - Name: Build
          Actions:
            - Name: BuildAction
              ActionTypeId:
                Category: Build
                Owner: AWS
                Provider: CodeBuild
                Version: 1
              Configuration:
                ProjectName: !Ref BuildProject
              InputArtifacts:
                - Name: SourceArtifact
              OutputArtifacts:
                - Name: BuildArtifact
        - Name: Deploy
          Actions:
            - Name: DeployAction
              ActionTypeId:
                Category: Deploy
                Owner: AWS
                Provider: CodeDeploy
                Version: 1
              Configuration:
                ApplicationName: !Ref DeployApp
                DeploymentGroupName: my-deploy-group
              InputArtifacts:
                - Name: BuildArtifact

10. Анализ логов CloudTrail для выявления угроз безопасности

Задача: Написать запрос на Athena для поиска неудачных попыток входа в консоль.

Промт:

Напиши SQL-запрос для Athena, который ищет в CloudTrail логи событий ConsoleLogin с результатом Failure за последнюю неделю. Отсортируй по времени.

Пример результата:

SELECT eventtime, username, eventsource, eventname, errorcode
FROM cloudtrail_logs
WHERE eventname = 'ConsoleLogin'
  AND errorcode = 'AccessDenied'
  AND eventtime >= date_trunc('day', now() - interval '7' day)
ORDER BY eventtime DESC;

Как внедрить промты в повседневную работу

Чтобы получить максимальную выгоду, я рекомендую:

  1. Начните с малого: выберите один рутинный процесс, например генерацию Terraform-кода, и автоматизируйте его с помощью промтов.
  2. Создайте библиотеку промтов: сохраняйте удачные формулировки и контексты, чтобы переиспользовать их.
  3. Интегрируйте с CI/CD: добавьте генерацию кода через промты в пайплайн, чтобы ускорить развертывание.
  4. Обучайте команду: проведите воркшоп, поделитесь примерами, чтобы все использовали единые стандарты.
  5. Измеряйте результат: фиксируйте время, затраченное на задачи до и после внедрения, и отслеживайте затраты AWS.

В нашем случае внедрение этих промтов позволило не только сократить расходы на 40%, но и повысить скорость разработки. Мы смогли высвободить время инженеров для более важных задач, а инфраструктура стала прозрачной и управляемой.

Попробуйте применить эти промты в своих проектах — и вы увидите, как автоматизация облака становится простой и эффективной. Если у вас есть свои наработки, делитесь в комментариях: вместе мы сделаем облако лучше!

← Все статьи

Комментарии

Читайте также

AI-репетитор: как выучить язык до B2, не выходя из чата

27 августа 2026

Мультимодальный AI: 10 промтов, которые превращают текст, картинки и видео в единый конвейер

27 августа 2026

От URL-shortener до News Feed: 15 промтов для системного дизайна, которые заменят репетитора

27 августа 2026

15+ промтов для ускорения SQL: как заставить PostgreSQL и MySQL летать

27 августа 2026

От пропсов до мемоизации: как ИИ пишет React-компоненты, которые не стыдно показать код-ревью

27 августа 2026

SQL-запросы как ракета: 15 промтов для отладки, оптимизации и проектирования баз данных

26 августа 2026

Как превратить ChatGPT в личного репетитора английского: 18 промтов, которые реально работают

26 августа 2026

Мультимодальный ИИ в деле: 15 промтов, которые превращают текст, картинки и видео в рабочие проекты

26 августа 2026

Легаси-код и ИИ: 10 промтов, которые превращают «болото» в чистую архитектуру

26 августа 2026