@@ -62,6 +62,56 @@ module "data" {
6262 depends_on = [module . network ]
6363}
6464
65+ module "rds_provisioner" {
66+ source = " ./modules/lambdas/iroco2-rds-db-provisioner"
67+
68+ lambda_function_name = " ${ var . namespace } -${ var . environment } -rds-db-provisioner"
69+ lambda_subnet_ids = module. network . private_subnet_ids
70+ lambda_security_group_id = module. network . security_group_ids [" iroco2-${ var . environment } -rds-lambda-provisioner" ]
71+
72+ lambda_force_invoke = false
73+
74+ rds_db_driver = " postgres"
75+ rds_default_db_name = " irocalc"
76+ rds_endpoint = module. data . rds_database . db_instance_address
77+ rds_db_port = 5432
78+ rds_db_user = " iroco2"
79+
80+ rds_secret_arn = module. data . rds_database_secret_arn
81+
82+ databases = [
83+ " keycloak"
84+ ]
85+ schemas = [
86+ { name = " keycloak" , database = " keycloak" , owner = " keycloak_readwrite" }
87+ ]
88+ roles = [
89+ { name = " keycloak_readwrite" }
90+ ]
91+ users = [
92+ { name = " keycloak" , password_arn = module.data.rds_keycloak_secret_arn, roles = [" keycloak_readwrite" ] }
93+ ]
94+
95+ grants = [
96+ {
97+ object_type = " DATABASE" ,
98+ target = " keycloak" ,
99+ grant_to = " keycloak" ,
100+ database = " keycloak" ,
101+ privileges = [" CONNECT" ]
102+ },
103+ {
104+ object_type = " SCHEMA" ,
105+ target = " keycloak" ,
106+ grant_to = " keycloak_readwrite" ,
107+ database = " keycloak" ,
108+ privileges = [" USAGE" , " CREATE" ]
109+ }
110+ ]
111+
112+ depends_on = [module . data ]
113+ }
114+
65115module "lambda_cur" {
66116 source = " ./modules/lambdas/iroco2-cur-analyzer"
67117
@@ -80,15 +130,14 @@ module "backend_api" {
80130 cur_s3_bucket_arn = module. lambda_cur . s3_cur_bucket_arn
81131
82132 # Network variables
83- vpc_id = module. network . vpc_id
84- private_subnet_ids = module. network . private_subnet_ids
85- alb_dns_name = module. network . alb_dns_name
86- alb_zone_id = module. network . alb_zone_id
87- alb_arn_suffix = module. network . alb_arn_suffix
88- alb_listener_arn = module. network . alb_listener_https_arn
89- alb_security_group_id = module. network . security_group_ids [" iroco2-${ var . environment } -alb" ]
90- subdomain_name = var. subdomain_name
91- zone_name = var. zone_name
133+ vpc_id = module. network . vpc_id
134+ private_subnet_ids = module. network . private_subnet_ids
135+ alb_dns_name = module. network . alb_dns_name
136+ alb_zone_id = module. network . alb_zone_id
137+ alb_arn_suffix = module. network . alb_arn_suffix
138+ alb_listener_arn = module. network . alb_listener_https_arn
139+ subdomain_name = var. subdomain_name
140+ zone_name = var. zone_name
92141
93142 # ECS variables
94143 cluster_name = module. services . cluster . name
@@ -103,7 +152,7 @@ module "backend_api" {
103152
104153 task_container_environment = {
105154 DATABASE_NAME = module.data.rds_database.db_instance_name
106- IROCO2_CORS_ALLOWED_ORIGINS = var.cors_allowed_origins
155+ IROCO2_CORS_ALLOWED_ORIGINS = " https:// ${ var . subdomain_name } . ${ var . zone_name } ,http://localhost:3000 "
107156 IROCO2_AWS_ANALYZER_SQS_QUEUE_NAME = module.lambda_cur.analyzer_sqs_cur_name
108157 IROCO2_AWS_SCANNER_SQS_QUEUE_NAME = module.lambda_cur.scanner_sqs_cur_name
109158 IROCO2_AWS_SQS_QUEUE_ENDPOINT = trimsuffix (module. lambda_cur . analyzer_sqs_cur_url , module. lambda_cur . analyzer_sqs_cur_name )
@@ -114,8 +163,8 @@ module "backend_api" {
114163 IROCO2_CLERK_PUBLIC_KEY = module.services.ssm_parameters[" clerk_public_key" ].value
115164 IROCO2_KMS_IDENTITY_KEY_ID = module.data.iroco_identity_provider_key_id.id
116165 IROCO2_KMS_IDENTITY_PUBLIC_KEY = data.aws_kms_public_key.by_id.public_key
117- JWT_ISSUER = var.zone_name
118- JWT_AUDIENCE = var.zone_name
166+ JWT_ISSUER = module.services.ssm_parameters[ " clerk_issuer " ].value
167+ JWT_AUDIENCE = module.services.ssm_parameters[ " clerk_audience " ].value
119168 }
120169 task_container_secrets_arn = {}
121170 task_container_secrets_arn_with_key = {
@@ -141,3 +190,63 @@ module "backend_api" {
141190 }
142191 }
143192}
193+
194+ module "keycloak" {
195+ source = " ./modules/fargate-task-keycloak"
196+
197+ # Global variables
198+ aws_region = var. aws_region
199+ project_name = " keycloak"
200+ environment = var. environment
201+
202+ # Network variables
203+ vpc_id = module. network . vpc_id
204+ private_subnet_ids = module. network . private_subnet_ids
205+ alb_dns_name = module. network . alb_dns_name
206+ alb_zone_id = module. network . alb_zone_id
207+ alb_arn_suffix = module. network . alb_arn_suffix
208+ alb_listener_arn = module. network . alb_listener_https_arn
209+ subdomain_name = var. subdomain_name
210+ zone_name = var. zone_name
211+
212+ # ECS variables
213+ cluster_name = module. services . cluster . name
214+ cluster_id = module. services . cluster . id
215+ container_cpu = 512
216+ container_memory = 2048
217+ container_port = 8080
218+ container_image = " quay.io/keycloak/keycloak:24.0.1"
219+ container_desired_count = var. container_desired_count
220+ container_command = [" -c" , " /opt/keycloak/bin/kc.sh build --health-enabled=true && /opt/keycloak/bin/kc.sh start --http-enabled=true --hostname=$HOSTNAME" ]
221+ kms_identity_key_arn = data. aws_kms_key . signing_key . arn
222+ ecs_backend_security_group_id = module. network . security_group_ids [" iroco2-${ var . environment } -keycloak" ]
223+
224+ task_container_environment = {
225+ HOSTNAME = " auth.${ var . subdomain_name } .${ var . zone_name } "
226+ KC_PROXY = " edge"
227+ KC_DB_URL = " jdbc:postgresql://${ module . data . rds_database . db_instance_address } :5432/keycloak"
228+ KC_DB = " postgres"
229+ KC_DB_SCHEMA = " keycloak"
230+ KC_HEALTH_ENABLED = " true"
231+ KC_HEALTH_DB = " enabled"
232+ }
233+ task_container_secrets_arn = {}
234+ task_container_secrets_arn_with_key = {
235+ KEYCLOAK_ADMIN = {
236+ arn = module.data.rds_keycloak_admin_secret_arn
237+ key = " KEYCLOAK_ADMIN"
238+ }
239+ KEYCLOAK_ADMIN_PASSWORD = {
240+ arn = module.data.rds_keycloak_admin_secret_arn
241+ key = " KEYCLOAK_ADMIN_PASSWORD"
242+ }
243+ KC_DB_USERNAME = {
244+ arn = module.data.rds_keycloak_secret_arn
245+ key = " username"
246+ }
247+ KC_DB_PASSWORD = {
248+ arn = module.data.rds_keycloak_secret_arn
249+ key = " password"
250+ }
251+ }
252+ }
0 commit comments