Каждый, кто хоть раз сталкивался с падающим подом в три часа ночи или с ошибкой в Terraform-плане перед релизом, знает: инфраструктура не прощает невнимательности. Но что, если переложить часть рутины на ChatGPT? Я не предлагаю слепо доверять ИИ в проде — наоборот, покажу, как использовать промты, чтобы быстро получить черновик конфигурации, разобрать логи или найти причину сбоя, а затем проверить результат вручную. Эти 10 промтов я отшлифовал на реальных задачах: от генерации Dockerfile до диагностики CrashLoopBackOff и написания модулей Terraform. Каждый — с примером запроса и разбором, как убедиться, что ИИ не наврал.
Важно: ChatGPT не заменяет инженера, но может стать вашим «вторым пилотом» в инфраструктурных задачах. Главное — знать, как правильно спросить и что проверять. Поехали.
1. Генерация Dockerfile с оптимизацией под размер и безопасность
Задача: Написать Dockerfile для Python-приложения, чтобы образ был минимальным и не содержал уязвимостей.
Промт:
Ты — DevOps-инженер. Напиши Dockerfile для Python 3.11 приложения на FastAPI. Требования:
- multi-stage сборка
- использование slim-образа
- запуск от непривилегированного пользователя
- кэширование зависимостей pip
- игнорирование dev-зависимостей
Добавь комментарии, объясняющие ключевые решения. Не используй latest-теги.
Пример использования: Я дал этот промт для сервиса, который раньше собирался в образ размером 1.2 ГБ. ChatGPT предложил такой вариант:
# ---- Build stage ----
FROM python:3.11-slim AS builder
WORKDIR /app
COPY requirements.txt .
RUN pip install --user -r requirements.txt
# ---- Runtime stage ----
FROM python:3.11-slim
WORKDIR /app
COPY --from=builder /root/.local /root/.local
COPY . .
ENV PATH=/root/.local/bin:$PATH
RUN useradd -m appuser && chown -R appuser:appuser /app
USER appuser
EXPOSE 8000
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
Проверка: Соберите образ и проверьте размер (docker images). Убедитесь, что пользователь appuser действительно создан и имеет права. Просканируйте образ на уязвимости (например, docker scan или Trivy). В моём случае размер уменьшился до 280 МБ, а количество CVE снизилось.
2. Диагностика падающего пода в Kubernetes
Задача: Под в состоянии CrashLoopBackOff, логи не дают явной причины.
Промт:
Я получил такие логи от пода (вставь логи). Под падает с ошибкой. Проанализируй и предложи возможные причины и шаги для устранения. Учти, что это Java-приложение в Kubernetes.
Пример: Логи содержали java.lang.OutOfMemoryError: Java heap space. ChatGPT предположил, что не заданы лимиты памяти, и предложил добавить ресурсы в deployment:
resources:
requests:
memory: "512Mi"
limits:
memory: "1Gi"
Проверка: Примените изменения в staging, проверьте, что под не перезапускается. Используйте kubectl describe pod для анализа событий.
3. Написание Terraform-модуля для AWS S3
Задача: Создать переиспользуемый модуль для бакета S3 с шифрованием и блокировкой публичного доступа.
Промт:
Напиши Terraform-модуль для AWS S3 bucket. Требования:
- включить шифрование по умолчанию (SSE-S3)
- блокировать публичный доступ
- включить версионирование
- создать output с именем бакета
Используй переменные для имени бакета и тегов. Добавь README с примером использования.
Пример: ChatGPT выдал модуль с файлами main.tf, variables.tf, outputs.tf. В main.tf был ресурс:
resource "aws_s3_bucket" "this" {
bucket = var.bucket_name
tags = var.tags
}
resource "aws_s3_bucket_server_side_encryption_configuration" "this" {
bucket = aws_s3_bucket.this.id
rule {
apply_server_side_encryption_by_default {
sse_algorithm = "AES256"
}
}
}
Проверка: Запустите terraform validate и terraform plan в тестовом окружении. Убедитесь, что все ресурсы создаются корректно и соответствуют политике безопасности.
4. Разбор ошибки в CI/CD пайплайне
Задача: Пайплайн падает на шаге сборки с невнятной ошибкой.
Промт:
Мой CI/CD пайплайн (GitLab CI) падает на шаге сборки Docker-образа. Вот лог ошибки (вставь лог). Объясни причину и предложи исправление.
Пример: Лог содержал Cannot connect to the Docker daemon at unix:///var/run/docker.sock. ChatGPT подсказал, что в GitLab Runner не включён привилегированный режим. Решение: добавить privileged = true в config.toml runner'а.
Проверка: Перезапустите пайплайн после исправления, убедитесь, что шаг проходит.
5. Оптимизация Kubernetes Deployment
Задача: Deployment использует слишком много ресурсов, нужно снизить затраты.
Промт:
Проанализируй мой Deployment (вставь YAML). Предложи, как оптимизировать ресурсы: уменьшить requests/limits, добавить HPA, использовать PodDisruptionBudget. Объясни каждое изменение.
Пример: ChatGPT предложил снизить CPU requests с 1 до 0.5, добавить HPA с целевой загрузкой 70% и настроить PDB с minAvailable: 1.
Проверка: Примените изменения в staging, наблюдайте за метриками (kubectl top pods), убедитесь, что приложение работает стабильно.
6. Генерация Helm-чарта для микросервиса
Задача: Упаковать приложение в Helm-чарт для удобного деплоя.
Промт:
Создай Helm-чарт для микросервиса на Go. Включи Deployment, Service, Ingress, ConfigMap. Параметризуй имя образа, тег, количество реплик, ресурсы. Добавь values.yaml с комментариями.
Пример: ChatGPT сгенерировал структуру чарта с шаблонами, где values.yaml содержал:
replicaCount: 2
image:
repository: myapp
tag: latest
pullPolicy: IfNotPresent
resources:
limits:
cpu: 100m
memory: 128Mi
Проверка: Выполните helm lint и helm template для проверки синтаксиса. Задеплойте в тестовый кластер.
7. Написание политики NetworkPolicy в Kubernetes
Задача: Ограничить трафик между подами: разрешить только определённые соединения.
Промт:
Напиши NetworkPolicy для Kubernetes, которая разрешает входящий трафик только от подов с меткой app=frontend к подам с меткой app=backend на порт 8080. Запрети весь остальной входящий трафик.
Пример: ChatGPT выдал манифест:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-frontend-to-backend
spec:
podSelector:
matchLabels:
app: backend
policyTypes:
- Ingress
ingress:
- from:
- podSelector:
matchLabels:
app: frontend
ports:
- protocol: TCP
port: 8080
Проверка: Примените политику и протестируйте соединения с помощью kubectl exec и curl.
8. Разбор логов Terraform apply
Задача: Terraform apply падает с ошибкой, нужно понять причину.
Промт:
Terraform apply завершился с ошибкой (вставь текст ошибки). Объясни, что пошло не так, и как исправить. Учти, что используется провайдер AWS.
Пример: Ошибка: Error: creating S3 Bucket: BucketAlreadyExists. ChatGPT объяснил, что имя бакета должно быть глобально уникальным, и предложил добавить случайный суффикс через random_id.
Проверка: Внесите изменения, запустите terraform plan и убедитесь, что ошибка исчезла.
9. Автоматизация создания Docker Compose для локальной разработки
Задача: Быстро поднять окружение из нескольких сервисов.
Промт:
Создай docker-compose.yml для локальной разработки: PostgreSQL, Redis, backend на Python (FastAPI), frontend на React. Настрой healthcheck для базы, volumes для персистентности. Добавь переменные окружения.
Пример: ChatGPT сгенерировал compose-файл с сервисами, healthcheck для Postgres и пробросом портов.
Проверка: Запустите docker-compose up, убедитесь, что все сервисы стартуют и доступны.
10. Генерация скрипта для бэкапа etcd в Kubernetes
Задача: Настроить регулярный бэкап etcd в кластере.
Промт:
Напиши bash-скрипт для бэкапа etcd в Kubernetes с использованием etcdctl. Скрипт должен делать снапшот, сжимать его и загружать в S3. Предусмотри ротацию старых бэкапов.
Пример: ChatGPT предложил скрипт с использованием etcdctl snapshot save, tar, aws s3 cp и удалением файлов старше 7 дней.
Проверка: Запустите скрипт вручную, проверьте, что снапшот создаётся и загружается. Восстановите из бэкапа в тестовом кластере.
Эти промты — не волшебная таблетка, а инструмент, который экономит время на рутине. Всегда проверяйте сгенерированные конфиги в тестовой среде, используйте линтеры (hadolint, tflint, kubeval) и не давайте ИИ доступ к продакшену без ревью. ChatGPT хорошо справляется с шаблонными задачами, но окончательное решение — за вами. Попробуйте эти промты в следующем спринте — и, возможно, ночные дежурства станут чуть спокойнее.
Комментарии