Skip to content

Commit ce26a4a

Browse files
committed
Setup VPC per env
1 parent 92f5794 commit ce26a4a

File tree

18 files changed

+168
-42
lines changed

18 files changed

+168
-42
lines changed

infrastructure/applications/applications.tf

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,27 @@
11
locals {
22
is_prod = terraform.workspace == "production"
3-
deploy_pretix = local.is_prod
4-
5-
# AMI
6-
# Built from https://github.com/aws/amazon-ecs-ami
7-
# Using 8GB as storage.
8-
ecs_arm_ami = "ami-0bd650c1ca04cc1a4" # make al2023arm
93
}
104

115
# Applications
126

137
module "pretix" {
148
source = "./pretix"
159
count = 1
16-
ecs_arm_ami = local.ecs_arm_ami
1710
server_ip = module.cluster.server_ip
1811
cluster_id = module.cluster.cluster_id
1912
logs_group_name = module.cluster.logs_group_name
13+
database_settings = module.database.database_settings
2014
}
2115

2216
module "pycon_backend" {
2317
source = "./pycon_backend"
24-
ecs_arm_ami = local.ecs_arm_ami
2518
cluster_id = module.cluster.cluster_id
2619
security_group_id = module.cluster.security_group_id
2720
server_ip = module.cluster.server_ip
2821
logs_group_name = module.cluster.logs_group_name
2922
iam_role_arn = module.cluster.iam_role_arn
23+
database_settings = module.database.database_settings
24+
vpc_id = module.vpc.vpc_id
3025

3126
providers = {
3227
aws = aws
@@ -63,6 +58,8 @@ module "clamav" {
6358

6459
module "database" {
6560
source = "./database"
61+
private_subnets_ids = module.vpc.private_subnets_ids
62+
vpc_id = module.vpc.vpc_id
6663
}
6764

6865
module "emails" {
@@ -76,14 +73,19 @@ module "emails" {
7673

7774
module "cluster" {
7875
source = "./cluster"
79-
ecs_arm_ami = local.ecs_arm_ami
76+
vpc_id = module.vpc.vpc_id
77+
public_1a_subnet_id = module.vpc.public_1a_subnet_id
8078

8179
providers = {
8280
aws = aws
8381
aws.us = aws.us
8482
}
8583
}
8684

85+
module "vpc" {
86+
source = "./vpc"
87+
}
88+
8789
output "server_public_ip" {
8890
value = module.cluster.server_public_ip
8991
}

infrastructure/applications/cluster/cloudfront.tf

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -73,9 +73,6 @@ resource "aws_cloudfront_distribution" "application" {
7373
cache_policy_id = data.aws_cloudfront_cache_policy.origin_cache_control_headers.id
7474
origin_request_policy_id = data.aws_cloudfront_origin_request_policy.all_viewer.id
7575

76-
min_ttl = 0
77-
default_ttl = 86400
78-
max_ttl = 31536000
7976
compress = true
8077
viewer_protocol_policy = "redirect-to-https"
8178
}

infrastructure/applications/cluster/security.tf

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
resource "aws_security_group" "server" {
2-
name = "${terraform.workspace}-server"
3-
description = "${terraform.workspace} server"
4-
vpc_id = data.aws_vpc.default.id
2+
name = "pythonit-${terraform.workspace}-server"
3+
description = "pythonit-${terraform.workspace} server"
4+
vpc_id = var.vpc_id
5+
6+
tags = {
7+
Name = "pythonit-${terraform.workspace}-server"
8+
}
59
}
610

711
resource "aws_security_group_rule" "out_all" {

infrastructure/applications/cluster/server.tf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ resource "aws_eip" "server" {
1313
resource "aws_instance" "server" {
1414
ami = "ami-0d683ccb0045afce1"
1515
instance_type = local.is_prod ? "t4g.large" : "t4g.small"
16-
subnet_id = data.aws_subnet.public_1a.id
16+
subnet_id = var.public_1a_subnet_id
1717
availability_zone = "eu-central-1a"
1818
vpc_security_group_ids = [
1919
aws_security_group.server.id,
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
1-
variable "ecs_arm_ami" {}
1+
variable "vpc_id" {}
2+
variable "public_1a_subnet_id" {}

infrastructure/applications/database/db.tf

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,6 @@ locals {
33
is_prod = terraform.workspace == "production"
44
}
55

6-
data "aws_db_subnet_group" "rds" {
7-
name = "pythonit-rds-subnet"
8-
}
9-
10-
data "aws_security_group" "rds" {
11-
name = "pythonit-rds-security-group"
12-
}
13-
146
resource "aws_db_instance" "database" {
157
allocated_storage = 20
168
storage_type = "gp3"
@@ -31,9 +23,19 @@ resource "aws_db_instance" "database" {
3123
deletion_protection = local.is_prod
3224
storage_encrypted = true
3325

34-
db_subnet_group_name = data.aws_db_subnet_group.rds.name
35-
vpc_security_group_ids = [data.aws_security_group.rds.id]
26+
db_subnet_group_name = aws_db_subnet_group.rds.name
27+
vpc_security_group_ids = [aws_security_group.rds.id]
3628

3729
performance_insights_enabled = true
3830
performance_insights_retention_period = 7
3931
}
32+
33+
output "database_settings" {
34+
value = {
35+
address = aws_db_instance.database.address
36+
port = aws_db_instance.database.port
37+
username = aws_db_instance.database.username
38+
password = module.common_secrets.value.database_password
39+
db_name = aws_db_instance.database.db_name
40+
}
41+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
resource "aws_security_group" "rds" {
2+
vpc_id = var.vpc_id
3+
name = "pythonit-${terraform.workspace}-rds-security-group"
4+
description = "Allow inbound postgres traffic"
5+
}
6+
7+
resource "aws_security_group_rule" "allow_postgres" {
8+
type = "ingress"
9+
from_port = 5432
10+
to_port = 5432
11+
protocol = "tcp"
12+
security_group_id = aws_security_group.rds.id
13+
cidr_blocks = ["0.0.0.0/0"]
14+
}
15+
16+
resource "aws_security_group_rule" "allow_outbound_postgres" {
17+
type = "egress"
18+
from_port = 5432
19+
to_port = 5432
20+
protocol = "tcp"
21+
security_group_id = aws_security_group.rds.id
22+
source_security_group_id = aws_security_group.rds.id
23+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
resource "aws_db_subnet_group" "rds" {
2+
name = "pythonit-${terraform.workspace}-rds-subnet"
3+
description = "Pythonit rds subnet"
4+
subnet_ids = var.private_subnets_ids
5+
6+
tags = {
7+
Name = "pythonit-${terraform.workspace}-rds-subnet"
8+
}
9+
}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
variable "private_subnets_ids" {}
2+
variable "vpc_id" {}

infrastructure/applications/pretix/main.tf

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,6 @@ locals {
33
alias = local.is_prod ? "tickets.pycon.it" : "${terraform.workspace}-tickets.pycon.it"
44
}
55

6-
data "aws_db_instance" "database" {
7-
db_instance_identifier = "pythonit-${terraform.workspace}"
8-
}
9-
106
resource "aws_ecs_task_definition" "pretix" {
117
family = "${terraform.workspace}-pretix"
128
container_definitions = jsonencode([
@@ -87,19 +83,19 @@ resource "aws_ecs_task_definition" "pretix" {
8783
},
8884
{
8985
name = "PRETIX_DATABASE_USER"
90-
value = data.aws_db_instance.database.master_username
86+
value = var.database_settings.username
9187
},
9288
{
9389
name = "PRETIX_DATABASE_PASSWORD"
94-
value = module.common_secrets.value.database_password
90+
value = var.database_settings.password
9591
},
9692
{
9793
name = "PRETIX_DATABASE_HOST"
98-
value = data.aws_db_instance.database.address
94+
value = var.database_settings.address
9995
},
10096
{
10197
name = "PRETIX_DATABASE_PORT"
102-
value = "5432"
98+
value = tostring(var.database_settings.port)
10399
},
104100
{
105101
name = "PRETIX_MAIL_USER"

0 commit comments

Comments
 (0)