Skip to content

Commit 101dcc8

Browse files
Merge branch 'main' into update-cli-docs-v1.7.1-standalone-nexus-operations
2 parents 0e7177d + bcf0ee7 commit 101dcc8

89 files changed

Lines changed: 4417 additions & 734 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

docs/best-practices/cost-optimization.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ See [Spooky Stories: Chilling Temporal Anti-Patterns](https://temporal.io/blog/s
6262
### Large payloads in Workflow History
6363

6464
Passing multi-megabyte payloads through Workflows when external storage (S3, blob storage) is more appropriate.
65-
Use [compression](/troubleshooting/blob-size-limit-error#why-does-this-error-occur) or the [claim check pattern](https://dataengineering.wiki/Concepts/Software+Engineering/Claim+Check+Pattern) for large data.
65+
Use [compression](/troubleshooting/blob-size-limit-error#payload-size-limit) or the [claim check pattern](https://dataengineering.wiki/Concepts/Software+Engineering/Claim+Check+Pattern) for large data.
6666

6767
### Over-optimization at the expense of observability
6868

docs/cloud/audit-logs.mdx

Lines changed: 11 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -83,34 +83,24 @@ Instead, explore the [Export](/cloud/export) feature, which does let you send cl
8383

8484
:::info DEPRECATION NOTICE
8585

86-
The following fields are deprecated and are planned for removal on or after April 1 2026.
87-
88-
- `user_email`. This field is duplicated by `principal.name` for principals of type `user`. Other principal types do not have associated emails.
89-
- `level`. This field is duplicated by `status`.
90-
- `caller_ip_address`. This field is replaced by `x_forwarded_for`.
91-
- `details`. This field is replaced by `raw_details` that includes request details.
92-
- `category`. This field is no longer used.
86+
The `request_id` field is deprecated and is planned for removal on or after November 1 2026. Use `async_operation_id` instead.
9387

9488
:::
9589

9690
Audit Logs use the following JSON format:
9791

9892
```json
9993
{
100-
"operation": // Operation that was performed
101-
"principal": // Information about who initiated the operation
102-
"details": // DEPRECATED, see raw_details
103-
"raw_details": // details about the request
104-
"user_email": // DEPRECATED, use principal.user where applicable
105-
"x_forwarded_for": // the IP address making the call
106-
"caller_ip_address": // DEPRECATED, use x_forwarded_for
107-
"category": // DEPRECATED, no longer used
108-
"emit_time": // Time the operation was recorded
109-
"level": // DEPRECATED, use status
110-
"log_id": // Unique ID of the log entry
111-
"request_id": // Optional async request id set by the user when sending a request
112-
"status": // Status, such as OK or ERROR
113-
"version": // Version of the log entry
94+
"operation": // Operation that was performed
95+
"principal": // Information about who initiated the operation
96+
"raw_details": // Details about the request
97+
"x_forwarded_for": // The IP address(es) making the call
98+
"emit_time": // Time the operation was recorded
99+
"log_id": // Unique ID of the log entry
100+
"async_operation_id": // Optional async operation id set by the user when sending a request
101+
"request_id": // DEPRECATED, use async_operation_id
102+
"status": // Status, such as OK or ERROR
103+
"version": // Version of the log entry
114104
}
115105
```
116106

docs/cloud/connectivity/aws-connectivity.mdx

Lines changed: 49 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -108,14 +108,19 @@ This approach is **optional**; Temporal Cloud works without it. It simply stream
108108

109109
### Choose the override domain and endpoint
110110

111-
| Temporal Cloud setup | Use this PHZ domain | Example |
112-
| ----------------------------------------- | ---------------------------------- | ----------------------------------------------- |
113-
| Single-region namespace with mTLS auth | `<account>.tmprl.cloud` | `payments.abcde.tmprl.cloud``vpce-...` |
114-
| Single-region namespace with API-key auth | `<cloud_provider>.api.temporal.io` | `us-east-1.aws.api.temporal.io``vpce-...` |
115-
| Multi-region namespace | `region.tmprl.cloud` | `aws-us-east-1.region.tmprl.cloud``vpce-...` |
111+
| Endpoint type | PHZ domain format | Example |
112+
| ------------------ | ---------------------------------- | -------------------------------------- |
113+
| Namespace endpoint | `<namespace-id>.tmprl.cloud` | `payments.abcde.tmprl.cloud` |
114+
| Regional endpoint | `<cloud>-<region>.region.tmprl.cloud` | `aws-ap-northeast-2.region.tmprl.cloud` |
116115

117116
### Step-by-step instructions
118117

118+
:::warning Order matters
119+
120+
A Route 53 private hosted zone with no records causes DNS resolution to fail (NXDOMAIN) inside any associated VPC. If you create an empty PHZ for `<account>.tmprl.cloud` and associate it with a VPC where Workers are running, **all Worker traffic to Temporal Cloud in that VPC stops** until you add the CNAME record. Follow the steps below in order to avoid this.
121+
122+
:::
123+
119124
#### 1. Collect your PrivateLink endpoint DNS name
120125

121126
```bash
@@ -128,28 +133,38 @@ aws ec2 describe-vpc-endpoints \
128133
# vpce-0123456789abcdef-abc.us-east-1.vpce.amazonaws.com
129134
```
130135

131-
Save the **`vpce-*.amazonaws.com`** value -- you will target it in the CNAME record.
136+
Save the **`vpce-*.amazonaws.com`** value you will target it in the CNAME record.
132137

133-
#### 2. Create a Route 53 Private Hosted Zone
138+
#### 2. Create a Route 53 Private Hosted Zone (do not yet attach Worker VPCs)
134139

135-
1. Open _Route 53 → Hosted zones → Create hosted zone_.
136-
2. Enter the domain chosen from the table above, e.g., `payments.abcde.tmprl.cloud`.
137-
3. Type: _Private hosted zone for Temporal Cloud_.
138-
4. Associate the hosted zone with every VPC that contains Temporal Workers and/or SDK clients.
139-
5. Create hosted zone.
140+
a. Open _Route 53 → Hosted zones → Create hosted zone_.
141+
b. Enter the domain chosen from the table above, e.g., `payments.abcde.tmprl.cloud`.
142+
c. Type: _Private hosted zone for Temporal Cloud_.
143+
d. Leave VPC associations empty for now (you'll add them in step 4).
144+
e. Create the hosted zone.
140145

141146
#### 3. Add a CNAME record
142147

143148
Inside the new PHZ:
144149

145150
| Field | Value |
146151
| --------------- | ------------------------------------------------------------------------------------- |
147-
| **Record name** | the namespace endpoint (e.g., `payments.abcde.tmprl.cloud`). |
152+
| **Record name** | the Namespace Endpoint (e.g., `payments.abcde.tmprl.cloud`). |
148153
| **Record type** | `CNAME` |
149154
| **Value** | Your VPC Endpoint DNS name (`vpce-0123456789abcdef-abc.us-east-1.vpce.amazonaws.com`) |
150-
| **TTL** | 60s is typical; 15s for MRN namespaces; adjust as needed. |
155+
| **TTL** | 60s is typical; 15s for Namespaces with High Availability (to minimize recovery time after failover). |
156+
157+
#### 4. Associate the PHZ with your Worker VPCs and verify
151158

152-
#### 4. Verify DNS resolution from inside the VPC
159+
Now that the record exists, associate the PHZ with every VPC that contains Temporal Workers or SDK clients (Route 53 → your zone → _Edit settings__Add VPC_).
160+
161+
:::tip Test with a non-production VPC first
162+
163+
We strongly recommend that you test with a non-production VPC first. Attach the PHZ to a non-production VPC, validate end-to-end resolution and connectivity from a host in that VPC, and only then attach production Worker VPCs. This catches misconfigured records before they affect production traffic.
164+
165+
:::
166+
167+
Verify DNS resolution from inside one of the associated VPCs:
153168

154169
```bash
155170
dig payments.abcde.tmprl.cloud
@@ -171,62 +186,11 @@ clientOptions := client.Options{
171186

172187
The DNS resolver inside your VPC returns the private endpoint, while TLS still validates the original hostname—simplifying both code and certificate management.
173188

174-
## Configure Private DNS for Multi-Region Namespaces
175-
176-
:::tip Namespaces with High Availability features and AWS PrivateLink
177-
178-
Proper networking configuration is required for failover to be transparent to clients and workers when using PrivateLink.
179-
This page describes how to configure routing for Namespaces with High Availability features on AWS PrivateLink.
180-
181-
:::
182-
183-
To use AWS PrivateLink with High Availability features, you may need to:
184-
185-
- Override the regional DNS zone.
186-
- Ensure network connectivity between the two regions.
187-
188-
This page provides the details you need to set this up.
189+
## Configure private DNS for Namespaces with High Availability
189190

190-
### Customer side solutions
191+
For Namespaces with [High Availability features](/cloud/high-availability), you need to override DNS for `region.tmprl.cloud` so each region resolves to the local VPC Endpoint, and you need to ensure Workers can reach whichever region is active. Failover is transparent to clients only when this is set up correctly.
191192

192-
When using PrivateLink, you connect to Temporal Cloud through a VPC Endpoint, which uses addresses local to your network.
193-
Temporal treats each `region.<tmprl_domain>` as a separate zone.
194-
This setup allows you to override the default zone, ensuring that traffic is routed internally for the regions you’re using.
195-
196-
A Namespace's active region is reflected in the target of a CNAME record.
197-
For example, if the active region of a Namespace is AWS us-west-2, the DNS configuration would look like this:
198-
199-
| Record name | Record type | Value |
200-
| ----------------------------------- | ----------- | -------------------------------- |
201-
| ha-namespace.account-id.tmprl.cloud | CNAME | aws-us-west-2.region.tmprl.cloud |
202-
203-
After a failover, the CNAME record will be updated to point to the failover region, for example:
204-
205-
| Record name | Record type | Value |
206-
| ----------------------------------- | ----------- | -------------------------------- |
207-
| ha-namespace.account-id.tmprl.cloud | CNAME | aws-us-east-1.region.tmprl.cloud |
208-
209-
The Temporal domain did not change, but the CNAME updated from us-west-2 to us-east-1.
210-
211-
<CaptionedImage
212-
src="/img/cloud/high-availability/private-link.png"
213-
title="Customer side solution example"
214-
zoom="true"
215-
/>
216-
217-
### Setting up the DNS override
218-
219-
To set up the DNS override, configure specific regions to target the internal VPC Endpoint IP addresses.
220-
For example, you might set aws-us-west-1.region.tmprl.cloud to target 192.168.1.2.
221-
In AWS, this can be done using a Route 53 private hosted zone for `region.tmprl.cloud`.
222-
Link that private zone to the VPCs you use for Workers.
223-
224-
When your Workers connect to the Namespace, they first resolve the `<ns>.<acct>.<tmprl_domain>` record.
225-
This points to `<aws-active-region>.region.tmprl.cloud`, which then resolves to your internal IP addresses.
226-
227-
Consider how you’ll configure Workers for this setup.
228-
You can either have Workers run in both regions continuously or establish connectivity between regions using Transit Gateway or VPC Peering.
229-
This way, Workers can access the newly activated region once failover occurs.
193+
The complete guidance — including single-cloud (AWS-only) HA, multi-cloud HA (AWS PrivateLink + GCP Private Service Connect), and a recommended failover-testing plan — lives on a single page: [Connectivity for High Availability](/cloud/high-availability/ha-connectivity).
230194

231195
## Direct VPCE targeting without per-Namespace DNS {#direct-vpce}
232196

@@ -248,6 +212,22 @@ For HA Namespaces, use [private DNS](#configuring-private-dns-for-aws-privatelin
248212

249213
:::
250214

215+
## Adding PrivateLink from additional AWS accounts
216+
217+
A common pattern is to have separate AWS accounts for different lines of business, environments (staging, production), or compliance scopes (PCI vs non-PCI), each with its own VPC and Workers connecting to the same Temporal Cloud account.
218+
219+
You can create as many AWS PrivateLink VPC endpoints as you need to the same Temporal Cloud regional service — there is nothing to register, approve, or open a ticket for on the Temporal side.
220+
221+
For each additional AWS account or VPC:
222+
223+
1. In that account, create the AWS PrivateLink VPC endpoint targeting the regional service name from the [regions table](#available-aws-regions-privatelink-endpoints-and-dns-record-overrides) — same as in the [creation steps](#creating-an-aws-privatelink-connection) above.
224+
2. Configure DNS in that VPC. You have two options:
225+
- Create a Route 53 Private Hosted Zone in that account scoped to the appropriate VPC(s), following the [private DNS steps](#configuring-private-dns-for-aws-privatelink) above. Each VPC's PHZ should point at the VPC Endpoint local to that VPC.
226+
- Or, use [direct VPCE targeting](#direct-vpce) (single-region Namespaces only).
227+
3. **Optional:** if you want to enforce private-only access for a Namespace, add a Connectivity Rule for each VPC endpoint and attach all of them (plus a public rule, if needed) to the Namespace. See [Connectivity Rules](/cloud/connectivity#connectivity-rules).
228+
229+
There is no upper limit on the number of VPC endpoints you can connect from your side to a regional PrivateLink service. The default per-account limit on private Connectivity Rules is 50 — [contact support](/cloud/support#support-ticket) if you need to raise it.
230+
251231
## Available AWS regions, PrivateLink endpoints, and DNS record overrides
252232

253233
The following table lists the available Temporal regions, PrivateLink endpoints, and regional endpoints used for DNS record overrides:

docs/cloud/connectivity/gcp-connectivity.mdx

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -73,21 +73,25 @@ Individual Namespaces do not use separate services.
7373
- For **IP address**, click the dropdown and select **Create IP address** to create an internal IP from your subnet dedicated to the endpoint. Select this IP.
7474
- Check **Enable global access** if you intend to connect the endpoint to virtual machines outside of the selected region. We recommend regional connectivity instead of global access, as it can be better in terms of latency for your workers. _**Note:** this requires the network routing mode to be set to **GLOBAL**._
7575

76-
5. Click the **Add endpoint** button at the bottom of the screen.
76+
5. Click the **Add endpoint** button at the bottom of the screen. The endpoint will appear with status **Pending**. This is expected — the next step is what flips it to **Accepted**.
7777

78-
6. [Create a Temporal Cloud Connectivity Rule](/cloud/connectivity#creating-a-connectivity-rule) using the Connection ID of the newly created endpoint and the corresponding GCP Project.
78+
6. [Create a Temporal Cloud Connectivity Rule](/cloud/connectivity#creating-a-connectivity-rule) using the Connection ID of the newly created endpoint and the corresponding GCP project. Use the **Connection ID** from the endpoint's detail page in the Google Cloud console (a numeric string such as `1234567890123456789`).
7979

80-
7. Once the status is "Accepted", the GCP Private Service Connect endpoint is ready for use.
80+
7. Once the status changes from "Pending" to "Accepted", the GCP Private Service Connect endpoint is ready for use.
8181

82-
:::tip Connectivity Rule required
82+
:::warning PSC stays "Pending" until you create a Connectivity Rule
8383

84-
If your Private Service Connect connection status is not becoming "Active", verify that you have [created a Connectivity Rule](/cloud/connectivity#creating-a-connectivity-rule).
85-
Connectivity Rules are mandatory for GCP Private Service Connect connections.
86-
The connection will not become active without one.
84+
For GCP Private Service Connect, the Connectivity Rule is what tells Temporal Cloud to accept your PSC connection. Until you [create a Connectivity Rule](/cloud/connectivity#creating-a-connectivity-rule) for the connection, the endpoint will remain in **Pending**. There is no separate producer-side approval step — creating the Connectivity Rule is the approval.
85+
86+
If your endpoint is stuck Pending, the most common causes are:
87+
88+
- No Connectivity Rule exists for the connection ID. (Most common.)
89+
- The Connectivity Rule was created with the wrong `connection-id`, `region`, or `gcp-project-id`.
90+
- The endpoint is in a region that is not a [supported Temporal Cloud region](/cloud/regions).
8791

8892
:::
8993

90-
- Take note of the **IP address** that has been assigned to your endpoint, as it will be used to connect to Temporal Cloud.
94+
- Take note of the **IP address** assigned to your endpoint — you will use it to connect to Temporal Cloud.
9195

9296
:::caution
9397
You still need to set up private DNS or override client configuration for your clients to actually use the new Private Service Connect connection to connect to Temporal Cloud.

0 commit comments

Comments
 (0)