AWS terraform скрипт
Инструкция по развёртыванию MikoPBX в AWS через Terraform скрипт
Данное руководство описывает развёртывание MikoPBX в AWS по принципу Infrastructure as Code (IaC) с помощью Terraform. Вся инфраструктура: EC2-инстанс, сетевые правила, диски и IP-адрес - описывается декларативно в коде, что обеспечивает воспроизводимость, версионирование и возможность быстрого повторного развёртывания в любом окружении.
Общий процесс:
Скачать .raw → Загрузить в S3 → Импортировать как AMI → Развернуть через TerraformПредварительные требования
Terraform >= 1.3.0
AWS CLI настроенный с ключами доступа (
aws configure)Bash (macOS / Linux)
Права IAM:
ec2:*,s3:*,iam:CreateRole,iam:PutRolePolicy
Настройка AWS CLI
aws configure
# AWS Access Key ID: ваш_ключ
# AWS Secret Access Key: ваш_секретный_ключ
# Default region name: us-southeast-1 (Ваш регион)
# Default output format: jsonЗагрузка образа в S3 хранилище
Перейдите на страницу релизов MikoPBX: https://github.com/mikopbx/Core/releases
Скачайте актуальный образ с расширением .raw
Перейдите в консоль Amazon Web Services.

Далее перейдите в "Services" -> "Storage" -> "S3".

Нажмите "Create bucket". Введите уникальное имя бакета (поле "Bucket name"). Для других полей используйте значения по умолчанию.
Подтвердите создание бакета, нажав на "Create bucket".

Перейдите в созданный бакет, нажав на его название. Далее нажмите на "Upload" и выберите файл образа диска с расширением ".raw".
Для подтверждения, нажмите "Upload".

Настройка IAM-роли для импорта
AWS требует специальную IAM-роль vmimport для импорта образов. Выполните эти шаги один раз для аккаунта.
Создайте файл trust-policy.json со следующим содержанием:
Создайте файл role-policy.json со следующим содержанием:
Замените
mikopbx-bucketна имя вашего S3-бакета.
Выполните следующие команды для применения описанных политик:
Импорт образа как AMI
Сохраните скрипт ниже как import-image.sh и отредактируйте переменные DEFAULT_BUCKET, DEFAULT_IMAGE, DEFAULT_NAME
import-image.sh
Запустите скрипт:

После завершения, скрипт выведет AMI ID — запишите его, он понадобится для Terraform.
Развёртывание через Terraform
Создайте все следующие файлы (структуру)
Далее мы пройдемся по каждому файлу и контенту, который необходимо добавить в каждый из них:
main.tf
Основной файл конфигурации, описывает все создаваемые ресурсы AWS: EC2-инстанс, Security Group, EBS-диски и Elastic IP. По умолчанию Security Group открывает только порты, необходимые для работы MikoPBX: SSH, HTTP/HTTPS, SIP и RTP.
Не забудьте настроить firewall в MikoPBX после первой авторизации в систему! Подробнее - здесь.
variables.tf
Объявляет переменные с их типами, описанием и значениями по умолчанию. Сам по себе не содержит конкретных значений - только схему.
outputs.tf
Определяет, какие данные Terraform выведет после успешного apply: URL веб-интерфейса, логин и пароль для первой авторизации. Удобно для быстрого получения нужных реквизитов без входа в консоль AWS.
terraform.tfvars
Содержит конкретные значения переменных для вашего окружения: регион, AMI ID, тип инстанса и т.д. Именно этот файл меняется при переезде между окружениями (dev/staging/prod).
Запуск Terraform
Убедитесь, что все 4 файла созданы, после этого выполните следующие команды:
После выполнения Вы получите следующий вывод:
Выполните следующую команду для планирования конфигурации:
После выполнения Вы увидите конфигурацию, который terraform увидел и собирается создавать. Проверьте все параметры и преступайте к выполнению следующей команды:
Далее введите yes для подтверждения. В случае успешного создания инстанса с MikoPBX, будут выведены необходимые параметры:
Подключение к MikoPBX
После успешного terraform apply:
Скопируйте
URLиз выходных значенийОткройте его в браузере:
https://<URL>

Для входа используйте данные, выведеные при создании инфраструктуры.
⚠️ После входа обязательно настройте Firewall в MikoPBX.
Удаление ресурсов
⚠️ AMI и S3-бакет с образом не удаляются автоматически — их нужно удалить вручную через AWS Console или CLI, если они больше не нужны.
Возможные ошибки
Ошибка: InvalidAMIID.NotFound
Причина: AMI существует в другом регионе.
Решение: убедитесь, что регион в terraform.tfvars совпадает с регионом, в котором запускался скрипт импорта.
Ошибка: OptInRequired при импорте
Причина: роль vmimport не создана или не имеет нужных прав.
Решение: повторите Шаг 2.
Ошибка: статус импорта error
Причина: повреждённый .raw-файл или неправильный формат.
Решение: проверьте, что скачан оригинальный образ, и укажите правильное имя файла в DEFAULT_IMAGE.
Долгий импорт снапшота
Импорт большого образа может занять 10–30 минут. Скрипт автоматически ожидает завершения, опрашивая статус каждые 30 секунд.
Last updated
Was this helpful?

