Skip to content

Commit 5a44cb5

Browse files
authored
[backing-services] set defaults to support disablement (#83)
* set defaults to support disablement * Generate sane values * Write to ssm * support more enabled flags. usernames cannot being with number * Usernames cannot contain leading numbers.
1 parent 51956b0 commit 5a44cb5

File tree

10 files changed

+320
-55
lines changed

10 files changed

+320
-55
lines changed

aws/backing-services/README.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
2+
## Troubleshooting
3+
4+
### Problem
5+
6+
```
7+
aws_security_group.default: Error authorizing security group ingress rules: InvalidGroup.NotFound: You have specified two resources that belong to different networks.
8+
```
9+
10+
### Answer
11+
12+
Ensure that the VPC peering with the Kops cluster has been setup.

aws/backing-services/aurora-mysql.tf

Lines changed: 105 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -6,19 +6,22 @@ variable "mysql_name" {
66
default = "mysql"
77
}
88

9-
variable "mysql_admin_name" {
9+
variable "mysql_admin_user" {
1010
type = "string"
1111
description = "MySQL admin user name"
12+
default = ""
1213
}
1314

1415
variable "mysql_admin_password" {
1516
type = "string"
1617
description = "MySQL password for the admin user"
18+
default = ""
1719
}
1820

1921
variable "mysql_db_name" {
2022
type = "string"
2123
description = "MySQL database name"
24+
default = ""
2225
}
2326

2427
# https://aws.amazon.com/rds/aurora/pricing
@@ -51,48 +54,129 @@ variable "mysql_cluster_allowed_cidr_blocks" {
5154
description = "List of CIDR blocks allowed to access the cluster"
5255
}
5356

57+
resource "random_pet" "mysql_db_name" {
58+
count = "${local.mysql_cluster_enabled ? 1 : 0}"
59+
separator = "_"
60+
}
61+
62+
resource "random_string" "mysql_admin_user" {
63+
count = "${local.mysql_cluster_enabled ? 1 : 0}"
64+
length = 8
65+
number = false
66+
special = false
67+
}
68+
69+
resource "random_string" "mysql_admin_password" {
70+
count = "${local.mysql_cluster_enabled ? 1 : 0}"
71+
length = 16
72+
special = true
73+
}
74+
75+
locals {
76+
mysql_cluster_enabled = "${var.mysql_cluster_enabled == "true"}"
77+
mysql_admin_user = "${length(var.mysql_admin_user) > 0 ? var.mysql_admin_user : join("", random_string.mysql_admin_user.*.result)}"
78+
mysql_admin_password = "${length(var.mysql_admin_password) > 0 ? var.mysql_admin_password : join("", random_string.mysql_admin_password.*.result)}"
79+
mysql_db_name = "${join("", random_pet.mysql_db_name.*.id)}"
80+
}
81+
5482
module "aurora_mysql" {
55-
source = "git::https://github.com/cloudposse/terraform-aws-rds-cluster.git?ref=tags/0.7.0"
56-
namespace = "${var.namespace}"
57-
stage = "${var.stage}"
58-
name = "${var.mysql_name}"
59-
engine = "aurora-mysql"
60-
cluster_family = "aurora-mysql5.7"
61-
instance_type = "${var.mysql_instance_type}"
62-
cluster_size = "${var.mysql_cluster_size}"
63-
admin_user = "${var.mysql_admin_name}"
64-
admin_password = "${var.mysql_admin_password}"
65-
db_name = "${var.mysql_db_name}"
66-
db_port = "3306"
67-
vpc_id = "${module.vpc.vpc_id}"
68-
subnets = ["${module.subnets.public_subnet_ids}"] # Use module.subnets.private_subnet_ids if the cluster does not need to be publicly accessible
69-
zone_id = "${var.zone_id}"
83+
source = "git::https://github.com/cloudposse/terraform-aws-rds-cluster.git?ref=tags/0.7.1"
84+
namespace = "${var.namespace}"
85+
stage = "${var.stage}"
86+
name = "${var.mysql_name}"
87+
engine = "aurora-mysql"
88+
cluster_family = "aurora-mysql5.7"
89+
instance_type = "${var.mysql_instance_type}"
90+
cluster_size = "${var.mysql_cluster_size}"
91+
admin_user = "${local.mysql_admin_user}"
92+
admin_password = "${local.mysql_admin_password}"
93+
db_name = "${local.mysql_db_name}"
94+
db_port = "3306"
95+
vpc_id = "${module.vpc.vpc_id}"
96+
97+
# Use module.subnets.private_subnet_ids if the cluster does not need to be publicly accessible
98+
subnets = ["${module.subnets.public_subnet_ids}"]
99+
zone_id = "${local.zone_id}"
70100
enabled = "${var.mysql_cluster_enabled}"
71101
publicly_accessible = "${var.mysql_cluster_publicly_accessible}"
72102
allowed_cidr_blocks = "${var.mysql_cluster_allowed_cidr_blocks}"
73103
}
74104

105+
resource "aws_ssm_parameter" "aurora_mysql_database_name" {
106+
count = "${local.mysql_cluster_enabled ? 1 : 0}"
107+
name = "${format(var.chamber_parameter_name, local.chamber_service, "aurora_mysql_database_name")}"
108+
value = "${module.aurora_mysql.name}"
109+
description = "Aurora MySQL Database Name"
110+
type = "String"
111+
overwrite = "true"
112+
}
113+
114+
resource "aws_ssm_parameter" "aurora_mysql_master_username" {
115+
count = "${local.mysql_cluster_enabled ? 1 : 0}"
116+
name = "${format(var.chamber_parameter_name, local.chamber_service, "aurora_mysql_master_username")}"
117+
value = "${module.aurora_mysql.user}"
118+
description = "Aurora MySQL Username for the master DB user"
119+
type = "String"
120+
overwrite = "true"
121+
}
122+
123+
resource "aws_ssm_parameter" "aurora_mysql_master_password" {
124+
count = "${local.mysql_cluster_enabled ? 1 : 0}"
125+
name = "${format(var.chamber_parameter_name, local.chamber_service, "aurora_mysql_master_password")}"
126+
value = "${module.aurora_mysql.password}"
127+
description = "Aurora MySQL Password for the master DB user"
128+
type = "String"
129+
overwrite = "true"
130+
}
131+
132+
resource "aws_ssm_parameter" "aurora_mysql_master_hostname" {
133+
count = "${local.mysql_cluster_enabled ? 1 : 0}"
134+
name = "${format(var.chamber_parameter_name, local.chamber_service, "aurora_mysql_master_hostname")}"
135+
value = "${module.aurora_mysql.master_host}"
136+
description = "Aurora MySQL DB Master hostname"
137+
type = "String"
138+
overwrite = "true"
139+
}
140+
141+
resource "aws_ssm_parameter" "aurora_mysql_replicas_hostname" {
142+
count = "${local.mysql_cluster_enabled ? 1 : 0}"
143+
name = "${format(var.chamber_parameter_name, local.chamber_service, "aurora_mysql_replicas_hostname")}"
144+
value = "${module.aurora_mysql.replicas_host}"
145+
description = "Aurora MySQL DB Replicas hostname"
146+
type = "String"
147+
overwrite = "true"
148+
}
149+
150+
resource "aws_ssm_parameter" "aurora_mysql_cluster_name" {
151+
count = "${local.mysql_cluster_enabled ? 1 : 0}"
152+
name = "${format(var.chamber_parameter_name, local.chamber_service, "aurora_mysql_cluster_name")}"
153+
value = "${module.aurora_mysql.cluster_name}"
154+
description = "Aurora MySQL DB Cluster Identifier"
155+
type = "String"
156+
overwrite = "true"
157+
}
158+
75159
output "aurora_mysql_database_name" {
76160
value = "${module.aurora_mysql.name}"
77-
description = "Database name"
161+
description = "Aurora MySQL Database name"
78162
}
79163

80164
output "aurora_mysql_master_username" {
81165
value = "${module.aurora_mysql.user}"
82-
description = "Username for the master DB user"
166+
description = "Aurora MySQL Username for the master DB user"
83167
}
84168

85169
output "aurora_mysql_master_hostname" {
86170
value = "${module.aurora_mysql.master_host}"
87-
description = "DB Master hostname"
171+
description = "Aurora MySQL DB Master hostname"
88172
}
89173

90174
output "aurora_mysql_replicas_hostname" {
91175
value = "${module.aurora_mysql.replicas_host}"
92-
description = "Replicas hostname"
176+
description = "Aurora MySQL Replicas hostname"
93177
}
94178

95179
output "aurora_mysql_cluster_name" {
96180
value = "${module.aurora_mysql.cluster_name}"
97-
description = "Cluster Identifier"
181+
description = "Aurora MySQL Cluster Identifier"
98182
}

aws/backing-services/aurora-postgres.tf

Lines changed: 96 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,23 +4,28 @@ variable "postgres_name" {
44
default = "postgres"
55
}
66

7-
# Don't use `admin`
7+
# Don't use `admin`
8+
# Read more: <https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Limits.html>
89
# ("MasterUsername admin cannot be used as it is a reserved word used by the engine")
9-
variable "postgres_admin_name" {
10+
variable "postgres_admin_user" {
1011
type = "string"
1112
description = "Postgres admin user name"
13+
default = ""
1214
}
1315

1416
# Must be longer than 8 chars
17+
# Read more: <https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Limits.html>
1518
# ("The parameter MasterUserPassword is not a valid password because it is shorter than 8 characters")
1619
variable "postgres_admin_password" {
1720
type = "string"
1821
description = "Postgres password for the admin user"
22+
default = ""
1923
}
2024

2125
variable "postgres_db_name" {
2226
type = "string"
2327
description = "Postgres database name"
28+
default = ""
2429
}
2530

2631
# db.r4.large is the smallest instance type supported by Aurora Postgres
@@ -43,47 +48,126 @@ variable "postgres_cluster_enabled" {
4348
description = "Set to false to prevent the module from creating any resources"
4449
}
4550

51+
resource "random_pet" "postgres_db_name" {
52+
count = "${local.postgres_cluster_enabled ? 1 : 0}"
53+
separator = "_"
54+
}
55+
56+
resource "random_string" "postgres_admin_user" {
57+
count = "${local.postgres_cluster_enabled ? 1 : 0}"
58+
length = 8
59+
special = false
60+
number = false
61+
}
62+
63+
resource "random_string" "postgres_admin_password" {
64+
count = "${local.postgres_cluster_enabled ? 1 : 0}"
65+
length = 16
66+
special = true
67+
}
68+
69+
locals {
70+
postgres_cluster_enabled = "${var.postgres_cluster_enabled == "true"}"
71+
postgres_admin_user = "${length(var.postgres_admin_user) > 0 ? var.postgres_admin_user : join("", random_string.postgres_admin_user.*.result)}"
72+
postgres_admin_password = "${length(var.postgres_admin_password) > 0 ? var.postgres_admin_password : join("", random_string.postgres_admin_password.*.result)}"
73+
postgres_db_name = "${join("", random_pet.postgres_db_name.*.id)}"
74+
}
75+
4676
module "aurora_postgres" {
47-
source = "git::https://github.com/cloudposse/terraform-aws-rds-cluster.git?ref=tags/0.7.0"
77+
source = "git::https://github.com/cloudposse/terraform-aws-rds-cluster.git?ref=tags/0.7.1"
4878
namespace = "${var.namespace}"
4979
stage = "${var.stage}"
5080
name = "${var.postgres_name}"
5181
engine = "aurora-postgresql"
5282
cluster_family = "aurora-postgresql9.6"
5383
instance_type = "${var.postgres_instance_type}"
5484
cluster_size = "${var.postgres_cluster_size}"
55-
admin_user = "${var.postgres_admin_name}"
56-
admin_password = "${var.postgres_admin_password}"
57-
db_name = "${var.postgres_db_name}"
85+
admin_user = "${local.postgres_admin_user}"
86+
admin_password = "${local.postgres_admin_password}"
87+
db_name = "${local.postgres_db_name}"
5888
db_port = "5432"
5989
vpc_id = "${module.vpc.vpc_id}"
6090
subnets = ["${module.subnets.private_subnet_ids}"]
61-
zone_id = "${var.zone_id}"
91+
zone_id = "${local.zone_id}"
6292
security_groups = ["${module.kops_metadata.nodes_security_group_id}"]
6393
enabled = "${var.postgres_cluster_enabled}"
6494
}
6595

96+
resource "aws_ssm_parameter" "aurora_postgres_database_name" {
97+
count = "${local.postgres_cluster_enabled ? 1 : 0}"
98+
name = "${format(var.chamber_parameter_name, local.chamber_service, "aurora_postgres_database_name")}"
99+
value = "${module.aurora_postgres.name}"
100+
description = "Aurora Postgres Database Name"
101+
type = "String"
102+
overwrite = "true"
103+
}
104+
105+
resource "aws_ssm_parameter" "aurora_postgres_master_username" {
106+
count = "${local.postgres_cluster_enabled ? 1 : 0}"
107+
name = "${format(var.chamber_parameter_name, local.chamber_service, "aurora_postgres_master_username")}"
108+
value = "${module.aurora_postgres.user}"
109+
description = "Aurora Postgres Username for the master DB user"
110+
type = "String"
111+
overwrite = "true"
112+
}
113+
114+
resource "aws_ssm_parameter" "aurora_postgres_master_password" {
115+
count = "${local.postgres_cluster_enabled ? 1 : 0}"
116+
name = "${format(var.chamber_parameter_name, local.chamber_service, "aurora_postgres_master_password")}"
117+
value = "${module.aurora_postgres.password}"
118+
description = "Aurora Postgres Password for the master DB user"
119+
type = "String"
120+
overwrite = "true"
121+
}
122+
123+
resource "aws_ssm_parameter" "aurora_postgres_master_hostname" {
124+
count = "${local.postgres_cluster_enabled ? 1 : 0}"
125+
name = "${format(var.chamber_parameter_name, local.chamber_service, "aurora_postgres_master_hostname")}"
126+
value = "${module.aurora_postgres.master_host}"
127+
description = "Aurora Postgres DB Master hostname"
128+
type = "String"
129+
overwrite = "true"
130+
}
131+
132+
resource "aws_ssm_parameter" "aurora_postgres_replicas_hostname" {
133+
count = "${local.postgres_cluster_enabled ? 1 : 0}"
134+
name = "${format(var.chamber_parameter_name, local.chamber_service, "aurora_postgres_replicas_hostname")}"
135+
value = "${module.aurora_postgres.replicas_host}"
136+
description = "Aurora Postgres DB Replicas hostname"
137+
type = "String"
138+
overwrite = "true"
139+
}
140+
141+
resource "aws_ssm_parameter" "aurora_postgres_cluster_name" {
142+
count = "${local.postgres_cluster_enabled ? 1 : 0}"
143+
name = "${format(var.chamber_parameter_name, local.chamber_service, "aurora_postgres_cluster_name")}"
144+
value = "${module.aurora_postgres.cluster_name}"
145+
description = "Aurora Postgres DB Cluster Identifier"
146+
type = "String"
147+
overwrite = "true"
148+
}
149+
66150
output "aurora_postgres_database_name" {
67151
value = "${module.aurora_postgres.name}"
68-
description = "Database name"
152+
description = "Aurora Postgres Database name"
69153
}
70154

71155
output "aurora_postgres_master_username" {
72156
value = "${module.aurora_postgres.user}"
73-
description = "Username for the master DB user"
157+
description = "Aurora Postgres Username for the master DB user"
74158
}
75159

76160
output "aurora_postgres_master_hostname" {
77161
value = "${module.aurora_postgres.master_host}"
78-
description = "DB Master hostname"
162+
description = "Aurora Postgres DB Master hostname"
79163
}
80164

81165
output "aurora_postgres_replicas_hostname" {
82166
value = "${module.aurora_postgres.replicas_host}"
83-
description = "Replicas hostname"
167+
description = "Aurora Postgres Replicas hostname"
84168
}
85169

86170
output "aurora_postgres_cluster_name" {
87171
value = "${module.aurora_postgres.cluster_name}"
88-
description = "Cluster Identifier"
172+
description = "Aurora Postgres Cluster Identifier"
89173
}

aws/backing-services/elasticache-redis.tf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ module "elasticache_redis" {
4545
namespace = "${var.namespace}"
4646
stage = "${var.stage}"
4747
name = "${var.redis_name}"
48-
zone_id = "${var.zone_id}"
48+
zone_id = "${local.zone_id}"
4949
security_groups = ["${module.kops_metadata.nodes_security_group_id}"]
5050
vpc_id = "${module.vpc.vpc_id}"
5151
subnets = ["${module.subnets.private_subnet_ids}"]

aws/backing-services/elasticsearch.tf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ module "elasticsearch" {
6767
namespace = "${var.namespace}"
6868
stage = "${var.stage}"
6969
name = "${var.elasticsearch_name}"
70-
dns_zone_id = "${var.zone_id}"
70+
dns_zone_id = "${local.zone_id}"
7171
security_groups = ["${module.kops_metadata.nodes_security_group_id}"]
7272
vpc_id = "${module.vpc.vpc_id}"
7373
subnet_ids = ["${slice(module.subnets.private_subnet_ids, 0, min(2, length(module.subnets.private_subnet_ids)))}"]

aws/backing-services/kops-metadata.tf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
variables "kops_metadata_enabled" {
1+
variable "kops_metadata_enabled" {
22
description = "Set to false to prevent the module from creating any resources"
33
type = "string"
44
default = "false"

0 commit comments

Comments
 (0)