На каких языках программирования вы пишете в рамках DevOps-практик?

«На каких языках программирования вы пишете в рамках DevOps-практик?» — вопрос из категории Скриптинг и автоматизация, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Мой основной стек языков для автоматизации и инфраструктуры:

  1. Python — основной язык для сложной автоматизации, создания инструментов и работы с облачными API (AWS Boto3, Google Cloud Client Libraries). Идеален для написания скриптов администрирования, обработки данных мониторинга или создания кастомных провайдеров/модулей.

    # Пример: Автоматическое создание AMI
    import boto3
    from datetime import datetime
    
    ec2 = boto3.client('ec2')
    response = ec2.create_image(
        InstanceId='i-1234567890abcdef0',
        Name=f'backup-{datetime.now().strftime("%Y%m%d")}',
        NoReboot=True
    )
    print(f"Created AMI: {response['ImageId']}")
  2. Bash — незаменим для shell-скриптов, быстрой автоматизации на серверах, написания команд в Dockerfile и CI/CD пайплайнах. Использую ежедневно для рутинных операций.

    # Пример: Скрипт очистки старых Docker-образов
    #!/bin/bash
    echo "Cleaning unused Docker images..."
    docker image prune -a --filter "until=24h" --force
  3. Golang (Go) — использую для написания высокопроизводительных утилит, CLI-инструментов или когда требуется создание бинарного файла без зависимостей для распространения. Многие современные DevOps-инструменты (Terraform, Docker, Kubernetes) написаны на Go.

    // Пример: Простая утилита для проверки HTTP-ответов
    package main
    import (
        "fmt"
        "net/http"
    )
    func main() {
        resp, err := http.Get("http://example.com/health")
        if err != nil || resp.StatusCode != 200 {
            fmt.Println("Health check FAILED")
        } else {
            fmt.Println("Health check OK")
        }
    }

Дополнительно, для работы с инфраструктурой как код (IaC) активно использую декларативные языки: HCL (Terraform) и YAML/JSON (Ansible, CloudFormation, Kubernetes манифесты).