AWS Systems Manager Run Command
AWS Systems Manager Run Command — это сервис в составе Amazon Web Services (AWS), предназначенный для удалённого выполнения команд, скриптов и задач управления на группе виртуальных машин (EC2-инстансов) и локальных серверов (on-premises) без необходимости прямого SSH- или RDP-доступа. Сервис входит в набор инструментов AWS Systems Manager (ранее — Amazon EC2 Systems Manager) и позволяет автоматизировать рутинные операции, такие как установка обновлений, сбор логов, изменение конфигураций и выполнение диагностических проверок.
История и развитие
Run Command был представлен в 2015 году как часть AWS Systems Manager. До его появления управление большим количеством EC2-инстансов требовало использования сторонних инструментов (например, Ansible, Chef, Puppet) или написания собственных скриптов с настройкой SSH-ключей и сетевых правил. Run Command решил эту проблему, предоставив единый интерфейс для выполнения команд через API AWS, без необходимости открывать порты для удалённого доступа. В 2016 году сервис был расширен поддержкой локальных серверов (on-premises) через установку агента Systems Manager Agent (SSM Agent). В последующие годы функциональность была дополнена возможностью выполнения команд по расписанию (State Manager), интеграцией с AWS Lambda и поддержкой пользовательских скриптов на PowerShell, Bash и Python.
Архитектура и принцип работы
Run Command работает на основе агента — Systems Manager Agent (SSM Agent), который устанавливается на управляемые экземпляры (EC2-инстансы или локальные серверы). Агент инициирует соединение с сервисом AWS Systems Manager через HTTPS-протокол, используя IAM-роли (Identity and Access Management) для аутентификации. Команда отправляется через API AWS, после чего сервис доставляет её агенту, который выполняет её на целевом экземпляре. Результаты выполнения (stdout, stderr, код возврата) передаются обратно в сервис и могут быть сохранены в Amazon S3, CloudWatch Logs или отправлены в SNS-уведомления.
Ключевые компоненты
- SSM Agent — программное обеспечение, устанавливаемое на управляемые экземпляры. Поддерживается на операционных системах: Amazon Linux, Ubuntu, CentOS, RHEL, SUSE Linux Enterprise Server, Windows Server (включая Windows Server 2008-2022), а также на macOS (для тестовых сред).
- IAM-роль — определяет разрешения для экземпляра (например, доступ к S3, CloudWatch) и для пользователя, отправляющего команду.
- Документ команд (SSM Document) — JSON- или YAML-файл, описывающий выполняемое действие. Включает параметры, такие как команда, скрипт, аргументы и время ожидания.
- Целевые экземпляры — выбираются по тегам, идентификаторам, группам ресурсов или по имени.
Классификация документов команд
SSM Documents делятся на два типа:
- Предопределённые (AWS-managed) — создаются и поддерживаются AWS. Примеры:
AWS-RunShellScript(выполнение bash-скриптов),AWS-RunPowerShellScript(выполнение PowerShell-скриптов),AWS-InstallApplication(установка приложений),AWS-UpdateSSMAgent(обновление агента). - Пользовательские (custom) — создаются администраторами для специфических задач. Могут включать несколько шагов (steps) и условные переходы.
Применение
Run Command используется для широкого круга задач управления инфраструктурой:
1. Управление конфигурациями
- Установка и обновление программного обеспечения (например, пакетов, патчей, драйверов).
- Изменение файлов конфигурации (например,
/etc/nginx/nginx.confилиweb.config). - Настройка параметров операционной системы (например, часового пояса, сетевых настроек).
2. Диагностика и мониторинг
- Сбор логов (системных, приложений, ошибок) и отправка в S3 или CloudWatch.
- Выполнение диагностических команд (например,
df -h,top,netstat). - Проверка состояния сервисов (например,
systemctl status nginx).
3. Автоматизация аварийного восстановления
- Перезапуск сбойных сервисов.
- Очистка временных файлов.
- Применение экстренных исправлений безопасности.
4. Интеграция с CI/CD
- Выполнение тестовых скриптов на EC2-инстансах после развёртывания.
- Установка артефактов из S3.
Примеры использования
Пример 1: Обновление пакетов на Linux-серверах
Команда: sudo yum update -y (для Amazon Linux, CentOS) или sudo apt update && sudo apt upgrade -y (для Ubuntu). Выполняется через документ AWS-RunShellScript на группе инстансов с тегом Environment=Production.
Пример 2: Сбор логов приложений
Скрипт PowerShell: Get-Content -Path "C:\MyApp\logs\error.log" -Tail 100 | Out-File -FilePath "C:\temp\error_summary.txt" — затем файл загружается в S3 с помощью команды Write-S3Object.
Пример 3: Перезапуск веб-сервера
Команда: sudo systemctl restart nginx — выполняется на всех инстансах, где обнаружена ошибка 502.
Ограничения и особенности
- Зависимость от агента — команды выполняются только на экземплярах с установленным и работающим SSM Agent. Если агент отключён или не обновлён, команда не будет выполнена.
- Время ожидания — максимальное время выполнения команды — 24 часа. Для длительных задач рекомендуется использовать асинхронные подходы (например, через AWS Lambda).
- Скорость — выполнение на большом количестве экземпляров (сотни и тысячи) может занимать время из-за последовательной обработки сервисом.
- Безопасность — команды выполняются с правами пользователя
ssm-user(Linux) илиSYSTEM(Windows). Для повышения привилегий требуется настройка sudo без пароля. - Региональность — сервис доступен во всех регионах AWS, но команды не могут быть отправлены на экземпляры в другом регионе без настройки межрегионального доступа.
Интересные факты
- Run Command может выполнять команды на экземплярах, которые находятся в приватных подсетях (без публичного IP), если настроен VPC Endpoint для Systems Manager.
- Сервис поддерживает выполнение команд на «спящих» (stopped) экземплярах — команда будет выполнена после их запуска.
- В 2022 году AWS добавила возможность выполнять команды на экземплярах, управляемых через AWS Outposts (гибридные решения).
Критика
Основные недостатки Run Command, отмечаемые пользователями:
- Отсутствие интерактивности — команды выполняются в пакетном режиме, без возможности взаимодействия с пользователем (например, ввод пароля).
- Сложность отладки — при ошибках в скриптах логи могут быть неполными, особенно при выполнении на большом количестве экземпляров.
- Зависимость от AWS — сервис привязан к экосистеме AWS, что ограничивает его использование в мультиоблачных средах.
Источники
- AWS Documentation: AWS Systems Manager Run Command
- AWS re:Invent 2015: Introduction of EC2 Systems Manager
- AWS Security Blog: Using Run Command for Incident Response
- AWS Systems Manager User Guide (2024)
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →