ラボ: Azure Container Apps を使用してコンテナー アプリをデプロイおよび管理する
学生ラボ回答キー
手順
このラボでは、Azure Container Apps を使用してアプリをデプロイおよび管理します。 ソリューションを実装するために、まず、ローカル ツールと Azure リソースを組み合わせて使用する開発環境を構成します。 環境が準備できたら、Azure Container Registry、Azure Container Apps、Azure Pipelines を使用してアプリをデプロイし、管理します。
このラボを完了すると、次のことができるようになります。
- Azure Container Registry と Azure Container Apps の間のセキュリティで保護された接続を構成する。
- Azure Container Apps でコンテナー アプリを作成して構成します。
- Azure Pipelines を使用することで、継続的インテグレーションを構成します。
- Azure Container Apps にデプロイされたアプリをスケーリングします。
- Azure Container Apps でリビジョンを管理します。
演習 1:Azure リソースを構成する
この演習では、Azure Container Apps ソリューションをサポートする Azure リソースを構成します。
以下のタスクを完了するには、10 から 15 分ほどかかります。
- リソース グループの設定を確認する。
- サブネットを含んだ Azure Virtual Network を構成する。
- Azure Service Bus リソースを構成する。
- Azure Container Registry リソースを構成する。
タスク 1:リソース グループの設定を確認する
以下の手順を実行して、このラボで使用するリソース グループの場所の設定を確認します。
-
ラボ環境で、ブラウザー ウィンドウを開き、Azure portal に移動します:
https://portal.azure.com/
このラボに適したサブスクリプションまたはアカウントを使用して Azure portal にサインインする際にサポートが必要な場合は、クラスのインストラクターと一緒に作業してください。
-
Azure portal のホーム ページで、[移動] の下の [リソース グループ] を選択します。
-
[リソース グループ] ページで、RG1 を選択します。
RG1 リソース グループが作成されていない場合は、ここで作成します。
-
RG1 リソース グループに割り当てられている [場所] の設定をメモしておきます。
このラボで他の Azure リソースを作成するときは、同じ場所またはリージョンを使用します。
-
[RG1] ページを閉じ、[リソース グループ] ページを閉じます。
タスク 2:仮想ネットワークとサブネットを構成する
以下の手順を実行して仮想ネットワークとサブネットを構成します。
-
Azure portal の上部の検索バーの [検索] テキストボックスに、「仮想ネットワーク」と入力します
-
検索結果で、[仮想ネットワーク] を選択します。
-
[仮想ネットワークの作成] を選択します。
-
[基本] タブで、仮想ネットワークを以下のように構成します。
- リソース グループ名:[RG1] を選択します
- 仮想ネットワーク名:「VNET1」と入力します
- リージョン: 指定したリージョンがリソース グループの場所の設定と一致していることを確認します。
-
[IP アドレス] タブを選択します。
-
[IP アドレス] タブの [サブネット] で、[既定値] を選択します。
-
[サブネットの編集] ページで、サブネットを以下のように構成します。
- 名前: 「
PESubnet
」と入力します - 開始アドレス:10.0.0.0 が指定されていることを確認します。
- サブネット サイズ:/24 (256 個のアドレス) が指定されていることを確認します。
この最初のサブネットは、プライベート エンドポイント (Azure Container Registry) 用に使用されます。
- 名前: 「
-
[保存] を選択します。
-
[IP アドレス] タブで、[+ サブネットの追加] を選択します。
-
[サブネットの追加] ページで、サブネットを以下のように構成します。
- 名前: 「
ACASubnet
」と入力します - 開始アドレス:10.0.4.0 が指定されていることを確認します。
- サブネット サイズ:/23 (512 個のアドレス) が指定されていることを確認します。
Azure Container Apps のサブネットには、256 よりも大きいアドレス空間が必要です。
- 名前: 「
-
[追加] を選択します。
-
Review + create を選択します。
-
検証が成功したら、[作成] を選択します。
-
デプロイが完了するまで待ってから、[VNET1] ページを閉じます。
タスク 3:Service Bus を構成する
以下の手順を実行して Service Bus インスタンスを構成します。
-
Azure portal の上部の検索バーの [検索] テキストボックスに、「service bus」と入力します
-
検索結果で、[Service Bus] を選択します。
-
[Service Bus の名前空間の作成] を選択します。
-
[基本] タブで、Service Bus 名前空間を以下のように構成します。
- リソース グループ名:[RG1] を選択します
- 名前空間の名前: 「sb-az2003-」の後に自分のイニシャルと日付を続けて入力します。 たとえば、sb-az2003-cah12oct とします。
- 場所: 指定した場所がリソース グループの場所の設定と一致していることを確認します。
- 価格レベル:[Basic] を選択します。
-
Review + create を選択します。
-
検証に成功というメッセージが表示されたら、[作成] を選択します。
-
デプロイが完了するまで待ってから、[Service Bus 名前空間] ページを閉じます。
タスク 4:Azure コンテナー レジストリを構成する
以下の手順を実行して Container Registry インスタンスを構成します。
-
Azure portal の上部の検索バーの [検索] テキストボックスに、「コンテナー レジストリ」と入力します
-
検索結果で、[コンテナー レジストリ] を選択します。
-
[コンテナー レジストリ] ページで、[コンテナー レジストリの作成] または [+ 作成] を選択します。
-
[コンテナー レジストリの作成] ページの [基本] タブで、以下の情報を指定します。
[!NOTE] レジストリの名前は一意である必要があります。 また、プライベート エンドポイントを使用するプライベート リンクには、Premium レベルが必要です。
- リソース グループ: [RG1] を選択します。
- レジストリ名: 「acraz2003」の後に自分のイニシャルと日付を続けて入力します。 例: acraz2003cah12oct
- 場所: 指定した場所がリソース グループの場所の設定と一致していることを確認します。
- SKU:[Premium] を選択します。
-
Review + create を選択します。
-
検証に成功したというメッセージが表示されたら、[作成] を選択します。
-
デプロイが完了したら、コンテナー レジストリ リソースを開きます。
-
コンテナー レジストリのページで、左側のメニューにある [設定] の [ネットワーク] を選択します。
-
[ネットワーク] ページの [パブリック アクセス] タブで、[すべてのネットワーク] が選択されていることを確認します。
-
左側のメニューの [設定] で、[プロパティ] を選択します。
-
[プロパティ] ページで、[管理者ユーザー] を選択した後、[保存] を選択します。
-
[コンテナー レジストリ] ページを閉じます。
-
Azure portal (ブラウザー) ウィンドウを閉じます。
演習 2:ホスト環境で開発者ツールを構成する
この演習では、スクリプトおよび開発者ツールが仮想マシン上で正しく構成されていることを確認します。
以下のタスクを完了するには、20 から 25 分ほどかかります。
- Azure CLI 拡張機能を構成する。
- Docker Desktop をインストールします。
- .NET 8 SDK をインストールする。
- Visual Studio Code を更新し、拡張機能を構成する。
タスク 1:Visual Studio Code をアンインストールする
以下の手順を実行して、Visual Studio Code をアンインストールします。
-
Windows スタート メニューを開きます。
-
[スタート] メニューで [設定] を選びます。
-
左側のメニューで、[アプリ] を選択し、[インストールされているアプリ] を選択します。
-
Microsoft Visual Studio Code を見つけます。
-
Microsoft Visual Studio Code の右側にある省略記号 (…) を選択し、[アンインストール] を選択します。
-
ポップアップ ウィンドウで、[アンインストール] を選択します。
-
メッセージが表示されたら、[はい] を選択し、[OK] を選択します。
-
[設定] を閉じます。
タスク 2:Azure CLI 拡張機能を構成する
以下の手順を実行して、Azure CLI を構成します。
-
コマンド ラインまたはターミナル アプリケーション (Windows コマンド プロンプトなど) を開きます。
-
az login
コマンドを使用して Azure にサインインします。ブラウザー ウィンドウが開き、Azure アカウントを選択できます。
-
プロンプトに従って認証プロセスを完了します。
-
ブラウザー ウィンドウを閉じます。
-
コマンド ライン アプリで、Azure Container Apps 拡張機能をインストールするために、次のコマンドを入力します:
az extension add --name containerapp --upgrade
-
コマンド ライン アプリを閉じます。
タスク 3:Docker Desktop のインストール
以下の手順を実行して、Docker Desktop をインストールします。
-
ブラウザー ウィンドウを開いてから、Docker Desktop のインストール ページ (
https://docs.docker.com/desktop/install/windows-install/
) に移動します -
[Docker Desktop for Windows] を選択し、インストーラー ファイルがダウンロードされるのを待ちます。
-
ダウンロードしたインストーラー ファイルを開き、オンラインの手順に従って Docker Desktop をインストールします。
インストール プロセスは 5 分ほどかかります。
-
インストールが完了したら、[閉じる] を選択して再起動します。
-
更新された仮想マシンが再起動したら、[Docker サブスクリプション サービス契約] ウィンドウが表示されるまで待ちます。
-
[Docker サブスクリプション サービス契約] ページで、[同意する] を選択します。
-
[Docker Desktop のセットアップの完了] ページで、[完了] を選択します。
-
[ユーザー アカウント制御] ページで、[はい] を選択します。
-
[Docker Desktop へようこそ] ページで、[サインインせずに続行] を選択します。
-
[実行する作業について教えてください] ページで、[スキップ] を選択します。
-
Docker エンジンのスタートアップ プロセスが完了するのを待ってから、Docker Desktop アプリを最小化します。
Docker Desktop は閉じず、実行中のアプリを最小化するだけです。
タスク 4:.NET 8 SDK をインストールする
以下の手順を実行して、.NET 8 SDK をインストールします。
-
Web ブラウザー ウィンドウを開いてから、.NET 8 SDK ダウンロード ページ (
https://dotnet.microsoft.com/download
) に移動します -
.NET SDK x64 を選択します
-
ダウンロードが完了したら、インストール ファイルを開き、オンラインの手順に従って .NET 8 SDK をインストールします。
-
ブラウザー ウィンドウを閉じます。
タスク 5:Visual Studio Code に C#、Docker、Azure App Service の拡張機能を構成する
以下の手順を実行して、Visual Studio Code に拡張機能を構成します。
-
Web ブラウザー ウィンドウを開き、Visual Studio Code ダウンロード ページ (
https://code.visualstudio.com/download
) に移動します -
Windows を選択し、インストーラー ファイルがダウンロードされるのを待ちます。
-
Visual Studio Code インストーラー ファイルを開きます。
-
使用許諾契約書に同意し、既定の設定をそのまま使って続行してインストールを完了します。
-
Visual Studio Code を開きます。
-
アクティビティ バーで、[拡張機能] を選択します。
アクティビティ バーは、Visual Studio Code ユーザー インターフェイスの左側にある縦型メニューです。
-
[Marketplace で拡張機能を検索する] テキストボックスに「C#」と入力します。
「C#」と入力すると拡張機能の一覧にフィルターが適用され、C# コーディングに関係のある拡張機能のみが表示されます。
-
利用できる拡張機能にフィルターを適用した一覧で、Microsoft によって発行された、”C# Dev Kit - Microsoft の公式の C# 拡張機能” というラベルの拡張機能を選択します。
-
拡張機能をインストールするには、[インストール] を選択します。
-
インストールが完了するまで待ちます。
C# 開発キットのインストールには 1 分程度かかります。
-
[拡張機能] ビューで、C# を docker に置き換えます。
-
利用できる拡張機能のフィルタリングされた一覧で、Microsoft によって公開されている Docker というラベルの拡張機能を選択します。
-
拡張機能をインストールするには、[インストール] を選択します。
-
[拡張機能] ビューで、docker を azure app service に置き換えます。
-
利用できる拡張機能のフィルタリングされた一覧で、Microsoft によって公開されている Azure App Service というラベルの拡張機能を選択します。
-
拡張機能をインストールするには、[インストール] を選択します。
-
Visual Studio Code を閉じます。
演習 3:アプリのデプロイ リソースを作成して構成する
この演習では、Azure DevOps プロジェクトと Azure パイプラインを構成し、Docker イメージを作成してコンテナー レジストリにプッシュし、セルフホステッド Windows エージェントをデプロイします。
以下のタスクを完了するには、40 分ほどかかります。
- Azure DevOps プロジェクトを構成し、コード リポジトリを初期化します。
- .NET アプリを作成し、Azure DevOps リポジトリに同期します。
- Docker イメージを作成し、そのイメージを Azure コンテナー レジストリにプッシュします。
- Pipeline1 という名前の Azure パイプラインを作成します。
- セルフホステッド Windows エージェントをデプロイします。
タスク 1:Azure DevOps プロジェクトを構成し、コード リポジトリを初期化する
以下の手順を実行して、Azure DevOps プロジェクトを構成します。
-
ブラウザー ウィンドウを開いてから、Azure portal (
https://portal.azure.com/
) に移動します -
上部の検索バーの [検索] テキストボックスに、「devops」と入力します
-
検索結果で、[Azure DevOps 組織] を選択します。
-
[自分の Azure DevOps 組織] を選択します。
-
[詳細情報をいくつか入力する必要があります] ページで、[続行] を選びます。
-
[Azure DevOps の概要] ページで、[新しい組織の作成] を選んでから、[続行] を選びます。
-
[もう少しで完了します] ページで、表示された文字を入力し、[続行] を選択します。
-
Azure DevOps 組織のページで、[組織の設定] を選択します。
-
左側のメニューで、[セキュリティ] の下の [ポリシー] を選択します。
-
[パブリック プロジェクトを許可します] を [オン] に設定し、[保存] を選択します。
-
DevOps 組織のページに戻ります。
-
[プロジェクトを作成して開始します] で、以下の情報を入力します。
- プロジェクト名:AZ2003Project
- 説明: AZ2003 コード プロジェクト
- 可視性:パブリック
-
[プロジェクトの作成] を選択します。
-
[AZ2003Project] ページの左側のメニューで、[リポジトリ] を選択します。
-
メイン ブランチを [Readme または gitignore を使用して初期化する] で、[初期化] を選択します。
-
[クローン] を選択し、続けて [Clone in VS Code](VS Code にクローン) を選択します。
-
[このサイトは、Visual Studio Code を開こうとしています] ダイアログで、[開く] を選択します。
-
[拡張機能がこの URI を開くことを許可しますか] ダイアログで、[開く] を選択します。
-
クローンするフォルダーを選択するウィンドウで、[デスクトップ] を選び、[新しいフォルダー] を選択し、「AZ2003」と入力して Enter キーを押します。
-
[リポジトリの宛先として選択] を選択します。
-
[複製したリポジトリを開きますか] ダイアログで、[開く] を選択し、[はい、作成者を信頼します] を選択します。
タスク 2:.NET アプリを作成し、Azure DevOps リポジトリに同期する
以下の手順を実行して、.NET アプリを作成し、Azure DevOps リポジトリに同期します。
-
Visual Studio Code の [ターミナル] メニューで、[新しいターミナル] を選択します。
-
ターミナル コマンド プロンプトで、.NET SDK が正しくインストールされていることを確認するために、次のコマンドを入力します。
dotnet --version
“dotnet” という用語が認識されないことを示すエラーが発生した場合は、次のようにします。
- Windows スタート メニューで、Windows の [設定] を開きます。
- [設定] で、[アプリ] タブを開き、[インストールされているアプリ] を選択します。
- インストールされているアプリの一覧で Microsoft .NET SDK 8.0.100 (x64) を見つけます。
- Microsoft .NET SDK 8.0.100 (x64) の右側にある省略記号 (…) を選択し、[変更] を選択します。
- アプリによる変更を許可するために、[はい] を選択します。
- Microsoft .NET SDK 8.0.100 のウィンドウで、[修復] を選択します。
- 修復操作が正常に完了するまで待ってから、[閉じる] を選択します。
- 設定ウィンドウを閉じます。
- Visual Studio Code ウィンドウに戻り、Visual Studio Code を閉じます。
- Visual Studio Code をもう一度開きます。
- Visual Studio Code ターミナルのコマンド プロンプトで、「
dotnet --version
」と入力します - バージョン番号が表示されます。 次に例を示します。8.0.100。
-
ターミナル コマンド プロンプトで、Git 電子メール設定を構成するために次のコマンドを使用します。
「git config –global user.email」の後に続けて、ラボ環境で提供されるアカウントの電子メール情報を入力します
例: git config –global user.email LabUser-12345678@labhoster.onmicrosoft.com
-
ターミナル コマンド プロンプトで、Git ユーザー名を構成するために次のコマンドを使用します。
「git config –global user.name」の後に続けて、ラボ環境で提供されるアカウントのユーザー名情報を入力します
例: git config –global user.name LabUser-12345678
-
[表示] メニューで [コマンド パレット] を選択してください。
-
コマンド プロンプトで、[.NET: New Project] を選択し、次に [ASP.NET Core Empty] を選択します。
-
リソースが読み込まれるのを待ってから、次の情報を入力します。
- 新しいプロジェクトに名前を付けるテキスト ボックスに「AZ2003App」と入力します
- 既定のディレクトリをそのまま使用します。
-
ターミナル コマンド プロンプトを開き、次の dotnet CLI コマンドを実行します。
dotnet build
-
ルート プロジェクト フォルダーに、以下の情報を含む .gitignore ファイルを作成します。
[Bb]in/ [Oo]bj/
-
[ファイル] メニューで、[すべて保存] を選択します。
-
[ソース管理] ビューを開きます。
-
コミット メッセージのテキスト ボックスに、「initial commit」と入力します。
-
[コミット] を選択し、[はい] を選択して変更をステージングおよびコミットします。
-
[変更の同期] を選択し、[OK] を選択してファイルを DevOps リポジトリに同期します。
-
[Git Credential Manager] ダイアログで、ラボ環境の資格情報 (ユーザー名とパスワード) を入力します。
タスク 3:Docker イメージを作成し、そのイメージを Azure コンテナー レジストリにプッシュする
以下の手順を実行して Docker イメージを作成し、Azure Container Registry にイメージをプッシュします。
-
Visual Studio Code で AZ2003 コード プロジェクトを開いていることを確認します。
-
Dockerfile を作成するために、コマンド パレットから次のコマンドを実行します: Docker: Add Docker Files to Workspace。
-
プロンプトが表示されたら、以下の情報を指定します。
- アプリケーション プラットフォーム: .NET ASP.NET Core。
- ポート:5000。
- Include Docker Compose Files (Docker Compose ファイルを含める): “いいえ”
-
Docker イメージを作成するために、コマンド パレットで次のコマンドを実行します: Docker Images: Build Image。
-
イメージのビルド プロセスが完了するまで待ってから、ターミナルを閉じます。
-
左側のメニューで、Docker ビューを開くために [Docker] を選択します。
-
DOCKER ビューの [レジストリ] で [レジストリの接続] を選択し、[Azure Container Registry] を選択します。
-
DOCKER ビューで、[Azure] を展開し、[許可] を選択します。
-
ブラウザー ウィンドウで、このラボ用に使用している Azure アカウントを選択します。
-
Visual Studio Code に戻ります。
-
DOCKER ビューで、Azure サブスクリプションを展開し、作成した Azure コンテナー レジストリが表示されていることを確認します。
-
Docker イメージを Azure コンテナー レジストリにプッシュするために、コマンド パレットで次のコマンドを実行します: Docker Images: Push」と入力して選択します。
-
コマンドが実行されたら、次の手順を実行します。
- イメージ グループの選択: az2003project を選択します
- イメージ (タグ) の選択: latest を選択します
- レジストリ プロバイダーの選択: Azure を選択します
- サブスクリプションを選択します。
- プッシュ先 Azure コンテナー レジストリの選択: 作成したコンテナー レジストリを選択します。 たとえば、acraz2003cah12oct です。
- イメージをデプロイするために Enter キーを押します。
-
イメージ プッシュ プロセスが完了するまで待ってから、ターミナルを閉じます。
-
ソース管理ビューを開き、コミット メッセージを入力してから、[コミット] と [変更の同期] を行います。
タスク 4:Pipeline1 という名前の Azure パイプラインを作成する
以下の手順を実行して、Pipeline1 という名前の Azure パイプラインを作成します。
-
Azure DevOps プロジェクトを開きます。
-
左側のメニューから、[パイプライン] を選択します。
-
[Create Pipeline] を選択します。
-
[Azure Repos Git] を選択します。
-
[リポジトリの選択] ページで、AZ2003Project を選択します。
-
[スタート パイプライン] を選択します。
-
[保存および実行] で、[保存] を選択した後、[保存] を選択します。
-
パイプラインの名前を “Pipeline1” に変更するために、次の手順を実行します。
-
左側のメニューから、[パイプライン] を選択します。
-
AZ2003Project パイプラインの右側にある [その他のオプション] を選択した後、[名前の変更/移動] を選択します。
-
[パイプラインの名前変更/移動] ダイアログの [名前] で、「Pipeline1」と入力した後、[保存] を選択します。
-
タスク 5:セルフホステッド Windows エージェントをデプロイする
Azure パイプラインが Windows、Azure、およびその他の Visual Studio ソリューションをビルドしてデプロイするには、ホスト環境に少なくとも 1 つの Windows エージェントが必要です。
以下の手順を実行してセルフホステッド Windows エージェントをデプロイします。
-
DevOps 組織のホーム ページに移動します。
-
右上隅の [ユーザー設定] を選択します。
-
[ユーザー設定] ダイアログで、[個人用アクセス トークン] を選択します。
-
個人用アクセス トークンを作成するには、[+ 新しいトークン] を選択します。
-
[名前] に「AZ2003」と入力します。
-
[新しい個人用アクセス トークンの作成] ウィンドウの下部で、スコープの完全な一覧を表示するには、[すべてのスコープを表示] を選択します。
-
スコープでは、[エージェント プール (読み取り、管理)] と [デプロイ グループ (読み取り、管理)] を選択します。
他のすべてのボックスがクリアされていることを確認します。
-
[作成] を選択します
-
[成功] ページで、トークンをコピーするために [クリップボードにコピー] を選択してから、[閉じる] を選択します。
-
メモ帳を開き、トークンのコピーをメモ帳に保存します。
このトークンは、エージェントを作成するときに使用します。
-
DevOps 組織に移動し、[組織の設定] を選択します。
-
左側のメニューの [パイプライン] で、[エージェント プール] を選択します。
-
[エージェントの取得] ダイアログ ボックスが開いた場合は、次の手順に進みます。それ以外の場合は以下の手順を実行します。
-
既定のプールを選択するために、[Default] を選択します。
既定のプールが存在しない場合は、[プールの追加] を選択した後、以下の情報を入力します。
-
[プールの種類] で、[セルフホステッド] を選択します。
-
[名前] に「Default」と入力します
-
[作成] を選択します
-
先ほど作成したプールを開くために、[Default] を選択します。
-
-
[Default] で、[エージェント] タブを選択し、[新しいエージェント] を選択します。
-
-
[エージェントの取得] ダイアログ ボックスで、以下の手順を実行します。
-
[Windows] タブを選択します。
-
左側のペインで、x64 を選択します。
-
右側のペインで [ダウンロード] を選択します。
-
-
ダウンロードが完了するまで待ちます。
-
[エージェントの取得] ダイアログを閉じます。
次の一連の手順では、”エージェントの作成” プロセスについて説明します。
-
Windows エクスプローラーを使用して、エージェント用に以下のフォルダーの場所を作成します。
C:\agents
-
Windows エクスプローラーを使用して、ダウンロードしたエージェント ZIP ファイルを、作成したエージェント ディレクトリに展開します。
-
ファイルの抽出プロセスが完了するまで待ってから、エクスプローラーを閉じます。
-
管理者として Windows PowerShell を開き、agents ディレクトリに移動して、次の PowerShell コマンドを入力します。
.\config
-
構成プロンプトで以下の対応を行います。
- サーバー URL の入力 >: DevOps 組織の URL を入力します。 (例:
https://dev.azure.com/<your organization>
)。 - 認証の種類の入力 (PAT の場合は Enter を押します) >: Enter を押します。
- 個人用アクセス トークンの入力 >: メモ帳にコピーした個人用アクセス トークンを貼り付けます。
- エージェント プールの入力 (既定値の場合は Enter を押します) >: Enter を押します。
- エージェント名の入力 (YOUR-PC-NAME の場合は Enter を押します) > 「az2003-agent」と入力します
- 作業フォルダーの入力 (_work の場合は Enter を押します) >: Enter を押します。
- 「エージェントをサービスとして実行しますか?」と入力します。 (Y/N) (N の場合は Enter を押します) >: 「Y」と入力します
- SERVICE_SID_TYPE_UNRESTRICTED の有効化の入力 (Y/N) (N の場合は Enter を押します) >: 「Y」と入力します
- サービスで使用するユーザー アカウントの入力 (NT AUTHORITY\NETWORK SERVICE の場合は Enter を押します) >: Enter を押します。
- Enter whether to prevent service starting immediately after configuration is finished? (構成が完了した直後にサービスが開始されないようにするかどうかを入力します。) (Y/N) (N の場合は Enter を押します) >: Enter を押します。
エージェントが正常に開始されたことを知らせるメッセージが表示されます。
さらに助けが必要であれば、次のドキュメントを参照してください:
https://learn.microsoft.com/azure/devops/pipelines/agents/windows-agent
- サーバー URL の入力 >: DevOps 組織の URL を入力します。 (例:
-
Windows PowerShell を閉じます。
演習 4:Azure Container Apps との安全な接続のために Azure Container Registry を構成する
あなたは、次の要件を満たす Azure リソースを構成するように求められています。
- リソース グループには、ユーザー割り当てマネージド ID が含まれている必要があります。
- コンテナー レジストリは、そのマネージド ID を使用して成果物をプルできる必要があります。
- マネージド ID へのアクセスは、最小特権の原則を使用して制限する必要があります。
- コンテナー レジストリには、VNET1/PESubnet 上のプライベート エンドポイントからアクセスできる必要があります。
この演習では、コンテナー アプリとの安全な接続のためにコンテナー レジストリ インスタンスを構成します。
以下のタスクを完了するには、10 分ほどかかります。
- ユーザー割り当てマネージド ID を構成する。
- マネージド ID の AcrPull アクセス許可を使用してコンテナー レジストリを構成します。
- プライベート エンドポイント接続を使用してコンテナー レジストリを構成します。
タスク 1:ユーザー割り当てマネージド ID を構成する
ユーザー割り当てマネージド ID を構成するには、次の手順を実行します。
-
Azure portal を開きます。
-
Azure portal の上部にある検索バーに、「マネージド ID」と入力します
-
フィルター処理されたリソースのリストで、[ユーザー割り当てマネージド ID] を選びます。
-
[ユーザー割り当てマネージド ID の作成] ページで、次の情報を指定します。
- リソース グループ: RG1
- リージョン: リソース グループのリージョン設定に一致するリージョンを入力します。
- 名前: uai-az2003
-
Review + create を選択します。
-
設定が検証されるまで待ってから、[作成] を選択します。
-
マネージド ID のページを閉じます。
タスク 2:マネージド ID の AcrPull アクセス許可を使用してコンテナー レジストリを構成する
マネージド ID の AcrPull アクセス許可を使用して Container Registry を構成するには、次の手順を実行します。
-
Azure portal で、Container Registry リソースを開きます。
-
左側のメニューで [アクセス制御 (IAM)] を選びます。
-
[アクセス制御 (IAM)] ページで、[ロールの割り当ての追加] を選びます。
-
AcrPull ロールを検索し、[AcrPull] を選択します。
-
[次へ] を選択します。
-
[メンバー] タブの [アクセスの割り当て先] の右側で [マネージド ID] を選びます。
-
[+ メンバーの選択] を選択します。
-
[マネージド ID の選択] ページの [マネージド ID] で、[ユーザー割り当てマネージド ID] を選択してから、このプロジェクト用に作成されたユーザー割り当てマネージド ID を選択します。
例: uai-az2003。
-
[マネージド ID の選択] ページで、[選択] を選びます。
-
[ロールの割り当ての追加] ページの [メンバー] タブで、[レビューと割り当て] を選びます。
-
[確認と割り当て] タブで、[確認と割り当て] を選択します。
-
ロールの割り当てが追加されるまで待ちます。
通知が表示されますが、確認しなかった場合は、[ロールの割り当て] タブをチェックして、uai-az2003 に AcrPull ロールが割り当てられていることを確認できます。
タスク 3:プライベート エンドポイント接続を使用してコンテナー レジストリを構成する
以下の手順を実行して、プライベート エンドポイント接続を使用してコンテナー レジストリを構成します。
-
ポータルで Container Registry リソースが開かれていることを確認します。
-
[設定] で、[ネットワーク] を選びます。
-
[プライベート アクセス] タブで、[+ プライベート エンドポイント接続の作成] を選びます。
-
[基本] タブの [プロジェクトの詳細] で、次の情報を指定します。
- リソース グループ: RG1
- 名前: pe-acr-az2003
- リージョン: 指定したリージョンがリソース グループのリージョン設定と一致していることを確認します。
-
次へ:リソース を選択します。
-
[リソース] タブで、次の情報が表示されていることを確認します。
- リソースの種類:[Microsoft.ContainerRegistry/registries] が選択されていることを確認します。
- リソース: お使いのレジストリの名前が選択されていることを確認します。
- ターゲット サブリソース:そのレジストリが選択されていることを確認します。
-
[次へ: 仮想ネットワーク] を選択します。
-
[仮想ネットワーク] タブの [ネットワーク] で、次の情報が表示されていることを確認します。
- 仮想ネットワーク:VNET1 が選択されていることを確認します
- サブネット:PESubnet が選択されていることを確認します。
-
[次: DNS] を選びます。
-
[DNS] タブの [プライベート DNS 統合] に、次の情報が表示されていることを確認します。
- プライベート DNS ゾーンと統合する:[はい] が選択されていることを確認します。
- プライベート DNS ゾーン:(new) privatelink.azurecr.io が指定されていることに注意してください。
-
タグを選択します。
-
確認と作成 をクリックします。
-
[確認と作成] タブで、”検証に合格しました” というメッセージが表示されたら、[作成] を選びます。
-
デプロイが完了するまで待ちます。
-
[デプロイが完了しました] が表示されたら、プライベート エンドポイントのデプロイ ページを閉じます。
エクササイズ 5:Azure Container Apps でコンテナー アプリを作成して構成する
あなたは、以下の要件を満たすコンテナー アプリを構成するように求められました。
- VNET1/ACASubnet にデプロイされます。
- コンテナー レジストリからイメージをプルします。
- ユーザー割り当てマネージド ID (uai-az2003) を使用して認証します。
- コンテナー アプリを使用して、.NET クライアント タイプを使用する Service Bus インスタンスに接続します。
- アプリは、1,000 個の同時 HTTP 要求がある場合にいつでも追加されるレプリカを最大 2 個実行できます。
この演習では、Azure Container Registry のイメージから Azure Container Apps プラットフォームにコンテナー アプリをデプロイします。
以下のタスクを完了するには、20 から 25 分ほどかかります。
- Azure Container Registry イメージを使用するコンテナー アプリを作成する。
- ユーザー割り当て ID を使用して認証するようにコンテナー アプリを構成する。
- コンテナー アプリと Service Bus の間の接続を構成する。
- HTTP スケール ルールを構成する。
タスク 1:Azure Container Registry イメージを使用するコンテナー アプリを作成する
以下の手順を実行して、Azure Container Registry イメージを使用するコンテナー アプリを作成します。
-
Azure portal の上部にある検索バーに、「コンテナー アプリ」と入力します
-
フィルタリングされたリソースの一覧で、[コンテナー アプリ] を選択します。
-
[コンテナー アプリ] ページで、[コンテナー アプリの作成] を選択します。
-
[基本] タブで、以下を指定します。
- リソース グループ: RG1
- コンテナー アプリ名: aca-az2003
-
リージョン: 指定したリージョンが VNET1 のリージョン設定と一致していることを確認します (リソース グループの場所と一致する必要があります)。
マネージド環境に VNET1 を選択できるように、コンテナー アプリは仮想ネットワークと同じリージョン/場所に存在する必要があります。 このガイド付きプロジェクトでは、すべてのリソースをリソース グループで指定したリージョン/場所に保持します。
- Container Apps 環境:[新規作成] を選択します。
-
[Container Apps 環境の作成] ページで、[ネットワーク] タブを選択した後、以下を指定します。
- 独自の仮想ネットワークを使用する:[はい] を選択します。
- 仮想ネットワーク:[VNET1] を選択します。
- インフラストラクチャ サブネット:ACASubnet。
[!NOTE] ACASubnet サブネットが一覧にない場合は、この作成プロセスをキャンセルし、仮想ネットワーク リソースを開いて、ACASubnet アドレス範囲を 10.0.2.0/23 に調整してから、コンテナー アプリ リソースを作成する手順を再開します。
-
[Container Apps 環境の作成] ページで、[作成] を選択します。
-
[コンテナー アプリの作成] ページで、[コンテナー] タブを選択した後、以下を指定します。
- クイックスタート イメージを使用する:この設定はチェックを外します。
- 名前: aca-az2003 が指定されていることを確認します。
- イメージ ソース:[Azure Container Registry] が選択されていることを確認します。
- レジストリ:コンテナー レジストリを選択します。 例: acraz2003cah12oct.azurecr.io
- イメージ:az2003project を選択します
- イメージ タグ:[最新] を選択します
-
Review + create を選択します。
-
検証に合格したら、[作成] を選択します。
-
デプロイが完了するまで待ちます。
[!NOTE] このデプロイの完了には 5 から10 分程度かかる可能性があります。
タスク 2:ユーザー割り当て ID を使用して認証するようにコンテナー アプリを構成する
以下の手順を実行して、ユーザー割り当て ID を使用して認証するようにコンテナー アプリを構成します。
-
Azure portal で、作成したコンテナー アプリを開きます。
-
[設定] で、[ID] を選択します。
-
[ユーザー割り当て] のタブを選択します。
-
[ユーザー割り当てマネージド ID の追加] を選択します。
-
[ユーザー割り当てマネージド ID の追加] ページで、[uai-az2003] を選択した後、[追加] を選択します。
タスク 3:コンテナー アプリと Service Bus の間の接続を構成する
以下の手順を実行して、コンテナー アプリと Service Bus の間の接続を構成します。
-
Azure portal で、コンテナー アプリが開かれていることを確認します。
-
[設定] で、[サービス コネクタ (プレビュー)] を選択します。
-
[サービスに接続] を選択します。
-
[接続の作成] ページで、以下を指定します。
- サービスの種類:[Services Bus] を選択します。
- クライアントの種類:[.NET] を選択します。
-
[次へ: 認証] を選択します。
-
[認証] タブで、[ユーザー割り当てマネージド ID] を選択します。
-
タブを変更するには、[確認と作成] を選択します。
-
検証に成功したというメッセージが表示されたら、[作成] を選択します。
-
接続が作成されるまで待ちます。
Service Bus 接続が Service Connector (プレビュー) ページに表示されます。
タスク 4:HTTP スケール ルールを構成する
以下の手順を実行して、コンテナー アプリの HTTP スケール ルールを構成します。
-
コンテナー アプリがポータルで開かれていることを確認します。
-
左側のメニューの [アプリケーション] で、[Revisions and replicas] (リビジョンとレプリカ) を選択します。
-
アクティブなリビジョンに割り当てられている [名前] に注意してください。
-
左側のメニューの [アプリケーション] で、[スケーリング] を選びます。
-
現在のスケール ルールの設定を確認し、最小/最大レプリカ数を次のように構成します。
- 最小レプリカ数の設定:0
- 最大レプリカ数の設定:2
-
[スケール ルール] で、[+ 追加] を選択します。
-
[スケール ルールの追加] ページで、以下を指定します。
- ルール名:「scalerule-http」と入力します
- 型: [HTTP スケーリング] を選択します。
- 同時要求数: 値を 1000 に設定します。
-
[スケール ルールの追加] ページで、[追加] を選択します。
-
[スケーリング] ページで、[新しいリビジョンとして保存] を選択します。
-
新しいスケール ルールが表示されていることを確認します。
更新後にスケール ルールが表示されない場合は、選択したリビジョンをチェックして現在アクティブなリビジョンを表示し、必要に応じて [スケールとレプリカ] ページで選択したリビジョンを調整します。
演習 6: Azure Pipelines の使用による継続的インテグレーションを構成する
あなたは、以下の要件を満たす Container Apps の継続的インテグレーション環境を構成するように求められました。
- ADO 環境内の Azure Container Apps デプロイ タスクが必要です。
- Pipeline1 は、セルフホステッド エージェント プールを使用してコンテナー レジストリからコンテナー アプリにコンテナー イメージをデプロイする必要があります。
- パイプラインが少なくとも 1 回はイメージを正常にデプロイすることを保証する必要があります。
この演習では、Azure Container Registry のイメージから Azure Container Apps プラットフォームにコンテナー アプリをデプロイします。
以下のタスクを完了するには、10 分ほどかかります。
- セルフホステッド エージェント プールを使用するように Pipeline1 を構成する。
- Pipeline1 に Azure Container Apps デプロイ タスクを構成する。
- Pipeline1 デプロイ タスクを実行する。
タスク 1:セルフホステッド エージェント プールを使用するように Pipeline1 を構成する
以下の手順を実行して、セルフホステッド エージェント プールを使用するようにパイプラインを構成します。
-
Azure DevOps 組織が単独のブラウザー タブで開かれていることを確認します。
必要に応じて、新しいブラウザー タブを開き、
https://dev.azure.com
に移動してから、Azure DevOps 組織を開きます。 -
Azure DevOps ページで、DevOps プロジェクトを開くために、AZ2003Project を選択します。
-
左側のメニューで、[パイプライン] を選択します。
-
[Pipeline1] を選択し、[編集] を選択します。
-
セルフホステッド エージェント プールを使用するために、次の例に示すように azure-pipelines.yml ファイルを更新します。
trigger: - main pool: name: default steps:
-
[保存] を選択します。
-
コミット メッセージを入力した後、[保存] を選択します。
タスク 2:Pipeline1 に Azure Container Apps デプロイ タスクを構成する
以下の手順を実行して、Pipeline1 に Azure Container Apps デプロイ タスクを構成します。
-
Pipeline1 が編集用に開かれていることを確認します。
-
[タスク] の右側の [タスクの検索] フィールドに、「Azure コンテナー」と入力します
-
フィルター処理されたタスクの一覧で、[Azure Container Apps デプロイ] を選択します
-
[Azure Resource Manager 接続] で、使用しているサブスクリプションを選択した後、[承認] を選択します。
-
Azure portal タブで、コンテナー アプリ リソースを開いた後、[コンテナー] ページを開きます。
-
次の情報をメモ帳にコピーします。
- 名前
- レジストリ
- Image
- イメージ タグ
-
[コンテナー] ページからコピーした情報を使用して、次のタスク情報フィールドを構成します。
- デプロイする Docker イメージ: Registry/Image:Image タグ (メモ帳の情報に置き換えます)
- Azure コンテナー アプリ名: 名前 (メモ帳の情報に置き換えます)
次に例を示します。
- デプロイする Docker イメージ: acraz2003cah12oct.azurecr.io/az2003project:latest
- Azure コンテナー アプリ名: aca-az2003
-
[Azure リソース グループ名] フィールドに「RG1」と入力 します
[!NOTE] リソース グループ名を確認する必要がある場合は、コンテナー アプリ リソースの [概要] ページで確認できます。
-
Azure Container Apps デプロイ ページで、[追加] を選択します。
パイプラインの Yaml ファイルに、以下の AzureContainerApps タスクが含まれるようになったはずです。
trigger: - main pool: name: default steps: - task: AzureContainerApps@1 inputs: azureSubscription: '<Subscription>(<Subscription ID>)' imageToDeploy: '<Registry>/<Image>:<Image tag>' from Container App resource containerAppName: '<Name>' from Container App resource resourceGroup: '<resource group name>'
YAML 構成スニペットの例を以下に示します。
trigger: - main pool: name: default steps: - task: AzureContainerApps@1 inputs: azureSubscription: 'Visual Studio Enterprise(1111aaaa-22bb-33cc-44dd-555555eeeeee)' imageToDeploy: 'acraz2003cah12oct.azurecr.io/aspnetcorecontainer:latest' containerAppName: 'aca-az2003' resourceGroup: 'RG1'
-
[Pipeline1] ページで、[保存] を選択し、コミット メッセージを入力して、もう一度 [保存] を選択してコミットします。
タスク 3:Pipeline1 デプロイ タスクを実行する
以下の手順を実行して、Pipeline1 デプロイ タスクを実行します。
-
Azure DevOps で Pipeline1 が開かれていることを確認します。
-
AzureContainerApps タスクを実行するために、[実行] を選択します。
-
[パイプラインの実行] ページで、[実行] を選択します。
パイプライン ページが開き、関連付けられているジョブが表示されます。 ジョブ セクションにはジョブの状態が表示され、これが “キューに挿入済み” から “待機中” に進みます。
-
[ジョブ] に [アクセス許可が必要です] が表示されているかどうかを確認します。
ジョブを続行するためのアクセス許可が必要な場合は、[表示] を選択し、[許可] を選択して、必要なアクセス許可を指定します。
-
実行操作の状態を監視し、実行が成功したかを確認します。
キューに登録されたジョブの実行が開始されるまでに数分かかる場合があります。 1 分ほど経過すると、ジョブの状態が “実行中” から “成功” に変わります。
演習 7: Azure Container Apps でリビジョンを管理する
あなたは、次の要件を満たすように、Container Apps のトラフィック分割を構成するように依頼されました。
- v2 のサフィックスを使用するコンテナー アプリの新しいリビジョンを作成する必要があります。
- アプリへの要求の 25% が v2 リビジョンに送られるようにする必要があります。
- リビジョンに “current” と “updated” というラベルを付け、”—updated” リビジョンへの要求が、v2 というラベルのリビジョンに送られるようにする必要があります。
この演習では、コンテナー アプリの新しいリビジョンをデプロイし、2 つラベル付きリビジョン間でトラフィック分割を構成します。
以下のタスクを完了するには、5 から 10 分ほどかかります。
- リビジョン管理を複数に設定します。
- v2 サフィックスを持つ新しいリビジョンを作成します。
- リビジョンのラベルを構成します。
- リビジョンのトラフィックの割合を構成します。
タスク 1:リビジョン管理を複数に設定する
以下の手順を実行して、リビジョン管理を複数に設定します。
-
Azure portal で、コンテナー アプリ リソースを開いてください。
-
左側のメニューの [アプリケーション] で、[Revisions and replicas] (リビジョンとレプリカ) を選択します。
-
[リビジョン] ページの上部にある [リビジョン モードの選択] を選択してください。
-
単一から複数リビジョン モードに切り替えるには、[確認] を選択してください。
-
[リビジョン] ページで、[リビジョン モード] 設定が更新されるまで待ってください。
リビジョン モードは、更新完了後に [複数] に設定されます。
タスク 2:v2 サフィックスを持つ新しいリビジョンを作成する
以下の手順を実行して、v2 サフィックスを持つ新しいリビジョンを作成します。
-
Azure portal で、コンテナー アプリ リソースの [リビジョン] ページが開かれていることを確認してください。
-
ページの上部にある [新しいリビジョンの作成] を選択してください。
-
[新しいリビジョンの作成とデプロイ] ページで、次の手順を実行します。
- 名前/サフィックス:「v2」と入力してください
- [コンテナー イメージ] で、コンテナー イメージを選択してください。 たとえば、aca-az2003 です。
-
[作成] を選択します
-
デプロイが完了するまで待ってください。
タスク 3:リビジョンのラベルを構成する
リビジョンのラベルまたはトラフィック分割を構成する前に、イングレスを有効にする必要があります。
以下の手順を実行して、リビジョンのラベルを構成します。
-
左側のメニューの [設定] で、[イングレス] を選択してください。
-
イングレスが有効になっていない場合は、[有効] を選択してください。
-
[イングレス] ページで、次の情報を指定してください。
-
イグレス トラフィック: [どこからでもトラフィックを受け入れる] を選択してください。
-
イングレスの種類: [HTTP] を選択してください。
-
クライアント証明書モード: [無視] が選択されていることを確認してください。
-
トランスポート: [自動] が選択されていることを確認してください。
-
安全でない接続: 許可がチェックされていないことを確認してください。
-
ターゲット ポート: 「5000」と入力します
-
IP セキュリティ制限モード: [すべてのトラフィックを許可する] が選択されていることを確認してください。
-
-
[イングレス] ページの下部にある [保存] を選択し、更新が完了するまで待ってください。
-
左側のメニューの [Revisions] (リビジョン) で、[Revisions and replicas] (リビジョンとレプリカ) を選択します。
-
v2 リビジョンの [ラベル] に「updated」と入力してください
-
その他のリビジョンについては、「current」と入力してください
-
ページの最上部で [保存] を選択します。
-
イングレス設定が更新されるまで待ちます。
タスク 4:リビジョンに対するトラフィックの割合を構成する
以下の手順を実行して、リビジョンのトラフィックの割合を構成します。
-
[リビジョン] ページが開かれていることを確認してください。
-
v2 リビジョンの場合、[トラフィック] にパーセンテージとして「25」と入力してください。
-
もう 1 つのリビジョンについては、[トラフィック] にパーセンテージとして「75」と入力してください。
-
ページの最上部で [保存] を選択します。