Skip to content

Commit b6f1a14

Browse files
author
rahul-infra
committed
feat : Given provision for acm module such it can have hostedzone in same account or different account.
fix : removed extra space. fix: removed unwanted region in my acm module. fix : updated aws support provider. fix : updated aws version. fix : formatted main file. fix: removed region from passing to my acm module. Made changes in pre-commit file excluded acm main.tf file.
1 parent 4727f2e commit b6f1a14

File tree

7 files changed

+86
-9
lines changed

7 files changed

+86
-9
lines changed

.pre-commit-config.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ repos:
44
hooks:
55
- id: terraform_fmt
66
- id: terraform_validate
7+
exclude: '^[^/]+\.tf$|^modules/acm/.*'
78
- id: terraform_tflint
89
args:
910
- '--args=--only=terraform_deprecated_interpolation'

main.tf

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -243,12 +243,33 @@ resource "aws_ecs_task_definition" "this" {
243243
################################################################################
244244
# Amazon Certificates Manager Sub-module
245245
################################################################################
246+
provider "aws" {
247+
region = var.region
248+
}
249+
250+
# Cross-account provider for Route53
251+
provider "aws" {
252+
alias = "dns"
253+
region = var.region
254+
255+
dynamic "assume_role" {
256+
for_each = var.route53_assume_role_arn != null ? [1] : []
257+
content {
258+
role_arn = var.route53_assume_role_arn
259+
}
260+
}
261+
}
246262

247263
module "acm" {
248264
source = "./modules/acm"
249265

250-
for_each = var.create_acm ? var.acm_certificates : {}
266+
providers = {
267+
aws = aws
268+
aws.dns = aws.dns
269+
}
270+
route53_assume_role_arn = var.route53_assume_role_arn
251271

272+
for_each = var.create_acm ? var.acm_certificates : {}
252273
# ACM Certificate
253274
certificate_domain_name = each.value.domain_name
254275
certificate_subject_alternative_names = try(each.value.subject_alternative_names, null)
@@ -259,8 +280,7 @@ module "acm" {
259280
# Route53 Record
260281
record_zone_id = try(each.value.record_zone_id, null)
261282
record_allow_overwrite = try(each.value.record_allow_overwrite, null)
262-
263-
tags = try(each.value.tags, {})
283+
tags = try(each.value.tags, {})
264284
}
265285

266286
################################################################################

modules/acm/main.tf

Lines changed: 36 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,19 @@ locals {
77
}
88
}
99

10+
terraform {
11+
required_providers {
12+
aws = {
13+
source = "hashicorp/aws"
14+
version = "~> 6.0"
15+
configuration_aliases = [
16+
aws,
17+
aws.dns
18+
]
19+
}
20+
}
21+
}
22+
1023
################################################################################
1124
# ACM Certificate
1225
################################################################################
@@ -37,7 +50,22 @@ resource "aws_acm_certificate" "this" {
3750
# ACM Validation
3851
################################################################################
3952

40-
resource "aws_route53_record" "this" {
53+
resource "aws_route53_record" "same_account" {
54+
count = var.route53_assume_role_arn == null ? 1 : 0
55+
56+
zone_id = var.record_zone_id
57+
name = local.acm_certificate_validation_record.name
58+
type = local.acm_certificate_validation_record.type
59+
records = [local.acm_certificate_validation_record.value]
60+
ttl = 60
61+
allow_overwrite = var.record_allow_overwrite
62+
}
63+
64+
resource "aws_route53_record" "cross_account" {
65+
count = var.route53_assume_role_arn != null ? 1 : 0
66+
provider = aws.dns
67+
68+
4169
zone_id = var.record_zone_id
4270
name = local.acm_certificate_validation_record.name
4371
type = local.acm_certificate_validation_record.type
@@ -47,6 +75,11 @@ resource "aws_route53_record" "this" {
4775
}
4876

4977
resource "aws_acm_certificate_validation" "this" {
50-
certificate_arn = aws_acm_certificate.this.arn
51-
validation_record_fqdns = [aws_route53_record.this.fqdn]
78+
certificate_arn = aws_acm_certificate.this.arn
79+
80+
validation_record_fqdns = [
81+
var.route53_assume_role_arn == null ?
82+
aws_route53_record.same_account[0].fqdn :
83+
aws_route53_record.cross_account[0].fqdn
84+
]
5285
}

modules/acm/outputs.tf

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,15 @@ output "acm_certificate_arn" {
1717
################################################################################
1818

1919
output "route53_record_id" {
20-
description = "Identifier of the Route53 Record for validation of the ACM certificate."
21-
value = aws_route53_record.this.id
20+
description = "Identifier of the Route53 Record (supports same & cross-account)."
21+
value = (
22+
var.route53_assume_role_arn == null
23+
? aws_route53_record.same_account[0].id
24+
: aws_route53_record.cross_account[0].id
25+
)
2226
}
2327

28+
2429
################################################################################
2530
# ACM Certificate Validation
2631
################################################################################

modules/acm/variables.tf

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,3 +60,9 @@ variable "record_allow_overwrite" {
6060
nullable = false
6161
default = true
6262
}
63+
64+
variable "route53_assume_role_arn" {
65+
type = string
66+
default = null
67+
description = "(Optional) IAM role ARN to assume for Route53 operations"
68+
}

variables.tf

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,3 +199,15 @@ variable "acm_certificates" {
199199
nullable = false
200200
default = {}
201201
}
202+
203+
variable "region" {
204+
description = "(Optional) AWS region to create resources in."
205+
type = string
206+
default = null
207+
}
208+
209+
variable "route53_assume_role_arn" {
210+
description = "(Optional) ARN of the role to assume for Route53 operations."
211+
type = string
212+
default = null
213+
}

versions.tf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ terraform {
44
required_providers {
55
aws = {
66
source = "hashicorp/aws"
7-
version = "~> 5.0"
7+
version = "~> 6.0"
88
}
99
}
1010
}

0 commit comments

Comments
 (0)