spoke
This component is responsible for provisioning AWS Transit Gateway attachments
to connect VPCs in a spoke
account to different accounts through a central hub
.
Usage
Stack Level: Regional
Here's an example snippet for how to configure and use this component:
stacks/catalog/tgw/spoke.yaml
components:
terraform:
tgw/spoke-defaults:
metadata:
type: abstract
component: tgw/spoke
vars:
enabled: true
name: tgw-spoke
tags:
Team: sre
Service: tgw-spoke
expose_eks_sg: false
tgw_hub_tenant_name: core
tgw_hub_environment_name: ue1
tgw/spoke:
metadata:
inherits:
- tgw/spoke-defaults
vars:
# This is what THIS spoke is allowed to connect to.
# since this is deployed to each plat account (dev->prod),
# we allow connections to network and auto.
connections:
- account:
tenant: core
stage: network
# Set this value if the vpc component has a different name in this account
vpc_component_names:
- vpc-dev
- account:
tenant: core
stage: auto
stacks/ue2/dev.yaml
import:
- catalog/tgw/spoke
components:
terraform:
tgw/spoke:
vars:
# use when there is not an EKS cluster in the stack
expose_eks_sg: false
# override default connections
connections:
- account:
tenant: core
stage: network
vpc_component_names:
- vpc-dev
- account:
tenant: core
stage: auto
- account:
tenant: plat
stage: dev
eks_component_names:
- eks/cluster
- account:
tenant: plat
stage: qa
eks_component_names:
- eks/cluster
To provision the attachments for a spoke account:
atmos terraform plan tgw/spoke -s <tenant>-<environment>-<stage>
atmos terraform apply tgw/spoke -s <tenant>-<environment>-<stage>
Variables
Required Variables
Optional Variables
connections
optionalA list of objects to define each TGW connections.
By default, each connection will look for only the default
vpc
component.Type:
list(object({
account = object({
stage = string
environment = optional(string, "")
tenant = optional(string, "")
})
vpc_component_names = optional(list(string), ["vpc"])
eks_component_names = optional(list(string), [])
}))Default value:
[ ]
cross_region_hub_connector_components
(map(object({ component = string, environment = string }))
) optionalA map of cross-region hub connector components that provide this spoke with the appropriate Transit Gateway attachments IDs.
- The key should be the environment that the remote VPC is located in.
- The component is the name of the component in the remote region (e.g.
tgw/cross-region-hub-connector
) - The environment is the region that the cross-region-hub-connector is deployed in.
e.g. the following would configure a component calledtgw/cross-region-hub-connector/use1
that is deployed in the
If use2 is the primary region, the following would be its configuration:
use1:
component: "tgw/cross-region-hub-connector"
environment: "use1" (the remote region)
and in the alternate region, the following would be its configuration:
use2:
component: "tgw/cross-region-hub-connector"
environment: "use1" (our own region)
Default value:
{ }
- The key should be the environment that the remote VPC is located in.
default_route_enabled
(bool
) optionalEnable default routing via transit gateway, requires also nat gateway and instance to be disabled in vpc component. Default is disabled.
Default value:
false
default_route_outgoing_account_name
(string
) optionalThe account name which is used for outgoing traffic, when using the transit gateway as default route.
Default value:
null
expose_eks_sg
(bool
) optionalSet true to allow EKS clusters to accept traffic from source accounts
Default value:
true
own_eks_component_names
(list(string)
) optionalThe name of the eks components in the owning account.
Default value:
[ ]
own_vpc_component_name
(string
) optionalThe name of the vpc component in the owning account. Defaults to "vpc"
Default value:
"vpc"
peered_region
(bool
) optionalSet
true
if this region is not the primary regionDefault value:
false
static_routes
optionalA list of static routes to add to the transit gateway, pointing at this VPC as a destination.
Type:
set(object({
blackhole = bool
destination_cidr_block = string
}))Default value:
[ ]
static_tgw_routes
(list(string)
) optionalA list of static routes to add to the local routing table with the transit gateway as a destination.
Default value:
[ ]
tgw_hub_component_name
(string
) optionalThe name of the transit-gateway component
Default value:
"tgw/hub"
tgw_hub_stage_name
(string
) optionalThe name of the stage where
tgw/hub
is provisionedDefault value:
"network"
tgw_hub_tenant_name
(string
) optionalThe name of the tenant where
tgw/hub
is provisioned.If the
tenant
label is not used, leave this asnull
.Default value:
null
Context Variables
The following variables are defined in the context.tf
file of this module and part of the terraform-null-label pattern.
context.tf
file of this module and part of the terraform-null-label pattern.Dependencies
Requirements
terraform
, version:>= 1.0.0
aws
, version:>= 4.1
Providers
aws
, version:>= 4.1
aws
, version:>= 4.1
Modules
Name | Version | Source | Description |
---|---|---|---|
cross_region_hub_connector | 1.8.0 | cloudposse/stack-config/yaml//modules/remote-state | n/a |
iam_roles | latest | ../../account-map/modules/iam-roles | n/a |
tgw_hub | 1.8.0 | cloudposse/stack-config/yaml//modules/remote-state | n/a |
tgw_hub_role | latest | ../../account-map/modules/iam-roles | n/a |
tgw_hub_routes | 0.11.3 | cloudposse/transit-gateway/aws | n/a |
tgw_spoke_vpc_attachment | latest | ./modules/standard_vpc_attachment | n/a |
this | 0.25.0 | cloudposse/label/null | n/a |
vpc | 1.8.0 | cloudposse/stack-config/yaml//modules/remote-state | n/a |
Resources
The following resources are used by this module:
aws_route.back_route
(resource)aws_route.default_route
(resource)
Data Sources
The following data sources are used by this module:
References
- cloudposse/terraform-aws-components - Cloud Posse's upstream component