Home › Decoder › TransitGateway-Hours and TransitGateway-Bytes - attachment hours and data processed

TransitGateway-Hours and TransitGateway-Bytes - attachment hours and data processed

TransitGateway-Hours is the hourly charge per Transit Gateway attachment ($0.05 per attachment-hour in US East N. Virginia, about $36.50 a month each) and TransitGateway-Bytes the data processed ($0.02 per GB).

In your bill the usage type reads: TransitGateway-Hours, USE1-TransitGateway-Hours, TransitGateway-Bytes, USE1-TransitGateway-Bytes

What it costs

ChargePriceUnit
Transit Gateway attachment hour (TransitGateway-Hours)$0.05per attachment-hour
Data processed by Transit Gateway (TransitGateway-Bytes)$0.02per GB

US East (N. Virginia); other regions differ. Checked 2026-11-04. Sources: AWS Transit Gateway pricing, AWS price list file, VPC offer, us-east-1.

Example with made-up numbers

6 attachments for the whole month (730 hours) and 2,000 GB processed

Hours: 6 x 730 x $0.05 = $219.00 per month; data: 2,000 x $0.02 = $40.00 per month; total $259.00

Deleting 2 idle attachments saves 2 x 730 x $0.05 = $73.00 per month

Typical causes

Attachments for retired VPCs

A deleted workload leaves its attachment behind and it bills hourly.

One attachment per environment

Each dev, staging and test VPC attached to the gateway adds $36.50 a month before any traffic.

VPN and Direct Connect attachments

Each connection type is its own attachment with its own hourly charge.

Chatty traffic through the gateway

Services in different VPCs that talk constantly pay $0.02 per GB.

Find it in your bill

Have a CUR file queryable in Athena? Paste this and run it:

SELECT date_trunc('month', line_item_usage_start_date) AS month,
       line_item_product_code,
       line_item_usage_type,
       line_item_resource_id,
       SUM(line_item_usage_amount)  AS usage_amount,
       SUM(line_item_unblended_cost) AS cost
FROM your_cur_table
WHERE line_item_usage_type LIKE '%TransitGateway-Hours'
     OR line_item_usage_type LIKE '%TransitGateway-Bytes'
GROUP BY 1, 2, 3, 4
ORDER BY month DESC, cost DESC
LIMIT 50;

Columns used: line_item_usage_start_date, line_item_product_code, line_item_usage_type, line_item_resource_id, line_item_usage_amount, line_item_unblended_cost.

No CUR file? Use Cost Explorer

  1. Open Billing and Cost Management, then Cost Explorer, and set the date range to the last 3 months with Monthly granularity.
  2. Set Group by to Usage type.
  3. In the Filters panel choose Usage type and tick the entries ending in TransitGateway-Hours or TransitGateway-Bytes (the region prefix, such as USE1-, differs by region).
  4. Read the monthly cost per usage type. A line that grows faster than your traffic is the one to chase with the fix below.
  5. To see which resource drives it, query the CUR above; resource IDs appear only if your CUR was set up with resource IDs included, otherwise the resource column is empty.

Column names checked against: docs.aws.amazon.com/cur/latest/userguide/Lineitem-columns.html, docs.aws.amazon.com/cur/latest/userguide/cur-ate-run.html.

The fix, step by step

Verify first

Check these before you change anything: the steps below are suggestions, and only you can see your own configuration.

  • Confirm an attachment carries no traffic and no route table sends traffic to it before deleting.
  • Deleting an attachment breaks connectivity between the attached networks; do it in a maintenance window.
  • If the gateway is shared with other AWS accounts, ask their owners before removing their attachments.
  • Compare against VPC peering for simple two-VPC cases, including the data transfer terms.

In the console

  1. VPC console > Transit gateway attachments; list every attachment with its resource and state.
  2. Check each attachment's VPC or connection: is it still in use? Look at Transit gateway route tables for routes that point to it.
  3. CloudWatch > Transit Gateway metrics (BytesIn, BytesOut) per attachment over 2 weeks to find idle ones.
  4. Delete attachments that are idle and unrouted, one at a time.
  5. For two VPCs that only talk to each other, compare a direct VPC peering connection (no hourly charge, check data transfer rules).

With the CLI

aws ec2 describe-transit-gateway-attachments --query "TransitGatewayAttachments[].[TransitGatewayAttachmentId,ResourceType,ResourceId,State]" --output table
aws cloudwatch get-metric-statistics --namespace AWS/TransitGateway --metric-name BytesIn --dimensions Name=TransitGatewayAttachment,Value=tgw-attach-EXAMPLE --start-time 2026-10-20T00:00:00Z --end-time 2026-11-03T00:00:00Z --period 86400 --statistics Sum
aws ec2 delete-transit-gateway-vpc-attachment --transit-gateway-attachment-id tgw-attach-EXAMPLE

Rollback

Create a new attachment for the VPC and restore its route table entries (keep the old route configuration in version control).

Find your Transit Gateway lines in your own bill

Drop in your Cost Explorer or CUR CSV. Billtrim reads it in your browser, finds the attachment-hour and data lines and shows the monthly dollars.

See a sample result

Paste your export: how to export a Cost Explorer CSV or CUR file in two minutes.

Questions people ask

Is there a charge when no traffic flows?

Yes, the attachment-hour charge applies whether or not data moves.

Is VPC peering cheaper?

Peering has no hourly charge, but it has its own data transfer rules and does not route through other networks; check the VPC peering documentation for your case.

Related

Part of the guide: Reduce your AWS bill as a startup: a checklist for teams with no FinOps person