1+ # Update the config to use a cloud provider and region of your choice.
2+ # https://registry.terraform.io/providers/confluentinc/confluent/latest/docs/resources/confluent_kafka_cluster
13resource "confluent_kafka_cluster" "kafka_cluster" {
24 display_name = var. cc_default_kafka_cluster_name
35 availability = " SINGLE_ZONE"
46 cloud = var. cloud_provider
57 region = var. cloud_region
6- standard {}
8+ basic {}
79 environment {
810 id = confluent_environment. cc_env . id
911 }
1012
1113 depends_on = [confluent_environment . cc_env ]
1214}
1315
14- # ---------------------------------------------------------------------------
15- # API KEY and Role for Administration of Kafka
16- # ---------------------------------------------------------------------------
17- resource "confluent_service_account" "kafka_manager" {
18- display_name = " ${ var . cc_env_name } -kafka_manager"
16+ data "confluent_schema_registry_cluster" "advanced" {
17+ environment {
18+ id = confluent_environment. cc_env . id
19+ }
20+ depends_on = [confluent_kafka_cluster . kafka_cluster ]
21+ }
22+
23+ // 'app-manager' service account is required in this configuration to create 'purchase' topic and grant ACLs
24+ // to 'app-producer' and 'app-consumer' service accounts.
25+ resource "confluent_service_account" "app-manager" {
26+ display_name = " ${ var . cc_default_kafka_cluster_name } -app-manager"
1927 description = " Service account to manage Kafka cluster"
2028}
2129
22- resource "confluent_role_binding" "kafka_manager_kafka_cluster_admin " {
23- principal = " User:${ confluent_service_account . kafka_manager . id } "
30+ resource "confluent_role_binding" "app-manager-kafka-cluster-admin " {
31+ principal = " User:${ confluent_service_account . app-manager . id } "
2432 role_name = " CloudClusterAdmin"
2533 crn_pattern = confluent_kafka_cluster. kafka_cluster . rbac_crn
2634}
2735
28- resource "confluent_api_key" "kafka_manager_kafka_api_key " {
29- display_name = " kafka_manager_kafka_api_key "
30- description = " Kafka API Key that is owned by 'kafka_manager ' service account"
36+ resource "confluent_api_key" "app-manager-kafka-api-key " {
37+ display_name = " app-manager-kafka-api-key "
38+ description = " Kafka API Key that is owned by 'app-manager ' service account"
3139 owner {
32- id = confluent_service_account. kafka_manager . id
33- api_version = confluent_service_account. kafka_manager . api_version
34- kind = confluent_service_account. kafka_manager . kind
40+ id = confluent_service_account. app-manager . id
41+ api_version = confluent_service_account. app-manager . api_version
42+ kind = confluent_service_account. app-manager . kind
3543 }
3644
3745 managed_resource {
@@ -44,54 +52,76 @@ resource "confluent_api_key" "kafka_manager_kafka_api_key" {
4452 }
4553 }
4654
55+ # The goal is to ensure that confluent_role_binding.app-manager-kafka-cluster-admin is created before
56+ # confluent_api_key.app-manager-kafka-api-key is used to create instances of
57+ # confluent_kafka_topic, confluent_kafka_acl resources.
58+
59+ # 'depends_on' meta-argument is specified in confluent_api_key.app-manager-kafka-api-key to avoid having
60+ # multiple copies of this definition in the configuration which would happen if we specify it in
61+ # confluent_kafka_topic, confluent_kafka_acl resources instead.
4762 depends_on = [
48- confluent_environment . cc_env ,
49- confluent_role_binding . kafka_manager_kafka_cluster_admin
63+ confluent_role_binding . app-manager-kafka-cluster-admin
5064 ]
5165}
5266
53- # ---------------------------------------------------------------------------
54- # API KEY and Role for Developers on Kafka
55- # ---------------------------------------------------------------------------
56-
57- resource "confluent_service_account" "kafka_developer" {
58- display_name = " ${ var . cc_env_name } -kafka_developer"
59- description = " Service account for developer using Kafka cluster"
67+ resource "confluent_service_account" "env-manager" {
68+ display_name = " ${ var . cc_default_kafka_cluster_name } -env-manager"
69+ description = " Service account to manage 'Staging' environment"
6070}
6171
62- resource "confluent_role_binding" "kafka_developer_read_all_topics " {
63- principal = " User:${ confluent_service_account . kafka_manager . id } "
64- role_name = " DeveloperRead "
65- crn_pattern = " ${ confluent_kafka_cluster . kafka_cluster . rbac_crn } /kafka= ${ confluent_kafka_cluster . kafka_cluster . id } /topic=* "
72+ resource "confluent_role_binding" "env-manager-environment-admin " {
73+ principal = " User:${ confluent_service_account . env-manager . id } "
74+ role_name = " EnvironmentAdmin "
75+ crn_pattern = confluent_environment . cc_env . resource_name
6676}
6777
68- resource "confluent_role_binding" "kafka_developer_write_all_topics" {
69- principal = " User:${ confluent_service_account . kafka_manager . id } "
70- role_name = " DeveloperWrite"
71- crn_pattern = " ${ confluent_kafka_cluster . kafka_cluster . rbac_crn } /kafka=${ confluent_kafka_cluster . kafka_cluster . id } /topic=*"
72- }
73-
74- resource "confluent_api_key" "kafka_developer_kafka_api_key" {
75- display_name = " kafka_developer_kafka_api_key"
76- description = " Kafka API Key that is owned by 'kafka_developer' service account"
78+ resource "confluent_api_key" "env-manager-schema-registry-api-key" {
79+ display_name = " env-manager-schema-registry-api-key"
80+ description = " Schema Registry API Key that is owned by 'env-manager' service account"
7781 owner {
78- id = confluent_service_account. kafka_developer . id
79- api_version = confluent_service_account. kafka_developer . api_version
80- kind = confluent_service_account. kafka_developer . kind
82+ id = confluent_service_account. env-manager . id
83+ api_version = confluent_service_account. env-manager . api_version
84+ kind = confluent_service_account. env-manager . kind
8185 }
8286
8387 managed_resource {
84- id = confluent_kafka_cluster . kafka_cluster . id
85- api_version = confluent_kafka_cluster . kafka_cluster . api_version
86- kind = confluent_kafka_cluster . kafka_cluster . kind
88+ id = data . confluent_schema_registry_cluster . advanced . id
89+ api_version = data . confluent_schema_registry_cluster . advanced . api_version
90+ kind = data . confluent_schema_registry_cluster . advanced . kind
8791
8892 environment {
8993 id = confluent_environment. cc_env . id
9094 }
9195 }
9296
97+ # The goal is to ensure that confluent_role_binding.env-manager-environment-admin is created before
98+ # confluent_api_key.env-manager-schema-registry-api-key is used to create instances of
99+ # confluent_schema resources.
100+
101+ # 'depends_on' meta-argument is specified in confluent_api_key.env-manager-schema-registry-api-key to avoid having
102+ # multiple copies of this definition in the configuration which would happen if we specify it in
103+ # confluent_schema resources instead.
93104 depends_on = [
94- confluent_role_binding . kafka_developer_read_all_topics ,
95- confluent_role_binding . kafka_developer_write_all_topics
105+ confluent_role_binding . env-manager-environment-admin ,
106+ data . confluent_schema_registry_cluster . advanced
96107 ]
97108}
109+
110+ resource "confluent_schema_registry_cluster_config" "schema_registry_cluster_config" {
111+ schema_registry_cluster {
112+ id = data. confluent_schema_registry_cluster . advanced . id
113+ }
114+ rest_endpoint = data. confluent_schema_registry_cluster . advanced . rest_endpoint
115+ compatibility_level = " BACKWARD"
116+ credentials {
117+ key = confluent_api_key. env-manager-schema-registry-api-key . id
118+ secret = confluent_api_key. env-manager-schema-registry-api-key . secret
119+ }
120+
121+ depends_on = [data . confluent_schema_registry_cluster . advanced ,
122+ confluent_api_key . env-manager-schema-registry-api-key ]
123+
124+ lifecycle {
125+ prevent_destroy = false
126+ }
127+ }
0 commit comments