Skip to content

Commit 757a216

Browse files
committed
docs: refresh PrivateLink setup screenshots, add ElastiCache IP-finding tip and NLB inbound-rules step
1 parent 45ec23c commit 757a216

7 files changed

Lines changed: 71 additions & 9 deletions
216 KB
Loading
-539 KB
Binary file not shown.
538 KB
Loading
427 KB
Loading
-235 KB
Binary file not shown.

docs/private-networking/aws-console-setup.mdx

Lines changed: 38 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -44,21 +44,40 @@ The target group is how the NLB will know where to forward traffic. AWS requires
4444
directly — if you need to expose a Lambda, put it behind an ALB and use the ALB target type.
4545

4646
</Step>
47-
<Step title="Configure the target group">
47+
<Step title="Configure the target group (first step of the AWS form)">
48+
On the **Specify group details** page (the first of two steps in AWS's target-group form), set:
49+
4850
- **Name**: e.g. `trigger-postgres-tg`
4951
- **Protocol**: TCP
5052
- **Port**: the port your resource listens on (5432 for Postgres, 6379 for Redis, 3306 for MySQL, etc.)
5153
- **VPC**: the VPC where your resource lives (this must match the VPC you'll use for the NLB)
5254
- **Health check protocol**: TCP
5355

54-
![Target group basic configuration](/images/priv-connections-target-group-basic.png)
56+
Click **Next** to move to the second step (registering targets).
57+
58+
![Target group first step — basic configuration](/images/priv-connections-target-group-first-step.png)
5559

5660
</Step>
57-
<Step title="Register your targets">
58-
Add the IP addresses of the resource. For RDS, look up the writer endpoint's IPs (`dig <endpoint>` from inside the VPC).
59-
For ElastiCache, use the primary endpoint IPs.
61+
<Step title="Register your targets (second step of the AWS form)">
62+
On the **Register targets** page — the second step of the IP target-group flow — paste the
63+
private IPs of your resource and set the port to the same value you picked above. Click
64+
**Include as pending below**, then **Create target group**.
65+
66+
![Register targets in the target group](/images/priv-connections-target-group-register-listeners.png)
67+
68+
<Expandable title="How to find the IP for an ElastiCache or RDS instance (no bastion needed)">
69+
Both ElastiCache and RDS expose a DNS endpoint, not an IP, on their console pages. Find the
70+
private IP behind the endpoint via the EC2 console:
71+
72+
1. Open **EC2 → Network & Security → Network Interfaces**.
73+
2. In the search bar, filter by **Description** with `ElastiCache` (or `RDSNetworkInterface`
74+
for RDS). Optionally narrow further by **VPC ID** if you have several clusters.
75+
3. Read the **Primary private IPv4 address** column — that's the IP to register here. For
76+
multi-node clusters or read replicas, each node has its own ENI and IP.
6077

61-
![Register targets in the target group](/images/priv-connections-target-group-register-nlb.png)
78+
You can also reach the same list from **VPC → Subnets → \<your-subnet\> → Network
79+
Interfaces tab**, which scopes the list to a single subnet.
80+
</Expandable>
6281

6382
<Warning>
6483
RDS and ElastiCache endpoints' IP addresses can change after failover or maintenance. For long-lived
@@ -68,9 +87,6 @@ The target group is how the NLB will know where to forward traffic. AWS requires
6887
</Warning>
6988

7089
</Step>
71-
<Step title="Create the target group">
72-
Click **Create target group**.
73-
</Step>
7490
</Steps>
7591

7692
## Step 2: Create an internal Network Load Balancer
@@ -111,6 +127,15 @@ The NLB is what PrivateLink exposes to Trigger.dev. It must be **internal** (not
111127
column shows **Active** before moving on. The endpoint service in the next step won't list the
112128
NLB until it's fully active.
113129
</Step>
130+
<Step title="Disable the inbound rules option on the NLB">
131+
Once the NLB is **Active**, open it and go to its **Settings** tab. AWS now enables an
132+
**Inbound rules** feature on NLBs by default — leaving it on can cause traffic from the
133+
Trigger.dev VPC Endpoint to be silently dropped before reaching your listener. Switch the
134+
**Inbound rules** option to **Disabled** and save.
135+
136+
![Disable the NLB inbound rules option](/images/priv-connections-nlb-disable-inbound-rules-options.png)
137+
138+
</Step>
114139
</Steps>
115140

116141
<Tip>
@@ -256,6 +281,10 @@ such as the "Private link not found" wizard error. A few quick checks specific t
256281
- Confirm the listener port matches the port your task code is dialing.
257282
- Confirm the security group on your resource allows inbound traffic from the NLB or the VPC's
258283
private IP range.
284+
- If the NLB itself has a security group attached, turn off **Enforce inbound rules on
285+
PrivateLink traffic** on the load balancer. See [the troubleshooting
286+
page](/private-networking/troubleshooting#connection-is-active-but-the-assigned-ip-is-not-reachable-from-tasks)
287+
for details.
259288
- Try connecting from inside the VPC first (e.g., a bastion host) to rule out resource-side
260289
issues.
261290
</Expandable>

docs/private-networking/troubleshooting.mdx

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,3 +43,36 @@ Trigger.dev cannot provision a VPC Endpoint until your endpoint service explicit
4343
</Steps>
4444

4545
For full setup instructions including this step, see [Setting up PrivateLink in the AWS Console](/private-networking/aws-console-setup).
46+
47+
## Connection is Active but the assigned IP is not reachable from tasks
48+
49+
If your private connection shows **Active** in the Trigger.dev dashboard and the NLB target group reports healthy targets, but tasks still cannot reach the assigned IP, the most common cause is that your Network Load Balancer is enforcing security group rules on PrivateLink traffic.
50+
51+
When a security group is attached to an NLB, AWS exposes a separate setting called **Enforce inbound rules on PrivateLink traffic**. When this is **on**, the NLB applies its security group's inbound rules to traffic arriving from VPC endpoints — and the source IP it evaluates is the **private IP of the consumer's VPC endpoint network interface**, not an IP in your own VPC. Because that IP belongs to Trigger.dev's VPC and isn't known ahead of time, the SG rule almost never matches, and traffic is silently dropped at the NLB.
52+
53+
### How to fix it
54+
55+
<Steps>
56+
<Step title="Open your Network Load Balancer in the AWS console">
57+
Go to **EC2 → Load balancers** in the region where your NLB lives and select the load balancer
58+
backing your endpoint service.
59+
</Step>
60+
<Step title="Edit the security group settings">
61+
On the **Security** tab, click **Edit**.
62+
</Step>
63+
<Step title="Turn off PrivateLink enforcement">
64+
Uncheck **Enforce inbound rules on PrivateLink traffic** and save.
65+
66+
<Note>
67+
This only changes how the NLB itself filters traffic. Authorization is still enforced by the
68+
endpoint service's **Allow principals** list, so only AWS accounts you've explicitly
69+
allow-listed can connect.
70+
</Note>
71+
72+
</Step>
73+
<Step title="Retry from your task">
74+
Re-run a task that dials the assigned private IP. The connection should now succeed.
75+
</Step>
76+
</Steps>
77+
78+
If you need to keep the enforcement on for compliance reasons, the alternative is to widen your NLB's security group inbound rule to `0.0.0.0/0` on the listener port. Allow-listing the consumer endpoint's CIDR is not practical because it lives in Trigger.dev's VPC and may change.

0 commit comments

Comments
 (0)