DevOpsの効率化:Azure CLIをCI/CDパイプラインに統合する
By Mirko Peters ·
変化の速いモダンなソフトウェア提供の世界では、効率とスピードがすべてです。開発チームが継続的インテグレーション/継続的デプロイ(CI/CD)を採用するにつれ、軽量で信頼性が高く、クロスプラットフォームで動作する自動化ツールの必要性はかつてないほど高まっています。一時的なステージング環境を立ち上げる場合も、Infrastructure as Code をデプロイする場合も、マイクロサービスを構成する場合も、パイプラインのツールは迅速かつ一貫して実行される必要があります…
Automatically translated with AI from the original post. Read the English original
変化の速いモダンなソフトウェア提供の世界では、効率とスピードがすべてです。継続的インテグレーションと継続的デプロイ(CI/CD)の採用が進むにつれ、軽量で信頼性が高く、クロスプラットフォームで動作する自動化ツールの必要性はこれまでになく重要になっています。一時的なステージング環境を立ち上げる場合も、Infrastructure as Code をデプロイする場合も、マイクロサービスを構成する場合も、パイプラインのツールは迅速かつ一貫して実行される必要があります。
Azure CLI の出番です。シンプルさ、速度、クロスプラットフォームでの実行を重視して設計されており、DevOpsのワークフローを効率化したいクラウドエンジニアにとって定番のツールになりつつあります。この記事では、Azure CLI が最新のデプロイパイプラインで優れている理由、他の管理ツールとの比較、そしてCI/CDプロセスへのシームレスな統合方法を解説します。
この詳細解説を気に入っていただけたら、関連するポッドキャストエピソードAzure CLI vs PowerShell: Which Should You Use?もぜひお聴きください。Microsoftの主力クラウド管理インターフェイスの間にある明確な違いを掘り下げています。
CI/CDにおけるAzure CLIの紹介
継続的インテグレーションと継続的デプロイのパイプラインでは、重いオーバーヘッドなしに最小限のコンテナ環境で動作するツールが必要です。従来、自動化スクリプトは特定のOSに強く依存しており、ローカルの開発マシン、ビルドエージェント、本番クラスターの間で移行する際に摩擦が生じていました。モダンなDevOpsでは、Windows、MacOS、Linuxで完全な互換性を提供するツールへの移行が求められています。
Azure CLI は、こうした要件に真正面から応えます。JSONをデフォルトで出力するスクリプトに適したすっきりしたコマンド構造により、開発者や自動化エージェントは少ない手間でクラウドリソースの照会、作成、変更を行えます。GitHub Actions、GitLab CI、Azure DevOpsなどのCI/CDパイプラインに組み込むと、Azure CLI は抽象的なデプロイ手順を、再現可能で決定論的なコードに変えます。
モダンなパイプラインにAzure CLIを選ぶ理由
モダンなCI/CDアーキテクチャを設計する際、一秒一秒が重要です。ビルドエージェントはコンピューティングリソースを消費し、デプロイのキューが長引くと開発のスピードが止まってしまいます。Azure CLI は、こうした高速な環境向けに特に最適化されています。内部のアーキテクチャが軽量なREST呼び出しに依存しているため、実行は非常に高速でリソース効率にも優れています。
さらに、コンテナ化されたビルドエージェントは、機能を削ぎ落としたLinuxイメージで動作することがよくあります。大きな依存関係をインストールすると、パイプラインの起動時間が長くなります。Azure CLI のフットプリントの小ささと簡単なインストール方法は、Dockerベースの CI/CD ランナーに最適なパートナーです。リモートのビルドサーバーが実行するものと同じシェル環境でデプロイスクリプトをローカルでテストでき、「自分のマシンでは動く」という種類のバグを大幅に減らせます。
Azure CLI と PowerShell の簡単な比較
クラウド管理では、Azure CLI と PowerShell のどちらを選ぶかがよく議論になります。どちらのツールも非常に強力ですが、想定するユーザー像や運用パターンはまったく異なります。Azure CLI が CI/CD パイプラインで選ばれることが多い理由を理解するには、両者を並べて比べてみるのが近道です。
| シナリオ | 最適なツール | 特長 |
|---|---|---|
| 迅速なリソースのデプロイ | Azure CLI | 高速で軽量、シンプルなコマンド、どのプラットフォームでも動作し、DevOpsやスクリプト作成に最適。 |
| エンタープライズ自動化 | PowerShell | 複雑な自動化、オブジェクトベースの出力、一括操作を処理でき、Windowsとの統合にも強い。 |
| CI/CD パイプラインの統合 | Azure CLI | 高レベルのコマンド、Infrastructure as Code のネイティブサポート、簡単なパイプライン設定。 |
| 高度なスクリプト作成 | PowerShell | 柔軟なスクリプト作成、ツール開発、Azure リソースへの深い制御。 |
| クロスプラットフォーム管理 | Azure CLI | Linux、MacOS、Windows で動作し、Python で構築されており、多様な環境に最適。 |
PowerShell は、重いオブジェクト指向の管理タスクや深いWindows統合で優れていますが、コンテナ化されたパイプラインでは Azure CLI が有利です。シンプルなテキスト出力、軽量な一括操作の実行速度の速さ、そしてネイティブな Bash 互換性があるためです。
Azure CLI のインストールと構成
Azure リソースのクラウド インフラストラクチャを自動化する前に、デプロイ環境で Azure CLI が正しくインストールされ、認証されていることを確認する必要があります。幸い、インストールはオペレーティング システムに関係なく簡単です。
ローカル マシンや、Windows を実行するビルド エージェントの仮想マシンをセットアップする場合は、PowerShell を使って CLI をインストールできます:
Invoke-WebRequest -Uri https://aka.ms/installazurecliwindows -OutFile .\AzureCLI.msi; Start-Process msiexec.exe -Wait -ArgumentList '/I AzureCLI.msi /quiet'; rm .\AzureCLI.msiLinux ベースの CI/CD ランナー (標準的な Ubuntu の GitHub Actions ランナーなど) では、Microsoft のパッケージ リポジトリを使えば 1 ステップでインストールできます。また、Azure CLI がデフォルトで含まれている、事前インストール済みのランナー環境を利用することもできます。インストールしたら、次のコマンドを実行するだけで確認できます:
az --versionパイプラインの認証では、対話型のブラウザー ログインは避けてください。代わりに、サービス プリンシパルまたはマネージド ID を使って安全に認証するようにパイプラインを構成します:
az login --service-principal -u $AZURE_CLIENT_ID -p $AZURE_CLIENT_SECRET --tenant $AZURE_TENANT_IDAzure CLI の基本構文とコマンド
Azure CLI の魅力は、直感的で予測しやすい構文にあります。すべてのコマンドは az で始まり、リソース グループまたはサービス、最後に実行したい操作が続きます。このフラットなコマンド構造のおかげで、パイプライン スクリプトの作成と読解が非常に簡単になります。
クラウドの自動化でよく使われる基本的なコマンドをいくつか紹介します:
# Create a resource group
az group create --name MyPipelineResourceGroup --location eastus
# List all virtual machines in a table format
az vm list --output table
# Deploy an ARM or Bicep template
az deployment group create --resource-group MyPipelineResourceGroup --template-file azuredeploy.jsonAzure CLI のコマンドは、デフォルトで整形された JSON ペイロードを返します。そのため、組み込みの JMESPath 式 (--query) で特定のプロパティを簡単に抽出し、その値を CI/CD ワークフローの後続ステップに渡すことができます。
Azure CLI を使ったデプロイの自動化
自動化は DevOps の中核です。Azure にアプリケーションをデプロイする際は、Azure ポータルでの手作業に頼りたくないはずです。デプロイ ロジックを Azure CLI スクリプトにまとめることで、開発、ステージング、本番の各環境で完全な一貫性を確保できます。
新しい Azure App Service をプロビジョニングし、構成設定を更新して、main ブランチへのマージのたびにコードをデプロイする必要があるとします。Azure CLI を使った自動化スクリプトがあれば、これは簡単に実現できます:
# Create an App Service plan
az appservice plan create --name MyPlan --resource-group MyResourceGroup --sku B1 --is-linux
# Create the web app
az webapp create --name MyAppService --resource-group MyResourceGroup --plan MyPlan --runtime "NODE:18-lts"
# Configure environment variables
az webapp config appsettings set --name MyAppService --resource-group MyResourceGroup --settings DATABASE_URL="Server=tcp:myServer.database.windows.net..."
これらのコマンドは冪等であるため、複数回実行してもインフラストラクチャが壊れることはありません。むしろ、対象の環境が目的の構成状態と一致し続けることが保証されます。
Azure CLI を CI/CD パイプラインに統合する
Azure CLI のコマンドを GitHub Actions や Azure DevOps パイプラインなどの一般的な CI/CD オーケストレーターに統合するのは、非常に簡単です。パイプライン エージェントは通常シェル スクリプトを実行するため、標準の `az` コマンドをワークフローの構成ファイルに直接記述できます。
次に、Azure にログインして Web アプリケーションをデプロイする、GitHub Actions ワークフロー ファイルのスニペットの例を示します:
name: Deploy to Azure
on:
push:
branches: [ main ]
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Azure Login
uses: azure/login@v1
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
- name: Deploy Azure Resources
run: |
az group create --name ProdRG --location eastus
az deployment group create --resource-group ProdRG --template-file infra/main.bicep
公式のランナー アクションと生の Azure CLI コマンドを組み合わせることで、コードの変更のたびにシームレスに実行される、堅牢で監査可能な自動デプロイ パイプラインを構築できます。
Azure CLI で DevOps を効率化するためのベスト プラクティス
Azure CLI の自動化を最大限に活用し、CI/CD パイプラインを安全かつ高速に保つために、実績のあるベスト プラクティスに従ってください:
- シークレットをハードコードしない: サービス プリンシパルの資格情報、接続文字列、API キーは、必ず CI/CD プラットフォームの安全なシークレット管理機能 (GitHub Secrets や Azure DevOps の変数グループなど) に保存してください。
- CLI のバージョンを固定する: クラウド環境は急速に変化します。パイプラインで予期しない破壊的変更が起きないように、ビルド エージェントが使用する Azure CLI のバージョンを明示的に定義してください。
- JSON クエリを活用する: 外部の正規表現や解析スクリプトを書く代わりに、組み込みの
--queryパラメーターを使って、コマンドの出力から特定の ID やエンドポイントを抽出してください。 - スクリプトを冪等に保つ: 意図しない副作用やリソースの重複エラーを起こさずに繰り返し実行できるよう、CLI コマンドを設計してください。
- テスト環境をクリーンアップする: PR パイプラインで自動削除スクリプトを使い、一時的なリソース グループを削除して、不要なクラウド コストが積み上がるのを防いでください。
まとめ
Azure CLI を CI/CD パイプラインに統合することは、現代の DevOps チームにとって画期的な取り組みです。軽量であること、クロスプラットフォームに対応していること、直感的な構文を備えていることから、高速で自動化されたクラウド デプロイに最適なパートナーとなります。安全な認証の方法、適切に構造化されたスクリプト、堅牢なパイプライン統合を組み合わせることで、ソフトウェア デリバリーのライフサイクル全体で、これまでにないレベルのスピードと信頼性を実現できます。
このテーマをさらに深く掘り下げ、コマンドラインの考え方をめぐる活発な議論を聞きたい方は、関連するポッドキャストのエピソードをご覧ください: Azure CLI vs PowerShell: Which Should You Use?。両方のツールを使いこなし、それぞれの独自の強みを理解して、今日からAzureクラウドアーキテクチャを完全にコントロールしましょう!