-
-
Notifications
You must be signed in to change notification settings - Fork 4.6k
feat: Add enhanced region support #1225
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat: Add enhanced region support #1225
Conversation
- added `region` input variable - updated docs
|
@antonbabenko , @bryantbiggs , ☝️😊 |
modules/vpc-endpoints/main.tf
Outdated
| service = try(each.value.service, null) | ||
| service_name = try(each.value.service_name, null) | ||
| service_regions = try(coalescelist(compact([each.value.service_region])), null) | ||
| service_regions = try(coalescelist(compact([each.value.service_region])), [var.region], null) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This doesn't work…
│ Error: reading EC2 VPC Endpoint Services: couldn't find resource
│
│ with module.endpoints["emea"].data.aws_vpc_endpoint_service.this["secretsmanager"],
│ on .terraform/modules/endpoints/modules/vpc-endpoints/main.tf line 11, in data "aws_vpc_endpoint_service" "this":
│ 11: data "aws_vpc_endpoint_service" "this" {
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The vpc_endpoint_service data source doesn't support the region parameter in v6.4.0. So it seems like it's going to the provider-set region, and so it's unable to find the service endpoint from a different region.
I just found the list of non-region-aware resources, and the aws_vpc_endpoint_service data source is one of them… 😟 https://registry.terraform.io/providers/hashicorp/aws/latest/docs/guides/enhanced-region-support#non%E2%80%93region-aware-resources
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
So I was able to get it to work but had to alter the endpoints map a little and had to add a new input variable in the module.
Before:
endpoints = {
s3 = {
service = "s3"
# …
}
}After:
enable_service_endpoint_lookup = false
endpoints = {
s3 = {
service_endpoint = "com.amazonaws.${each.value.aws_region}.s3"
service_region = each.value.aws_region
# …
}
}The enable_service_endpoint_lookup switch effectively disables the aws_vpc_endpoint_service data source (default is enabled).
I need to work out and add some example scripts.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I updated examples and readmes
|
Looking forward to seeing this through 🙏 |
|
@nightspotlight looking forward to it ❤️, afaik only example scripts are missing for usage? (for new endpoints) |
hey, I've been using my fork in my project but without the endpoints part. I updated examples and readme, I hope it gets reviewed soon. |
examples/simple-regions/main.tf
Outdated
| @@ -0,0 +1,54 @@ | |||
| provider "aws" {} | |||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
we don't need an example for this
modules/vpc-endpoints/main.tf
Outdated
|
|
||
| data "aws_vpc_endpoint_service" "this" { | ||
| for_each = local.endpoints | ||
| for_each = { for k, v in local.endpoints : k => v if var.enable_service_endpoint_lookup } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
remove this change, use service_regions = var.region != null ? [var.region] : null instead
modules/vpc-endpoints/main.tf
Outdated
|
|
||
| vpc_id = var.vpc_id | ||
| service_name = try(each.value.service_endpoint, data.aws_vpc_endpoint_service.this[each.key].service_name) | ||
| service_name = try(data.aws_vpc_endpoint_service.this[each.key].service_name, each.value.service_endpoint) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
remove these changes
modules/vpc-endpoints/variables.tf
Outdated
| default = {} | ||
| } | ||
|
|
||
| variable "enable_service_endpoint_lookup" { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
remove
modules/vpc-endpoints/README.md
Outdated
| } | ||
| ``` | ||
|
|
||
| ### Region Support Limitation |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
remove
72d072c to
0fbc753
Compare
0fbc753 to
b088ef2
Compare
## [6.1.0](v6.0.1...v6.1.0) (2025-09-22) ### Features * Add enhanced region support ([#1225](#1225)) ([fd357b9](fd357b9))
|
This PR is included in version 6.1.0 🎉 |
|
I'm going to lock this pull request because it has been closed for 30 days ⏳. This helps our maintainers find and focus on the active issues. If you have found a problem that seems related to this change, please open a new issue and complete the issue template so we can capture all the details necessary to investigate further. |
Description
regioninput variable (see Enhanced Region Support)Motivation and Context
This change will allow to simplify multi-region deployments of VPC resources. No longer need to maintain different provider aliases, one can simply pass
region = "value"when calling the module. Example:Closes #1209.
Closes #1236.
Breaking Changes
None
How Has This Been Tested?
examples/*to demonstrate and validate my change(s)examples/*projectspre-commit run -aon my pull request