Skip to content

Commit 488da51

Browse files
authored
Add ACME process (#13)
Fixes #14 Signed-off-by: Edward Wilde <[email protected]>
1 parent 29b3899 commit 488da51

File tree

5 files changed

+98
-6
lines changed

5 files changed

+98
-6
lines changed

alb-acme.tf

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
resource "tls_private_key" "private_key" {
2+
algorithm = "RSA"
3+
count = "${var.acme_enabled}"
4+
}
5+
6+
resource "acme_registration" "reg" {
7+
account_key_pem = "${tls_private_key.private_key.0.private_key_pem}"
8+
email_address = "${var.acme_email_address}"
9+
count = "${var.acme_enabled}"
10+
}
11+
12+
resource "acme_certificate" "acme" {
13+
account_key_pem = "${acme_registration.reg.0.account_key_pem}"
14+
common_name = "${aws_route53_record.main.fqdn}"
15+
count = "${var.acme_enabled}"
16+
17+
dns_challenge {
18+
provider = "route53"
19+
}
20+
}
21+
22+
resource "aws_iam_server_certificate" "acme" {
23+
name = "acme-certificate-${md5(acme_certificate.acme.0.certificate_pem)}"
24+
certificate_body = "${acme_certificate.acme.0.certificate_pem}"
25+
private_key = "${acme_certificate.acme.0.private_key_pem}"
26+
certificate_chain = "${acme_certificate.acme.0.issuer_pem}"
27+
count = "${var.acme_enabled}"
28+
29+
lifecycle {
30+
create_before_destroy = true
31+
}
32+
}
33+
34+
resource "aws_route53_zone" "main" {
35+
name = "${var.acme_domain_name}"
36+
count = "${var.acme_enabled}"
37+
}
38+
39+
resource "aws_route53_record" "main" {
40+
name = "gateway"
41+
zone_id = "${aws_route53_zone.main.0.id}"
42+
type = "A"
43+
count = "${var.acme_enabled}"
44+
alias {
45+
name = "${aws_lb.openfaas.dns_name}"
46+
zone_id = "${aws_lb.openfaas.zone_id}"
47+
evaluate_target_health = false
48+
}
49+
}
50+

alb.tf

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,12 @@ resource "aws_lb" "openfaas" {
44
security_groups = ["${aws_security_group.alb.id}"]
55
subnets = ["${aws_subnet.external.*.id}"]
66
load_balancer_type = "application"
7-
7+
access_logs {
8+
bucket = "${var.alb_logs_bucket}"
9+
enabled = true
10+
}
811
}
912

10-
1113
resource "tls_private_key" "main" {
1214
algorithm = "RSA"
1315
}
@@ -38,7 +40,7 @@ resource "tls_self_signed_cert" "main" {
3840
}
3941
}
4042

41-
resource "aws_iam_server_certificate" "main" {
43+
resource "aws_iam_server_certificate" "self_signed" {
4244
name = "example_self_signed_cert_${random_string.name.result}"
4345
certificate_body = "${tls_self_signed_cert.main.cert_pem}"
4446
private_key = "${tls_private_key.main.private_key_pem}"
@@ -67,11 +69,25 @@ resource "aws_lb_target_group" "gateway" {
6769
}
6870
}
6971

70-
resource "aws_lb_listener" "gateway" {
72+
resource "aws_lb_listener" "gateway_self_signed" {
73+
load_balancer_arn = "${aws_lb.openfaas.arn}"
74+
port = 443
75+
protocol = "HTTPS"
76+
certificate_arn = "${aws_iam_server_certificate.self_signed.arn}"
77+
count = "${var.self_signed_enabled}"
78+
79+
default_action {
80+
target_group_arn = "${aws_lb_target_group.gateway.arn}"
81+
type = "forward"
82+
}
83+
}
84+
85+
resource "aws_lb_listener" "gateway_acme" {
7186
load_balancer_arn = "${aws_lb.openfaas.arn}"
7287
port = 443
7388
protocol = "HTTPS"
74-
certificate_arn = "${aws_iam_server_certificate.main.arn}"
89+
certificate_arn = "${aws_iam_server_certificate.acme.arn}"
90+
count = "${var.acme_enabled}"
7591
default_action {
7692
target_group_arn = "${aws_lb_target_group.gateway.arn}"
7793
type = "forward"

gateway.tf

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,10 @@ resource "aws_ecs_service" "gateway" {
2626
ignore_changes = ["desired_count"]
2727
}
2828

29-
depends_on = ["aws_lb_listener.gateway"]
29+
depends_on = [
30+
"aws_lb_listener.gateway_self_signed",
31+
"aws_lb_listener.gateway_acme"
32+
]
3033
}
3134

3235
resource "aws_ecs_task_definition" "gateway" {

main.tf

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,8 @@ provider "aws" {
22
region = "${var.aws_region}"
33
version = "~> 1.41.0"
44
}
5+
6+
provider "acme" {
7+
version = "~> 1.0"
8+
server_url = "https://acme-v02.api.letsencrypt.org/directory"
9+
}

variables.tf

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,3 +32,21 @@ variable "ecs_cluster_name" {
3232
variable "bastion_keypair_name" {
3333
default = "openfaas"
3434
}
35+
36+
variable "self_signed_enabled" {
37+
default = 1
38+
}
39+
40+
variable "acme_enabled" {
41+
default = 0
42+
}
43+
44+
variable "acme_email_address" {
45+
default = "[email protected]"
46+
}
47+
48+
variable "acme_domain_name" {
49+
default = ""
50+
}
51+
52+
variable "alb_logs_bucket" {}

0 commit comments

Comments
 (0)