Вы должны предпочитать ресурсы модулям, если у вас нет сложного варианта использования, включающего много взаимодействующих ресурсов в общем шаблоне.
Модули лучше всего подходят для стандартизации общих шаблонов. Модуль может быть сделан для одного ресурса, но он редко стоит затрат.
Вот рабочий пример, основанный на реальной системе. Это создает SNS topi c и подписывает на него функцию Lambda:
resource "aws_sns_topic" "kpis" {
name = var.sns_topic_name
}
resource "aws_sns_topic_subscription" "invoke_with_sns" {
topic_arn = aws_sns_topic.kpis.arn
protocol = "lambda"
endpoint = module.kpis.function_arn}"
}
resource "aws_lambda_permission" "allow_sns_invoke" {
statement_id = "AllowExecutionFromSNS"
action = "lambda:InvokeFunction"
function_name = module.lambda.function_name
principal = "sns.amazonaws.com"
source_arn = aws_sns_topic.kpis.arn
}
Подробнее о aws_sns_topic_subscription можно прочитать здесь: https://www.terraform.io/docs/providers/aws/r/sns_topic_subscription.html