Route 53 DNS and CloudFront Content Delivery for SOA-C03
Amazon Route 53 is AWS's DNS service — hosted zones, records, routing policies, health checks, and the Resolver that answers every query inside your VPCs — and Amazon CloudFront is the CDN that delivers your content from edge locations worldwide. Task 5.2 of the SOA-C03 exam tests whether you can configure both as an operator: choose alias records over CNAMEs at the zone apex, wire hybrid DNS with Resolver endpoints and share it across accounts, pick the routing policy and health check a scenario demands, enable the query log that answers the question being asked, and build CloudFront distributions with Origin Access Control, ordered cache behaviors, sane TTLs, origin failover, and an ACM certificate in the right Region. It closes with the exam's favorite comparison: CloudFront versus AWS Global Accelerator. Configuration lives here; diagnosing cache misses and failed resolutions belongs to Task 5.3.
On this page13 sections
- Hosted zones and record types in practice
- Alias records and TTL operations
- Route 53 Resolver and hybrid DNS
- Sharing private zones and Resolver rules across VPCs and accounts
- Routing policies compared — and a canary migration
- Health checks that drive routing
- Query logging: two logs, two questions
- CloudFront origins and Origin Access Control
- Cache behaviors, cache policies, and origin request policies
- TTLs, cache headers, and invalidations
- Origin failover with origin groups
- Custom-domain HTTPS on CloudFront
- CloudFront vs Global Accelerator
- Configure public and private hosted zones, choose the right record type for each job, and use alias records at the zone apex
- Plan DNS changes with TTL reductions ahead of a cutover
- Set up Route 53 Resolver endpoints and forwarding rules for hybrid DNS, and share private zones and rules across accounts
- Select the routing policy — simple, weighted, latency, failover, geolocation, geoproximity, or multivalue — and the health check that matches a scenario
- Enable the right query logging surface: public DNS query logs versus Resolver query logs
- Configure CloudFront origins with OAC, ordered cache behaviors with cache and origin request policies, TTLs, invalidations, origin failover, and custom-domain HTTPS
- Choose between CloudFront and Global Accelerator by protocol, caching, static IP, and failover needs
Hosted zones and record types in practice
Route 53 organizes DNS records into hosted zones, and the first configuration decision is visibility. A public hosted zone answers queries from anywhere on the internet for a domain you control. A private hosted zone answers only from the VPCs you explicitly associate with it — you can associate more VPCs at any time, but each VPC must have DNS resolution and DNS hostnames enabled or queries fall through. You can run both zones for the same name (split-horizon DNS): inside an associated VPC the private zone wins, so db.example.com can resolve to a private IP internally while the public internet sees nothing.
The record types you will actually operate:
A— name to IPv4 address;AAAA— name to IPv6 address.CNAME— name to another name. A CNAME cannot coexist with other record types at the same name, and DNS forbids it at the zone apex (the bare domain).TXT— arbitrary text: domain-ownership verification, SPF and DKIM email policy.MX— mail servers with priorities; the lowest number is tried first.
Operationally, remember that hosting a zone and registering a domain are separate functions: you can host a zone for a domain registered elsewhere by pointing that registrar at your zone's four Route 53 name servers. Record changes propagate quickly from Route 53's side; what limits how fast the world sees them is resolver caching — which is where TTLs and alias records, the next section, come in.
Alias records and TTL operations
Alias records are a Route 53 extension to standard DNS that solve the CNAME problem. Where a CNAME can only point at another name and is illegal at the zone apex, an alias record points directly at an AWS resource — a CloudFront distribution, an Application or Network Load Balancer, an API Gateway API, a Global Accelerator, or another record in the same hosted zone — and it works at the apex. “Point example.com (no www) at an ALB” is an alias-record answer every time. Alias queries to AWS resources are also free, unlike standard queries, so swapping a busy CNAME that targets a load balancer for an alias cuts query charges. Route 53 manages the alias's TTL itself and tracks the target: when the load balancer's or the distribution's addresses change, the alias follows automatically, which is why a hard-coded A record listing today's IPs is never the right fix. An alias can also evaluate its target's health (Evaluate Target Health, covered with health checks below).
For everything else, TTL is your main operational lever. A record's TTL tells every caching resolver in the world how long it may keep the answer — which means the TTL that hurts you during a change is the one that was set before the change. Lowering the TTL at the moment of the cutover, converting to an alias at that moment, or submitting the change as a change batch all leave resolvers holding the old answer for the old TTL. The standard migration play: well ahead of a planned cutover, and at least one full old-TTL period in advance, lower the record's TTL from, say, 86400 seconds to 60. Wait for the old value to age out of caches, make the change, confirm the new target is healthy (a rollback is now just as fast), then raise the TTL back so resolvers stop hammering your zone. Low TTLs buy fast changes at the cost of more queries; high TTLs buy a cheap, resilient steady state at the cost of slow changes.
Route 53 Resolver and hybrid DNS
Every VPC has a built-in DNS server: the Route 53 Resolver, reachable at the VPC CIDR base plus two — in 10.0.0.0/16, that is 10.0.0.2 (the link-local address 169.254.169.253 also works). It resolves private hosted zone names, VPC-internal names, and public internet names for every instance in the VPC, and it is reachable only from inside the VPC. That last property is exactly what hybrid DNS has to work around, in two directions.
Inbound Resolver endpoint — on premises resolves AWS names. An inbound endpoint places ENIs with fixed private IPs into your subnets. You configure your on-premises DNS servers to conditionally forward AWS zones — say internal.example.com — to those IPs; the queries arrive over your Site-to-Site VPN and hand off to the Resolver. Result: data-center servers resolve private hosted zone records.
Outbound Resolver endpoint — VPCs resolve on-premises names. An outbound endpoint gives the Resolver a path out. You create forwarding rules — “for corp.example.com, forward to 10.10.0.53” — and associate each rule with the VPCs that need it. Instances keep querying their normal .2 address; matching queries are forwarded through the endpoint to your on-premises DNS servers.
Full hybrid DNS uses both endpoints at once, one per direction. On the exam, direction is everything: “on-premises servers must resolve VPC or private-zone names” is an inbound endpoint; “EC2 instances must resolve data-center domains” is an outbound endpoint plus forwarding rules. Neither replaces network connectivity — endpoints carry DNS queries over the private links you already have. And on-premises DNS cannot simply forward to a VPC's .2 address over the VPN: that address serves only queries from inside the VPC, which is the whole reason the inbound endpoint exists.
Why not just a DHCP options set? Pointing a VPC's DHCP options set at on-premises DNS servers does make instances query the data center directly — but it bypasses the Route 53 Resolver, so instances lose private hosted zone and AWS-internal name resolution unless the on-premises servers forward those names back. Keeping instances on the .2 Resolver and adding a forwarding rule forwards only the matching domain and leaves everything else working.
Routing policies compared — and a canary migration
Routing policies decide how Route 53 answers when multiple records share a name, and the exam tests them as scenario-to-policy matching.
| Policy | How it answers | Reach for it when |
|---|---|---|
| Simple | One record, all its values returned; health checks cannot be used | A single resource, nothing to steer |
| Weighted | Splits answers by assigned weights; one record per response, unhealthy records skipped when health-checked | Canary releases, gradual migrations, A/B splits |
| Latency-based | The Region measured fastest for that user | Multi-Region deployments chasing performance |
| Failover | Primary while its health check passes; otherwise secondary | Active-passive DR, a static fallback page |
| Geolocation | By the user's location (country, continent) | Compliance or localized content; always set a default record |
| Geoproximity | By distance to your resources, with a bias knob | Deliberately shifting the share of traffic a Region absorbs |
| Multivalue answer | Up to eight healthy records; the client picks | Cheap DNS-level load spreading with per-record health checks |
Distinguish the geo pair: geolocation is about where the user is — an exact-match lookup, so Germany gets the Frankfurt answer, full stop — while geoproximity is about how far the user is from your resources, with a bias value that grows or shrinks each resource's catchment area. Geolocation answers only the locations you list, so a location with no matching record gets no answer unless you add a Default record. Latency routing is a third, separate idea: it measures network latency from the user's resolver to each Region, so it cannot honor a border-exact compliance rule.
Simple, weighted and multivalue are easy to confuse. Simple routing returns every value in its one record but cannot use health checks, so a failed server stays in the answer. Weighted routing can skip unhealthy records, but each response comes from a single weighted record, so a client never gets a set of independently health-checked addresses to fall back on. Multivalue answer returns up to eight healthy records per response, each with its own health check, letting a client fail over to another address without querying again. It is still not a load balancer — the client chooses.
The canary walkthrough — migrating an API from an old load balancer to a new one:
- Days ahead, lower the record TTL to 60 seconds and let the old TTL age out of caches.
- Create two weighted alias records for the same name: old target weight 90, new target weight 10.
- Watch the new target's error rates and latency while it takes a tenth of production traffic.
- Shift weights in stages — 50/50, then 0/100. A bad stage rolls back by setting the new record's weight to 0.
- Once stable, delete the old record and raise the TTL back up.
Health checks that drive routing
A routing policy only steers around failures if Route 53 knows what is healthy, and there are two ways to tell it. Health checks themselves are configured as Route 53 resources; Domain 2 covers their resilience role, and here the question is which one a record can use.
| Option | How it decides health | Works for |
|---|---|---|
| Endpoint health check | Route 53 health checkers on the internet probe an IP or domain name over HTTP, HTTPS or TCP | Publicly reachable endpoints only — the checkers cannot reach a private IP inside a VPC |
| CloudWatch alarm health check | Mirrors the state of a CloudWatch alarm you choose | Private resources: publish a metric the service emits, alarm on it, and monitor the alarm |
| Calculated health check | Combines the results of other health checks | “Healthy if at least N of these are healthy” |
| Evaluate Target Health | An alias record inherits the health of its AWS target, such as a load balancer with no healthy targets | Alias records only — a record holding an instance IP has no target to evaluate |
Records accept health checks, not alarms directly: for a private service behind failover records in a private hosted zone, the pattern is metric → CloudWatch alarm → health check that monitors the alarm → attached to the primary record. For multi-Region latency or failover records that alias load balancers, turning on Evaluate Target Health (or attaching a health check) lets Route 53 skip that Region's record when its load balancer has no healthy targets and answer with the next-best record instead.
Query logging: two logs, two questions
Route 53 offers two query logs, and exam questions hinge on knowing which log records which queries — and which tools record none.
| Public DNS query logging | Resolver query logging | |
|---|---|---|
| Captures | Queries internet resolvers send to Route 53's authoritative name servers for your public hosted zone | Queries originating inside associated VPCs — everything instances ask the .2 Resolver, whatever the domain |
| Configured on | The public hosted zone | A query logging configuration associated with VPCs |
| Destinations | CloudWatch Logs only, in a log group in us-east-1 | CloudWatch Logs, Amazon S3, or Amazon Data Firehose |
| Permissions | A CloudWatch Logs resource policy allowing route53.amazonaws.com to create log streams and put events (not an IAM role) | Set up when you create the configuration |
| Typical fields | Record name and type, response code, the Route 53 edge location that answered, the resolver's IP address | Source IP and source instance ID, name, type, response code, DNS Firewall action |
Public query logging answers “who is querying my public domain” — verifying a record is being queried after a cutover or spotting query floods. If the log group is in another Region, or the resource policy is missing, the configuration cannot be saved. Resolver query logging answers “what are my instances looking up” — which instance queried a suspicious domain, why an application resolves the wrong name, or what Route 53 Resolver DNS Firewall just blocked.
Two neighbors are not substitutes. VPC Flow Logs record IP traffic metadata with no domain names, and they do not capture traffic to the Amazon-provided DNS server at all. AWS CloudTrail records Route 53 API calls — management events such as record changes and hosted zone updates — not the DNS queries instances send to the Resolver.
CloudFront origins and Origin Access Control
A CloudFront distribution is configuration, not infrastructure you place: you define origins (where content lives) and cache behaviors (how requests are handled), and CloudFront serves users from its global edge locations.
S3 origins and Origin Access Control. The operational standard for S3 is a private bucket, Block Public Access left on, fronted by Origin Access Control (OAC). CloudFront signs its requests to S3 as the cloudfront.amazonaws.com service principal, and the bucket policy allows s3:GetObject to that principal only when AWS:SourceArn equals your distribution's ARN — so only this distribution can read, and direct bucket URLs fail. Signed URLs do not replace this: they control which viewers may use the distribution, not whether CloudFront may read the bucket. Referer-header bucket policies need public access and are trivially spoofed.
OAC works only with the bucket's REST endpoint. An S3 website endpoint is treated as a custom origin that serves public content; CloudFront cannot sign requests to it, so the bucket would have to be public.
SSE-KMS objects. If objects are encrypted with a customer managed KMS key, the bucket policy is not enough: the KMS key policy must also allow the CloudFront service principal kms:Decrypt, conditioned on the distribution's ARN. A bucket policy statement granting kms:Decrypt does nothing, because bucket policies govern S3 actions only. The telltale symptom is 403s on objects written after the encryption change while older SSE-S3 objects still load. OAC is also the successor to the legacy origin access identity (OAI), which does not support SSE-KMS; new configurations should use OAC.
Custom origins. These cover everything that speaks HTTP: an Application Load Balancer, an API Gateway API, or any web server with a resolvable DNS name. With CloudFront VPC origins (since November 2024), a distribution can also reach an internal ALB, NLB or EC2 instance in a private subnet without exposing it to the internet.
Cache behaviors, cache policies, and origin request policies
A distribution routes requests to origins by cache behavior: each behavior has a path pattern, a target origin, and its own policies. /api/* can go to the ALB origin with caching disabled, /static/* to the S3 origin with long TTLs, and the default * behavior catches whatever matches nothing else — changing the default's origin moves every unmatched request.
Precedence. Behaviors are evaluated in precedence order and the first matching pattern wins, so list specific patterns before general ones: /images/thumbs/* must sit above /images/* or thumbnail requests never reach it. In path patterns, * matches any characters including slashes, so /images/*.jpg still matches /images/thumbs/cat.jpg — rewriting a pattern is not a substitute for ordering.
Cache policy versus origin request policy. Each behavior also sets its viewer protocol policy (for example, redirect HTTP to HTTPS) and allowed methods, plus the two policies that trip people up:
| Cache policy | Origin request policy | |
|---|---|---|
| Controls | The cache key (which headers, cookies and query strings make responses distinct) and the minimum/default/maximum TTLs | Additional headers, cookies and query strings forwarded to the origin without joining the cache key |
| Common managed policies | CachingOptimized (long TTLs, minimal key), CachingDisabled (TTLs of 0, nothing cached) | AllViewer (forward every viewer header, cookie and query string) |
| Cannot | — | Choose an origin — only the behavior's path pattern does that |
CloudFront forwards to the origin only what is in the cache key or in the origin request policy. That matters for dynamic, per-user pages: CachingDisabled on its own stops caching but forwards no cookies or query strings, because nothing is in its key; pairing it with AllViewer sends everything the application needs and caches nothing. Keying on every value with tiny TTLs is the wrong fix — it still caches briefly and fragments the cache. In general, forward what the origin needs through the origin request policy, and key only on what truly changes the response.
TTLs, cache headers, and invalidations
Caching lifetime is a negotiation between your origin's headers and each behavior's three TTL settings. If the origin sends Cache-Control: max-age (or Expires), CloudFront honors it — clamped between the behavior's minimum TTL and maximum TTL, so a max-age=30 against a 300-second minimum is cached for 300 seconds. If the origin sends no caching headers, the default TTL applies. An origin emitting Cache-Control: no-cache against a minimum TTL of 0 is effectively uncached, and a forgotten long default TTL is why a quick fix is not showing up for users.
Edge versus browser lifetimes. s-maxage applies to shared caches: when it is present, CloudFront uses it instead of max-age (still within the TTL bounds), while browsers ignore it and use max-age. So Cache-Control: max-age=60, s-maxage=3600 keeps a page at the edge for an hour and in browsers for a minute. stale-while-revalidate is different: the object still goes stale after its max-age, and CloudFront may keep serving the stale copy for the window while it fetches a fresh one from the origin in the background — it does not extend how long the edge treats the copy as fresh.
Removing stale content. Changing a behavior's TTL settings does not remove copies already in edge caches. When a file at a fixed URL must change now, an invalidation removes it from the edge ahead of expiry. Invalidations are billed per path beyond a monthly free allowance — the first 1,000 paths each month are free — and a wildcard such as /assets/* counts as a single path. An invalidation also takes time to complete across edge locations, so during a wide invalidation pages can load a mix of old and new assets, and rolling back needs another invalidation. The better pattern for deployable assets is versioned object names — app.a1b2c3.css instead of app.css: each deploy's HTML references new cache keys, pages always get the exact bundle they were built with, nothing needs invalidating, old versions age out, and rollback means serving the previous HTML. Reserve invalidations for content whose URL cannot change.
Origin Shield is a separate lever: an additional, centralized caching layer between the edge caches and your origin that raises the hit ratio and reduces origin load. It does not refresh or remove objects already cached at the edge.
Origin failover with origin groups
An origin group gives a cache behavior a primary and a secondary origin. CloudFront sends each request to the primary; if the primary returns a status code listed in the group's failover criteria (chosen from 400, 403, 404, 416, 500, 502, 503 and 504), or the connection fails or times out, CloudFront retries that same request against the secondary straight away. The connection attempts and timeout settings on an origin decide how quickly a non-responding primary counts as failed — raising them only makes CloudFront wait or retry longer against the same origin.
Origin failover applies only to GET, HEAD and OPTIONS requests. A POST or PUT — submitting a form, placing an order — goes to the primary origin even during an outage, and the primary's error goes back to the viewer. Failover depends on the method and the criteria, not on whether the response is cacheable.
| Mechanism | What it does on an origin error |
|---|---|
| Origin group failover | Retries the individual request against the secondary origin immediately, so viewers still get content |
| Custom error response | Replaces the error with an error page (optionally cached); the viewer gets no real content |
| Route 53 failover records | Changes DNS answers after health checks fail and cached answers expire — never per request |
Custom-domain HTTPS on CloudFront
Serving https://shop.example.com through CloudFront without certificate warnings takes three pieces, and the exam likes to drop one:
- Certificate in us-east-1. Request or import a public ACM certificate covering the name in
us-east-1— CloudFront reads distribution certificates only from that Region, no matter where your origin, users, or you work. A certificate issued in the origin's Region simply does not appear as an option, and a certificate on the ALB's listener secures only the CloudFront-to-origin hop. - Alternate domain name. Add
shop.example.comto the distribution's alternate domain names (CNAMEs) and attach that certificate. - DNS to the distribution. Create a Route 53 alias record for the name that targets the distribution's domain name (an alias is required at the apex, and preferred everywhere). Pointing DNS at the ALB instead bypasses the distribution.
Signed URLs or signed cookies are a separate control: they restrict delivery of private content to authorized viewers, and have nothing to do with the domain's certificate.
CloudFront vs Global Accelerator
CloudFront and AWS Global Accelerator both put your application behind AWS's global edge network, and the exam loves making you choose. They solve different problems: CloudFront is a content delivery network that caches HTTP responses at the edge; Global Accelerator is a network-layer front door that gives you two static anycast IP addresses and proxies TCP and UDP connections over the AWS backbone to the closest healthy regional endpoint — an ALB, NLB, EC2 instance, or Elastic IP. It caches nothing.
| CloudFront | Global Accelerator | |
|---|---|---|
| Protocols | HTTP and HTTPS | TCP and UDP, any port |
| Addresses | Distribution domain name; opt-in Anycast Static IPs give a larger fixed list, HTTP/HTTPS only | Two static anycast IPv4 addresses (four when dual-stack) |
| Caching | Yes — edge caches, TTLs, invalidations | None |
| Failover | Origin failover within a distribution | Near-instant health-based shift between Regions — no DNS change, no TTL wait |
| Typical triggers | “Cache content at the edge,” static assets, video, APIs behind a CDN | “Static IPs for firewall allowlists,” non-HTTP protocols (gaming, VoIP, MQTT), instant multi-Region failover |
The static-IP point deserves emphasis: because Global Accelerator's two anycast IPs never change, enterprise customers can allowlist them permanently — something a bare load balancer cannot offer. CloudFront now has opt-in Anycast Static IPs too, but that is a larger IP list for HTTP/HTTPS delivery only; Global Accelerator gives just two static IPv4 addresses (four on a dual-stack accelerator) for any TCP or UDP application and fails over between Regions. And because failover happens inside the accelerator rather than in DNS, there is no resolver cache to wait out. Read the scenario's nouns: “cache,” “content,” and “HTTP” point to CloudFront; “static IP,” “UDP,” and “instant regional failover” point to Global Accelerator. Some architectures legitimately use both — but never claim Global Accelerator accelerates cacheable content delivery; that is CloudFront's job.
Tip. Questions are scenarios that state a constraint and expect the feature whose behaviour satisfies it: alias versus CNAME at the zone apex and for query charges; TTL as the lever that governs how fast a record change propagates; inbound versus outbound Resolver endpoints by the direction of the query; authorize-then-associate for a private hosted zone in another account versus RAM sharing for Resolver rules; weighted, failover, latency, geolocation and multivalue routing by what each returns and whether it honours health checks; and CloudWatch-alarm health checks for endpoints Route 53 cannot reach directly. Query-logging questions turn on which side of the Resolver the traffic originates and on the us-east-1 log group. CloudFront questions probe OAC (including SSE-KMS key policies), behavior precedence, cache versus origin request policy, max-age versus s-maxage, invalidations versus versioned names, and origin failover limits; certificate questions hinge on us-east-1. CloudFront versus Global Accelerator comes down to caching HTTP content versus a small fixed set of static IPs for any TCP/UDP application with in-network regional failover. Diagnosing broken resolution and cache misses appears under Task 5.3.
- Alias records work at the zone apex, track their AWS target automatically, and are free to query when targeting AWS resources; CNAMEs cannot sit at the apex.
- Lower a record's TTL at least one old-TTL period before a cutover; lowering it at the moment of change leaves resolvers on the old answer.
- On-prem must resolve VPC names: inbound Resolver endpoint. VPCs must resolve on-prem domains: outbound endpoint plus forwarding rules.
- Cross-account private zones: owner authorizes, VPC owner associates (CLI/API). Resolver rules and Route 53 Profiles are shared through AWS RAM; endpoints are not.
- Simple routing cannot use health checks; weighted returns one record per response; multivalue returns up to eight healthy records.
- Private resources need a health check that monitors a CloudWatch alarm; Evaluate Target Health works only on alias records.
- Public DNS query logs go to CloudWatch Logs in us-east-1 under a resource policy; Resolver query logs cover queries from your VPCs and can go to S3 or Firehose.
- OAC plus a bucket policy scoped to the distribution ARN keeps S3 private; SSE-KMS also needs kms:Decrypt for CloudFront in the key policy.
- Cache behaviors match in precedence order; the cache policy sets key and TTLs, the origin request policy adds forwarded values, neither picks an origin.
- Prefer versioned object names over invalidations; origin groups fail over only GET, HEAD and OPTIONS requests.
- Custom-domain HTTPS on CloudFront: us-east-1 ACM certificate, alternate domain name, and an alias record to the distribution.
- Two static anycast IPs for any TCP/UDP app, or instant regional failover, means Global Accelerator; caching HTTP content means CloudFront (whose opt-in Anycast Static IPs are HTTP-only).
Frequently asked questions
Can I use a CNAME at the apex of my domain in Route 53?
No — DNS forbids a CNAME at the zone apex because it cannot coexist with the SOA and NS records that must live there. Route 53's answer is the alias record: it works at the apex, points directly at AWS resources like ALBs and CloudFront distributions, and queries to AWS targets are free.
What is the difference between geolocation and geoproximity routing?
Geolocation routes on where the user is — you map countries or continents to answers, which suits compliance and localized content, with a default record catching unmatched locations. Geoproximity routes on how close the user is to your resources and adds a bias value that expands or shrinks each resource's share, which suits deliberately shifting traffic between Regions.
How do on-premises servers resolve private DNS names in a VPC?
Create a Route 53 Resolver inbound endpoint, which places ENIs with fixed private IPs in your subnets, then configure the on-premises DNS servers to conditionally forward the AWS domains to those IPs over your VPN connection. For the reverse direction — VPC instances resolving on-premises names — use an outbound endpoint with forwarding rules.
How do I associate a private hosted zone with a VPC in another AWS account?
Use the authorize-then-associate flow: from the account that owns the private hosted zone, create a VPC association authorization for the other account's VPC, then from the account that owns the VPC, associate the VPC with the zone. Both steps use the AWS CLI, SDK or Route 53 API because the console cannot select another account's VPC. A private hosted zone is not shared through AWS RAM on its own; RAM shares Resolver rules and Route 53 Profiles.
How can Route 53 health-check a resource that only has a private IP address?
Route 53 health checkers run on the internet and cannot reach private IP addresses in a VPC. Instead, publish a metric that reflects the service's health, create a CloudWatch alarm on it, and create a Route 53 health check that monitors that alarm; attach the health check to the record, for example the primary failover record. Evaluate Target Health does not apply here, because it works only on alias records that target AWS resources such as load balancers.
Why must a CloudFront certificate be in us-east-1?
CloudFront is a global service that reads its custom-domain certificates from ACM in the us-east-1 Region only, regardless of where your origin, users, or other infrastructure live. Request or import the certificate there before attaching it to the distribution; a certificate in any other Region will not appear as an option.
When should I use Global Accelerator instead of CloudFront?
Use Global Accelerator when you need a small fixed set of static anycast IP addresses (two IPv4, or four on a dual-stack accelerator) for any application, for example for customer firewall allowlists; when the traffic is not HTTP — TCP or UDP workloads like gaming, VoIP, or MQTT; or when you need near-instant failover between Regions without waiting on DNS caches. If the goal is caching HTTP content close to users, that is CloudFront, which can also offer an opt-in list of Anycast Static IPs for HTTP/HTTPS delivery.
Why does CloudFront origin failover not protect POST requests?
CloudFront origin groups fail over only GET, HEAD and OPTIONS requests. Other methods, such as a POST submitting a form, are always sent to the primary origin, and if it fails the error goes back to the viewer. Failover for those requests has to come from the application tier or from multi-Region routing outside CloudFront.
Source
This lesson covers the "Networking and Content Delivery" domain of the official SOA-C03 exam guide. Vendors revise their guides — check the source for the current version.
- AWS Certified CloudOps Engineer – Associate (SOA-C03) exam guide — Amazon Web Services
Sign up free to mark lessons complete, bookmark topics and track your exam readiness.