Separate Public/Private Subnet Configuration and Enhance NAT Gateway Placement @aknysh (#226)
## what- Add ability to configure different numbers of public and private subnets per Availability Zone independently
 - Add controlled NAT Gateway placement by subnet index to reduce costs
 - Add intuitive NAT Gateway placement by subnet name for better usability
 - Fix critical NAT Gateway placement bug causing wrong AZ distribution
 - Fix cross-AZ routing issue where private subnets routed to NATs in different AZs
 - Add comprehensive examples demonstrating cost-optimized and high-availability configurations
 - Add full test coverage with Terratest for all new features
 - Maintain 100% backward compatibility with existing configurations
 
why
User Pain Points:
- Users were forced to create equal numbers of public and private subnets, even when workloads didn't require it
 - NAT Gateways were created in every public subnet, resulting in unnecessarily high AWS costs (~$32/month per NAT)
 - No control over which public subnets received NAT Gateways
 - Index-based configuration was not intuitive for users who assigned names to subnets
 - Critical bugs caused NAT Gateways to be placed in wrong AZs and private subnets to route across AZ boundaries
 
Business Impact:
- Cost Optimization: Reducing from 6 NATs to 3 NATs saves $96/month (50% reduction)
 - Flexibility: Users can now match subnet configuration to their actual workload requirements
 - Reliability: Fixes ensure NAT Gateways are correctly distributed across AZs and routing stays within same AZ
 - Usability: Name-based placement is more intuitive and maintainable than index-based placement
 
Key Features:
- 
Separate Public/Private Subnet Counts: New variables
public_subnets_per_az_count,public_subnets_per_az_names,private_subnets_per_az_count,private_subnets_per_az_namesallow independent control while falling back to original variables for backward compatibility - 
Controlled NAT Placement by Index: Variable
nat_gateway_public_subnet_indices(default[0]) specifies which subnet position(s) in each AZ receive NAT Gateways, enabling cost optimization - 
Named NAT Placement: Variable
nat_gateway_public_subnet_namesallows intuitive placement like["loadbalancer"]instead of remembering indices - 
Bug Fixes: Corrected NAT Gateway global index calculation and route table mapping to ensure proper AZ distribution and same-AZ routing
 
Examples Included:
examples/separate-public-private-subnets/: Cost-optimized with 1 NAT per AZ (~$110/month)examples/redundant-nat-gateways/: High-availability with 2 NATs per AZ (~$140/month)
Test Coverage:
- Full Terratest coverage for both examples
 - Tests for name-based and index-based NAT placement
 - Tests for disabled state (no resources created)
 - Verification of all outputs, subnet counts, NAT counts, and route table mappings
 
references
- Comprehensive PRD: 
docs/prd/separate-public-private-subnets-and-nat-placement.md 
🤖 Automatic Updates
Fix go version in tests @osterman (#222)
## what - Update go `1.24`why
- Error loading shared library libresolv.so.2 in Go 1.20
 
References
Replace Makefile with atmos.yaml @osterman (#221)
## what - Remove `Makefile` - Add `atmos.yaml`why
- Replace 
build-harnesswithatmosfor readme genration 
References
- DEV-3229 Migrate from build-harness to atmos
 
Migrate new test account @osterman (#215)
## what - Update `.github/settings.yml` - Update `.github/chatops.yml` fileswhy
- Re-apply 
.github/settings.ymlfrom org level to getterratestenvironment - Migrate to new 
testaccount 
References
- DEV-388 Automate clean up of test account in new organization
 - DEV-387 Update terratest to work on a shared workflow instead of a dispatch action
 - DEV-386 Update terratest to use new testing account with GitHub OIDC
 
Update .github/settings.yml @osterman (#214)
## what - Update `.github/settings.yml` - Drop `.github/auto-release.yml` fileswhy
- Re-apply 
.github/settings.ymlfrom org level - Use organization level auto-release settings
 
references
- DEV-1242 Add protected tags with Repository Rulesets on GitHub
 
Update release workflow to allow pull-requests: write @osterman (#211)
## what - Update workflow (`.github/workflows/release.yaml`) to have permission to comment on PRwhy
- So we can support commenting on PRs with a link to the release
 
Update GitHub Workflows to use shared workflows from '.github' repo @osterman (#210)
## what - Update workflows (`.github/workflows`) to use shared workflows from `.github` repowhy
- Reduce nested levels of reusable workflows
 
Update GitHub Workflows to Fix ReviewDog TFLint Action @osterman (#209)
## what - Update workflows (`.github/workflows`) to add `issue: write` permission needed by ReviewDog `tflint` actionwhy
- The ReviewDog action will comment with line-level suggestions based on linting failures
 
Update GitHub workflows @osterman (#208)
## what - Update workflows (`.github/workflows/settings.yaml`)why
- Support new readme generation workflow.
 - Generate banners
 
Use GitHub Action Workflows from `cloudposse/.github` Repo @osterman (#202)
## what- Install latest GitHub Action Workflows
 
why
- Use shared workflows from 
cldouposse/.githubrepository - Simplify management of workflows from centralized hub of configuration
 
Bump google.golang.org/grpc from 1.51.0 to 1.56.3 in /test/src @[dependabot[bot]](https://github.com/apps/dependabot) (#200)
Bumps [google.golang.org/grpc](https://github.com/grpc/grpc-go) from 1.51.0 to 1.56.3.Release notes
Sourced from google.golang.org/grpc's releases.
Release 1.56.3
Security
server: prohibit more than MaxConcurrentStreams handlers from running at once (CVE-2023-44487)
In addition to this change, applications should ensure they do not leave running tasks behind related to the RPC before returning from method handlers, or should enforce appropriate limits on any such work.
Release 1.56.2
- status: To fix a panic,
 status.FromErrornow returns an error withcodes.Unknownwhen the error implements theGRPCStatus()method, and callingGRPCStatus()returnsnil. (#6374)Release 1.56.1
- client: handle empty address lists correctly in addrConn.updateAddrs
 Release 1.56.0
New Features
- client: support channel idleness using
 WithIdleTimeoutdial option (#6263)
- This feature is currently disabled by default, but will be enabled with a 30 minute default in the future.
 - client: when using pickfirst, keep channel state in TRANSIENT_FAILURE until it becomes READY (gRFC A62) (#6306)
 - xds: Add support for Custom LB Policies (gRFC A52) (#6224)
 - xds: support pick_first Custom LB policy (gRFC A62) (#6314) (#6317)
 - client: add support for pickfirst address shuffling (gRFC A62) (#6311)
 - xds: Add support for String Matcher Header Matcher in RDS (#6313)
 - xds/outlierdetection: Add Channelz Logger to Outlier Detection LB (#6145)
 
- Special Thanks:
 @s-matyukevich- xds: enable RLS in xDS by default (#6343)
 - orca: add support for application_utilization field and missing range checks on several metrics setters
 - balancer/weightedroundrobin: add new LB policy for balancing between backends based on their load reports (gRFC A58) (#6241)
 - authz: add conversion of json to RBAC Audit Logging config (#6192)
 - authz: add support for stdout logger (#6230 and #6298)
 - authz: support customizable audit functionality for authorization policy (#6192 #6230 #6298 #6158 #6304 and #6225)
 Bug Fixes
- orca: fix a race at startup of out-of-band metric subscriptions that would cause the report interval to request 0 (#6245)
 - xds/xdsresource: Fix Outlier Detection Config Handling and correctly set xDS Defaults (#6361)
 - xds/outlierdetection: Fix Outlier Detection Config Handling by setting defaults in ParseConfig() (#6361)
 API Changes
- orca: allow a ServerMetricsProvider to be passed to the ORCA service and ServerOption (#6223)
 Release 1.55.1
- status: To fix a panic,
 status.FromErrornow returns an error withcodes.Unknownwhen the error implements theGRPCStatus()method, and callingGRPCStatus()returnsnil. (#6374)Release 1.55.0
Behavior Changes
... (truncated)
Commits
1055b48Update version.go to 1.56.3 (#6713)5efd7bdserver: prohibit more than MaxConcurrentStreams handlers from running at once...bd1f038Upgrade version.go to 1.56.3-dev (#6434)faab873Update version.go to v1.56.2 (#6432)6b0b291status: fix panic when servers return a wrapped error with status OK (#6374) ...ed56401[PSM interop] Don't fail target if sub-target already failed (#6390) (#6405)cd6a794Update version.go to v1.56.2-dev (#6387)5b67e5eUpdate version.go to v1.56.1 (#6386)d0f5150client: handle empty address lists correctly in addrConn.updateAddrs (#6354) ...997c1eaChange version to 1.56.1-dev (#6345)- Additional commits viewable in compare view
 
Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
@dependabot rebasewill rebase this PR@dependabot recreatewill recreate this PR, overwriting any edits that have been made to it@dependabot mergewill merge this PR after your CI passes on it@dependabot squash and mergewill squash and merge this PR after your CI passes on it@dependabot cancel mergewill cancel a previously requested merge and block automerging@dependabot reopenwill reopen this PR if it is closed@dependabot closewill close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually@dependabot show <dependency name> ignore conditionswill show all of the ignore conditions of the specified dependency@dependabot ignore this major versionwill close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)@dependabot ignore this minor versionwill close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)@dependabot ignore this dependencywill close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the Security Alerts page.
Add GitHub Settings @osterman (#196)
## what - Install a repository config (`.github/settings.yaml`)why
- Programmatically manage GitHub repo settings
 
Update README.md and docs @cloudpossebot (#194)
## what This is an auto-generated PR that updates the README.md and docswhy
To have most recent changes of README.md and doc from origin templates