Skip to content

Win32Sector/test_task_kozlovpa

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Краткое Описание

Тестовое задание выполнение с помощью Terraform и Ansible. Развертывание происходит на GCP. Для успешного развертывания, в каталоге terraform/prod должен лежать json-key для сервисного аккаунта в GCP, у которого есть права на создание Compute Engine инстансов, правил фаерволла, дисков. Кроме того, нужно terraform/modules/vpc/variables.tf заменить внешний source_range на свой. Еще, нужно создать ключ с именем ~/.ssh/appuser и добавить его в IAM в GCP.

Версии софта

  • Terraform v0.12.20

  • provider.google v3.17.0

  • provider.null v2.1.2

  • ansible 2.9.6

Развертывание

Для развертывания, зайти в terraform/prod и выполнить terraform init, чтобы установились все необходимые зависимости и инициализировались модули. Затем выполнить terraform plan Если все ок, выполнить terraform apply.

Подробное описание как оно работает.

Весь комплект для развертывания состоит из трех terraform-модулей, котоыре описывают настройку инстанса с базой, инстанса с приложением и настроек vpc. Кроме этого, для развертывания приложения я написал простой ansible-плейбук и для установки mysql использовал роль от geerlingguy.

Для того, чтобы приложение работало, пришлось удалить из конфига приложения секцию про graylog, поправить host приложения, а также, динамически в конфиг пробрасываются айпиадрес хоста с базой, юзер и пароль из vars.yml.

Кроме того, для корректного выполнения условий задачи, руками удалил дефолтные правила в GCP

gcloud compute firewall-rules delete default-allow-icmp
gcloud compute firewall-rules delete default-allow-rdp
gcloud compute firewall-rules delete default-allow-ssh

Проверка, что приложение работает:

curl -X POST 35.246.69.218:8084/v1/health/check {"last_check":"2020-04-18 19:20:01","version":"1.40"}

Какие могут быть улучшения

Здесь представлено решения All-in-one, но в реальной жизни, я бы разделил terraform и ansible-плейбуки, упаковал бы все это в CI в каком-нибудь гитлабе/дженкинсе. Сделал бы шаг тестирования для веток, когда в процессе жизненного цикла данного репозитория, будут добавляться какие-то изменения, можно было тестить ветки, разделил бы логически создание инфраструктуры, настройку инфраструктуры.

В файле ansible/db/vars.yml непосредственно прописаны пароли на базу. Это очень нехороший кейс. По факту лучше, если катить какие-то секреты, их нужно в простом случае, катить через ansible-vault. В лУчшем случае, у нас должен быть hashicorp Vault и такие секреты должны генериться там и браться оттуда.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published