{"id":"IL-0407","org":"Microsoft Azure","date":"2024-07-13","docs":["https://aka.ms/AIR/4L44-3F0","https://learn.microsoft.com/azure/ai-services/openai/how-to/business-continuity-disaster-recovery","https://learn.microsoft.com/en-us/azure/ai-services/openai/how-to/deployment-types"],"title":{"en":"Azure OpenAI returned 5xx errors in 14 of 28 regions after an automated cleanup deleted its GPU VMs and endpoints","ko":"정리 자동화가 Azure OpenAI 의 GPU VM 과 모델 엔드포인트를 지워 28개 지역 중 14곳에서 5xx 오류가 났다"},"domain":["azure","ai-infra"],"impact":{"scope":"Azure OpenAI endpoints in 14 of 28 regions returned errors such as 5xx until 23:35 UTC on 13 July; new Standard fine-tuned model deployments unavailable in four regions until 16:54 UTC on 15 July","users":"A subset of Azure OpenAI customers","region":"Australia East, Brazil South, Canada Central, Canada East, East US 2, France Central, Korea Central, North Central US, Norway East, Poland Central, South Africa North, South India, Sweden Central, UK South; fine-tuning also Switzerland West"},"review":{"written_by":"session","reviewed_at":null,"reviewed_by":null},"lessons":{"en":"Microsoft names the missing safe deployment step as the main gap in its change management: a configuration change delivered as a global content update could not be rolled out region by region, so a single change caused a multi-region incident. Resource groups that mixed resources the automation managed with resources it did not know had let the automation's configuration drift from what actually existed in the production subscription.","ko":"Microsoft 는 이 장애의 가장 큰 빈틈이 변경 관리 절차에 있었다고 밝혔다. 설정 변경이 전역 범위의 콘텐츠 업데이트로 나가서, 변경이 지역 하나씩 차례로 적용되게 통제하는 안전 배포 절차를 거치지 않았다. 그래서 한 번에 여러 지역이 무너졌다. 자동화가 관리하는 리소스와 모르는 리소스가 같은 리소스 그룹에 섞이면서 설정 파일과 실제 구독의 상태가 어긋났고, 이 어긋남 때문에 필요한 리소스까지 지워졌다. 고객에게는 주 지역이 내려갈 때를 대비해 여러 지역에 엔드포인트를 두라고 권했다."},"related":[],"sources":[{"url":"https://azure.status.microsoft/en-us/status/history/?trackingId=4L44-3F0","kind":"official-status","archived":"https://web.archive.org/web/20251114123542/https://azure.status.microsoft/en-us/status/history?trackingid=4L44-3F0"}],"summary":{"en":"Azure OpenAI uses an internal automation service to create and manage the Azure resources it needs: Azure GPU virtual machines that host the OpenAI large language models, and Azure Machine Learning workspaces whose managed online endpoints serve inference requests. The same automation orchestrates fine-tuned model deployments. The automation runs per region, but one global configuration file in a code repository defines the resources Azure OpenAI needs in every region. As the service grew very fast, several components started to use the same resource structure, and some resource groups came to hold both resources the automation managed and resources it did not know about. The configuration file listed 14 resource groups as holding only resources the service no longer needed, while they in fact held GPU compute VMs and model endpoints serving both the Pay-As-You-Go (PayGo) and Processing Throughput Unit (PTU) offers.\n\nDuring ongoing work to clean up unused resources, to stay within subscription limits and shrink the security attack surface, a change removed those 14 resource groups from the global configuration file. The change took effect soon after it was committed, and everything in the groups was deleted within a short time. Because the change shipped as a global content update, no safe deployment process gated it region by region, which made the incident multi-region. Engineers began stopping the automation at 01:00; the cleanup job stopped on its own at 01:40 without deleting everything, and at 02:00 resource locks were added and delete requests were blocked at the ARM and Automation levels.\n\nRebuilding started at 02:00 in parallel across the 14 regions. The models are very large and can only be moved over secure channels, and inside each model pool (one per region per model) deployments run one after another, so copying time was a large factor. Most models and regions had recovered by 10:20 and all base models by 23:35 UTC. GPT-4o needed manual reconfiguration of Azure Redis and Private Link with the Azure Redis and Azure Networking teams, and DALL-E needed manual work to add the managed identity between its frontend and backend to an allowlist. The automation that creates fine-tuning deployments was kept off over the weekend so it could not delete anything again; when it was turned back on on 15 July, fine-tuned deployments were restored by 16:54 UTC. The first Azure Status page post went out at 02:22, delayed by difficulty scoping the affected customers and gaps in the communications tooling. No retrieval-augmented generation (RAG) or fine-tuning model data was lost.","ko":"Azure OpenAI 는 내부 자동화 시스템으로 서비스에 필요한 Azure 리소스를 만들고 관리한다. 이 리소스에는 OpenAI 대형 언어 모델을 올린 Azure GPU VM 과, 백엔드 추론 요청을 처리하는 managed online endpoint 를 올린 Azure Machine Learning workspace 가 들어간다. 자동화 서비스 자체는 지역 서비스지만, 모든 지역의 리소스 상태는 코드 저장소에 있는 전역 설정 파일 하나로 정의했다. 서비스가 빠르게 커지면서 여러 구성 요소가 같은 리소스 구조를 쓰기 시작했고, 일부 리소스 그룹에는 자동화가 관리하는 리소스와 자동화가 모르는 리소스가 섞였다. 설정 파일은 리소스 그룹 14개에 더는 필요 없는 리소스만 있다고 적고 있었지만, 실제로는 서비스에 필요한 GPU VM 과 모델 엔드포인트가 그 안에 있었다.\n\nMicrosoft 는 구독 한도 문제를 풀고 공격 표면을 줄이려고 쓰지 않는 리소스를 정리하고 있었고, 그 작업의 하나로 전역 설정 파일에서 이 14개 리소스 그룹을 뺐다. 변경은 커밋 직후 적용됐고 그 안의 리소스가 짧은 시간에 모두 지워졌다. 변경은 전역 범위의 콘텐츠 업데이트로 나갔다. 그래서 변경이 지역 하나씩 차례로 적용되게 통제하는 안전 배포 절차를 거치지 않았고, 장애가 여러 지역으로 번졌다. 2024년 7월 13일 00:00 UTC 부터 28개 지역 중 14곳의 고객이 5xx 오류를 비롯한 문제를 겪었다.\n\n00:05 UTC 에 모니터링 알림이 울렸고, 01:00 UTC 에 엔지니어가 자동 정리 작업을 원인으로 찾아 그 자동화를 멈췄다. 정리 작업은 01:40 UTC 에 스스로 멈췄고 모든 것을 지우지는 않았다. 02:00 UTC 에 ARM 과 자동화 양쪽에서 리소스 잠금을 걸고 삭제 요청을 막은 뒤 지워진 리소스를 다시 만들기 시작했다. 복구는 오래 걸렸다. 모델이 매우 커서 보안 채널로만 옮길 수 있었고, 지역과 모델마다 있는 모델 풀 안에서는 배포가 하나씩 차례로 진행됐기 때문이다. 대부분의 모델과 지역은 10:20 UTC 에 돌아왔다. GPT-4o 와 DALL-E 는 손으로 다시 설정해야 했고, 모든 기본 모델은 23:35 UTC 에 복구됐다. 삭제를 막으려고 꺼 둔 자동화가 fine-tuning 배포 생성도 맡고 있어서, fine-tuned 모델 배포는 자동화를 다시 켠 7월 15일 16:54 UTC 에야 모든 지역에서 돌아왔다. RAG 나 fine-tuning 모델의 데이터 손실은 없었다."},"trigger":{"en":"A change to the global configuration file of the Azure OpenAI resource automation removed 14 resource groups that were thought to be unused, and the automation then deleted every resource in them.","ko":"Microsoft 는 쓰지 않는 리소스를 정리하는 작업의 하나로, 쓰지 않는다고 본 리소스 그룹 14개를 전역 설정 파일에서 뺐다. 이 변경은 커밋 직후 적용됐고, 그 리소스 그룹 안의 리소스가 짧은 시간에 모두 지워졌다."},"severity":"unknown","symptoms":["high-error-rate","resources-deleted"],"timeline":{"detected_after":"5m","resolved_after":"2d 16h 54m"},"date_kind":"incident","detection":{"en":"Service monitoring detected failure rates above the defined thresholds at 00:05 UTC and alerted engineers, five minutes after impact began.","ko":"서비스 내부 모니터링이 2024년 7월 13일 00:05 UTC 에 실패율이 정해 둔 기준을 넘었다고 엔지니어에게 알렸다. 영향이 시작되고 5분 뒤였다."},"components":["inference-server","capacity-manager"],"root_cause":"config-change","remediation":[{"text":{"en":"Stopped the automation that was running the cleanup","ko":"자동 정리 작업이 리소스를 지우는 것을 확인하고, 정리를 실행하던 자동화부터 멈췄다."}},{"text":{"en":"Added resource locks and blocked delete requests at the ARM and Automation levels","ko":"ARM 과 자동화 양쪽에서 리소스 잠금을 걸고 삭제 요청을 막아 더 지워지지 않게 했다."}},{"text":{"en":"Recreated the deleted resources, rebuilding the service in parallel across the 14 regions","ko":"지워진 리소스를 다시 만들기 시작했고, 14개 지역의 모델 풀을 병렬로 다시 세웠다."}},{"text":{"en":"Manually reconfigured Azure Redis and Private Link for GPT-4o with the Azure Redis and Azure Networking teams","ko":"GPT-4o 가 쓰는 REDIS 와 Private Link 를 Azure REDIS 팀, Azure Networking 팀과 함께 손으로 다시 설정했다."}},{"text":{"en":"Manually restored DALL-E, adding the managed identity between its frontend and backend to an allowlist","ko":"DALL-E 프론트엔드와 백엔드 사이의 Managed Identity 를 허용 목록에 추가해 DALL-E 를 복구했다."}},{"text":{"en":"Turned the automation back on on 15 July, which restored fine-tuning deployments","ko":"모든 것이 복구되고 안정된 7월 15일에 자동화를 다시 켰고, 이와 함께 fine-tuning 배포 기능이 돌아왔다."}}],"action_items":[{"text":{"en":"Make the configuration policy regional and follow Safe Deployment Practices for all later configuration updates","ko":"안전 배포 절차에 따라 이후의 모든 설정 업데이트가 지역 단위로 나가도록 설정 정책을 바꿨다. 문제가 있는 변경이 한 지역에 머물게 하려는 것이다."}},{"text":{"en":"Remove incorrect metadata tags on resources the automation must not manage and exclude them in the automation configuration","ko":"자동화가 관리하면 안 되는 리소스에 붙은 잘못된 메타데이터 태그를 지우고, 자동화 설정에서 그 리소스를 빼서 중요한 리소스를 실수로 지우지 않게 했다."}},{"text":{"en":"Concentrate the regional makeup of workloads in fewer regions","ko":"워크로드마다 걸치는 지역 수를 줄여, 비슷한 실수로 리소스가 지워져도 피해가 넓게 퍼지지 않게 했다."}},{"text":{"en":"Improve the automation that engages incident response personnel","ko":"장애 대응 인력을 더 빨리 불러 모으도록 장애 대응 호출 자동화를 고쳤다."}},{"text":{"en":"Investigate additional change management controls so that all production changes go through a gated safe deployment process (estimated completion August 2024)","ko":"운영 환경의 모든 변경이 단계마다 확인을 거쳐 나가는 안전 배포 절차를 따르도록 변경 관리 통제를 더 넣는 방안을 검토한다. 완료 예정은 2024년 8월이다."}},{"text":{"en":"Update the communications tooling with Azure OpenAI data so affected customers can be scoped and notified faster","ko":"영향받은 고객의 범위를 정하기 어려운 상황에서도 더 빨리 알릴 수 있도록 공지 도구에 Azure OpenAI 관련 데이터를 넣는다. 완료 예정은 2024년 9월이다."}},{"text":{"en":"Investigate additional test coverage and verification procedures to de-risk future configuration updates (estimated completion September 2024)","ko":"앞으로의 설정 업데이트 위험을 줄이려고 테스트 범위와 검증 절차를 더 늘리는 방안을 검토한다. 완료 예정은 2024년 9월이다."}},{"text":{"en":"Add active monitoring for each model family that does not depend on customer traffic","ko":"고객 트래픽에 기대지 않고 시스템 상태를 확인할 수 있도록 모델 계열마다 능동 모니터링을 더 만든다. 완료 예정은 2024년 9월이다."}},{"text":{"en":"Build out model pools with more parallelism to shorten recovery","ko":"복구 시간을 줄이려고 모델 풀을 세우는 작업의 병렬도를 높인다. 완료 예정은 2024년 12월이다."}}],"contributing":["no-staged-rollout","no-safeguard-on-destructive-change","assumption-unverified"],"recurrence_of":null,"symptoms_text":{"en":"From 00:00 UTC on 13 July 2024 a subset of Azure OpenAI (AOAI) customers got errors, such as 5xx responses, when calling their Azure OpenAI endpoints in 14 of the 28 regions that offer the service. Service monitoring saw failure rates cross their thresholds at 00:05 and alerted engineers.\n\nThe affected regions were Australia East, Brazil South, Canada Central, Canada East, East US 2, France Central, Korea Central, North Central US, Norway East, Poland Central, South Africa North, South India, Sweden Central and UK South. Impact grew as more regions became unhealthy: the deletion took 30 to 40 minutes to complete, so each region, and even each endpoint within a region, went offline at a different time.\n\nBy 00:30 engineers had correlated alerts, service metrics and telemetry dashboards and knew a multi-region issue was unfolding. At 00:45 they saw that backend endpoints were being deleted but not how or why, and on-call engineers followed two hypotheses. At 01:00 they identified the automated cleanup operation that was deleting the resources.\n\nIn four regions, East US 2, North Central US, Sweden Central and Switzerland West, new Standard (Pay-As-You-Go) fine-tuned model deployments were unavailable from 01:00 UTC on 13 July to 16:54 UTC on 15 July, and deleting a deployment might not take effect, while inference on models already deployed there kept working.","ko":"2024년 7월 13일 00:00 UTC 부터 Azure OpenAI 엔드포인트를 호출하는 일부 고객이 5xx 오류를 비롯한 문제를 겪었다. 00:05 UTC 에 서비스 모니터링이 실패율이 정해 둔 기준을 넘었다고 엔지니어에게 알렸다.\n\n영향은 Azure OpenAI 를 제공하는 28개 지역 가운데 14곳에서 나타났다. Australia East, Brazil South, Canada Central, Canada East, East US 2, France Central, Korea Central, North Central US, Norway East, Poland Central, South Africa North, South India, Sweden Central, UK South 였다.\n\n지역들은 한꺼번에 내려가지 않았다. 정리 작업이 지역마다 시작되면서 영향이 점점 넓어졌다. 삭제가 끝나기까지 30~40분이 걸렸기 때문에 내려간 시각은 지역마다 달랐고, 같은 지역 안에서도 엔드포인트마다 달랐다. 엔지니어는 00:30 UTC 에 알림과 서비스 지표와 텔레메트리 대시보드를 맞춰 보고 여러 지역에 걸친 장애라는 것을 알았다.\n\n00:45 UTC 에 엔지니어는 백엔드 엔드포인트가 지워지고 있다는 것을 알았지만, 어떻게 왜 지워지는지는 아직 몰랐다. 당직 엔지니어는 두 가지 가설을 놓고 조사했고, 01:00 UTC 에 자동 정리 작업이 리소스를 지우고 있다는 것을 찾았다.\n\n7월 13일 01:00 UTC 부터 7월 15일 16:54 UTC 까지 East US 2, North Central US, Sweden Central, Switzerland West 에서는 Standard Pay-As-You-Go fine-tuned 모델을 새로 배포할 수 없었고, 배포를 지우는 요청도 반영되지 않았을 수 있다. 이 지역들에서 이미 배포된 모델의 추론 엔드포인트는 계속 쓸 수 있었다."},"updated_at":"2026-11-14T12:34:05.778065Z","url":"https://benchlet.com/incidentlib/app/cases/IL-0407","org_slug":"microsoft-azure"}