Skip to content

Commit b190bc7

Browse files
authored
Add notification service to eks stack (#170) (#171)
* Added sendgrid api key during setup Add helm support for notification service Some small formatting / text changes * fix: Removed duplicate secret, changed name of variable to enable notification service
1 parent 1b27b9d commit b190bc7

10 files changed

Lines changed: 68 additions & 13 deletions

File tree

templates/Makefile

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,8 +77,9 @@ teardown-secrets:
7777
aws secretsmanager list-secrets --region $(AWS_DEFAULT_REGION) --query "SecretList[?Tags[?Key=='rds' && Value=='$(PROJECT)-$(ENVIRONMENT)']].[Name] | [0][0]" | xargs aws secretsmanager delete-secret --region $(AWS_DEFAULT_REGION) --secret-id || echo "Secret already removed"
7878
aws secretsmanager list-secrets --region $(AWS_DEFAULT_REGION) --query "SecretList[?Tags[?Key=='rds' && Value=='$(PROJECT)-$(ENVIRONMENT)-devenv']].[Name] | [0][0]" | xargs aws secretsmanager delete-secret --region $(AWS_DEFAULT_REGION) --secret-id || echo "Secret already removed"
7979
aws secretsmanager list-secrets --region $(AWS_DEFAULT_REGION) --query "SecretList[?Tags[?Key=='sendgrid' && Value=='$(PROJECT)']].[Name] | [0][0]" | xargs aws secretsmanager delete-secret --region $(AWS_DEFAULT_REGION) --secret-id || echo "Secret already removed"
80-
aws secretsmanager list-secrets --region $(AWS_DEFAULT_REGION) --query "SecretList[?Tags[?Key=='cf_keypair' && Value=='$(PROJECT)']].[Name] | [0][0]" | xargs aws secretsmanager delete-secret --region $(AWS_DEFAULT_REGION) --secret-id || echo "Secret already removed"
80+
aws secretsmanager list-secrets --region $(AWS_DEFAULT_REGION) --query "SecretList[?Tags[?Key=='cf-keypair' && Value=='$(PROJECT)']].[Name] | [0][0]" | xargs aws secretsmanager delete-secret --region $(AWS_DEFAULT_REGION) --secret-id || echo "Secret already removed"
8181
aws secretsmanager list-secrets --region $(AWS_DEFAULT_REGION) --query "SecretList[?Tags[?Key=='wg' && Value=='$(PROJECT)-$(ENVIRONMENT)']].[Name] | [0][0]" | xargs aws secretsmanager delete-secret --region $(AWS_DEFAULT_REGION) --secret-id || echo "Secret already removed"
82+
aws secretsmanager list-secrets --region $(AWS_DEFAULT_REGION) --query "SecretList[?Tags[?Key=='oathkeeper-jwks' && Value=='$(PROJECT)-$(ENVIRONMENT)']].[Name] | [0][0]" | xargs aws secretsmanager delete-secret --region $(AWS_DEFAULT_REGION) --secret-id || echo "Secret already removed"
8283
aws iam list-role-policies --role-name $(PROJECT)-eks-cluster-creator --query "PolicyNames" | jq -r ".[]" | xargs -n1 aws iam delete-role-policy --role-name $(PROJECT)-eks-cluster-creator --policy-name
8384
aws iam list-attached-role-policies --role-name $(PROJECT)-eks-cluster-creator --query "AttachedPolicies[].PolicyArn" | jq -r ".[]" | xargs -n1 aws iam detach-role-policy --role-name $(PROJECT)-eks-cluster-creator --policy-arn
8485
aws iam delete-role --role-name $(PROJECT)-eks-cluster-creator

templates/kubernetes/terraform/environments/prod/main.tf

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,8 +70,8 @@ module "kubernetes" {
7070
# Wireguard configuration
7171
vpn_server_address = "10.10.99.0/24"
7272
vpn_client_publickeys = [
73-
["Max C", "10.10.99.201/32", "/B3Q/Hlf+ILInjpehTLk9DZGgybdGdbm0SsG87OnWV0="],
74-
["Carter L", "10.10.99.202/32", "h2jMuaXNIlx7Z0a3owWFjPsAA8B+ZpQH3FbZK393+08="],
73+
# ["Test User 1", "10.10.99.201/32", "/B3Q/Hlf+ILInjpehTLk9DZGgybdGdbm0SsG87OnWV0="],
74+
# ["Test User 2", "10.10.99.202/32", "h2jMuaXNIlx7Z0a3owWFjPsAA8B+ZpQH3FbZK393+08="],
7575
]
7676

7777
domain_name = local.domain_name
@@ -81,4 +81,6 @@ module "kubernetes" {
8181
frontend_service_domain = "<% index .Params `productionFrontendSubdomain` %>${local.domain_name}"
8282
# This domain or address must be verified by the mail provider (Sendgrid, SES, etc.)
8383
user_auth_mail_from_address = "noreply@${local.domain_name}"
84+
85+
notification_service_enabled = <%if eq (index .Params `sendgridApiKey`) "" %>false<% else %>true<% end %>
8486
}

templates/kubernetes/terraform/environments/stage/main.tf

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,8 +69,8 @@ module "kubernetes" {
6969
# Wireguard configuration
7070
vpn_server_address = "10.10.199.0/24"
7171
vpn_client_publickeys = [
72-
["Max C", "10.10.199.201/32", "/B3Q/Hlf+ILInjpehTLk9DZGgybdGdbm0SsG87OnWV0="],
73-
["Carter L", "10.10.199.202/32", "h2jMuaXNIlx7Z0a3owWFjPsAA8B+ZpQH3FbZK393+08="],
72+
# ["Test User 1", "10.10.199.201/32", "/B3Q/Hlf+ILInjpehTLk9DZGgybdGdbm0SsG87OnWV0="],
73+
# ["Test User 2", "10.10.199.202/32", "h2jMuaXNIlx7Z0a3owWFjPsAA8B+ZpQH3FbZK393+08="],
7474
]
7575

7676
domain_name = local.domain_name
@@ -80,4 +80,6 @@ module "kubernetes" {
8080
frontend_service_domain = "<% index .Params `stagingFrontendSubdomain` %>${local.domain_name}"
8181
# This domain or address must be verified by the mail provider (Sendgrid, SES, etc.)
8282
user_auth_mail_from_address = "noreply@${local.domain_name}"
83+
84+
notification_service_enabled = <%if eq (index .Params `sendgridApiKey`) "" %>false<% else %>true<% end %>
8385
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
locals {
2+
sendgrid_api_key_secret_name = "${var.project}-sendgrid-${var.random_seed}" # Created in terraform/bootstrap/secrets
3+
}
4+
5+
data "aws_secretsmanager_secret" "sendgrid_api_key" {
6+
count = var.notification_service_enabled ? 1 : 0
7+
name = local.sendgrid_api_key_secret_name
8+
}
9+
data "aws_secretsmanager_secret_version" "sendgrid_api_key" {
10+
count = var.notification_service_enabled ? 1 : 0
11+
secret_id = data.aws_secretsmanager_secret.sendgrid_api_key[0].id
12+
}
13+
14+
resource "kubernetes_namespace" "notification_service" {
15+
count = var.notification_service_enabled ? 1 : 0
16+
metadata {
17+
name = "notification-service"
18+
}
19+
}
20+
21+
#
22+
resource "helm_release" "notification_service" {
23+
count = var.notification_service_enabled ? 1 : 0
24+
name = "zero-notification-service"
25+
repository = "https://commitdev.github.io/zero-notification-service/"
26+
chart = "zero-notification-service"
27+
version = "0.0.4"
28+
namespace = kubernetes_namespace.notification_service[0].metadata[0].name
29+
30+
set {
31+
name = "application.structuredLogging"
32+
value = "true"
33+
}
34+
35+
# This will become a secret provided as an env var
36+
set_sensitive {
37+
name = "application.sendgridApiKey"
38+
value = data.aws_secretsmanager_secret_version.sendgrid_api_key[0].secret_string
39+
}
40+
}

templates/kubernetes/terraform/modules/kubernetes/variables.tf

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,3 +129,9 @@ variable "user_auth_mail_from_address" {
129129
type = string
130130
default = ""
131131
}
132+
133+
variable "notification_service_enabled" {
134+
description = "If enabled, will install the Zero notification service in the cluster to enable easy implementation of notification via email, sms, push, etc."
135+
type = string
136+
default = "false"
137+
}

templates/scripts/create-db-user.sh

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,8 +72,9 @@ rm -f ./k8s-job-create-db.yml
7272
kubectl -n db-ops wait --for=condition=complete --timeout=10s job db-create-users-$NAMESPACE-${JOB_ID}
7373
if [ $? -eq 0 ]
7474
then
75-
kubectl delete namespace db-ops
75+
kubectl delete namespace db-ops
7676
else
77-
echo "Failed to create application database user, please see 'kubectl logs -n db-ops -l job-name=db-create-users-$NAMESPACE-${JOB_ID}'"
77+
echo "Failed to create application database user, please see 'kubectl logs -n db-ops -l job-name=db-create-users-$NAMESPACE-${JOB_ID}'"
78+
kubectl delete secret -n db-ops ${SECRET_NAME}
7879
fi
7980

templates/scripts/create-dev-env.sh

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,10 @@ if [[ $? -eq 0 ]]; then
2121
ENVIRONMENT=${ENVIRONMENT} \
2222
NAMESPACE=${PROJECT} \
2323
DATABASE_TYPE=<% index .Params `database` %> \
24-
DATABASE_NAME="${DEV_DB_LIST}" \
24+
DATABASE_NAME="${DEV_DB_LIST}" \
2525
SECRET_NAME=devenv${PROJECT} \
26-
USER_NAME=dev${PROJECT} \
27-
USER_PASSWORD=${DEV_DB_SECRET} \
26+
USER_NAME=dev${PROJECT} \
27+
USER_PASSWORD=${DEV_DB_SECRET} \
2828
CREATE_SECRET=secret-application.yml.tpl \
29-
sh ./create-db-user.sh
29+
sh ./create-db-user.sh
3030
fi

templates/scripts/import-cf-keypair.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,5 +44,5 @@ aws secretsmanager \
4444
create-secret \
4545
--name <% .Name %>_cf_keypair \
4646
--region <% index .Params `region` %> \
47-
--tags '[{"Key":"cf_keypair","Value":"<% .Name %>"}]' \
47+
--tags '[{"Key":"cf-keypair","Value":"<% .Name %>"}]' \
4848
--secret-string "{\"keypair_id\":\"${ID}\",\"private_key\":\"${SECRET}\"}"

templates/terraform/environments/prod/main.tf

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ module "prod" {
6666
eks_worker_ami = "<% index .Params `eksWorkerAMI` %>"
6767

6868
# Hosting configuration. Each domain will have a bucket created for it, but may have mulitple aliases pointing to the same bucket.
69+
# Note that because of the way terraform handles lists, new records should be added to the end of the list.
6970
hosted_domains = [
7071
{
7172
domain : local.domain_name,

templates/terraform/environments/stage/main.tf

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ data "terraform_remote_state" "shared" {
4545
module "rds_dev_secret" {
4646
source = "commitdev/zero/aws//modules/secret"
4747
version = "0.0.2"
48-
48+
4949
name = "${local.project}-stage-rds-${local.random_seed}-devenv"
5050
type = "random"
5151
random_length = 32
@@ -76,6 +76,8 @@ module "stage" {
7676
# https://<% index .Params `region` %>.console.aws.amazon.com/systems-manager/parameters/%252Faws%252Fservice%252Feks%252Foptimized-ami%252F1.18%252Famazon-linux-2%252Frecommended%252Fimage_id/description?region=<% index .Params `region` %>
7777
eks_worker_ami = "<% index .Params `eksWorkerAMI` %>"
7878

79+
# Hosting configuration. Each domain will have a bucket created for it, but may have mulitple aliases pointing to the same bucket.
80+
# Note that because of the way terraform handles lists, new records should be added to the end of the list.
7981
hosted_domains = [
8082
{
8183
domain : local.domain_name,

0 commit comments

Comments
 (0)