В компаниях, размер которых меньше, чем у Amazon, внутренние инструменты просто необходимы. Проекты становятся большими, и их сложно поддерживать, если все делают что-то по-своему или если вы вкладываете все свое внимание, скажем, на Действия Github.

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

Хотя эта статья читается как длинная реклама, я никоим образом не говорю от имени Amazon и никоим образом не спонсируюсь ими. Мне просто очень нравится этот инструмент, и я пишу эту статью, чтобы больше программистов покинули темные века Terraform или, помилуй бог, используя пользовательский интерфейс AWS.

Эта проблема

Позвольте мне рассказать вам историю: история начинающего программиста. Они изучали JavaScript для внешнего интерфейса и Python для внутреннего интерфейса, но готовы взаимодействовать с базой данных. Проблема в том, что базы данных не бесплатны, и ими, как правило, сложно управлять. Такой образ мышления приводит молодых людей к AWS. Узнав об AWS , они познакомились с огромным количеством сервисов: SNS, SQS, S3, DynamoDB, ECS, Snowball.

Каждый был в такой ситуации: это, по сути, обряд посвящения для современных программистов. Когда я был там, я думал о том, насколько сложно будет управлять множеством этих сервисов в большом масштабе. Установка стека ECS, S3 и RDS заняла у меня несколько часов - что, если мне понадобится VPC, кластер ECS или VPN? Настроить их было бы непросто.

Так быстро я обратился к Terraform. Terraform великолепен и делает то, что делает, но man его сложно использовать. вам нужно изучить HCL, запутанный и сложный язык разметки. Автозаполнения нет, поэтому вы можете убедиться, что все делаете правильно. Сами концепции сложно усвоить - HCL просто кажется отсталым, а многие нормы в Terraform Land… странные. Настолько странно, что многие обращаются к Террагрунту, чтобы помочь им справиться.

Какое решение всего этого?

Как и все другие проблемы с Интернетом: у Amazon есть решение.

AWS CDK

AWS CDK - феноменальный инструмент, который, насколько я могу судить, чисто решает все проблемы Terraform или ручного создания стеков.

Используя Typescript (другие языки взаимодействуют с CDK, но TS, безусловно, мой любимый) вместо HCL или любых других пользовательских творений, мы позволяем программистам чувствовать себя более знакомыми в своем рабочем процессе. Вы больше не работаете с новым и устрашающим языком с обратными конструкциями: вы пишете и отлаживаете прямой код на языке, который не слишком отличается.

Все открыто. В CDK ничего не спрятано. Если вы используете консоль AWS, становится даже вероятно, что вы пропустите шаг настройки или где-то задохнетесь, и весь ваш стек окажется грудой отдельных частей. Terraform - это шаг в правильном направлении, но как конструкция с динамической типизацией вы можете разместить что угодно где угодно, и линтер не скажет вам: «Эта переменная не определена!» или "Этого параметра не существует!" Он просто потерпит неудачу во время выполнения (или, что еще хуже: вообще не потерпит неудачу). TypeScript разработан и является первым языком разработчика, с intellisense как первоклассным гражданином и большим набором инструментов.

Если вы настроены против AWS (это нормально - у меня тоже есть претензии к AWS!), Вам повезло - в качестве поставщиков кода существует множество фантастических инфраструктур, таких как Serverless и Pulumi . Инфраструктура как код в целом - хорошая идея и чистая выгода для программистов и их бизнес-руководителей.

Однако я бы держался подальше от Terraform и Ansible. Слишком много вложено в инструменты, которые разработчики используют, чтобы полностью их обойти. Тот факт, что вы можете легко писать модульные тесты для своей инфраструктуры, означает, что вам не нужно беспокоиться о том, что вы заснете и случайно получите счет за AWS в миллион долларов.

Одна из замечательных особенностей CDK заключается в том, что если вы запускаете несколько сред (бета, альфа, prod, QA и т. Д.), Все, что вам нужно сделать, это заключить ваш CDK в цикл for и заставить ваши переменные принимать переменные входная строка: вместо vpcName = 'vpc' используйте некоторую строковую интерполяцию и выполните vpcName = `{stage}-vpc`.

Из всех инструментов, которые я научился использовать в Amazon, этот CDK превосходит мой любимый. Утилита не имеет себе равных. Если я когда-нибудь снова разверну проект в облаке, можете поспорить, что я создаю пакет CDK.