演習 - Azure DevOps 環境を設定する
このユニットでは、Azure DevOps 組織がこのモジュールの残りの部分を完了するように設定されていることを確認します。 また、デプロイする Azure App Service 環境も作成します。
これらの目標を達成するには、次のタスクを実行します。
- ユーザーを追加して、Azure DevOps が Azure サブスクリプションに接続できることを確認します。
- このモジュール用の Azure DevOps プロジェクトを設定します。
- Azure Boards 上で、このモジュールの作業項目を [実行中] 列に移動します。
- 変更をパイプラインにプッシュできるように、ローカルでプロジェクトが設定されていることを確認します。
- Azure Cloud Shell で Azure CLI を使用して、Azure App Service と Azure Functions アプリを作成します。
- App Service と Azure Functions インスタンスの名前を定義するパイプライン変数を作成します。
- Azure Pipelines が Azure サブスクリプションに安全にアクセスできるようにするサービス接続を作成します。
Azure DevOps にユーザーを追加する
このモジュールを完了するには、独自の Azure サブスクリプションが必要です。 Azure の使用は無料で開始できます。
Azure DevOps を操作するために Azure サブスクリプションは必要ありませんが、この演習では Azure DevOps を使用して Azure サブスクリプション内の Azure リソースにデプロイします。 プロセスを簡略化するには、同じ Microsoft アカウントを使用して、Azure サブスクリプションと Azure DevOps 組織の両方にサインインします。
重要
別のアカウントでサインインする場合は、Azure へのサインインに使用する Microsoft アカウントで DevOps 組織にユーザーを追加します。 詳細については、「 組織またはプロジェクトにユーザーを追加する」を参照してください。 ユーザーを追加するときに、 基本 アクセス レベルを選択します。
次に、Azure DevOps からサインアウトし、新しいユーザー アカウントでサインインします。 Azure サブスクリプションへのサインインに使用する Microsoft アカウントを使用します。
Azure DevOps プロジェクトを取得する
このモジュールの残りの部分を完了するために、Azure DevOps 組織が確実に設定されるようにします。 これを行うには、Azure DevOps でプロジェクトを作成するテンプレートを実行します。
このラーニング パスのモジュールは、Tailspin Web チームがDevOpsプロセスを進める過程を順を追って説明します。 学習目的で、各モジュールには独自の Azure DevOps プロジェクトがあります。
テンプレートの実行
Azure DevOps 組織を設定するテンプレートを実行します。
Visual Studio または選択した IDE で ADOGenerator プロジェクトを取得して実行します。
テンプレートの一覧からテンプレート番号を入力するように求められたら、「Azure Pipelines を使用した Azure 関数のデプロイの自動化」に「38」と入力し、Enter キーを押します。
認証方法を選択します。 個人用アクセス トークン (PAT) を設定して使用することも、デバイス ログインを使用することもできます。
注
PAT を設定する場合は、必ず必要なスコープを承認 してください。 このモジュールではフル アクセスを使用できますが、実際の状況では、必要なスコープのみを付与する必要があります。
Azure DevOps 組織名を入力し、 Enter キーを押します。
メッセージが表示されたら、Azure DevOps PAT を入力し、 Enter キーを押します。
Space Game - Web - Azure Functions などのプロジェクト名を入力し、Enter キーを押します。
プロジェクトが作成されたら、ブラウザー (
https://dev.azure.com/<your-organization-name>/
) で Azure DevOps 組織に移動し、プロジェクトを選択します。
リポジトリのフォーク
まだ作成していない場合は、 mslearn-tailspin-spacegame-web-azure-functions リポジトリの フォークを作成します。
GitHub で、 mslearn-tailspin-spacegame-web-azure-functions リポジトリに移動します。
画面の右上にある [フォーク ] を選択します。
所有者として GitHub アカウントを選択し、[フォークの作成] を選択します。
重要
このモジュールの [Azure DevOps 環境のクリーンアップ ] ページには、このモジュールを完了していない場合でも、完了する必要がある 重要な手順 が含まれています。 クリーンアップによって、無料のビルド時間の浪費を抑えることができます。
プロジェクトの可視性を設定する
最初は、GitHub 上の Space Game リポジトリのフォークはパブリックに設定され、Azure DevOps テンプレートによって作成されたプロジェクトはプライベートに設定されます。 GitHub 上のパブリック リポジトリには誰でもアクセスできますが、プライベート リポジトリには自分のほかに共有することを選択したユーザーのみがアクセスできます。 同様に、Azure DevOps では、パブリック プロジェクトでは認証されていないユーザーに読み取り専用アクセスを提供しますが、プライベート プロジェクトではユーザーがサービスにアクセスするにはアクセス権の付与と認証が必要です。
現時点では、このモジュールにおいてこれらの設定を変更する必要はありません。 ただし、個人のプロジェクトでは、他のユーザーに付与する可視性とアクセス権を決定する必要があります。 たとえば、プロジェクトがオープンソースの場合は、GitHub リポジトリと Azure DevOps プロジェクトの両方をパブリックにすることを選択できます。 プロジェクトが独自のものである場合は、GitHub リポジトリと Azure DevOps プロジェクトの両方をプライベートにするのが一般的です。
後で、プロジェクトに最適なオプションを決定する際に、次のリソースが役立つ場合があります。
作業項目を割り当てて[実行中]状態に移動する
ここでは、Azure Boards で作業項目を自分に割り当て、作業項目の状態を [実行] に設定します。 実際には、あなたとチームは、各 スプリントの開始時に作業項目を作成するか、作業イテレーションを作成します。
この演習では、使用するチェックリストを作成します。 他のチーム メンバーは、作業内容と残りの作業量を把握できます。 作業項目は、チームが一度に多くの作業を引き受けないように、進行中の作業 (WIP) の制限を適用するのにも役立ちます。
Azure DevOps から Boards カテゴリに移動し、メニューから [Boards ] を選択します。
タイトルを選択して、 リファクター ランキング API を Azure 関数 の作業項目として開きます。 この作業項目を自分に割り当て、 保存して閉じるを選択します。
カードの下部にある下矢印を選択し、[実行] を選択するか、カードを選択して [実行] 列にドラッグします。
作業項目は、 To Do 列から [ 実行 ] 列に移動されます。
このモジュールの最後で、タスクの完了後にカードを [完了] 列に移動します。
Azure App Service と Azure Functions 環境を作成する
ここでは、サイトと API の新しいバージョンをデプロイするために必要な App Service アプリと Azure Functions アプリを作成します。
Azure Pipelines Learn を使用したリリース パイプラインの作成 モジュールでは、Azure portal を使用して App Service を起動しました。 ポータルは、Azure で何が利用できるかを調べるか、基本的なタスクを実行する優れた方法ですが、App Service などのコンポーネントを立ち上げるのは面倒な場合があります。
このモジュールでは、Azure CLI を使用して App Service インスタンスを起動します。 Azure CLI には、ターミナルまたは Visual Studio Code からアクセスできます。 Azure Cloud Shell から Azure CLI を使用しました。 このブラウザーベースのシェル エクスペリエンスは、クラウドでホストされています。 Cloud Shell では、Azure CLI は Azure サブスクリプションで使用するように構成されています。
重要
このモジュールの演習を完了するには、独自の Azure サブスクリプションが必要です。
Azure portal を使用して Cloud Shell を起動する
Azure portal にサインインします。
ページ ヘッダーのグローバル コントロールから、 Cloud Shell を選択します。
ターミナルが開き、Azure Cloud Shell に接続されます。
必要に応じて、ターミナル メニューから Bash を選択します。
注
Cloud Shell では、Cloud Shell で作成するすべてのファイルを保持する Azure ストレージ リソースが必要です。 ユーザーが Cloud Shell を初めて開くとき、リソース グループ、ストレージ アカウント、Azure Files 共有の作成を求められます。 この設定は、以降のすべての Cloud Shell セッションで自動的に使用されます。
Azure リージョンを選択する
リージョンは、地理的な場所内の 1 つ以上の Azure データセンターです。 リージョンの例としては、米国東部、米国西部、北ヨーロッパがあります。 App Service インスタンスを含むすべての Azure リソースには、リージョンが割り当てられます。
コマンドの実行を容易にするには、まず既定のリージョンを設定します。 既定のリージョンを指定した後、入力するコマンドは、別のリージョンを指定するまでそのリージョンを使用します。
Cloud Shell から、次の
az account list-locations
コマンドを実行して、Azure サブスクリプションから利用可能なリージョンを一覧表示します。az account list-locations \ --query "[].{Name: name, DisplayName: displayName}" \ --output table
出力の
Name
列から、最寄りのリージョンを選択します。 たとえば、eastasia
またはwestus2
を選択します。az configure
を実行して、既定のリージョンを設定します。<REGION>
を、任意のリージョン名に置き換えます。az configure --defaults ___location=<REGION>
この例では、既定のリージョンとして
westus2
を設定します。az configure --defaults ___location=westus2
Bash 変数を作成する
ここでは、Bash 変数を作成して、セットアップ プロセスの利便性を高め、エラーが発生しにくくします。 共有テキスト文字列に変数を使用すると、誤った入力ミスを回避できます。
Cloud Shell から、次の手順で特定のサービスのグローバルに一意の名前を作成するために使用する乱数を生成します。
resourceSuffix=$RANDOM
App Service、Azure 関数、ストレージ アカウントにグローバルに一意の名前を 3 つ作成します。 これらのコマンドでは二重引用符を使用します。これは、インライン構文を使用して変数を解決するように Bash に指示します。
webName="tailspin-space-game-web-${resourceSuffix}" leaderboardName="tailspin-space-game-leaderboard-${resourceSuffix}" storageName="tailspinspacegame${resourceSuffix}"
リソース グループとサービス プランの名前を格納するために、さらに 2 つの Bash 変数を作成します。
rgName='tailspin-space-game-rg' planName='tailspin-space-game-asp'
必要な Azure リソースを作成する
ソリューションでは、デプロイのためにいくつかの Azure リソースが必要です。ここで作成します。
注
この演習では、インターネットからサイトにアクセスできるように、既定のネットワーク設定を使用します。 実際には、自分とチームだけがアクセスできるネットワークに Web サイトを配置するように Azure 仮想ネットワークを構成できます。 後で、ユーザーが Web サイトを使用できるように仮想ネットワークを再構成できます。
次の
az group create
コマンドを実行して、前に定義した名前を使用してリソース グループを作成します。az group create --name $rgName
次の
az appservice plan create
コマンドを実行して、前のタスクで定義した名前を使用して App Service プランを作成します。az appservice plan create \ --name $planName \ --resource-group $rgName \ --sku B1 \ --is-linux
--sku
パラメーターは、B1 プランを指定します。 このプランは、Basic サービス レベルで実行されます。--is-linux
パラメーターは、Linux ワーカー (イベントとタスクのスケジュールで使用されるスレッド) を指定します。重要
ご自分の Azure サブスクリプションで B1 SKU を使用できない場合、S1 (Standard) などの別のプランを選択します。
次の
az webapp create
コマンドを実行して、App Service インスタンスを作成します。az webapp create \ --name $webName \ --resource-group $rgName \ --plan $planName \ --runtime "DOTNETCORE|8.0"
Azure Functions には、デプロイ用のストレージ アカウントが必要です。 次の
az storage account create
コマンドを実行して作成します。az storage account create \ --name $storageName \ --resource-group $rgName \ --sku Standard_LRS
次の
az functionapp create
コマンドを実行して、Azure Functions アプリ インスタンスを作成します。<region>
をお好みのリージョンに置き換えます。az functionapp create \ --name $leaderboardName \ --resource-group $rgName \ --storage-account $storageName \ --functions-version 4 \ --consumption-plan-___location <region>
次の
az webapp list
コマンドを実行して、App Service インスタンスのホスト名と状態を一覧表示します。az webapp list \ --resource-group $rgName \ --query "[].{hostName: defaultHostName, state: state}" \ --output table
実行中のサービスのホスト名をメモします。 次のようになりますが、乱数は異なります。 作業を確認するときに、後で Web ホスト名が必要になります。
HostName State ---------------------------------------------- ------- tailspin-space-game-web-4692.azurewebsites.net Running
次の
az functionapp list
コマンドを実行して、Azure Functions インスタンスのホスト名と状態を一覧表示します。az functionapp list \ --resource-group $rgName \ --query "[].{hostName: defaultHostName, state: state}" \ --output table
実行中のサービスのホスト名をメモします。 次のようになりますが、別の乱数識別子を使用します。 作業を確認するときに、後でランキングボードのホスト名が必要になります。
HostName State ------------------------------------------------------ ------- tailspin-space-game-leaderboard-4692.azurewebsites.net Running
この 2 つのホスト名を、後で簡単にアクセスできる場所にコピーします。
オプションの手順として、ブラウザーを開き、ホスト名を入力して実行されていることを確認します。 既定のホーム ページが表示されます。
重要
このモジュールの「Azure DevOps 環境をクリーンアップする」ページには、重要なクリーンアップ手順が含まれています。 クリーンアップは、このモジュールを完了した後に Azure リソースに対して課金されないようにするのに役立ちます。 このモジュールを最後まで実行しなかったとしても、クリーンアップ手順は必ず行ってください。
Azure Pipelines でパイプライン変数を作成する
Azure Pipelines を使用したリリース パイプラインの作成 モジュールで、App Service に Web アプリの名前を格納する変数をパイプラインに追加しました。 ここで、同じ操作を行います。 また、Azure Functions インスタンスのランキング アプリの名前を追加します。
これらの名前はパイプライン構成でハードコーディングできますが、変数として定義すると、構成の再利用性が高くなります。 さらに、インスタンスの名前が変更された場合は、構成を変更せずに変数を更新し、パイプラインをトリガーできます。
プロジェクトに変数グループを追加します。
Space Game - Web - Azure Functions プロジェクトは、Azure DevOps で開く必要があります。
メニューで [ パイプライン] を選択し、[ パイプライン ] で [ライブラリ] を選択 します。 [ライブラリ] ウィンドウが表示されます。
コマンド バーまたはウィンドウの中央で、[ 変数グループ] を選択します。 [新しい変数グループ] ページが表示されます。
変数グループ名として、「 Release」と入力します。
[ 変数 ] で [ 追加 ] を選択します。
変数の名前として、「 WebAppName」と入力します。 値には、Web アプリ用に作成された App Service インスタンスの名前 ( tailspin-space-game-web-4692 など) を入力します。
重要
完全なホスト名ではなく、App Service インスタンスの名前を設定します。 たとえば、この演習では、 tailspin-space-game-web-4692 がホスト名 tailspin-space-game-web-4692.azurewebsites.net のインスタンス部分です。
ランキング インスタンスの値を持つ LeaderboardAppName という名前の別の変数 ( tailspin-space-game-leaderboard-4692 など) を追加します。
値が「tailspin-space-game-rg」の ResourceGroupName という名前の最終的な変数を追加します。
ページの上部近くのコマンド バーで、[ 保存] を選択して 、リリース 変数グループをパイプラインに保存します。
変数グループ内の変数は次のようになります。
spike 環境を作成する
前のモジュールでは、 開発、 テスト、 ステージング の環境を作成しました。 ここで、同じ操作を行います。 今回は、 spike という名前の環境を作成します。
Azure DevOps メニューの [ パイプライン] で、[ 環境] を選択します。
[環境の作成] を選択します。 [ 新しい環境 ] ウィンドウが表示されます。
[名前] に「スパイク」と入力します。
残りのフィールドは既定値のままにします。
を選択してを作成します。
サービス接続を作成する
ここでは、Azure Pipelines が Azure サブスクリプションにアクセスできるようにするサービス接続を作成します。 Azure Pipelines では、このサービス接続を使用して、Web サイトを App Service にデプロイします。 前のモジュールで同様のサービス接続を作成しました。
重要
同じ Microsoft アカウントで Azure portal と Azure DevOps の両方にサインインしていることを確認します。
Azure DevOps の Space Game - Web - Azure Functions パイプライン プロジェクトで、メニューの下にある [ プロジェクトの設定] を選択します。 [ プロジェクトの詳細 ] ウィンドウが表示されます。
メニューの [ パイプライン] で、[ サービス接続] を選択します。
[ サービス接続 ] ページで、[ 新しいサービス接続] を選択し、[ 新しいサービス接続 ] ウィンドウで [ Azure Resource Manager] を選択し、[ 次へ] を選択します。
[ 新しいサービス接続 ] ウィンドウで、[ サービス プリンシパル (自動)] を選択し、[ 次へ] を選択します。
[ 新しい Azure サービス接続 ] ウィンドウで、次の設定を選択または入力します。
フィールド 価値 スコープのレベル サブスクリプション サブスクリプション Azure サブスクリプションを選択する リソース グループ テイルスピン・スペース・ゲーム・RG サービス接続名 Resource Manager - Tailspin - Space Game プロセス中に、Microsoft アカウントにサインインするように求められる場合があります。
[すべてのパイプラインにアクセス許可を付与する] が選択されていることを確認します。
保存 を選択します。
Azure DevOps は、テスト接続を実行して、Azure サブスクリプションに接続できることを確認します。 Azure DevOps が接続できない場合は、2 回目にサインインする機会があります。