githubEdit

AWS terraform скрипт

Инструкция по развёртыванию MikoPBX в AWS через Terraform скрипт

Данное руководство описывает развёртывание MikoPBX в AWS по принципу Infrastructure as Code (IaC) с помощью Terraform. Вся инфраструктура: EC2-инстанс, сетевые правила, диски и IP-адрес - описывается декларативно в коде, что обеспечивает воспроизводимость, версионирование и возможность быстрого повторного развёртывания в любом окружении.

Общий процесс:

Скачать .raw  →  Загрузить в S3  →  Импортировать как AMI  →  Развернуть через Terraform
circle-info

Импорт образа в AMI нельзя выполнить средствами Terraform напрямую — AWS не поддерживает этот процесс через Terraform-провайдер. Для импорта используется отдельный bash-скрипт, после чего Terraform использует созданный AMI.

Предварительные требования

  • 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 хранилище

  1. Перейдите на страницу релизов MikoPBX: https://github.com/mikopbx/Core/releasesarrow-up-right

Скачайте актуальный образ с расширением .raw

  1. Перейдите в консольarrow-up-right Amazon Web Services.

Консоль Amazon Web Services
  1. Далее перейдите в "Services" -> "Storage" -> "S3".

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

Подтвердите создание бакета, нажав на "Create bucket".

Создание бакета для хранения образа
  1. Перейдите в созданный бакет, нажав на его название. Далее нажмите на "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

После завершения, скрипт выведет AMI ID — запишите его, он понадобится для Terraform.


Развёртывание через Terraform

Создайте все следующие файлы (структуру)

Далее мы пройдемся по каждому файлу и контенту, который необходимо добавить в каждый из них:

main.tf

Основной файл конфигурации, описывает все создаваемые ресурсы AWS: EC2-инстанс, Security Group, EBS-диски и Elastic IP. По умолчанию Security Group открывает только порты, необходимые для работы MikoPBX: SSH, HTTP/HTTPS, SIP и RTP.

triangle-exclamation

variables.tf

Объявляет переменные с их типами, описанием и значениями по умолчанию. Сам по себе не содержит конкретных значений - только схему.


outputs.tf

Определяет, какие данные Terraform выведет после успешного apply: URL веб-интерфейса, логин и пароль для первой авторизации. Удобно для быстрого получения нужных реквизитов без входа в консоль AWS.


terraform.tfvars

Содержит конкретные значения переменных для вашего окружения: регион, AMI ID, тип инстанса и т.д. Именно этот файл меняется при переезде между окружениями (dev/staging/prod).

circle-info

В этом файле укажите Ваши параметры: замените aws_region, instance_name, instance_type, storage_disk_size, allowed_ssh_cidr, create_key_pair, public_key_path если требуется. Обязательно поменяйте custom_ami_id на id Вашего AMI, созданного ранее.


Запуск Terraform

Убедитесь, что все 4 файла созданы, после этого выполните следующие команды:

После выполнения Вы получите следующий вывод:

Выполните следующую команду для планирования конфигурации:

После выполнения Вы увидите конфигурацию, который terraform увидел и собирается создавать. Проверьте все параметры и преступайте к выполнению следующей команды:

Далее введите yes для подтверждения. В случае успешного создания инстанса с MikoPBX, будут выведены необходимые параметры:


Подключение к MikoPBX

После успешного terraform apply:

  1. Скопируйте URL из выходных значений

  2. Откройте его в браузере: https://<URL>

Для входа используйте данные, выведеные при создании инфраструктуры.

⚠️ После входа обязательно настройте Firewall в MikoPBX.


Удаление ресурсов

⚠️ AMI и S3-бакет с образом не удаляются автоматически — их нужно удалить вручную через AWS Console или CLI, если они больше не нужны.


Возможные ошибки

Ошибка: InvalidAMIID.NotFound

Причина: AMI существует в другом регионе. Решение: убедитесь, что регион в terraform.tfvars совпадает с регионом, в котором запускался скрипт импорта.

Ошибка: OptInRequired при импорте

Причина: роль vmimport не создана или не имеет нужных прав. Решение: повторите Шаг 2arrow-up-right.

Ошибка: статус импорта error

Причина: повреждённый .raw-файл или неправильный формат. Решение: проверьте, что скачан оригинальный образ, и укажите правильное имя файла в DEFAULT_IMAGE.

Долгий импорт снапшота

Импорт большого образа может занять 10–30 минут. Скрипт автоматически ожидает завершения, опрашивая статус каждые 30 секунд.


Last updated

Was this helpful?