/trytravis

Primary LanguageHCLMIT LicenseMIT

sp3ber_infra

Репозиторий "Инфраструктура как код" для курса OTUS DevOps для группы 2019-05

Build Status

Домашние задания

Настройка локального окружения и практика ChatOps

Знакомство с облачной инфраструктурой. Google Cloud Platform

Деплой тестового приложения

Сборка образов VM с помощью Packer

Практика IaC с использованием Terraform

Принципы организации инфраструктурного кода и работа над инфраструктурой в команде на примере Terraform

Знакомство с ansible

Расширенные возможности Ansible

Работа с ролями и окружениями в Ansible

Настройка локального окружения

Что сделано
* Добавлен шаблон для github pull requests
* Добавлен файл настроек для Travis CI
* Добавлен и исправлен unit тест на python

Знакомство с облачной инфраструктурой. Google Cloud Platform

Что сделано
* Найдена команда для подключения к someinternalhost по ssh в одну команду
ssh -J <username>@<bastion_external_ip> <username@<someinternalhost_internal_ip>

* Найден способ подключения по алиасу через правку ssh config c использованием ProxyCommand.

Содержание конфига .ssh/config:

Host bastion
Hostname <bastion_internal_ip>
User <username>

Host someinternalhost
ProxyCommand ssh -q bastion nc -q0 <someinternalhost_internal_ip>

* Конфигурационные данные для проверки дз в небходимом формате:
bastion_IP = 34.77.32.152
someinternalhost_IP = 10.132.0.3

Деплой тестового приложения

Что сделано
* Создан инстанс вм с помощью gcloud
* Установлен ruby на указанном хосте
* Установлена и запущена mongodb
* Задеплоено тестовое приложение
* Команды установки mongo, ruby и деплоя тестового приложения вынесены в отдельные скрипты
* Вынес создание ВМл в отдельный скрипт (create_vm_with_startup.sh) с указанием startup_script
* Вынес создание правила firewall в отдельный скрипт (create_firewall_rule.sh)

* Конфигурационные данные для проверки дз в небходимом формате:
testapp_IP = 104.199.23.174
testapp_port = 9292

* Создать ВМ с указанием startup.script:
./create_vm.sh

* Создать правило firewall:
./create_firewall_rule.sh

Сборка образов VM с помощью Packer

Что сделано
* Создан шаблон для packer для образа reddit-base
* Создан образ vm на основе шаблона в GCP
* Добавлены пользовательские переменные в шаблон Packer
* Добавлен и проверен скрипт создания инстанса на основе образа reddit-base в GCP

Практика IaC с использованием Terraform

Что сделано
* Созданы конфигурационные файлы для terraform
* Вынесены в отдельный файл переменные для конфигурационных файлов terraform
* Добавлен шаблон с пользовательскими переменными
* Конфигурация провалидирована, проверено создание необходимой инфраструктуры в GCP

Принципы организации инфраструктурного кода и работа над инфраструктурой в команде на примере Terraform.

Что сделано
* созданы модули app, db, vpc, storage-bucket
* созданы отдельные конфигурации для stage, prod
* созданы дополнительные шаблоны VM для packer (приложение разделено на два отдельных образа)
* попрактиковался с параметризацией модулей Terraform, создании модуля (vpc), использовании существующего в реестре модуля (storage-bucket)

Знакомство с ansible

Что сделано
* использованы команды ansible - ping, command, shell, а также использование модулей git и service
* создан простой плейбук
* проверен запуск плейбука после удаления папки с проектом на хосте app. При повторном запуске плейбука отображается и подсвечивается статус "changed=1" (т.е. одно изменение)
* для использования json inventory динамической схемы испльзуем скрипт inventory.sh, который при вызове с аргументом --list просто выводит содержимое файла inventory.json
* выяснил разницу между схемой json для динамического inventory и статического:
главное, что в динамическом хосты - это массивы,
а в статическом - это словари, где ключ - это адрес хоста, а значение - null

Расширенные возможности Ansible

Что сделано
* Использовал плейбуки, хендлеры и шаблоны для конфигурации окружения и деплоя тестового приложения.
* Попробовал подход - один плейбук, один сценарий (play)
* Попробовал подход - один плейбук, но много сценариев
* Попробовал подход - много плейбуков
* Изменил провижн образов Packer на Ansible-плейбуки

Работа с ролями и окружениями в Ansible

Что сделано
* Перенес созданные плейбуки в раздельные роли
* Описал два окружения
* Использовал коммьюнити роль nginx
* Использовал Ansible Vault для наших окружений