HUAWEI CLOUD → STACKIT · DNS AND CDN RUNBOOK
Runbook: moving Huawei Cloud DNS and CDN to STACKIT
DNS and CDN are the part of a migration that visitors notice, so they move last and with a way back. StackToIT classifies Huawei Cloud DNS record sets and CDN domains as RECONFIGURE, names STACKIT DNS and STACKIT CDN as targets, and puts the DNS records in a cutover package. This runbook orders the work around that package: first the origin, then the CDN, then the records, with an owner, a check and a rollback for each step. The demo is a six-resource estate assessed on 4 November 2026.
DNS records, assessed
Left: two of the four record sets of the demo, a CNAME and an MX record. Right: an excerpt of assessment.json for the CNAME, values exactly as the run wrote them.
resource "huaweicloud_dns_recordset" "www" {
zone_id = "ff8080828e5d0b3e018e6a1b2c3d4e5f"
name = "www.example.com."
type = "CNAME"
ttl = 300
records = ["example.com."]
}
resource "huaweicloud_dns_recordset" "mail" {
zone_id = "ff8080828e5d0b3e018e6a1b2c3d4e5f"
name = "example.com."
type = "MX"
ttl = 3600
records = ["10 mail.example.com."]
}{
"id": "huaweicloud_dns_recordset.www",
"result": {
"class": "RECONFIGURE",
"confidence": "MEDIUM",
"target": {
"service": "STACKIT DNS"
},
"reason": "A DNS record set becomes a record in a STACKIT DNS zone. Line-based resolution of the source needs review."
}
}Line resolution needs a look
The run's reason says line-based resolution of the source needs review. On Huawei Cloud DNS a record set sits on a resolution line: the Default line answers every visitor, while region, ISP and custom lines return different answers by the visitor's location, carrier network or IP range. STACKIT import formats carry name, TTL, type, content and comment, with no field for a resolution line, so a record that answers differently per line is flattened or split by hand.
The zone is not in the source
The demo points at its zone by a literal ID. Nothing in the run creates the STACKIT zone, so step 2 below does.
Five settings per record
name, records, ttl, type and zone_id are listed for your team as settings left to you.
The records of the demo and how STACKIT DNS takes them
| Huawei record set | On STACKIT DNS | Check |
|---|---|---|
| example.com. A, TTL 300 | A is a supported record type; the record sits at the zone apex. | Value 203.0.113.10 is a Huawei-side address; set the new target before cutover. |
| www.example.com. CNAME to example.com., TTL 300 | CNAME is supported, but cannot be used along with records of the same name or as a same-as-zone record. | No other record may share the name www. |
| example.com. MX, TTL 3600 | MX is a supported record type. | Mail is untouched until the MX answer changes; keep the old zone answering until then. |
| example.com. TXT with an SPF value, TTL 3600 | TXT is a supported record type; STACKIT has a how-to for long TXT records. | Compare the value after import, including quoting and length. |
Record-type rules from the STACKIT DNS record types reference. The values and TTLs are those of the demo input; the run did not change any of them.
The CDN domain, assessed
The demo has one CDN domain with an HTTPS setting and an origin host, and one public-read bucket. The run maps the domain to a STACKIT CDN distribution.
resource "huaweicloud_cdn_domain" "static" {
name = "static.example.com"
type = "web"
service_area = "outside_mainland_china"
sources {
origin = "origin.example.com"
origin_type = "domain"
active = 1
}
configs {
https_settings {
https_enabled = true
}
}
}{
"id": "huaweicloud_cdn_domain.static",
"result": {
"class": "RECONFIGURE",
"confidence": "MEDIUM",
"target": {
"service": "STACKIT CDN"
},
"reason": "A CDN domain becomes a STACKIT CDN distribution. Cache rules and certificates are rewritten, and the origin moves with the workload."
}
}Rewritten, not copied
The run states that cache rules and certificates are rewritten, and the origin moves with the workload. Rebuild them as STACKIT distribution settings.
A bucket is a data decision
The OBS bucket is RECONFIGURE and is listed as DECISION_REQUIRED for data movement. Its acl, bucket name and storage class are listed as settings left to you; decide whether the assets stay public or sit behind the CDN.
Everything in wave 1
All six units have no dependency, so the run offers no order of its own. The order below is runbook practice.
The runbook: step, owner and check, rollback
| Step | Owner and check | Rollback |
|---|---|---|
| 1. Inventory the zone. Export every record set of the Huawei zone, not only those in Terraform. | Network Architect. Check: the list is longer than or equal to the four record sets the run read. | Nothing has changed yet. |
| 2. Create the STACKIT DNS zone and import the records (CSV, JSON or BIND, import type Upsert or Restore). | Network Architect. Check: every record set is present and the values equal the Huawei values. Restore deletes records absent from the input. | Delete the new zone. The Huawei zone is still the answering one. |
| 3. Move the origin content. Copy the bucket to STACKIT Object Storage and choose the access model. | Storage Architect. Check: object count and sizes match; clients use the new endpoint and credentials. | Keep the Huawei bucket until step 9. |
| 4. Create the STACKIT CDN distribution with the origin and at least one region. | Network Architect. Check: the managed domain serves the site, cache hits appear, redirects and headers match. | Delete the distribution. No visitor uses it yet. |
| 5. Lower the TTL of the live records to 5 minutes or lower and wait out the old TTL. | Network Architect. Check: dig against a public resolver shows the new TTL. A 24-hour TTL means waiting 24 hours. | Raise the TTL again. |
| 6. Prepare the certificate. For zero downtime, upload your own PEM certificate and key and set skipDnsCheck (STACKIT lists this path as available through the API and SDK; Terraform and Portal support is still in development). Otherwise STACKIT provisions a managed certificate once the CNAME has propagated. | Network Architect. Check: custom domain active, TLS 1.2 and 1.3 accepted. | Remove the custom domain. |
| 7. Cut over: switch the CNAME or A records to the STACKIT target, and change the delegation to the STACKIT name servers if you move the whole zone. | Network Architect. Check: dig against several resolvers; CDN logs show traffic; watch 5xx and WAF blocks. | Revert the records to the previous values; the short TTL makes this fast. |
| 8. Verify mail and other records on the new zone. | Network Architect. Check: MX and SPF answers equal the old ones, test mail delivered. | Revert the delegation. |
| 9. Retire the old setup after the old TTL has fully expired and the migration is stable. | Storage and Network Architect. Check: no traffic on the old CDN domain or bucket. | Not applicable after retirement; keep an export first. |
Steps 1, 5 and 9 and the delegation change in step 7 are general practice. STACKIT specifics (import types, formats, skipDnsCheck, managed certificate, TTL advice, CNAME rollback) come from the STACKIT pages under sources. The run assigns the DNS records to a cutover package owned by the Network Architect, the CDN domain to a platform package, also owned by the Network Architect, and the bucket to a data package owned by the Storage Architect.
What the run says about the cutover
The cutover facts of this estate, verbatim from the run's migration plan. C1 to C3 report no evidence and C4 no open decision. That is a statement about what the scan found, not about what you need to do: the four records still need their values set by you.
### C1 · DNS record sets whose value transforms
No evidence: the draft re-binds the value of no DNS record set to an address it generates.
4 more DNS record unit(s) are in the source and the draft re-binds no value of them (no transformation evidence): `huaweicloud_dns_recordset.apex`, `huaweicloud_dns_recordset.mail`, `huaweicloud_dns_recordset.spf`, `huaweicloud_dns_recordset.www`. What their values become at cutover is not evidenced.
### C2 · Public address re-binding
No evidence: the draft re-binds no public address that a record names.
### C3 · Certificate and host switch
No evidence: the source declares no certificate unit, and the scan holds no fact about a certificate or host name switch.
### C4 · Open cutover decisions (cutover dimension of the workload readiness)
None: no unit reads a cutover decision or a missing endpoint binding.Traps this runbook closes
The origin firewall
If the origin sits behind an allow list, STACKIT CDN edge addresses must be allowed, and they change as the network grows. STACKIT recommends syncing them automatically, for example with a daily job.
Cookies
Check whether cookies bypass the cache and whether response cookies must be stripped. STACKIT CDN has a flag for stripping Set-Cookie headers.
Public projects only
CDN distributions are only available in public STACKIT projects, and the CDN service is enabled once per project.
Records outside Terraform
Records created in the console never appear in the run. The inventory in step 1 is how you find them.
Questions about DNS and CDN cutover
Does StackToIT move the DNS records or the CDN?
No. It reads Terraform, classifies the units and writes the manual steps and the order. The DNS records are a cutover package for a person, and the CDN domain is set up by hand.
Can we avoid downtime for the CDN?
STACKIT describes a zero-downtime path: bring your own certificate, set skipDnsCheck so the custom domain is active before the switch, then change the CNAME. STACKIT lists this path for the API and SDK; in Terraform and the Portal it is still in development. With a managed certificate, STACKIT provisions the certificate only after the CNAME has propagated, so plan for HTTPS on the custom domain to be unavailable until then.
What TTL should we use before cutover?
STACKIT advises 5 minutes or lower, set early enough that the old TTL has expired before you switch. A 24-hour TTL needs at least 24 hours of waiting.
How do we roll back?
Revert the CNAME or A records to the previous values. Because the TTL was lowered, the rollback propagates quickly. Keep the Huawei zone, CDN domain and bucket until the migration is stable.
Sources
Your next move: STACKIT.
Tell us about your estate. We show you what StackToIT delivers for it: target architecture, Terraform artifacts and a structured migration plan.