Документация для инфраструктуры AWS в виде кода

Недавно, пытаясь создать терраформную IaC, я обнаружил, что не могу заставить API Gateway правильно маршрутизировать к Lambda. Оказалось, что при использовании консоли AWS автоматически назначает разрешения, необходимые шлюзу для Lambda, но с IaC в терраформе это должно быть назначено явно.

Сказанное выше понятно, но для новичка, как в AWS, так и в терраформе, это сбивает с толку.

Есть ли документация, объясняющая необходимые компоненты в рамках подключения к инфраструктуре, например, выше?

Я знаю, что документы AWS и terraform особенно хорошо продуманы, но ни один из них на самом деле не объясняет (насколько я видел), что для какой-либо конкретной (какой бы распространенной или неясной) установки требуется определенный ресурс. Вывод этих связей из общего поиска - не лучшая замена.




Ответы (2)


Я не думаю, что есть документация, в которой перечислены все необходимые компоненты на одной странице / области. Но вы можете получать разную информацию из разных документов, и, как вы упомянули, AWS и Terraform отлично справляются с этой задачей.

Говоря об AWS, в случае разрешений в API-шлюзе я могу вспомнить две полезные ссылки (хотя на первую ссылаются из второй):

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

Потому что в terraform он действительно создает небольшие независимые части инфраструктуры и заставляет их работать вместе. По моему опыту, по сравнению с другими IaC он намного более детализирован, чем, например, CloudFormation.

Личная практика, которая помогает мне быстрее во всем разбираться, - это читать каждый вводный документ о компонентах, над которыми я работаю в Terraform. Например, если я пишу лямбду в терраформе IaC, я бы быстро прочитал все вводные части lambda_xxxx_yyyy, чтобы меньше застревать и быстрее реагировать, когда что-то выходит из строя. У меня это обычно работает.

person TaiT's    schedule 10.10.2020

Я не видел такой документации, но могу поделиться своим решением для подобных случаев.

Вы можете вносить необходимые изменения с помощью консоли AWS - вручную, с помощью пользовательского интерфейса. Затем вы можете определить ресурсы, которые вы только что создали в своих файлах TF, указав только / необходимый набор свойств, даже случайные значения будут работать. Затем вы импортируете то, что вы создали вручную, в определенные вами ресурсы.

Запустив terraform plan, вы увидите различия, которые позволят вам соответствующим образом настроить файлы TF.

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

person Ilia Kondrashov    schedule 10.10.2020
comment
Спасибо, это действительно здорово. Проблема, с которой я столкнулся, заключалась в том, что объект разрешения не мог быть виден в консоли (или, по крайней мере, ни я, ни мои коллеги не могли его найти) ???? - person Matt W; 10.10.2020
comment
Не могли бы вы привести пример того, как вы могли бы использовать команду import в этом контексте? - person Matt W; 12.10.2020
comment
У каждого ресурса terraform есть несколько иной способ ссылки на исходный ресурс aws, например, вот документация как импортировать сегмент s3. Таким образом, ваша последовательность действий будет следующей: создать ведро вручную. Добавьте определение минимального ресурса, чтобы terraform plan прошел. Затем запустите импорт, используя только что добавленное имя ресурса и исправив ссылку из документации. Затем запустите terraform plan и синхронизируйте файлы tf в соответствии с diff. - person Ilia Kondrashov; 12.10.2020
comment
Мой конкретный tf-файл для apigateway включает aws_lambda_permission для правильной работы, но как мне узнать, какие элементы включить, если я не могу знать, что было включено? Я бы не подумал включить что-то для лямбды в tf для шлюза, поэтому (я думаю) не будет завершено import. - person Matt W; 12.10.2020
comment
Поскольку terraform apply работает правильно - основы (минимальные зависимости) уже описаны. Наверняка может быть что-то еще, и я не думаю, что есть серебряная пуля, чтобы выяснить это автоматически. Я вижу здесь два подхода: 1) удалить вручную, создать с помощью TF и ​​подтвердить, что все работает 2) просмотреть документацию по TF для связанных ресурсов - вы можете определить что-то, что вы действительно используете там. - person Ilia Kondrashov; 12.10.2020