Читаем Terraform: инфраструктура на уровне кода полностью

49 Don’t Shave That Yak! (блог Сета, 5 марта 2005 года), bit.ly/2OK45uL.

50 Брукс Ф. Мифический человеко-месяц, или Как создаются программные системы. — СПб.: Питер, 2020.

51 Мартин Р. Чистый код. Создание, анализ и рефакторинг. Библиотека программиста. — СПб.: Питер, 2019.

52 Salus P.H. A Quarter-Century of Unix. — N.Y.: Addison-Wesley Professional, 1994.

53 Все подробности о публикации модулей можно найти на странице bit.ly/2M53hi0.

54 Полный список средств инициализации ресурсов можно найти на странице bit.ly/2M7s1pK.

7. Как тестировать код Terraform

Мир DevOps полон разных страхов: все боятся допустить простой в работе, потерять данные или быть взломанными. При внесении любого изменения вы всегда спрашиваете себя, какие последствия оно будет иметь. Будет ли оно вести себя одинаково во всех окружениях? Вызовет ли оно очередной перебой в работе? И, если это случится, насколько вам придется задержаться на работе на этот раз, чтобы все исправить? По мере роста компании все больше ставится на кон, что делает процесс развертывания еще страшнее и повышает риск ошибок. Многие компании пытаются минимизировать этот риск за счет менее частых развертываний, но в итоге каждое отдельное развертывание становится более крупным и склонным к ошибкам.

Если вы управляете своей инфраструктурой в виде кода, у вас появляется лучший способ минимизации рисков: тесты. Их цель — дать вам достаточно уверенности для внесения изменений. Ключевым словом здесь является уверенность: никакие тесты не могут гарантировать отсутствие ошибок, поэтому вы скорее имеете дело с вероятностью. Если удастся запечатлеть всю свою инфраструктуру и процессы развертывания в виде кода, вы сможете проверить этот код в тестовом окружении. В случае успеха есть большой шанс того, что этот же код будет работать и в промышленных условиях. В мире страха и неопределенности высокая вероятность и уверенность дорого стоят.

В этой главе мы пройдемся по процессу тестирования инфраструктурного кода, как ручного, так и автоматического, с акцентом на последний.

• Ручные тесты:

• основы ручного тестирования;

• очистка ресурсов после тестов.

• Автоматические тесты:

• модульные тесты;

• интеграционные тесты;

• сквозные тесты;

• другие подходы к тестированию.

Примеры кода

Напоминаю: все примеры кода для этой книги можно найти по адресу github.com/brikis98/terraform-up-and-running-code.

Ручные тесты

Размышляя о том, как тестировать код Terraform, полезно провести некоторые параллели с тестированием кода, написанного на языках программирования общего назначения, таких как Ruby. Представьте, что вы пишете простой веб-сервер на Ruby в файле web-server.rb:

class WebServer < WEBrick::HTTPServlet::AbstractServlet

  def do_GET(request, response)

    case request.path

    when "/"

      response.status = 200

      response['Content-Type'] = 'text/plain'

      response.body = 'Hello, World'

    else

      response.status = 404

      response['Content-Type'] = 'text/plain'

      response.body = 'Not Found'

    end

  end

end

Этот код вернет ответ 200OK с телом Hello,World для URL-адреса /; для любого другого адреса ответ будет 404. Как бы вы протестировали этот код вручную? Обычно для этого добавляют еще немного кода, чтобы запускать веб-сервер локально:

# Этот код выполняется, только если скрипт был вызван непосредственно

# из терминала, но не при подключении из другого файла

if __FILE__ == $0

  # Запускаем сервер локально на порте 8000

  server = WEBrick::HTTPServer.new :Port => 8000

  server.mount '/', WebServer

  # Останавливаем сервер нажатием Ctrl+C

  trap 'INT' do server.shutdown end

  # Запускаем сервер

  server.start

end

Если запустить этот файл в терминале, он загрузит веб-сервер на порте 8000:

$ ruby web-server.rb

[2019-05-25 14:11:52] INFO  WEBrick 1.3.1

[2019-05-25 14:11:52] INFO  ruby 2.3.7 (2018-03-28) [universal.x86_64-darwin17]

[2019-05-25 14:11:52] INFO  WEBrick::HTTPServer#start: pid=19767 port=8000

Чтобы проверить работу этого сервера, можно воспользоваться браузером или curl:

$ curl localhost:8000/

Hello, World

$ curl localhost:8000/invalid-path

Not Found

Теперь представьте, что мы изменили этот код, добавив в него точку входа /api, которая возвращает 201Created и тело в формате JSON:

class WebServer < WEBrick::HTTPServlet::AbstractServlet

  def do_GET(request, response)

    case request.path

    when "/"

      response.status = 200

      response['Content-Type'] = 'text/plain'

      response.body = 'Hello, World'

    when "/api"

      response.status = 201

      response['Content-Type'] = 'application/json'

      response.body = '{"foo":"bar"}'

    else

      response.status = 404

      response['Content-Type'] = 'text/plain'

      response.body = 'Not Found'

    end

  end

end

Чтобы вручную протестировать этот обновленный код, нажмите Ctrl+C и перезагрузите веб-сервер, запустив скрипт еще раз:

$ ruby web-server.rb

[2019-05-25 14:11:52] INFO  WEBrick 1.3.1

[2019-05-25 14:11:52] INFO  ruby 2.3.7 (2018-03-28) [universal.x86_64-darwin17]

[2019-05-25 14:11:52] INFO  WEBrick::HTTPServer#start: pid=19767 port=8000

^C

[2019-05-25 14:15:54] INFO  going to shutdown ...

Перейти на страницу:

Все книги серии Бестселлеры O'Reilly

Искусство управления IT-проектами
Искусство управления IT-проектами

В отличие от множества трудов, посвященных руководству проектами и командами, в этой книге не проповедуются никакие новые учения и не превозносятся великие теории. Скотт Беркун считает залогом успеха практику и разнообразие подходов. В книге описываются основные сложности и проблемные ситуации, возникающие в работе менеджера проекта, даны рекомендации по выходу из них.Издание предназначено не только для лидеров команд и менеджеров высшего звена, но и для программистов, тестеров и других исполнителей конкретных проектных заданий. Также оно будет полезно студентам, изучающим бизнес-менеджмент, проектирование изделий или программную инженерию.Текст нового издания значительно переработан автором с целью добиться большей ясности, кроме того, книга дополнена новым приложением и более чем 120 практическими упражнениями.

Скотт Беркун

Деловая литература
iOS. Приемы программирования
iOS. Приемы программирования

Книга, которую вы держите в руках, представляет собой новый, полностью переписанный сборник приемов программирования по работе с iOS. Он поможет вам справиться с наболевшими проблемами, с которыми приходится сталкиваться при разработке приложений для iPhone, iPad и iPod Touch. Вы быстро освоите всю информацию, необходимую для начала работы с iOS 7 SDK, в частности познакомитесь с решениями для добавления в ваши приложения реалистичной физики или движений — в этом вам помогут API UIKit Dynamics.Вы изучите новые многочисленные способы хранения и защиты данных, отправки и получения уведомлений, улучшения и анимации графики, управления файлами и каталогами, а также рассмотрите многие другие темы. При описании каждого приема программирования приводятся образцы кода, которые вы можете смело использовать.

Вандад Нахавандипур

Программирование, программы, базы данных / Программирование / Книги по IT

Похожие книги