diff --git a/modules/networking/r53-record-geo/README.md b/modules/networking/r53-record-geo/README.md new file mode 100644 index 0000000..f80fb2a --- /dev/null +++ b/modules/networking/r53-record-geo/README.md @@ -0,0 +1,18 @@ +# r53-record-geo sub module +Create route53 geolocation records + +## Example +```hcl +module "georecord" { + source = "./submodule/r53-record-geo" + record_name = "products" + record_type = "A" + record_values = ["1.2.3.4"] + set_identifier = "DNS record for unspecified locations" + record_type_locational = "A" + record_values_locational = ["5.6.7.8"] + set_identifier_locational = "DNS record for China" + country_code = "CN" + zone_id = "r53-zone-id" +} +``` \ No newline at end of file diff --git a/modules/networking/r53-record-geo/main.tf b/modules/networking/r53-record-geo/main.tf new file mode 100644 index 0000000..5be9e36 --- /dev/null +++ b/modules/networking/r53-record-geo/main.tf @@ -0,0 +1,60 @@ +resource "aws_route53_record" "default" { + zone_id = var.zone_id + name = var.record_name + type = var.record_type + ttl = length(var.alias) > 0 ? null : var.record_ttl + records = var.record_values + set_identifier = var.set_identifier + geolocation_routing_policy { + country = "*" + } + dynamic "alias" { + for_each = var.alias + content { + name = alias.value["name"] + zone_id = alias.value["zone_id"] + evaluate_target_health = alias.value["evaluate_target_health"] + } + } + dynamic "weighted_routing_policy" { + for_each = var.weighted_routing_policy + content { + weight = weighted_routing_policy.value["weight"] + } + } +} + +resource "aws_route53_record" "locational" { + zone_id = var.zone_id + name = var.record_name + type = var.record_type_locational + ttl = length(var.alias_locational) > 0 ? null : var.record_ttl_locational + records = var.record_values_locational + set_identifier = var.set_identifier_locational + dynamic "alias" { + for_each = var.alias_locational + content { + name = alias.value["name"] + zone_id = alias.value["zone_id"] + evaluate_target_health = alias.value["evaluate_target_health"] + } + } + geolocation_routing_policy { + country = var.country_code + continent = var.continent_code + } + dynamic "alias" { + for_each = var.alias_locational + content { + name = alias.value["name"] + zone_id = alias.value["zone_id"] + evaluate_target_health = alias.value["evaluate_target_health"] + } + } + dynamic "weighted_routing_policy" { + for_each = var.weighted_routing_policy_locational + content { + weight = weighted_routing_policy.value["weight"] + } + } +} \ No newline at end of file diff --git a/modules/networking/r53-record-geo/variables.tf b/modules/networking/r53-record-geo/variables.tf new file mode 100644 index 0000000..3e4ed15 --- /dev/null +++ b/modules/networking/r53-record-geo/variables.tf @@ -0,0 +1,62 @@ +variable "zone_id" {} +variable "record_name" {} +variable "record_type" {} +variable "record_ttl" { + type = number + default = 900 +} +variable "record_values" { + type = list(string) +} +variable "set_identifier" {} +variable "alias" { + type = list( + object({ + zone_id = string + name = string + evaluate_target_health = bool + }) + ) +} +variable "weighted_routing_policy" { + type = list( + object({ + weight = number + }) + ) + default = [] +} +variable "record_type_locational" {} +variable "record_ttl_locational" { + type = number + default = 900 +} +variable "record_values_locational" { + type = list(string) +} +variable "set_identifier_locational" {} +variable "country_code" { + type = string + default = null +} +variable "continent_code" { + type = string + default = null +} +variable "alias_locational" { + type = list( + object({ + zone_id = string + name = string + evaluate_target_health = bool + }) + ) +} +variable "weighted_routing_policy_locational" { + type = list( + object({ + weight = number + }) + ) + default = [] +} \ No newline at end of file diff --git a/modules/networking/r53-record/README.md b/modules/networking/r53-record/README.md new file mode 100644 index 0000000..f8f1304 --- /dev/null +++ b/modules/networking/r53-record/README.md @@ -0,0 +1,30 @@ +# r53-record sub module +Create route53 record + +## Example +```hcl +module "r53-ftp" { + source = "../../modules/networking/r53-record" + + record_name = "ftp" + record_type = "A" + record_values = ["192.168.0.100"] + zone_id = aws_route53_zone.zone.zone_id +} + +module "r53-www" { + source = "../../modules/networking/r53-record" + + record_name = "www" + record_type = "A" + record_values = null + alias = [ + { + zone_id = "Z2LIHJ7PKBEMWN" + name = "vpce-07b8a9af30673995f-2n2ird8h.ssm.ap-east-1.vpce.amazonaws.com" + evaluate_target_health = true + } + ] + zone_id = aws_route53_zone.zone.zone_id +} +``` \ No newline at end of file diff --git a/modules/networking/r53-record/main.tf b/modules/networking/r53-record/main.tf new file mode 100644 index 0000000..35ba90c --- /dev/null +++ b/modules/networking/r53-record/main.tf @@ -0,0 +1,22 @@ +resource "aws_route53_record" "this" { + zone_id = var.zone_id + name = var.record_name + type = var.record_type + ttl = length(var.alias) > 0 ? null : var.record_ttl + records = var.record_values + set_identifier = var.set_identifier + dynamic "alias" { + for_each = var.alias + content { + name = alias.value["name"] + zone_id = alias.value["zone_id"] + evaluate_target_health = alias.value["evaluate_target_health"] + } + } + dynamic "weighted_routing_policy" { + for_each = var.weighted_routing_policy + content { + weight = weighted_routing_policy.value["weight"] + } + } +} \ No newline at end of file diff --git a/modules/networking/r53-record/variables.tf b/modules/networking/r53-record/variables.tf new file mode 100644 index 0000000..1079b28 --- /dev/null +++ b/modules/networking/r53-record/variables.tf @@ -0,0 +1,32 @@ +variable "zone_id" {} +variable "record_name" {} +variable "record_type" {} +variable "record_ttl" { + type = number + default = 900 +} +variable "record_values" { + type = list(string) +} +variable "set_identifier" { + type = string + default = "" +} +variable "alias" { + type = list( + object({ + zone_id = string + name = string + evaluate_target_health = bool + }) + ) + default = [] +} +variable "weighted_routing_policy" { + type = list( + object({ + weight = number + }) + ) + default = [] +} \ No newline at end of file