Skip to content

Commit 9de852c

Browse files
authored
More Reference Architecture Fixes (#69)
* Add makefiles * Use data provider for aws account id * Use aws_region data provider * Fix typo * Use `aws_region` as standard name * Use `aws_region` as standard name * Use `region` as standard name * Use SSM parameters for dynamic enablement of DNS * triage * Support enabled/disabled * fmt * Update aws/root-dns/ns/main.tf Co-Authored-By: osterman <[email protected]> * Update aws/root-dns/ns/main.tf Co-Authored-By: osterman <[email protected]>
1 parent 9d2d1a0 commit 9de852c

File tree

14 files changed

+89
-60
lines changed

14 files changed

+89
-60
lines changed

aws/account-dns/Makefile

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
init:
2+
init-terraform
3+
4+
clean:
5+
rm -rf .terraform
6+
7+
%:
8+
terraform $@

aws/audit-cloudtrail/Makefile

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
init:
2+
init-terraform
3+
4+
clean:
5+
rm -rf .terraform
6+
7+
%:
8+
terraform $@

aws/audit-cloudtrail/main.tf

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,13 @@ variable "name" {
3434
variable "region" {
3535
type = "string"
3636
description = "AWS region"
37+
default = ""
38+
}
39+
40+
data "aws_region" "default" {}
41+
42+
locals {
43+
region = "${length(var.region) > 0 ? var.region : data.aws_region.default.name}"
3744
}
3845

3946
module "cloudtrail" {
@@ -53,7 +60,7 @@ module "cloudtrail_s3_bucket" {
5360
namespace = "${var.namespace}"
5461
stage = "${var.stage}"
5562
name = "${var.name}"
56-
region = "${var.region}"
63+
region = "${local.region}"
5764
}
5865

5966
output "cloudtrail_bucket_domain_name" {

aws/chamber/main.tf

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -18,16 +18,6 @@ variable "stage" {
1818
description = "Stage (e.g. `prod`, `dev`, `staging`)"
1919
}
2020

21-
variable "region" {
22-
type = "string"
23-
description = "AWS region"
24-
}
25-
26-
variable "account_id" {
27-
type = "string"
28-
description = "AWS account ID"
29-
}
30-
3121
variable "parameter_groups" {
3222
type = "list"
3323
description = "Parameter group names"

aws/chamber/user.tf

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
data "aws_caller_identity" "default" {}
2+
data "aws_region" "default" {}
3+
14
# Chamber user for CI/CD systems that cannot leverage IAM instance profiles
25
# https://docs.aws.amazon.com/systems-manager/latest/userguide/sysman-paramstore-access.html
36
module "chamber_user" {
@@ -9,7 +12,7 @@ module "chamber_user" {
912
kms_key_arn = "${module.chamber_kms_key.key_arn}"
1013

1114
ssm_resources = [
12-
"${formatlist("arn:aws:ssm:%s:%s:parameter/%s/*", var.region, var.account_id, var.parameter_groups)}",
15+
"${formatlist("arn:aws:ssm:%s:%s:parameter/%s/*", data.aws_region.default.name, data.aws_caller_identity.default.account_id, var.parameter_groups)}",
1316
]
1417
}
1518

aws/cloudtrail/Makefile

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,8 @@
11
init:
22
init-terraform
33

4-
plan:
5-
terraform $@
6-
7-
apply:
8-
terraform $@
9-
104
clean:
115
rm -rf .terraform
6+
7+
%:
8+
terraform $@

aws/root-dns/main.tf

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,17 +10,14 @@ variable "aws_assume_role_arn" {
1010

1111
variable "namespace" {}
1212

13+
variable "accounts_enabled" {
14+
type = "list"
15+
description = "Accounts to enable"
16+
default = ["dev", "staging", "prod", "testing", "audit"]
17+
}
18+
1319
provider "aws" {
1420
assume_role {
1521
role_arn = "${var.aws_assume_role_arn}"
1622
}
1723
}
18-
19-
data "terraform_remote_state" "root" {
20-
backend = "s3"
21-
22-
config {
23-
bucket = "${var.namespace}-root-terraform-state"
24-
key = "accounts/terraform.tfstate"
25-
}
26-
}

aws/root-dns/ns/main.tf

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
1+
locals {
2+
enabled = "${contains(var.accounts_enabled, var.stage) == true}"
3+
}
4+
15
module "label" {
2-
source = "git::https://github.com/cloudposse/terraform-null-label.git?ref=tags/0.3.3"
6+
source = "git::https://github.com/cloudposse/terraform-null-label.git?ref=tags/0.5.4"
7+
enabled = "${local.enabled ? "true" : "false"}"
38
namespace = "${var.namespace}"
49
stage = "${var.stage}"
510
name = "${var.name}"
@@ -8,24 +13,36 @@ module "label" {
813
tags = "${var.tags}"
914
}
1015

16+
# Fetch the OrganizationAccountAccessRole ARNs from SSM
17+
module "organization_account_access_role_arn" {
18+
enabled = "${local.enabled ? "true" : "false"}"
19+
source = "git::https://github.com/cloudposse/terraform-aws-ssm-parameter-store?ref=tags/0.1.5"
20+
parameter_read = ["/${var.namespace}/${var.stage}/organization_account_access_role"]
21+
}
22+
23+
locals {
24+
role_arn_values = "${module.organization_account_access_role_arn.values}"
25+
}
26+
1127
data "terraform_remote_state" "stage" {
28+
count = "${local.enabled ? 1 : 0}"
1229
backend = "s3"
1330

1431
# This assumes stage is using a `terraform-aws-tfstate-backend`
1532
# https://github.com/cloudposse/terraform-aws-tfstate-backend
1633
config {
17-
role_arn = "${var.role_arn}"
34+
role_arn = "${local.role_arn_values[0]}"
1835
bucket = "${module.label.id}"
1936
key = "${var.key}"
2037
}
2138
}
2239

2340
locals {
24-
name_servers = "${data.terraform_remote_state.stage.name_servers}"
41+
name_servers = "${flatten(data.terraform_remote_state.stage.*.name_servers)}"
2542
}
2643

2744
resource "aws_route53_record" "dns_zone_ns" {
28-
count = "${signum(length(local.name_servers))}"
45+
count = "${local.enabled ? 1 : 0}"
2946
zone_id = "${var.zone_id}"
3047
name = "${var.stage}"
3148
type = "NS"

aws/root-dns/ns/variables.tf

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
variable "accounts_enabled" {
2+
type = "list"
3+
description = "Accounts to enable"
4+
default = ["dev", "staging", "prod", "testing", "audit"]
5+
}
6+
17
variable "namespace" {
28
type = "string"
39
description = "Namespace (e.g. `eg` or `example`)"
@@ -32,10 +38,6 @@ variable "tags" {
3238
description = "Additional tags (e.g. map(`BusinessUnit`,`XYZ`)"
3339
}
3440

35-
variable "role_arn" {
36-
description = "The role to be assumed in the subaccount"
37-
}
38-
3941
variable "zone_id" {
4042
description = "DNS zone to update"
4143
}

aws/root-dns/parent-audit-ns.tf

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
module "audit" {
2-
source = "ns"
3-
role_arn = "${data.terraform_remote_state.root.audit_organization_account_access_role}"
4-
namespace = "${var.namespace}"
5-
stage = "audit"
6-
zone_id = "${aws_route53_zone.parent_dns_zone.zone_id}"
2+
source = "ns"
3+
accounts_enabled = "${var.accounts_enabled}"
4+
namespace = "${var.namespace}"
5+
stage = "audit"
6+
zone_id = "${aws_route53_zone.parent_dns_zone.zone_id}"
77
}
88

99
output "audit_name_servers" {

0 commit comments

Comments
 (0)