Полностью возможно смешать два, и мне приходилось делать это несколько раз. То, как это выглядит, на самом деле оказывается проще, чем кажется.
Во-первых, если вы думаете о том, что вы делаете с Serverless Framework, как о разработке микросервисов (без сопутствующего бремени управления инфраструктурой), это делает его одним шагом в правильное направление. Затем вы можете решить, что все, что требуется для внутренней работы этого микросервиса, определено внутри этого микросервиса как часть конфигурации служб в serverless.yml, будь то таблицы DynamoDB, интеграции Auth0, потоки Kinesis, SQS , SNS, IAM-разрешения, назначенные функциям и т. Д. c. Держите все это как часть микросервиса. Terraform не требуется.
Теперь подумайте о том, что может понадобиться тому и другому микросервисам для более широкого взаимодействия. Они не являются критичными для внутренней работы этих служб, но важны для интеграции в остальную инфраструктуру организации. Это включает в себя такие вещи, как роли IAM развертывания, используемые службами Serverless Framework для развертывания в CloudFormation, реляционные базы данных, которые должны совместно использоваться несколькими службами и ресурсами, сетевые элементы (VP C, группы безопасности и т. Д. c), Монолитные c кластеры, такие как ElasticSearch и Redis ... все эти элементы являются отличными кандидатами для определения вне Serverless Framework и отлично работают с Terraform.
Любой ресурс сможет подключаться к этим определенным Terraform ресурсам по мере необходимости, в отличие от этого жесткого связывания, такого как функции Lambda, запускаемого из конечной точки шлюза API.
Надеюсь, что это поможет