演習 - Azure DevOps 環境を設定する

完了

このセクションでは、このモジュールの残りの部分に進み、アプリケーションをデプロイする Azure Kubernetes Service (AKS) 環境を作成するように Azure DevOps 組織を構成します。

これらの目標を達成するには、次の作業を行います。

  • Azure DevOps 組織にユーザーを追加します。
  • Azure DevOps プロジェクトを設定します。
  • Azure Boards を使用してワークフローを管理します。
  • Azure CLI を使用して Azure リソースを作成します。
  • Azure Pipelines でパイプライン変数を作成します。
  • Azureで認証するサービス接続を作成します。
  • Kubernetes 配置マニフェストを更新します。

組織にユーザーを追加する

このモジュールを完了するには、 Azure サブスクリプション が必要です。 Azure の使用は無料で開始できます。

Azure DevOps を使用する必要はありませんが、Azure DevOps を使用して Azure リソースにデプロイするには、Azure サブスクリプションが必要です。 プロセスをより簡単にするには、同じ Microsoft アカウントを使用して、Azure サブスクリプションと Azure DevOps 組織の両方にサインインします。

異なる Microsoft アカウントを使用して Azure と Azure DevOps にサインインする場合でも、Azure サブスクリプションに関連付けられている Microsoft アカウントで DevOps 組織にユーザーを追加することで続行できます。 詳細については、「 組織またはプロジェクトにユーザーを追加 する」を参照してください。 ユーザーを追加するときに、 基本 アクセス レベルを選択します。

Basic アクセス レベルのユーザーを追加したら、Azure DevOps からサインアウトし、Azure サブスクリプションに関連付けられている Microsoft アカウントを使用してサインインし直します。

Azure DevOps プロジェクトを取得する

このセクションでは、テンプレートを実行して、Azure DevOps でプロジェクトを作成します。

テンプレートの実行

Azure DevOps 組織を設定するテンプレートを実行します。

  1. Visual Studio または選択した IDE で ADOGenerator プロジェクトを取得して実行します。

  2. テンプレートの一覧からテンプレート番号を入力するように求められたら、「Azure Pipelines を使用して Azure Kubernetes Services へのマルチコンテナー デプロイを自動化する」に「40」と入力し、Enter キーを押します。

  3. 認証方法を選択します。 個人用アクセス トークン (PAT) を設定して使用することも、デバイス ログインを使用することもできます。

    PAT を設定する場合は、必ず必要なスコープを承認 してください。 このモジュールではフル アクセスを使用できますが、実際の状況では、必要なスコープのみを付与する必要があります。

  4. Azure DevOps 組織名を入力し、 Enter キーを押します。

  5. メッセージが表示されたら、Azure DevOps PAT を入力し、 Enter キーを押します。

  6. Space Game - web - Kubernetes などのプロジェクト名を入力し、Enter キーを押します

  7. プロジェクトが作成されたら、ブラウザー ( https://dev.azure.com/<your-organization-name>/) で Azure DevOps 組織に移動し、プロジェクトを選択します。

リポジトリのフォーク

まだ作成していない場合は、 mslearn-tailspin-spacegame-web-kubernetes リポジトリのフォークを 作成します。

  1. GitHub で、 mslearn-tailspin-spacegame-web-kubernetes リポジトリに移動します。

  2. 画面の右上にある [フォーク ] を選択します。

  3. 所有者として GitHub アカウントを選択し、[フォークの作成] を選択します。

重要

このモジュールの Azure DevOps 環境をクリーンアップする ユニットには、クリーンアップのための重要な手順が含まれています。 無料のビルド時間が不足しないように、これらの手順を実行することをお勧めします。 このモジュールを完了しない場合でも、クリーンアップ手順に従う必要があります。

プロジェクトの可視性を設定する

最初は、GitHub 上の Space Game リポジトリのフォークはパブリックに設定され、Azure DevOps テンプレートによって作成されたプロジェクトはプライベートに設定されます。 GitHub 上のパブリック リポジトリには誰でもアクセスできますが、プライベート リポジトリには自分のほかに共有することを選択したユーザーのみがアクセスできます。 同様に、Azure DevOps では、パブリック プロジェクトでは認証されていないユーザーに読み取り専用アクセスを提供しますが、プライベート プロジェクトではユーザーがサービスにアクセスするにはアクセス権の付与と認証が必要です。

現時点では、このモジュールにおいてこれらの設定を変更する必要はありません。 ただし、個人のプロジェクトでは、他のユーザーに付与する可視性とアクセス権を決定する必要があります。 たとえば、プロジェクトがオープンソースの場合は、GitHub リポジトリと Azure DevOps プロジェクトの両方をパブリックにすることを選択できます。 プロジェクトが独自のものである場合は、GitHub リポジトリと Azure DevOps プロジェクトの両方をプライベートにするのが一般的です。

後で、プロジェクトに最適なオプションを決定する際に、次のリソースが役立つ場合があります。

作業項目を [実行中] に移動する

この手順では、Azure Boards で作業項目を自分に割り当てて、作業項目を [実行 中] 状態に移動します。 実際のシナリオでは、チームは各スプリントまたは作業イテレーションの開始時に作業項目を作成します。

作業項目を割り当てると、作業のチェックリストが提供され、他のチーム メンバーが進捗状況と残存作業時間を把握できます。 また、進行中の作業 (WIP) の制限を適用して、チームが一度に多くの作業を実行するのを防ぐのにも役立ちます。

  1. Azure DevOps の Boards に移動し、メニューから [Boards ] を選択します。

    [Boards] メニューの場所を示す Azure DevOps のスクリーンショット。

  2. カードの下部にある下矢印を選択して、 Kubernetes で調整された Web サイトの複数コンテナー バージョンの作成 作業項目を自分に割り当てます。

    下矢印の場所を示す Azure Boards のスクリーンショット。

  3. 作業項目を [ To Do ] 列から [ 実行 ] 列にドラッグ アンド ドロップします。 タスクは、完了した後、このモジュールの最後にある [完了] 列に移動します。

    [実行中] 列にカードが表示されている Azure Boards のスクリーンショット。

Azure Kubernetes Service 環境を作成する

この手順では、Web サイトの新しいコンテナー バージョンをデプロイするために必要な Azure Kubernetes Service リソースを作成します。

前のモジュール「 Azure Pipelines を使用してリリース パイプラインを作成する」では、Azure portal を使用して Azure リソースを作成しました。 ポータルは Azure の機能を探索し、基本的なタスクを実行するのに役立ちますが、Azure Kubernetes Service などのコンポーネントの作成には時間がかかる場合があります。

このモジュールでは、Azure CLI を使用して、Azure Kubernetes Service でアプリケーションをデプロイして実行するために必要なリソースを作成します。 Azure CLI には、ターミナルまたは Visual Studio Code からアクセスできます。 ただし、このモジュールでは、Azure Cloud Shell から Azure CLI にアクセスします。 Cloud Shell は、クラウドでホストされるブラウザー ベースのシェル エクスペリエンスであり、Azure サブスクリプションで使用するために Azure CLI で事前構成されています。

重要

このモジュールの演習を完了するには、独自の Azure サブスクリプションが必要です。

Cloud Shell を起動する

  1. Azure portal に移動し、サインインします。

  2. メニューから [Cloud Shell ] オプションを選択し、メッセージが表示されたら Bash エクスペリエンスを選択します。

    Cloud Shell メニュー項目の場所を示す Azure portal のスクリーンショット。

Cloud Shell では、Cloud Shell で作成するすべてのファイルを保持する Azure ストレージ リソースが必要です。 ユーザーが Cloud Shell を初めて開くとき、リソース グループ、ストレージ アカウント、Azure Files 共有の作成を求められます。 この設定は、以降のすべての Cloud Shell セッションで自動的に使用されます。

Azure リージョンを選択する

リージョンとは、地理的な領域にある 1 つ以上の Azure データセンターを指します。 その例として、米国東部、米国西部、北ヨーロッパなどのリージョンがあります。 App Service インスタンスを含む各 Azure リソースは、リージョンに関連付けられます。

コマンドの実行を簡略化するには、まず既定のリージョンを設定します。 既定のリージョンを設定すると、別のリージョンを明示的に指定しない限り、後続のコマンドでは既定でそのリージョンが使用されます。

  1. Cloud Shell から、次のコマンドを実行して、Azure サブスクリプションで使用可能なリージョンを一覧表示します。

    az account list-locations \
      --query "[].{Name: name, DisplayName: displayName}" \
      --output table
    
  2. 地理的に近い出力の [名前] 列から リージョン を選択します。 たとえば、 eastasia または westus2 を選択できます。

  3. 次のコマンドを実行して、既定のリージョンを設定します。 REGION を、先ほど選択したリージョンの名前に置き換えます。

    az configure --defaults ___location=<REGION>
    

    次の使用例は、 westus2 を既定のリージョンとして設定します。

    az configure --defaults ___location=westus2
    

Bash 変数を作成する

Bash 変数を使用すると、セットアップ プロセスがより便利になり、エラーが発生しにくくなります。 この方法は、共有テキスト文字列をスクリプト全体で使用できる変数として定義することで、誤った入力ミスを回避するのに役立ちます。

  1. Cloud Shell から乱数を生成し、次の手順で特定のサービスにグローバルに一意な名前を簡単に作成します。

    resourceSuffix=$RANDOM
    
  2. Azure Container Registry と Azure Kubernetes Service インスタンスのグローバルに一意の名前を作成します。 これらのコマンドでは二重引用符が使用されることに注意してください。これは、インライン構文を使用して変数を補間するように Bash に指示します。

    registryName="tailspinspacegame${resourceSuffix}"
    aksName="tailspinspacegame-${resourceSuffix}"
    
  3. リソース グループの名前を格納する別の Bash 変数を作成します。

    rgName='tailspin-space-game-rg'
    
  4. 最新の AKS バージョンを見つけます。

    az aks get-versions
    

    最新バージョンをメモしておきます。

Azure リソースを作成する

このチュートリアルでは、学習目的で既定のネットワーク設定を使用します。 これらの設定により、Web サイトにインターネットからアクセスできるようになります。 ただし、実際には、インターネットルーティング可能ではなく、自分とチームのみがアクセスできるネットワークに Web サイトを配置する Azure 仮想ネットワークを構成することを選択できます。 後で、ユーザーが Web サイトを使用できるようにネットワークを再構成できます。

  1. 次のコマンドを実行して、前に定義した名前のリソース グループを作成します。

    az group create --name $rgName
    
  2. az acr create コマンドを実行して、前に定義した名前の Azure Container Registry を作成します。

    az acr create \
      --name $registryName \
      --resource-group $rgName \
      --sku Standard
    
  3. az aks create コマンドを実行して、前に定義した名前の AKS インスタンスを作成します。 <latest-AKS-version>は、前に説明したバージョンに置き換えます。

    az aks create \
      --name $aksName \
      --resource-group $rgName \
      --enable-addons monitoring \
      --kubernetes-version <latest-AKS-version> \
      --generate-ssh-keys
    

    AKS デプロイの完了には 10 ~ 15 分かかる場合があります。

  4. AKS インスタンス用に構成されたサービス プリンシパルの ID を格納する変数を作成します。

    clientId=$(az aks show \
      --resource-group $rgName \
      --name $aksName \
      --query "identityProfile.kubeletidentity.clientId" \
      --output tsv)
    
  5. Azure Container Registry の ID を格納する変数を作成します。

    acrId=$(az acr show \
      --name $registryName \
      --resource-group $rgName \
      --query "id" \
      --output tsv)
    
  6. az acr list コマンドを実行して、Azure Container Registry (ACR) インスタンスのログイン サーバー URL を取得します。

    az acr list \
     --resource-group $rgName \
     --query "[].{loginServer: loginServer}" \
     --output table
    

    コンテナー レジストリのログイン サーバーを書き留めておきます。 この情報は、後でパイプラインを構成するときに必要になります。 次に例を示します。

    LoginServer                      
    --------------------------------
    tailspinspacegame4692.azurecr.io
    
  7. az role assignment create コマンドを実行してロールの割り当てを作成し、AKS クラスターが Azure Container Registry に接続することを承認します。

    az role assignment create \
      --assignee $clientId \
      --role AcrPull \
      --scope $acrId
    

重要

このモジュールの Azure DevOps 環境をクリーンアップする ユニットには、クリーンアップのための重要な手順が含まれています。 無料のビルド時間が不足しないように、これらの手順を実行することをお勧めします。 このモジュールを完了しない場合でも、クリーンアップ手順に従う必要があります。

変数グループを作成する

このセクションでは、Azure Container Registry の名前を格納する変数をパイプラインに追加します。 Azure Container Registry インスタンスの名前をパイプライン構成の変数として定義することは、ハードコーディングよりも推奨されます。 これにより、構成がより再利用可能になり、インスタンスの名前が変更された場合に、構成を変更しなくても、変数を簡単に更新してパイプラインをトリガーできます。

  1. Azure DevOps 組織にサインインしてから、プロジェクトに移動します。

  2. [ パイプライン] を選択し、左側のナビゲーション ウィンドウから [ ライブラリ ] を選択します。

    [ライブラリ] メニュー オプションが表示されている Azure Pipelines のスクリーンショット。

  3. [ 変数グループ] を選択し、[ + 変数グループ ] を選択して新しい変数グループを追加します。

  4. [ プロパティ ] セクションで、変数グループ名として 「Release 」と入力します。

  5. [ 変数 ] セクションで、[ 追加] を選択します。

  6. 変数名には RegistryName を入力し、値には Azure Container Registry のログイン サーバー ( tailspinspacegame4692.azurecr.io など) を入力します。

  7. ページの上部にある [ 保存] を選択して、パイプライン変数を保存します。 変数グループの例を次に示します。

    変数グループを示す Azure Pipeline のスクリーンショット。グループには 1 つの変数が含まれています。

サービス接続を作成する

次の手順では、Azure Pipelines が Azure Container Registry と Azure Kubernetes Service インスタンスにアクセスできるようにするサービス接続を作成します。 これらのサービス接続を作成することで、Azure Pipelines はコンテナーをプッシュし、デプロイされたサービスを更新するためにそれらをプルするように AKS クラスターに指示できます。

重要

同じ Microsoft アカウントで Azure portal と Azure DevOps にサインインしていることを確認します。

Docker レジストリ サービス接続を作成する

  1. Azure DevOps 組織にサインインしてから、プロジェクトに移動します。

  2. ページの下部にある [ プロジェクトの設定 ] を選択します。

  3. [パイプライン] セクションで [サービス接続] を選択します。

  4. [ 新しいサービス接続] を選択し、[ Docker レジストリ] を選択し、[ 次へ] を選択します。

  5. ページの上部にある [Azure Container Registry] を選択し、認証の種類として [サービス プリンシパル ] を選択します。

  6. 各設定に対して次の値を入力します。

    設定 価値
    サブスクリプション お使いの Azure サブスクリプション
    Azure コンテナー レジストリ 前に作成したファイルを選択します
    サービス接続名 コンテナー レジストリ接続
  7. [ すべてのパイプラインにアクセス許可を付与 する] チェック ボックスがオンになっていることを確認します。

  8. 完了したら 、[保存] を選択します

ARM サービス接続を作成する

次に、AKS クラスターで認証するための Azure Resource Manager サービス接続を作成します。 Kubernetes 1.24 以降、有効期間の長いトークンは既定で作成されなくなったため、Kubernetes の代わりに ARM サービス接続を使用しています。 詳細については、DevOps のブログ投稿を参照してください。 Kubernetes タスクを使用する AKS のお客様向けのサービス接続ガイダンスです。

  1. [ 新しいサービス接続] を選択し、[ Azure Resource Manager] を選択して、[ 次へ] を選択します。

  2. [ サービス プリンシパル (自動)] を選択し、[ 次へ] を選択します。

  3. スコープ レベルの [サブスクリプション] を選択します。

  4. 各設定に対して次の値を入力します。

    設定 価値
    サブスクリプション お使いの Azure サブスクリプション
    リソースグループ 前に作成したファイルを選択します
    サービス接続名 Kubernetes クラスター接続
  5. [ すべてのパイプラインにアクセス許可を付与 する] チェック ボックスがオンになっていることを確認します。

  6. 完了したら 、[保存] を選択します

パイプライン環境を作成する

  1. [ パイプライン] を選択し、[ 環境] を選択します。

    [環境] メニュー オプションが表示されている Azure Pipelines のスクリーンショット。

  2. [ 環境の作成] を選択して新しい環境を作成します。

  3. [ 名前 ] フィールドに「 Dev」と入力します。

  4. [リソース] セクションから [なし] を選択し、[作成] を選択してパイプライン環境を作成します。

Kubernetes 配置マニフェストを更新する

このセクションでは、前に作成したコンテナー レジストリを指すように Kubernetes マニフェスト deployment.yml を更新します。

  1. GitHub アカウントに移動し、このモジュール用にフォークしたリポジトリ (mslearn-tailspin-spacegame-web-kubernetes) を選択します。

  2. 編集モードで マニフェスト/deployment.yml ファイルを開きます。

    編集モード アイコンの場所を示す GitHub のスクリーンショット。

  3. ACR ログイン サーバーを使用するようにコンテナー イメージ参照を変更します。 次のマニフェストでは 、例として tailspinspacegame2439.azurecr.io を使用しています。

    apiVersion : apps/v1
    kind: Deployment
    metadata:
      name: web
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: web
      template:
        metadata:
          labels:
            app: web
        spec:
          containers:
            - name: web
              image: tailspinspacegame4692.azurecr.io/web
              ports:
              - containerPort: 80
    
    apiVersion : apps/v1
    kind: Deployment
    metadata:
      name: leaderboard
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: leaderboard
      template:
        metadata:
          labels:
            app: leaderboard
        spec:
          containers:
            - name: leaderboard
              image: tailspinspacegame4692.azurecr.io/leaderboard
              ports:
              - containerPort: 80
    
  4. main ブランチに変更をコミットします。