Azure DevOpsでBicepから仮想マシンをデプロイしてみる

1.はじめに

こんにちは、パーソルの永井です。
本記事では、Azure DevOpsのPipelineを使用し、Bicepから仮想マシンをデプロイする方法をご紹介します。

AzureでのIaCというと、Azure CLIを使用してARMテンプレート/Bicepからリソースをデプロイするのが一般的だと思います。
今回ご紹介するAzure DevOpsはそこから一歩進んだ内容となっています。
※少し変化球でAzure BluePrintなどもありますが、、、拙著となりますがこちらの記事でARMテンプレート/Bicep/Azure BluePrintを比較してます。

2.本記事の前提

大変恐縮ですが、本記事はMicrosoftにて公開されている以下Learnを修了されている事を前提に記載させて頂きます。
Azure Pipelines を使用して最初の Bicep デプロイ パイプラインを作成する

上記Learnでは解りやすくAzure DevOpsのPipelinesを使用して、Bicepからリソースをデプロイする方法が学べます。
Visual Studio Codeなどがインストール済みであれば、それほど時間もかかりません(目安は42分と記載されてます)。
※はじめてPipelinesを実施する場合、Microsoftに事前の使用申請を行っていないとエラーとなります。
 Azure DevOpsの組織を作成後、まずはこちらのFAQを参考にMicrosoftへの申請を行ってください。

本記事では上記Learnに記載されている、Azure DevOpsの基本設定やVisual Studio Codeの設定については記載を省かせて頂きます。
ただ上記LearnはApp Serviceをデプロイする手順となるので、本記事では仮想マシンをデプロイする場合について記載します。
Learnを修了した後に、本記事の内容を実施頂くとよい振り返りにもなるかと思います。

3.使用するBicepについて

デプロイに使用する仮想マシンのBicepファイルは、前提条件(デプロイ時に必要なリソースが存在しているなど)を満たせていれば基本的にどういったものでも構いませんが、今回は以下記事で作成したBicepファイルを使用します。
Bicepでドメインに参加したWindows VMのコード記述方法
なお、上記BicepファイルをAzure CLIを使用してデプロイする方法については以下記事をご参照ください。
Bicepで記述したWindows VMのデプロイ
※本記事を含めそれぞれ筆者は違いますが、一応シリーズという事でやってます。今回が最終章です

上記記事のBicepコードにはデプロイ時にドメイン参加を行う仮想マシン拡張機能が入っているので、前提条件としてはデプロイ先のVnet/リージョンが参加するドメインのADサーバと同一である必要があります。
詳細は上記記事をご参照ください。

ADなど構築していない場合は、Microsoftの公開しているBicepからシンプルなものを選んで使用しましょう。
おすすめは[vm-simple-windows]です。

4.デプロイ手順

では早速(でもないですが)、Azure DevOpsのPipelinesでBicepを使用し、仮想マシンをデプロイしていきます。
繰り返しになりますが「②本記事の前提」で記載した通り、Microsoftの以下Learnを修了されていることが前提の手順となります。
Azure Pipelines を使用して最初の Bicep デプロイ パイプラインを作成する

-Reposへのファイル追加

現状、Learnを修了した皆さんのAzure DevOpsでReposを開くと、このような状態かと思います。
※フォルダ名やファイル名が違っている、もしくは削除済みで存在しなくても問題ないです
折角なのでこれらは残しておいて、新たにフォルダを作成しましょう。


レポジトリ名の横にあるフォルダ作成アイコン、ファイル作成アイコンをクリックします。


フォルダ[vm-deploy]、ファイル[main.bicep][vm-deploy.yml]を追加、各ファイルの中身は一旦不要です。


追加が完了したら、以下コマンドをVisual Studio Codeのターミナルで実行し、レポジトリへ反映させます。

git add vm-deploy
git commit -m “ファイル作成”
git push

コマンドの実行が完了したら、Azure DevOpsのReposに戻り、反映されているか確認します。

きちんと反映されていることが確認できたら、再度Visual Studio Codeに戻りBicepとYAMLの中身を入れていきます。

-Bicep/YAMLの作成

[main.bicep]には前述のBicepコード、もしくはご自身で用意された仮想マシンのBicepコードを、[vm-deploy.yml]には以下を貼り付けてください。

trigger: none
pool:
  vmImage: ubuntu-latest
jobs:
– job:
  steps:
    – task: AzureResourceManagerTemplateDeployment@3
      inputs:
        connectedServiceName: $(ServiceConnectionName)
        location: $(deploymentDefaultLocation)
        resourceGroupName: $(ResourceGroupName)
        csmFile: vm-deploy/main.bicep
        overrideParameters: >
          -adminPassword $(adminPassword)
          -adminUsername $(adminUsername)
          -domainPassword $(domainPassword)
          -domainUsername $(domainUsername)

上記YAMLについては、ご覧の通りPipelinesの実行を手動でやる為、トリガーは設定されていません。
必要に応じて設定してください。

もしもBicepをご自身で用意された場合、「overrideParameters」以下を変更する必要があります。
前述のLearnでも触れられていますが、ここはBicepを実施した際に入力を求められるパラメータを事前に設定する箇所になります。


上記のYAMLではデプロイするVMの管理者ユーザー名/パスワード、ドメイン参加時に使用されるドメインユーザのユーザー名/パスワードを設定しています。
Bicepに直接パラメータをハードコーディングすればこちらは不要になりますが、セキュリティ観点から基本的にパスワードなどはファイルに含めないようにしましょう。

実際のパラメータ(パスワードなど)の値については、この後Pipelinesの変数に格納していきます。

BicepファイルとYAMLを保存したら、以下コマンドをVisual Studio Codeのターミナルで実行し、レポジトリへ反映させます。

git add vm-deploy
git commit -m “Bicep/YAML反映”
git push

先ほど同様に、Azure DevOpsのReposに移動して反映されているか確認しましょう。

-Pipelinesの設定

Pipelinesについても新規で作成します。
作成方法はLearnのおさらいになりますので簡潔に。

[New Pipeline]→[Azure Repos Git]→対象のRepos→[Existing Azure Pipelines YAML file]、
先ほど作成したYAMLを選択しましょう。


作成したYAMLが表示されますが、ここでは実行せず、[Run]の横をクリックして[Save]しておきましょう。


次にサービスコネクションを作成します。
※Learnでデプロイ先としたサブスクリプション/リソースグループと、今回デプロイ先とするサブスクリプション/リソースグループが同一の場合は不要です。

サービスコネクションの作成についてもLearnのおさらいになりますので簡潔に。
[Project Settings]→[Pipelines>Service connections]→[Create service connection]→[Azure Resource Manager]→[Service Principal(automatic)]、
ポップアップでウィンドウが開くのでMicrosoftアカウントでログインし、今回デプロイ先とするサブスクリプション/リソースグループを選択、任意のサービスコネクション名を入力して作成完了しましょう。

今回は[vm-deploy]という名前で作成しました。

次に変数の設定を行います。
[Pipelines]を開き、タブをAllにして先ほど保存したPipelineを選択します。


[Edit]→[Variables]→[New Variable]をクリック、まずはサービスコネクションを設定します。
サービスコネクションの変数はどのようなBicep/YAMLを使用しても(恐らく)必須です。


サービスコネクションが追加出来たら、右上の[+]をクリックしてどんどん変数を作成しましょう。
今回必要な変数は以下です。

・ServiceConnectionName
・ResourceGroupName
・adminPassword
・adminUsername
・domainPassword
・domainUsername

YAMLのところで記載した通り、ご自身で用意されたBicepの場合は違ったものになるかと思います。
追加した変数とYAMLを比べれば必要な変数の過不足がわかります。



パスワードなどを変数に格納する際は[Keep this value secret]にチェックを入れて保存することで、後から参照することが不可となります。


追加がすべて完了したら、右下の[Save]をクリックして入力した変数をしっかり保存します。

-Pipelineの実行

準備が完了しました、[Pipeline]の右上にある[Run]をクリック、[Advanced Setting]については特に弄らず、右下の[Run]をクリックして実行しましょう。
しばらく待って、[Jobs]のステータスが緑のチェックマークになれば完了です!


Azure Portalの対象のリソースグループに移動して、デプロイの結果も確認しましょう!

5.おわりに

いかがでしたでしょうか。
今回は比較的シンプルな手順でAzure DevOpsのPipelinesから、Bicepを使用して仮想マシンをデプロイしてみました。
本番の環境では、ブランチもマスターだけという事はないでしょうし、デプロイするBicepやYAMLの設定(トリガーなど)がより複雑なものになるかと思います。
ただ本記事がAzureでIaCを行うステップの一つとして、すこしでも皆様のお役に立てることを切に願い、本記事はここで締めたいと思います。
最後まで読んでいただき、ありがとうございました。

いいね (この記事が参考になった人の数:3)
(↑参考になった場合はハートマークを押して評価お願いします)
読み込み中...

注意事項・免責事項

※技術情報につきましては投稿日時点の情報となります。投稿日以降に仕様等が変更されていることがありますのでご了承ください。

※公式な技術情報の紹介の他、当社による検証結果および経験に基づく独自の見解が含まれている場合がございます。

※これらの技術情報によって被ったいかなる損害についても、当社は一切責任を負わないものといたします。十分な確認・検証の上、ご活用お願いたします。

※当サイトはマイクロソフト社によるサポートページではございません。パーソルクロステクノロジー株式会社が運営しているサイトのため、マイクロソフト社によるサポートを希望される方は適切な問い合わせ先にご確認ください。
 【重要】マイクロソフト社のサポートをお求めの方は、問い合わせ窓口をご確認ください