Как структурировать шаблоны terraform для приложений без сервера - PullRequest
2 голосов
/ 14 апреля 2019

У меня есть несколько лямбд, которые запускаются сообщениями из очередей или через шлюз API, имеют разные типы хранилищ и так далее.

Каждый из этих компонентов размещается в своих соответствующих репозиториях, но в целом и вместе они являются частью одной архитектуры. Я пытаюсь структурировать свои шаблоны terraform, но меня беспокоит тот факт, что некоторые из этих лямбд имеют общие ресурсы, например, таблицы хранения или корзины s3, поэтому мне было интересно, будет ли хорошей идеей иметь только Файл main.tf в каждом репозитории лямбды, который создает только саму лямбду, а не какие-либо другие ее зависимости. Таким образом, я мог бы повторно развернуть лямбду через ci / cd, не беспокоясь о других компонентах, и я бы разместил все остальные части архитектура, которая более или менее продолжительна в центральном репо и запускает их только при необходимости через этот специализированный репозиторий ci / cd pipe. Я также думал о том, чтобы иметь файл tfvar, который имеет все имена общих ресурсов.

Это правильный подход? Каковы недостатки? Какие есть альтернативы?

1 Ответ

0 голосов
/ 14 апреля 2019

Вы на правильном пути. Вы можете иметь модуль для лямбд, который принимает эти общие ресурсы в качестве переменных. Вы можете либо жестко закодировать ресурсы вашего terraform import, а затем передать их лямбде:

В папке modules/lambda

resource "aws_lambda_function" "this" {
    """
    My lambda stuff
    """
}

В вашей главной папке main.tf

module "lambda1"{
   s3_bucket = "${var.common_bucket}"
   iam_role = "${var.common_role}"
   subnets = "${var.private_subnets}"
   ....
}

module "lambda2"{
   s3_bucket = "${var.common_bucket}"
   iam_role = "${var.common_role}"
   subnets = "${var.private_subnets}"
   ....
}

module "lambda3"{
   s3_bucket = "${var.common_bucket}"
   iam_role = "${var.common_role}"
   subnets = "${var.private_subnets}"
   ....
}

Если вы хотите импортировать общие ресурсы, например, политику iam для правила, просто сделайте что-то вроде этого

resource "aws_iam_policy" "my_policy" {

}

Затем выполните команду terraform import aws_iam_policy.my_policy <policy arn>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...