Инфраструктура как код (IaC) для приложений на базе Java в Azure


Эволюция Java

За последние несколько лет экосистема Java эволюционировала: от монолитных Java EE-приложений, работающих на серверах приложений и Spring Framework, до современных микросервисов Spring Boot, MicroProfile и Jakarta EE. Сегодня все больше Java-разработчиков рассматривают вопрос о том, как перенести существующие Java-приложения в облако или как создать новые облачно-нативные приложения. Многие организации вкладывают значительные средства в перенос критически важных Java-приложений, работающих в локальных условиях, в полностью поддерживаемые среды для запуска этих приложений в облаке.

💁🏻В этой статье блога мы рассмотрим Java в Microsoft и в Azure и поймем, что Microsoft может предложить для модернизации существующих приложений на Java или создания новых с помощью хорошо известной практики Infrastructure as Code или IaC.

Java в Microsoft

Мы все знаем, что эволюция и основной фокус Microsoft сосредоточены на Windows с мышлением .NET. 

Я думаю, что для некоторых это стало сюрпризом, так как я был очень удивлен 😯 и у меня в голове была куча вопросов 😕 о том, как это получилось, что Java на Azure и почему Microsoft выбрала именно Java? Почему не использовать другие публичные облака, такие как AWS? Потому что в то время я был совершенно не знаком с Azure, так как привык к разработке, созданию и развертыванию приложений в экосистеме AWS. Возможно, одна из причин в том, что недавние исследования показали, что Java входит в тройку лучших языков среди ведущих мировых стартапов, и Java продолжает набирать популярность по данным RedMonk и PyPL ✊. 

AWS и Azure упорно работают на рынке уже много лет и уже некоторое время занимают первые места. Однако мы не собираемся отвечать на вопрос, который больше всего беспокоит людей — какого поставщика облачных услуг выбрать. В этой статье AWS vs Azure вы можете узнать больше о разнице.

Проведя небольшое расследование, я выяснил, что Microsoft активно поддерживает организации сообщества Java, чтобы помочь продвинуть будущее Java, включая постоянное развитие языка Java и JVM. Microsoft вносит непосредственный вклад в OpenJDK, а в настоящее время предоставляет сборки OpenJDK, начиная с Java 11 и 16, и обеспечивает поддержку этих двоичных файлов на Azure.

Нельзя забывать и о GitHub, где размещены миллионы репозиториев Java и предоставляется бесплатный CI/CD и сканирование уязвимостей не только для Java, но и для других популярных языков программирования.

Microsoft также публикует плагины для популярных Java IDE и DevTools, таких как Maven, IntelliJ и Eclipse, чтобы встретить Java-разработчиков там, где они находятся, и легче интегрировать их в рабочие процессы разработки.

И последнее, но не менее важное: более полумиллиона JVM работают в производственных продуктах и сервисах Microsoft. LinkedIn, например, в значительной степени полагается на Java. Бэкэнд Yammer также написан на Java. Подробнее об инструментах для Java-разработчиков вы можете прочитать в электронной книге 👉 Как Microsoft применяет Java. 

Java в Azure

Еще один сюрприз 😮 — предложения Azure для экосистемы Java, поскольку она включает в себя различные технологии, такие как Java SE, Jakarta EE (преемник Java EE и J2EE), Spring, многочисленные серверы приложений и другие фреймворки. Что бы вы ни делали с Java — создавали приложение, использовали фреймворк или запускали сервер приложений — Azure поддерживает вашу рабочую нагрузку, предлагая множество вариантов выбора и развертывания, включая инфраструктуру как услугу (IaaS) без реархитектуры или изменений кода, на которую можно переносить существующие приложения, контейнеры как услугу (CaaS) и полностью управляемую платформу как услугу (PaaS), например, Azure Spring Cloud, которая предоставляет управляемую платформу для размещения микросервисных приложений Spring Boot.

Для размещения Java-приложений можно использовать виртуальные машины или наборы масштабирования виртуальных машин. Масштабные наборы, в частности, позволяют очень быстро масштабировать приложения на сотни и тысячи виртуальных машин. Как мы все, вероятно, знаем, виртуальные машины требуют высокого уровня управления и конфигурации по сравнению с некоторыми другими вариантами.

Если ваша организация использует контейнеры, вы можете использовать службу Kubernetes в Azure, известную как AKS для Azure Kubernetes Service. Или вы можете использовать Azure Red Hat OpenShift, совместно управляемое и поддерживаемое предложение от Red Hat и Azure. С другой стороны, если ваша организация не хочет работать с виртуальными машинами или заниматься оркестровкой контейнеров, такие сервисы, как App Service, предоставляют управляемую платформу для развертывания кода или контейнеров.

Иногда вам не нужен целый микросервис на базе Java. Вы можете создавать бессерверные API с помощью Azure Functions. Например, функции Azure имеют множество встроенных коннекторов, таких как Azure Event Hubs, для обработки управляемого событиями Java-кода и отправки данных в Azure Cosmos DB в режиме реального времени. Проекты FedEx и UBS являются отличными примерами Java, управляемого событиями в реальном времени. Я также рекомендую вам ознакомиться с электронной книгой 👉 Code, Deploy, Scale Java your Way, чтобы узнать о других способах разработки современных Java-приложений на Azure.

Инфраструктура как код для облака

После того как вы решили перенести свою инфраструктуру в Azure Cloud и выбрали подходящую стратегию развертывания, следующая задача, которую вам предстоит решить, — это автоматическая инициализация ваших сервисов. Конечно, вы всегда можете развернуть свои службы вручную из Azure Portal или с помощью Azure CLI. Однако эти подходы не обеспечивают большой гибкости, когда речь идет о создании этапов выпуска, версионировании развертывания, обновлении, удалении и управлении всеми облачными ресурсами.

Облачные приложения обычно имеют отдельные среды развертывания для этапов жизненного цикла их выпуска. Обычно существуют среды разработки, постановки и производства. Эти среды состоят из множества ресурсов, таких как сетевые ресурсы: Виртуальная сеть (VNet), группы сетевой безопасности (NSG) или секретные ресурсы, вычислительные ресурсы, балансировщики нагрузки и базы данных.

Без инфраструктуры как кода (также называемой IaC) управление всеми этими ресурсами может быть неорганизованным и тонким процессом. Поскольку команда DevOps вручную подключается к удаленным облачным провайдерам и использует API или веб-панели для предоставления нового оборудования и ресурсов каждый раз, когда выходит новый релиз. Или же они могут вручную внести изменения в одну среду и забыть проследить за изменениями в другой. Так происходит дрейф среды. В этом случае вы можете рассмотреть возможность использования широко распространенной практики IaC.

Давайте кратко рассмотрим определение IaC:

Инфраструктура как код — это ИТ-практика, которая кодифицирует и управляет базовой ИТ-инфраструктурой как программным обеспечением. Цель инфраструктуры как кода — дать возможность разработчикам или операционным командам автоматически управлять, контролировать и предоставлять ресурсы, а не настраивать вручную отдельные аппаратные устройства и операционные системы. Инфраструктуру как код иногда называют программируемой или программно-определяемой инфраструктурой.

Встроенная поддержка IaC в Azure

Azure обеспечивает встроенную поддержку IaC через модель Azure Resource Manager. Команды могут определять декларативные шаблоны ARM, которые определяют инфраструктуру, необходимую для развертывания решений.

Аналогичным образом, сторонние платформы Terraform, Ansible, Chef и Pulumi также поддерживают IaC для управления автоматизированной инфраструктурой.

Определение облачной инфраструктуры только с помощью шаблонов ARM может быть довольно сложной задачей. Особенно, если ваши ресурсы часто обновляются, а различные среды используют разный набор ресурсов (настройка развертывания для каждой среды), и вы хотели бы установить пользовательскую проверку времени выполнения ваших ресурсов. В этом случае возникает необходимость в новом инструменте, который значительно упростит процесс задания инфраструктуры в Java-коде более высокого уровня с использованием лучших практик разработки программного обеспечения и управления низкоуровневыми моделями ARM через клиентские API HTTP, скрывая внутреннюю сложность. Решение может поддерживать параметризацию, а разработчики сервисов определять параметры для ресурса только в коде и предлагать функцию наблюдаемости по умолчанию.

Azure предлагает Azure SDK с открытым исходным кодом для Java, который упрощает предоставление, управление и использование ресурсов Azure из кода приложений Java. Для реализации инфраструктуры как кода на Java можно использовать библиотеки управления Azure Java SDK. С помощью библиотек управления можно писать сценарии конфигурации и развертывания для выполнения тех же задач, что и через портал Azure или Azure CLI. Существует множество примеров использования этой библиотеки, вы можете ознакомиться с ними на GitHub repo ARM sample client library for the Java.

Библиотека Java может автоматически синхронизировать новые изменения, когда шаблоны ARM представляют новые функции Azure, как только они выходят, без необходимости внесения изменений в код, поскольку специальная команда работает над их регулярной настройкой, чтобы распознавать последние изменения в Azure или пропущенные обновления, связанные с безопасностью.

Пример IaC клиентской библиотеки Java

Предположим, что вы создаете свою бессерверную функцию с помощью Java, тогда вы можете автоматизировать развертывание с помощью библиотеки. Или использовать другие варианты развертывания через CLI, IntelliJ Idea, Azure Portal и VS Code.

Посмотрите на следующий пример кода, как легко создать Azure Function App на Java вместе со всеми необходимыми зависимостями, такими как учетная запись хранилища и план обслуживания приложений:

Creatable<StorageAccount> creatableStorageAccount = azure.storageAccounts()
    .define("<storage-account-name>")
    .withRegion(Region.US_EAST)
    .withExistingResourceGroup(rgName)
    .withGeneralPurposeAccountKindV2()
    .withSku(StorageAccountSkuType.STANDARD_LRS);
Creatable<AppServicePlan> creatableAppServicePlan = azure.appServicePlans()
    .define("<app-service-plan-name>")
    .withRegion(Region.US_EAST)
    .withExistingResourceGroup(rgName)
    .withPricingTier(PricingTier.STANDARD_S1)
    .withOperatingSystem(OperatingSystem.LINUX);
FunctionApp linuxFunctionApp = azure.functionApps().define("<function-app-name>")
    .withRegion(Region.US_EAST)
    .withExistingResourceGroup(rgName)
    .withNewLinuxAppServicePlan(creatableAppServicePlan)
    .withBuiltInImage(FunctionRuntimeStack.JAVA_8)
    .withNewStorageAccount(creatableStorageAccount)
    .withHttpsOnly(true)
    .withAppSetting("WEBSITE_RUN_FROM_PACKAGE", "<function-app-package-url>")
    .create();
Вход в полноэкранный режим Выход из полноэкранного режима

Библиотека Java поддерживает почти все службы Azure. Полный их список можно посмотреть здесь. Вы можете выбрать использование пакета single-service для каждого сервиса и просто импортировать его в ваш, скажем, Maven POM файл.

Если вы хотите использовать Azure Active Directory для управления потоком аутентификации, вы можете сделать это и с помощью Java-кода, просто добавив пакет.

<dependency>
  <groupId>com.azure</groupId>
  <artifactId>azure-identity</artifactId>
  <version>{LATEST_VERSION}</version>
</dependency>
Вход в полноэкранный режим Выход из полноэкранного режима

Заключение

С помощью IaC вы автоматизируете предоставление платформы. По сути, вы применяете методы программной инженерии, такие как тестирование и версионирование, в своей практике DevOps. Такие инструменты, как клиентская библиотека клиента управления Azure для Java, позволяют вам декларативно создавать сценарии необходимой вам облачной инфраструктуры. Кроме того, вы можете плавно и уверенно масштабировать свои Java-приложения на Azure, включая такие необходимые аспекты, как безопасность, поддержка данных и служб обмена сообщениями, кэширование, мониторинг и автоматизация.

Связанные ресурсы

➔ Что такое инфраструктура как код (IaC)?

➔ Code, Deploy, Scale Java your Way.

➔ Как Microsoft применяет Java.

Рекомендуемый контент 💁

➔ Смотрите видеоурок:

  • Облачно-нативная разработка на Java в Visual Studio Code.

  • JDConf 2022.

  • Azure Spring Apps.

➔ Читайте статьи в блогах:

  • Microsoft for Java Developers Blog.

Оцените статью
devanswers.ru
Добавить комментарий