Incident Library

IL-0363 Rust Project · 2023-01-25networking

static.crates.io did not resolve for 10-15 minutes during a Terraform deployment, so Rust builds could not fetch crates

The Rust infrastructure team manages its infrastructure with Terraform and had recently separated the staging and production environments of crates.io so that each can be deployed on its own. The staging environment was used to build and test a second CDN for static.crates.io, and the rollout to production was scheduled and announced for 25 January 2023. The production deployment carried two changes that had each been developed, deployed and tested separately on staging: a new TLS certificate for the current CDN and updated DNS records. In production, Terraform first deleted the current certificate and the DNS records, then spent about 10 minutes issuing the new certificate, during which static.crates.io had no DNS record, and only then recreated the records. The outage ended by itself when Terraform finished.

The team names two reasons the changes went out together. It was one of the first uses of the new environment tooling, which locks production to a specific Git commit, and the team set it to the latest commit on master as in the past, so several changes were applied at once. And production had drifted away from staging because changes were not deployed when they were merged, partly because the team was reluctant to deploy crates.io several times without announcing each change to the community first.

Severity
–
Scope
Name resolution of static.crates.io; builds failed because crates could not be downloaded
Users affected
–
Region
–
Time to detect
–
Time to resolve
25m

Symptoms

On 25 January 2023, shortly after a deployment to the crates.io production infrastructure at 09:15 UTC, the DNS record for static.crates.io failed to resolve for an estimated 10-15 minutes. Builds failed for users because crates could not be downloaded.

The record started to propagate again around 09:30 UTC and traffic was back to normal levels by 09:40 UTC. For some users the failures lasted a few minutes longer because of caches in their DNS servers.

Symptom DNS resolution failures

Root cause

Trigger
A Terraform deployment to production contained a new TLS certificate for the current CDN of static.crates.io and updated DNS records; Terraform removed the current certificate and DNS records first and recreated the records only after the new certificate had been issued.

Detection

–

Remediation

Action items

Lessons

Deploying the TLS certificate change and the DNS record change separately would have avoided the outage. Changes tested one at a time on staging need to reach production one at a time and in order, the production deploy process needs to be written down so it can be improved, and merged changes need to be deployed promptly so Git and production do not drift apart.

Sources

Related cases

Check your cluster for this

kubegap audits a Kubernetes cluster for conditions like the ones in this case, Terraform, Authoritative DNS servers and records, CDN and edge network among them, read-only, from Claude Code or Codex. Its checks cite public reports like this one.

For AI tools and scripts

The API needs no key. The MCP server offers search_incidents, get_incident, list_incidents, get_topic and vocab; both are explained on API and MCP.