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

完了

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

これらの目標を達成するため、次のことを行います。

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

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

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

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

異なる Microsoft アカウントを使って Azure と Azure DevOps にサインインした場合でも、Azure サブスクリプションに関連付けられている Microsoft アカウントの下の DevOps 組織にユーザーを追加することで続けることができます。 詳しくは、組織またはプロジェクトへのユーザーの追加に関する記事をご覧ください。 ユーザーを追加する際、Basic アクセス レベルを選択します。

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

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

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

テンプレートの実行

テンプレートを実行して、このモジュール用の Azure DevOps プロジェクトを設定します。

Azure DevOps Demo Generator ポータルから、以下の手順でテンプレートを実行します。

  1. [サインイン] を選び、使用条件に同意します。

  2. [新しいプロジェクトの作成] ページで自分の Azure DevOps 組織を選び、プロジェクト名を指定します (「Space Game - web - Kubernetes」など)。

    Screenshot of the Azure DevOps Demo Generator showing the process to create the project.

  3. [Yes, I want to fork this repository] (はい、このリポジトリをフォークします) を選んでから、[承認する] を選びます。 ウィンドウが表示されたら、GitHub アカウントにアクセスするアクセス許可を付与します。

    重要

    テンプレートで GitHub リポジトリに接続するには、このオプションを選ぶ必要があります。 テンプレートでは既存のフォークが使われるため、Space Game リポジトリを既にフォークしている場合でもこれを選んでください。

  4. [プロジェクトの作成] を選び、テンプレートの実行が完了するまで待ちます。これには数分かかる場合があります。

  5. [プロジェクトに移動] を選んで、Azure DevOps のプロジェクトにアクセスします。

重要

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

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

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

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

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

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

このステップでは、Azure Boards で作業項目を自分に割り当て、それを [実行中] 状態に移動します。 実際のシナリオでは、各スプリント (作業の繰り返し) の開始時に、担当者とチームで作業項目を作成します。

作業項目を割り当てると、担当者には作業の基になるチェックリストが提供され、他のチーム メンバーは担当者の進捗状況と残りの作業を確認できるようになります。 また、進行中の作業 (WIP) の制限を適用して、チームが一度に引き受ける作業が多くなりすぎないようにすることもできます。

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

    Screenshot of Azure DevOps showing the location of the Boards menu.

  2. カードの一番下にある下矢印を選んで、[Create multi-container version of web site orchestrated with Kubernetes] (Kubernetes を使用して調整される Web サイトの複数コンテナー バージョンを作成する) 作業項目を自分に割り当てます。

    Screenshot of Azure Boards showing the location of the down arrow.

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

    Screenshot of Azure Boards showing the card in the Doing column.

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] エクスペリエンスを選びます。

    Screenshot of the Azure portal showing the location of the Cloud Shell menu item.

Note

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

Azure リージョンを選択する

リージョンとは、地理的な領域に設けられている 1 つ以上の Azure データセンターのことです。 米国東部、米国西部、北ヨーロッパなどのリージョンは、そのような地域の例です。 App Service インスタンスなどの各 Azure リソースは、1 つのリージョンに関連付けられています。

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

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

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

  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 コンテナー レジストリを作成します。

    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
    

    Note

    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 コマンドを実行して、Azure Container Registry に AKS クラスターが接続するのを承認するためのロールの割り当てを作成します。

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

重要

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

変数グループを作成する

このセクションでは、自分の Azure Container Registry の名前を格納する変数をパイプラインに追加します。 Azure Container Registry インスタンスの名前は、ハードコーディングするのではなく、パイプラインの構成で変数として定義することをお勧めします。 このようにすると、構成をいっそう再利用しやすくなり、インスタンスの名前を変更する場合は、簡単に変数を更新してパイプラインをトリガーでき、構成を変更する必要がありません。

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

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

    Screenshot of Azure Pipelines showing the Library menu option.

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

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

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

  6. 変数名に「RegistryName」と入力し、値として自分の Azure コンテナー レジストリのログイン サーバーを入力します (tailspinspacegame4692.azurecr.io など)。

  7. ページの上部にある [保存] を選んで、パイプライン変数を保存します。 これは、変数グループの表示の例です

    Screenshot of Azure Pipeline showing the variable group. The group contains one variable.

サービス接続を作成する

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

重要

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

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

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

  2. ページの下隅にある [Project settings] を選択します。

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

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

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

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

    設定
    サブスクリプション お使いの Azure サブスクリプション
    Azure コンテナー レジストリ 先ほど作成したレジストリを選択してください
    サービス接続名 "Container Registry 接続"
  7. [すべてのパイプラインへのアクセス許可を与える] チェックボックスがオンになっていることを確認します。

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

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

次に、AKS クラスターで認証を行うための Azure Resource Manager サービス接続を作成します。 Kubernetes 1.24 以降では有効期間の長いトークンが既定で作成されなくなったため、Kubernetes の代わりに ARM サービス接続を使います。 詳しくは、DevOps のブログ記事「Kubernetes タスクを使用する AKS のお客様のためのサービス接続ガイダンス」をご覧ください。

  1. [新しいサービス接続] を選び、[Azure Resource Manager] を選んでから、[次へ] を選びます。

  2. [サービス プリンシパル (自動)] を選んでから、[次へ] を選びます。

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

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

    設定
    サブスクリプション お使いの Azure サブスクリプション
    Resource group 先ほど作成したレジストリを選択してください
    サービス接続名 Kubernetes クラスター接続
  5. [すべてのパイプラインへのアクセス許可を与える] チェックボックスがオンになっていることを確認します。

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

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

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

    Screenshot of Azure Pipelines showing the Environments menu option.

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

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

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

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

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

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

  2. manifests/deployment.yml ファイルを編集モードで開きます。

    Screenshot of GitHub showing the location of the edit mode icon.

  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 ブランチにコミットします。