LocalStack разместил свой эмулятор Azure в общедоступной предварительной версии, бесплатной и самообслуживаемой, общедоступная версия которого ожидается в начале 2027 года. В ее собственной документации откровенно говорится о разрыве между эмуляцией ресурса и эмуляцией его поведения.
Продукт запускает службы Azure на компьютере разработчика и принимает существующие шаблоны ARM и Bicep, модули Terraform, программы Pulumi и сценарии Azure CLI без переписывания. Цель состоит в том, чтобы тестировать приложения, как говорит LocalStack, «не дожидаясь подписки для разработчиков и не платя за каждую итерацию». Список услуг обширен и включает AKS, контейнерные приложения, функции, службу приложений, Cosmos DB, служебную шину, концентраторы событий, хранилище ключей, конфигурацию приложений, управляемое удостоверение, управление API и многое другое, и он шире, чем предполагает само объявление. Каждый разработчик получает изолированную песочницу, и LocalStack позиционирует ее для разработки и тестирования, а не как замену Azure.
Проект возглавляет Паоло Сальватори, который в течение 28 лет работал руководителем Microsoft, прежде чем присоединиться к LocalStack, и создателем Service Bus Explorer. Он устанавливает контракт верности в одну строку:
Если ваше решение отлично работает в Azure, но не работает в нашем эмуляторе, нам нужно исправить эту ошибку.
Документация охватывает 24 поставщика ресурсов и сообщает, какая часть каждого API реализована. Учетные записи хранения охватывают 13 из 81 операций. Служба приложений охватывает 143 из 616. Виртуальная сеть охватывает 10 из 29.
Более полезная модель — это то, что происходит с реализованными операциями. Конфигурация часто принимается, сохраняется и возвращается без вступления в силу. В службе приложений:
Ключи, ограничения доступа, настройки аутентификации и политики учетных данных публикации не применяются принудительно.
На той же странице записано, что httpsOnly не применяется принудительно, и эмулятор обслуживает HTTP, что настраиваемые привязки имени хоста сохраняются и перечисляются, в то время как приложение отвечает только на свои имена по умолчанию, что интеграция виртуальной сети сохраняется и возвращается без влияния на сеть, и что конфигурация резервного копирования сохраняется, пока резервное копирование и восстановление не реализованы.
Сеть следует этому примеру. На странице виртуальной сети прямо указано, что «эмулятор не маршрутизирует сетевой трафик и не применяет правила безопасности», что пиринг не поддерживается и что VPN-шлюзы, каналы ExpressRoute, балансировщик нагрузки, шлюз приложений и наблюдатель за сетями не реализованы. Частные зоны DNS принимают только записи A.
Несколько расхождений в хранилище связаны с аутентификацией. Запросы плоскости данных с токеном-носителем выполняются всякий раз, когда токен присутствует, если не включено принудительное применение RBAC. SAS делегирования пользователя не проверяет повторно RBAC участника при его использовании. SAS, ограниченный общедоступным IP-адресом вызывающего абонента, отклоняется, поскольку эмулятор видит Docker или адрес обратной связи. Неподдерживаемые заголовки запросов скорее принимаются, чем отклоняются, а x-ms-version заголовок вообще не проверяется.
Это обещание касается кода, который выполняется в Azure и дает сбой локально. Документированные пробелы в основном описывают обратное: приложение с httpsOnly set здесь обслуживает HTTP, и запрос плоскости данных, несущий любой токен-носитель, проходит. Оба проходят локально, и ничто в ходе выполнения не указывает на разницу.
Три поведения удивят людей раньше, чем что-либо из этого. Веб-приложение, созданное по плану Windows, запускает свой код в среде выполнения Linux. Образ сборки Oryx поставляется только для amd64, поэтому в Apple Silicon сборка развертывания кода завершается сбоем, и приложение запускается без зависимостей. Состояние службы приложений хранится в памяти и теряется при остановке эмулятора.
Собственный локальный инструментарий Microsoft уже и старше. Azurite эмулирует хранилище BLOB-объектов, очередей и таблиц, эмулятор Cosmos DB охватывает эту базу данных, а основные инструменты Azure Functions запускают функции локально. Ни один из них не объединяется в единую среду, где развертывание ARM или Bicep может быть реализовано комплексно, и именно этот пробел стремится заполнить LocalStack.
LocalStack также предлагает агентам ИИ «песочницу», где они могут «развертывать, ломать и повторять попытки» без действующих учетных данных. Агент, выполняющий итерацию, получает ограничения доступа, которые сохраняются, а не применяются, и принимается любой токен носителя. Оба возвращаются как пропуски.
Функции взаимодействия с разработчиком, включая App Inspector, снимки и API хаоса, не доступны в предварительной версии. Цены достигаются при общедоступной версии, и на этом доступ к предварительной версии заканчивается. Условия перехода не урегулированы: на странице продукта все еще отображается “[30 days]” как буквальный заполнитель и незаполненный раздел следующих шагов.