ADR: S/4HANA in Hong Kong — X2idn Landed, Migrate Now or Wait for X8i?
Listen to study
generated on playGenerated only on first play
Powered by Amazon Polly + OmniVoice
On September 11, 2026 AWS enabled X2idn instances in Asia Pacific (Hong Kong). For a financial core on S/4HANA that cannot leave the region, it is the first 2 TiB Nitro instance certified for production HANA there — 49% more SAPS and 5.7× the EBS bandwidth of x1.32xlarge. This ADR records why I migrate now and accept a second migration to X8i when it arrives.
On September 11, 2026 AWS switched on X2idn instances in the Asia Pacific (Hong Kong) Region. If you read release notes, it is one line. If you operate an S/4HANA that must stay in Hong Kong under a data-residency rule, it is the first time ap-east-1 offers a 2 TiB Nitro instance certified for production HANA — and that unblocks a decision that had been sitting on X1 for years. This is the decision record I would write today for that scenario: context, options, the choice and, above all, what the choice costs to maintain.
Context and forces
The scenario is concrete: a financial core on S/4HANA, a HANA database with about 1.3 TiB of data in memory, and a contractual plus regulatory obligation to keep data and processing in Hong Kong. Until this week, anyone needing more than 1 TiB of certified memory in that Region effectively had the X1 family — Xen instances that AWS's own storage reference flags with the note 'we suggest migrating to a Nitro instance type'.
AWS's SAP certification table lays the gap bare. x1.32xlarge: 1,952 GiB, 131,500 SAPS, 25 Gbps network, 14,000 Mbps storage. x2idn.32xlarge: 2,048 GiB, 196,050 SAPS, 100 Gbps, 80,000 Mbps. That is not an incremental upgrade — it is 49% more SAPS and 5.7× the EBS bandwidth inside the same memory envelope.
The forces pulling on the decision:
Data residency: the workload does not leave ap-east-1. Singapore and Tokyo already have X8i; Hong Kong does not appear on any page I opened.
Restart window: changing instance type means stopping the database and reloading 1.3 TiB into memory. Every change is a window negotiated with the business, and I do not want to negotiate two in the same year without cause.
Capacity: a 128-vCPU instance in a small Region is exactly the profile that returns InsufficientInstanceCapacity on failover day.
Cost to maintain: the on-call rota is the same for X1, X2idn or X8i; what changes is how many I/O incidents and capacity tickets it handles per quarter.
The wrong question is 'is X2idn faster than X1?'. The answer is yes and it decides nothing. The right question is: knowing X8i is not in Hong Kong and has no date, is it worth migrating now and possibly migrating again, or holding on X1?
The options on the table
I considered four paths. Scale-out was ruled out up front: for OLTP (S/4HANA) the scale-out certification in AWS's table only exists on the high-memory U family, capped at 4 nodes; X2idn and X2iedn are certified for scale-out only on OLAP.
Option A — stay on X1. Zero window now, zero regression risk. The price is operating 14,000 Mbps of storage with a database whose delta merges and savepoints already compete for I/O at month-end close. Every quarter on X1 is one more quarter of tuning that does not survive the migration.
Option B — X2idn in ap-east-1 now. x2idn.32xlarge is certified for production OLTP with Standard sizing. You gain 49% SAPS and the EBS bandwidth to leave the defensive-tuning regime. You accept it is a 2022 generation and that X8i will arrive someday.
Option C — wait for X8i in Hong Kong. AWS announced X8i in January 2026 with 50% more SAPS and 3.4× the memory bandwidth of X2i, and has been expanding Region by Region. The problem is that 'someday' is not a date. Waiting means staying on X1 indefinitely, and the wait has a monthly cost.
Option D — X8i in Singapore. Technically the best instance; regulatorily, a non-starter. Data residency is not a negotiable non-functional requirement — it is the requirement that made the workload exist in this Region.
Option B has an honest flaw: if X8i lands in ap-east-1 in six months, I will have done two migrations in a year. The question that settles it is: what does each extra month on X1 cost compared with a second migration window? The matrix below records the reasoning.
Options considered
A — Stay on X1 (x1.32xlarge)
- No migration window now
- Known configuration, mature runbooks
- Xen generation; AWS itself suggests moving to Nitro
- 14,000 Mbps EBS and 131,500 SAPS — an I/O ceiling at month-end close
- Every month adds tuning the migration will discard
Rejected: defers the cost, does not remove it
B — X2idn now (x2idn.32xlarge)
- Production OLTP certified, Standard sizing, 2,048 GiB
- 196,050 SAPS, 100 Gbps network, 80,000 Mbps EBS
- Available today in ap-east-1; capacity reservable via ODCR
- 2022 generation; a second migration to X8i is likely
- Local NVMe is ephemeral — useless for /hana/data
Chosen: fixes the bottleneck today and keeps the path to X8i
C — Wait for X8i in Hong Kong
- A single migration, to the strongest instance
- 50% more SAPS and 3.4× memory bandwidth vs X2i (AWS figures)
- No date; no page I opened lists ap-east-1
- Every month of waiting is a month on X1
Rejected as a plan; kept as the next step
D — X8i in Singapore
- Best instance available in Asia today
- Breaks data residency — the requirement that created the workload
- Cross-Region latency for the app tier that stays in Hong Kong
Not viable
Decision: X2idn now, with a track to X8i
I choose Option B and record C as its successor. The reasoning that closes the ledger: a second migration costs one window; staying on X1 costs every month. When that second window comes, it will be between two Nitro generations with the same EBS layout — far cheaper than leaving Xen.
Size: x2idn.32xlarge, not x2idn.24xlarge. 1.3 TiB in 1,536 GiB is 85% occupancy — HANA needs headroom for delta merges and yearly growth; 2,048 GiB buys two years. A detail many skip: in AWS's table, x2idn.16xlarge and x2idn.24xlarge carry OLAP with Workload sizing (per-workload approval); only the 32xlarge is Standard in both categories.
Storage: I follow AWS's 2 TiB reference — /hana/data 2,500 GiB gp3 at 8,100 IOPS and 875 MB/s; /hana/log 500 GiB gp3 at 3,000 IOPS and 300 MB/s; /hana/shared 1,024 GiB. All encrypted with our own KMS CMK, with the ec2:Encrypted condition on the policy of whoever creates volumes. The 2×1900 GB local NVMe stays out of the data path.
Capacity: one immediate-use On-Demand Capacity Reservation per node, in each AZ, with platform SUSE Linux matching the AMI's PlatformDetails exactly. Paired with a Compute Savings Plan, which is what brings the discount — the reservation alone brings none. Before creating it I request a raise of the X-family On-Demand quota in ap-east-1: an active reservation counts against the quota even while empty.
High availability: synchronous HANA System Replication across two AZs, a Pacemaker cluster moving the overlay IP in the route table. Instances and reservations carry the tag sap:role=hana-primary|hana-secondary, and an SCP with aws:RequestedRegion restricted to ap-east-1 makes residency independent of human discipline.
Decision target: S/4HANA on X2idn across two ap-east-1 AZs
The app tier talks to an overlay IP; Pacemaker moves the route between primary and secondary. Each node runs inside its own Capacity Reservation.
- Overlay IP · route table /32
- Pacemaker · fence + move route
- x2idn.32xlarge · 2.048 GiB · 196.050 SAPS
- EBS gp3 · KMS CMK · data 2.500 GiB 875 MB/s · log 500 GiB
- ODCR AZ a · platform SUSE Linux
- x2idn.32xlarge · HSR sync target
- EBS gp3 · KMS CMK · mesmo layout
- ODCR AZ b · platform SUSE Linux
- S3 backup (Backint) · lifecycle + Object Lock
- X8i em ap-east-1 · quando chegar
Consequences: what now has to be operated
A decision is only recorded once its consequences are written down. These are the ones I take on.
A second migration is scheduled without a date. When X8i shows up in ap-east-1 — I confirm with aws ec2 describe-instance-type-offerings --region ap-east-1 --filters Name=instance-type,Values=x8i.*, not with an announcement — the path is: swap the secondary first, let HSR resync, take over, then swap the old primary. The 2 TiB EBS layout is the same across both generations, so the window is a takeover, not a full reload.
An empty reservation is a full bill. An immediate-use ODCR bills from creation, occupied or not. If the secondary sits stopped for two days of maintenance, the reservation keeps billing. I alarm on reservation utilization and ReservationState; a reservation with no instance for more than 24h opens a FinOps incident, not an infra one.
The quota becomes a project dependency. Active reservations count against the family's On-Demand quota. Two x2idn.32xlarge are 256 vCPUs; without the raise approved beforehand, the second reservation fails and the cluster is born with a single node.
Local NVMe does not exist for the database. The 2×1900 GB vanish on stop/start. At most they serve as scratch space for exports; any runbook mentioning them for persistent data is a defect.
The signals I watch: HANA log write latency (the KPI SAP measures in microseconds), VolumeQueueLength and VolumeThroughputPercentage on data volumes, HSR ReplicationStatus, and takeover time measured in a quarterly failover test. If the test does not run, high availability is a hypothesis.
Two silent failures in this decision
Reservation platform mismatched with the AMI: a SLES for SAP AMI reports PlatformDetails: SUSE Linux; if the Capacity Reservation is created as Linux/UNIX, the instance launches outside the reservation with no error at all — you pay the empty reservation plus the On-Demand instance, and only find out on the invoice. Check with aws ec2 describe-images --query Images[*].PlatformDetails before creating it. Second: x2idn.32xlarge carries Standard OLAP sizing, but the smaller sizes in the family carry Workload OLAP sizing — anyone sizing a BW/4HANA on x2idn.24xlarge without the per-workload sizing process is outside SAP support without knowing it.
I would migrate at the next quarter-close window, not before — and I would create both Capacity Reservations the day the decision was approved, even with the migration six weeks out, because 128-vCPU capacity in a small Region is not something you request the day before. The lesson I carry from financial platforms: the instance you postpone because of the next generation costs you every month in defensive tuning, and the next generation never reaches your Region on the date you imagined. Migrate to what exists, leave the second migration written in the ADR with the command that triggers it, and test failover every quarter — everything else is a hypothesis.
Verdict
Migrate to x2idn.32xlarge in ap-east-1 now when: the workload has a Hong Kong residency obligation, needs more than 1 TiB of OLTP-certified memory and runs on X1 today. Hold when: the database fits in 768 GiB (then r7i.24xlarge or r8i.24xlarge solve it with more SAPS per vCPU) or when residency allows Singapore or Tokyo, where X8i already exists. Either way, record the next migration in the ADR, reserve capacity with the correct platform, and treat waiting for X8i as what it is — a monthly cost with no end date.
References
Post-mortems, ADRs and architecture deep dives in your inbox — the way an architect reads them.
No spam · unsubscribe anytime
Ask Fernando about this
Get a focused answer about this study from my AI assistant, grounded in my work.
Join the conversation
Sign in to comment
Verify your email to join in — you'll also get the newsletter. No password.