modules/managed-kafka/main.tf (91 lines of code) (raw):
/**
* Copyright 2025 Google LLC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
resource "google_managed_kafka_cluster" "cluster" {
project = var.project_id
cluster_id = var.cluster_id
location = var.location
labels = var.labels
capacity_config {
vcpu_count = var.capacity_config.vcpu_count
memory_bytes = var.capacity_config.memory_bytes
}
gcp_config {
access_config {
dynamic "network_configs" {
for_each = var.subnets
iterator = subnet
content {
subnet = subnet.value
}
}
}
kms_key = var.kms_key
}
dynamic "rebalance_config" {
for_each = var.rebalance_mode == null ? [] : [""]
content {
mode = var.rebalance_config.mode
}
}
}
resource "google_managed_kafka_topic" "topics" {
for_each = var.topics
project = var.project_id
topic_id = each.key
cluster = google_managed_kafka_cluster.cluster.cluster_id
location = var.location
partition_count = each.value.partition_count
replication_factor = each.value.replication_factor
configs = each.value.configs
}
resource "google_managed_kafka_connect_cluster" "connect_clusters" {
provider = google-beta
for_each = var.connect_clusters
kafka_cluster = google_managed_kafka_cluster.cluster.id
connect_cluster_id = each.key
project = coalesce(each.value.project_id, var.project_id)
location = coalesce(each.value.location, var.location)
capacity_config {
vcpu_count = each.value.vcpu_count
memory_bytes = each.value.memory_bytes
}
gcp_config {
access_config {
network_configs {
primary_subnet = each.value.primary_subnet
additional_subnets = each.value.additional_subnets
dns_domain_names = each.value.dns_domain_names
}
}
}
labels = each.value.labels
}
resource "google_managed_kafka_connector" "connectors" {
provider = google-beta
for_each = var.connect_connectors
connector_id = each.key
project = google_managed_kafka_connect_cluster.connect_clusters[each.value.connect_cluster].project
connect_cluster = google_managed_kafka_connect_cluster.connect_clusters[each.value.connect_cluster].connect_cluster_id
location = google_managed_kafka_connect_cluster.connect_clusters[each.value.connect_cluster].location
configs = merge(each.value.configs, { name = each.key })
dynamic "task_restart_policy" {
for_each = each.value.task_restart_policy == null ? [] : [""]
content {
minimum_backoff = each.value.task_restart_policy.minimum_backoff
maximum_backoff = each.value.task_restart_policy.maximum_backoff
}
}
}