Azure CLI против Powershell?

Не совсем в состоянии понять достоинства интерфейса командной строки Azure в среде Windows.

Предназначен ли он для аудитории, которая хочет управлять Azure IAAS из среды Linux?

Я думал, что ядро Powershell будет подходить для администраторов не-Windows. Разве Powershell Core не будет хорошо перенесен на все платформы для обслуживания кроссплатформенной аудитории?

Короче говоря, стоит ли изучать интерфейс командной строки Azure?

12 ответов

Решение

Azure CLI - это PowerShell-подобный инструмент, доступный для всех платформ. Вы можете использовать те же команды независимо от того, какую платформу вы используете: Windows, Linux или Mac.

Сейчас есть две версии Azure CLI. Azure CLI 1.0 был написан с Node.js для достижения кроссплатформенных возможностей, а новый Azure CLI 2.0 написан на Python, чтобы предложить лучшие кроссплатформенные возможности. Оба с открытым исходным кодом и доступны на Github. Однако пока только некоторые командлеты PowerShell поддерживают использование в Linux.

Предназначен ли он для аудитории, которая хочет управлять Azure IAAS из среды Linux?

Я думаю, что ответ - да. Я думаю, что для разработчиков Linux или Mac они чаще используют Azure CLI.

И CLI Azure, и пакет PowerShell используют REST API Azure.

Как сказал один из наших контактов с Microsoft: используйте то, что вам нравится, и вы предпочитаете.

Есть несколько плюсов для Azure CLI:

  1. Открытый исходный код - который имеет много преимуществ. Это может развиваться быстрее в будущем. Вы можете посмотреть, что на самом деле есть в Кодексе, сообщество может или будет больше, и так далее.
  2. Azure CLI можно использовать с Groovy, Python, Ruby или любым другим языком сценариев. Легче найти хороших разработчиков для этих языков, чем опытного разработчика PowerShell. Например: я взял Groovy из-за Java. Эту комбинацию легче использовать, чем изучать сценарии PowerShell....

В настоящее время есть один действительно большой плюс для PowerShell: существует огромное хранилище примеров скриптов PowerShell для Azure. НО: часто вам приходится делать это самостоятельно, чтобы соответствовать вашим требованиям - поэтому пример может быть хорошей отправной точкой - иногда легче начать с нуля.

Моя рекомендация: используйте Azure CLI -> для написания сценариев используйте язык, с которым знакома ваша компания.

Просто хотел добавить свой опыт работы с Azure Cli и Az PowerShell.

Согласно 2019, оба являются кроссплатформенными, поэтому это должен быть только языковой / синтаксический вариант, но в Azure Cli все / большинство команд являются идемпотентными.

В итоге я заменил все свои шаблоны ARM скриптами Azure Cli, так как он стал менее подробным и простым для чтения.

В Az Powershell вам все еще нужно проверить, существует ли ресурс, прежде чем создавать его, иначе он выдаст исключение, поэтому сценарии могут стать очень сложными без всякой причины.

Мы используем Azure Cli и Az Powershell вместе с Azure DevOps. Команду Azure Cli можно выполнять только из сценариев bash (Linux) или bat (Windows). Так что это не оптимально...

  • Мы разворачиваем ресурсы с помощью Azure Cli, потому что его легко читать, а команды являются идемпотентными.
  • Для сложных сценариев я предпочитаю использовать PowerShell, так как есть много полезных языковых функций.

PowerShell имеет ряд существенных преимуществ перед CLI:

  • PowerShell - это язык Функций Azure. Таким образом, вы можете легко написать модуль или код и отправить его в защищенную функцию Azure. CLI не поддерживается языком.
  • То же самое и с модулями Runbook для автоматизации Azure, тогда как интерфейс командной строки не поддерживается.
  • Если вы хотите организовать гибридную рабочую нагрузку, охватывающую локальную среду и облако, то есть развернуть Службу на Windows Server, а затем развернуть конечную точку в Azure для взаимодействия с ней, PowerShell может, а CLI - нет).
  • Если вы хотите инвестировать в один язык, который может вызывать устаревшие модули для управления, PowerShell может, а CLI - нет.
  • Если вы хотите создать свою собственную DLL на C# или любом другом языке и включить ее в свои сценарии. Мне пришлось перепроектировать библиотеки DLL и обернуть их в PowerShell для включения в оркестровки.
  • Я добился гораздо большего успеха в расширении конвейеров DevOps с помощью PowerShell, чем CLI.
  • PowerShell имеет очень хорошую поддержку многопоточных рабочих нагрузок для таких сценариев, как модульное и дымовое тестирование Azure и крупные параллельные развертывания Azure (помимо параллельных задач DevOps, которые становятся неуклюжими). ТБХ, мне неизвестна встроенная многопоточность в Azure CLI.
  • Я могу разработать модуль, использовать его во всех вышеперечисленных сценариях, а затем передать его конечному клиенту; TBH, я не верю, что смогу сделать это для CLI (создать модуль, поставить цифровую подпись и затем создать дистрибутив nuget feed).

Я почти ничего не написал в PowerShell, тогда как с помощью CLI я могу делать что-то, но не другие. Мои навыки PowerShell сохранялись актуальными уже более 10 лет, когда я занимался корпоративными SharePoint, Dynamics, теперь Office и Azure... так что я предвзято.

Powershell не был доступен на платформе, отличной от Windows, до 2018 года. Начиная с января 2018 года, Powershell доступен на платформах MacOS и Linux.

Инструкции по установке Powershell на MacOS или Linux доступны здесь

PowerShell тоже с открытым исходным кодом. Microsoft только что выпустила модуль PowerShell Azure Az (декабрь 2018 г.), который использует ядро ​​.Net. Так что он работает на Linux,Mac OS и Windows. CLI Azure все еще существует для разработчиков Linux, если это предпочтительнее.

Поскольку это часто задаваемый вопрос в сообществе, недавно в документацию была добавлена ​​статья, посвященная сходствам, различиям и нюансам между различными параметрами командной строки Azure: Выберите правильный инструмент командной строки Azure . Этот документ также должен ответить на большинство ваших вопросов.

Когда дело доходит до управления Azure, у вас есть много вариантов. Хотя Azure CLI, Azure PowerShell и Azure Cloud Shell имеют перекрывающиеся функции, каждый из них работает по-разному, а язык иногда путают со средой.

Azure CLI и Azure PowerShell: Azure CLI и Azure PowerShell — это инструменты командной строки, которые позволяют создавать ресурсы Azure и управлять ими. Хотя оба являются кроссплатформенными и могут быть установлены в Windows, macOS и Linux, Azure CLI работает в Windows PowerShell, Cmd или Bash и других оболочках Unix, тогда как для Azure PowerShell требуется Windows PowerShell или PowerShell.

Различные среды оболочки: Windows PowerShell, PowerShell, Cmd и Bash являются средами оболочки. Среда вашей оболочки не только определяет, какие инструменты вы можете использовать, но и изменяет ваш опыт работы с командной строкой.

      Shell Environment | Azure CLI | Azure PowerShell |
------------------|-----------|------------------|
Cmd               | Yes       |                  |
Bash              | Yes       |                  |
Windows PowerShell| Yes       | Yes              |
PowerShell        | Yes       | Yes              |

Использование инструмента командной строки Azure не всегда необходимо, но это полезный навык. Вот несколько ключевых факторов, которые следует помнить при выборе инструмента командной строки:

  • При выборе правильного инструмента учитывайте свой прошлый опыт и текущую рабочую среду.
  • Синтаксис Azure CLI аналогичен синтаксису сценариев Bash. Если вы работаете в основном с системами Linux, Azure CLI кажется более естественным.
  • Azure PowerShell — это модуль PowerShell. Если вы работаете в основном с системами Windows, Azure PowerShell подойдет вам идеально. Команды следуют схеме именования глагол-существительное, а данные возвращаются в виде объектов.
  • Имейте в виду, что паритет функций для служб Azure не всегда существует между Azure CLI и Azure PowerShell.
  • Выберите инструмент, который использует ваш опыт и сокращает кривую обучения. Используйте другой инструмент, когда это имеет смысл.
In a nutshell, is it worth learning Azure CLI?

Я заметил, что во время обучения MS Azure (основы AZ-900 и AZ-303 Azure Architect) упражнения выполняются в Azure CLI. Конечно, все они "копируют и вставляют этот код", но похоже, что MS предпочитает CLI над PowerShell, по крайней мере, в учебных целях.

Необязательно, вы будете использовать Azure CLI в Linux, вы также можете использовать его в Windows, и он работает довольно хорошо =D

На мой взгляд, это зависит от того, чем вы хотите заниматься. Я предпочитаю работать с командами Azure CLI вместо Azure CMDLETS. Но я все еще использую PowerShell в качестве языка программирования для скриптов.

Некоторые модули в интерфейсе командной строки более "прямые", чем командлеты AZ или AzRM.

Я использовал и Az Powershel, и cli, но когда документы неоднозначны или команды не поддерживаются, я настоятельно рекомендую пропустить оба варианта и перейти к Azure Rest API.

API Azure Rest обычно вызывается другими инструментами командной строки, поэтому в конечном итоге он является наиболее полнофункциональным и в целом хорошо документированным. Это тоже кроссплатформенность.

Самое сложное — это разобраться с авторизацией. Из powershell я обычно использую что-то вроде этого формата, но при необходимости конвертирую в curl+cli или помещаю в веб-приложение. Вот случайный пример:

      $azContext = Get-AzContext
$subscriptionId = $azContext.Subscription.Id
$azProfile = [Microsoft.Azure.Commands.Common.Authentication.Abstractions.AzureRmProfileProvider]::Instance.Profile
$profileClient = New-Object -TypeName Microsoft.Azure.Commands.ResourceManager.Common.RMProfileClient -ArgumentList ($azProfile)
$token = $profileClient.AcquireAccessToken($azContext.Subscription.TenantId)
$authHeader = @{
    'Content-Type'='application/json'
    'Authorization'='Bearer ' + $token.AccessToken
}     
  
$uri = "https://management.azure.com/subscriptions/$subscriptionId/resourceGroups/$rg/providers/Microsoft.Web/sites/$site/config/web?api-version=2022-03-01"
$Body = @{      
    "properties" = @{netFrameworkVersion = "v6.0"}
}
$Params = @{
    Uri = $uri
    Headers = $authHeader
    Method = "PUT"
    Body = $Body | ConvertTo-Json -Depth 10
}
$response = Invoke-RestMethod @Params
$response.properties.netFrameworkVersion

Оба варианта предпочтительнее, потому что мы можем использовать любой из них для написания скриптов. В случае Powershell или Azure CLI вам необходимо загрузить программное обеспечение для написания сценариев, но Powershell более предпочтителен, поскольку это встроенный инструмент Microsoft. Но я также заметил, что отдавать команды через Powershell сложнее, если сравнивать с командной строкой.

по этой теме есть статья от MS со следующими отрывками:

Равенство функций для служб Azure не всегда существует между Azure CLI и Azure PowerShell.

При выборе подходящего инструмента учитывайте свой прошлый опыт и текущую рабочую среду.

Если вы работаете в основном с системами Windows, Azure PowerShell вам подойдет. Команды следуют схеме именования глагол-существительное, и данные возвращаются как объекты. Если вы работаете в основном с системами Linux, Azure CLI кажется более естественным.

Выберите инструмент, который использует ваш опыт и сокращает время обучения.

Другие вопросы по тегам