-
Notifications
You must be signed in to change notification settings - Fork 19
/
Copy pathmain.tf
184 lines (162 loc) · 5.76 KB
/
main.tf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
terraform {
required_version = ">= 1.0.0"
}
# Create the basis for base module
module "account" {
source = "./modules/account"
project = var.project
domain_name = var.domain_name
}
# Generate DB and RabbitMQ passwords
# Generate Magento encryption key
module "ssm" {
source = "./modules/ssm"
project = var.project
magento_admin_firstname = var.magento_admin_firstname
magento_admin_lastname = var.magento_admin_lastname
magento_admin_email = var.magento_admin_email
magento_admin_username = var.magento_admin_username
magento_admin_password = var.magento_admin_password
magento_database_password = var.magento_database_password
}
# Run base module which includes Networking and bastion hosts
module "base" {
source = "./modules/base"
create_vpc = var.create_vpc
project = var.project
vpc_cidr = var.vpc_cidr
management_addresses = var.management_addresses
az1 = var.az1
az2 = var.az2
base_ami_id = data.aws_ami.selected.id
domain_name = var.domain_name
ssh_key_pair_name = var.ssh_key_pair_name
###
# Existing VPC
# Only applied if variable create_vpc is set to false
###
vpc_id = var.vpc_id
vpc_public_subnet_id = var.vpc_public_subnet_id
vpc_public2_subnet_id = var.vpc_public2_subnet_id
vpc_private_subnet_id = var.vpc_private_subnet_id
vpc_private2_subnet_id = var.vpc_private2_subnet_id
vpc_rds_subnet_id = var.vpc_rds_subnet_id
vpc_rds_subnet2_id = var.vpc_rds_subnet2_id
depends_on = [
module.account
]
}
# Generate SSL certificate for your domain
module "acm" {
source = "./modules/acm"
domain_name = var.domain_name
route53_zone_id = module.account.route53_zone_id
depends_on = [
module.base
]
}
# Create services: RabbitMQ, Redis, CloudFront and RDS
module "services" {
source = "./modules/services"
# Common
az1 = var.az1
az2 = var.az2
project = var.project
# Services
skip_rds_snapshot_on_destroy = var.skip_rds_snapshot_on_destroy
magento_db_allocated_storage = var.magento_db_allocated_storage
magento_db_backup_retention_period = var.magento_db_backup_retention_period
magento_db_performance_insights_enabled = var.magento_db_performance_insights_enabled
rabbitmq_username = var.rabbitmq_username
magento_database_password = var.magento_database_password
elasticsearch_domain = var.elasticsearch_domain
# SES
magento_admin_email = var.magento_admin_email
# Network
vpc_id = module.base.vpc_id
private_subnet_id = module.base.subnet_private_id
private2_subnet_id = module.base.subnet_private2_id
public_subnet_id = module.base.subnet_public_id
public2_subnet_id = module.base.subnet_public2_id
rds_subnet_id = module.base.rds_subnet_id
rds_subnet2_id = module.base.rds_subnet2_id
# Security
sg_bastion_ssh_in_id = module.base.sg_bastion_ssh_in_id
sg_allow_all_out_id = module.base.sg_allow_all_out_id
sg_restricted_http_in_id = module.base.sg_restricted_http_in_id
sg_restricted_https_in_id = module.base.sg_restricted_https_in_id
sg_efs_private_in_id = module.base.sg_efs_private_in_id
depends_on = [
module.base
]
}
# Create Magento AMI
module "magento-ami" {
source = "./modules/magento-ami"
base_ami_id = data.aws_ami.selected.id
ssh_key_name = var.ssh_key_name
ssh_username = var.ssh_username
mage_composer_username = var.mage_composer_username
mage_composer_password = var.mage_composer_password
vpc_id = module.base.vpc_id
public_subnet_id = module.base.subnet_public_id
management_addresses = var.management_addresses
sg_allow_all_out_id = module.base.sg_allow_all_out_id
ssh_key_pair_name = var.ssh_key_pair_name
depends_on = [
module.services
]
}
# Create Varnish AMI
module "varnish-ami" {
source = "./modules/varnish-ami"
base_ami_id = data.aws_ami.selected.id
ssh_key_name = var.ssh_key_name
ssh_username = var.ssh_username
vpc_id = module.base.vpc_id
public_subnet_id = module.base.subnet_public_id
management_addresses = var.management_addresses
sg_allow_all_out_id = module.base.sg_allow_all_out_id
ssh_key_pair_name = var.ssh_key_pair_name
depends_on = [
module.services
]
}
# Create ALB/ASG, CloudFront and Magento EC2 instances
module "magento" {
source = "./modules/magento"
# Common
project = var.project
ssh_key_name = var.ssh_key_name
ssh_username = var.ssh_username
ssh_key_pair_name = var.ssh_key_pair_name
# Network
vpc_id = module.base.vpc_id
private_subnet_id = module.base.subnet_private_id
private2_subnet_id = module.base.subnet_private2_id
public_subnet_id = module.base.subnet_public_id
public2_subnet_id = module.base.subnet_public2_id
vpc_cidr = var.vpc_cidr
# Security
sg_bastion_ssh_in_id = module.base.sg_bastion_ssh_in_id
sg_allow_all_out_id = module.base.sg_allow_all_out_id
sg_bastion_http_in_id = module.base.sg_bastion_http_in_id
lb_access_logs_enabled = var.lb_access_logs_enabled
external_lb_sg_ids = tolist(
[
module.base.sg_all_http_in_id,
module.base.sg_all_https_in_id,
module.base.sg_allow_all_out_id
]
)
# AMIs
magento_ami = module.magento-ami.magento_ami_id
varnish_ami = module.varnish-ami.varnish_ami_id
cert_arn = var.cert
nat_gateway_ip1 = module.base.nat_gateway_ip1
nat_gateway_ip2 = module.base.nat_gateway_ip2
depends_on = [
module.magento-ami,
module.varnish-ami
]
}