次の方法で共有


GitHub または Azure Repos からカタログを追加して構成する

この記事では、Azure Deployment Environments デベロッパー センターまたはプロジェクトにカタログを追加して構成する方法について説明します。

カタログは、開発チームが環境を作成するための環境定義として知られる、キュレーション済みのコードとしてのインフラストラクチャ (IaC) のテンプレート一式を提供するのに役立ちます。 GitHub または Azure DevOps から独自のソース管理リポジトリをカタログとしてアタッチし、環境定義を含むフォルダーを指定できます。 Deployment Environments は、環境定義のフォルダーをスキャンし、開発チームが環境を作成するために利用できるようにします。

テンプレートをさらにセキュリティで保護するために、カタログは暗号化されています。Azure Deployment Environments は、Microsoft for Azure Services によって管理されるプラットフォームマネージド暗号化キーを使った保存時の暗号化をサポートしています。

  • GitHub でリポジトリをホストする方法については、GitHub の使用開始に関する説明をご覧ください。
  • Azure Repos プロジェクトで Git リポジトリをホストする方法については、「Azure Repos」をご覧ください。

Microsoft は、デベロッパー センターまたはプロジェクトに追加できる "クイック スタート" カタログと、リポジトリとして使用できるサンプル カタログを提供しています。 独自のプライベート リポジトリを使用することも、サンプル カタログ内の環境定義をフォークしてカスタマイズすることもできます。

この記事では、次のことについて説明します。

  1. プロジェクト レベルのカタログを構成する
  2. マネージド ID を構成する
  3. Azure Repos または GitHub からカタログを追加する
  4. カタログを更新する
  5. カタログを削除する
  6. カタログ同期エラーのトラブルシューティング

プロジェクト レベルのカタログを構成する

プロジェクト レベルでカタログをアタッチすると、プラットフォーム エンジニアは、開発チームに固有のキュレーション済み環境定義を提供できます。 さらに、プロジェクト管理者として割り当てられた開発チームのリードが、チームで使用できる環境定義を管理できるようになります。

プラットフォーム エンジニアは、プロジェクト レベルでのカタログの使用を完全に制御できます。 カタログをプロジェクトに追加するには、まずプロジェクト レベルでのカタログの使用をデベロッパー センター レベルで有効にする必要があります。 プラットフォーム エンジニアは、プロジェクト レベルで使用できるカタログ 項目の種類 (環境定義など) を構成することもできます。

既定では、プロジェクト レベルでのカタログの使用は無効になっており、どのカタログ アイテムの種類も有効になっていません。 プロジェクト レベルのカタログの環境定義は同期され、2 つの条件下で使用できます。 まず、対応するデベロッパー センター レベルでプロジェクト ベースのカタログを有効にする必要があります。 次に、プロジェクトの環境定義の使用を有効にする必要があります。

プロジェクトにカタログを追加する

プロジェクトにカタログを追加する前に、デベロッパー センター レベルでプロジェクト レベルのカタログを有効にする必要があります。 また、プロジェクト レベルで環境定義の使用を有効にする必要もあります。

デベロッパー センター レベルでプロジェクト レベルのカタログの使用を有効にするには:

  1. Azure portal で、デベロッパー センターに移動します。

  2. 左側のメニューの [設定][構成] を選択します。

    [構成] が強調表示されているデベロッパー センターの [概要] ページを示すスクリーンショット。

  3. [プロジェクト レベルのカタログ] ペインで、[プロジェクトごとにカタログを有効にする] を選択し、[適用] を選択します。

    [プロジェクトごとにカタログを有効にする] が強調表示されている [プロジェクト レベルのカタログ] ペインを示すスクリーンショット。

プロジェクトで環境定義の使用を有効にするには:

  1. Azure portal で、目的のプロジェクトに移動します。

  2. 左側のメニューの [設定] で、[カタログ] を選択します。

    [カタログ] が強調表示されているプロジェクトの [概要] ページを示すスクリーンショット。

  3. [カタログ] ページで、[カタログ アイテムのアクセス許可] を選択します。

    [カタログ アイテムのアクセス許可] が強調表示されている [カタログ] ペインを示すスクリーンショット。

  4. [カタログ アイテムの設定] ペインで、[Azure デプロイ環境の定義] を選択して、プロジェクト レベルで環境定義の使用を有効にします。

    [Azure デプロイ環境の定義] が選択されている [カタログ アイテムの設定] ペインを示すスクリーンショット。

これで、プロジェクトにカタログを追加できます。

認証にマネージド ID または個人用アクセス トークン (PAT) を使用するカタログの場合は、プロジェクト用のマネージド ID を割り当てる必要があります。 PAT を使用するカタログの場合は、PAT をキー コンテナーに保存し、マネージド ID にキー コンテナーのシークレットへのアクセスを許可する必要があります。

マネージド ID を構成する

デベロッパー センターまたはプロジェクトにカタログをアタッチする前に、マネージド サービス ID (MSI) とも呼ばれるマネージド ID を構成する必要があります。 システム割り当てマネージド ID (システム割り当て MSI) またはユーザー割り当てマネージド ID (ユーザー割り当て MSI) のいずれかをアタッチできます。 次に、そのマネージド ID にロールを割り当てて、デベロッパー センターまたはプロジェクトで、お使いのサブスクリプションに環境の種類を作成し、カタログ リポジトリを含む Azure Repos プロジェクトを読み取ることができるようにします。

デベロッパー センターまたはプロジェクトに MSI がアタッチされていない場合は、「マネージド ID の構成」の手順に従って作成し、マネージド ID のロールを割り当てます。

マネージド ID の詳細については、「Azure リソースのマネージド ID とは?」を参照してください

カタログの追加

Azure Repos リポジトリまたは GitHub リポジトリからカタログを追加できます。 MSI にアクセス許可を割り当てて認証するか、キー コンテナー内に保存する PAT を使用して認証するかを選択できます。

使うリポジトリと認証の種類のタブを選びます。

カタログを追加するには、以下のタスクを実行します。

  • マネージド ID に対して Azure Repos でアクセス許可を割り当てます。
  • リポジトリをカタログとして追加します。

マネージド ID に対して Azure Repos でアクセス許可を割り当てる

Azure Repos のリポジトリに対するアクセス許可をマネージド ID に付与する必要があります。

  1. Azure DevOps 組織にサインインします。

    Note

    Azure DevOps 組織は、デベロッパー センターまたはプロジェクトを含む Azure サブスクリプションと同じディレクトリに存在する必要があります。

  2. [組織の設定] を選択します

    [組織の設定] が強調表示されている Azure DevOps 組織のページを示すスクリーンショット。

  3. [概要] ページで [ユーザー] を選択します。

    [ユーザー] が強調表示されている組織の概要ページを示すスクリーンショット。

  4. [ユーザー] ページで、[ユーザーの追加] を選択します。

    [ユーザー] ページを示すスクリーンショット。[ユーザーの追加] が強調表示されています。

  5. 次の情報を入力または選択して [新しいユーザーの追加] を完了し、[追加] を選択します。

    名前
    ユーザーまたはサービス プリンシパル デベロッパー センターまたはプロジェクトの名前を入力します。
    システム割り当て MSI を使用する場合は、マネージド アカウントのオブジェクト ID ではなく、デベロッパー センターまたはプロジェクトの名前を指定します。 ユーザー割り当て MSI を使用する場合は、マネージド アカウントの名前を使用します。
    アクセス レベル [Basic] を選択します。
    プロジェクトへの追加 リポジトリを含むプロジェクトを選択します。
    Azure DevOps グループ [プロジェクト閲覧者] を選択します。
    メール招待状の送信 (ユーザーに対してのみ) チェックボックスをオフにします。

    [ユーザーの追加] のエントリの例を示すスクリーンショット。[追加] が強調表示されています。

リポジトリをカタログとして追加する

Azure Deployment Environments では、Azure Repos リポジトリと GitHub リポジトリのアタッチがサポートされています。 リポジトリには、キュレーションされた一連の IaC テンプレートを格納できます。 リポジトリをカタログとしてデベロッパー センターまたはプロジェクトにアタッチすることで、開発チームはテンプレートにアクセスし、一貫した環境をすばやく作成できるようになります。

次の手順では、Azure Repos リポジトリをアタッチできます。

  1. Azure portal で、デベロッパー センターまたはプロジェクトに移動します。

  2. 左側のメニューの [環境の構成] で、[カタログ] を選択し、[追加] を選択します。

    [カタログ] ウィンドウを示すスクリーンショット。

  3. [カタログの追加] で、次の情報を入力し、[追加] を選択します。

    フィールド
    名前 カタログの新しい名前を入力します。
    カタログの場所 [Azure DevOps] を選択します。
    認証の種類 [マネージド ID] を選択します。
    組織 Azure DevOps 組織を選択します。
    プロジェクト プロジェクトのリストから、リポジトリを格納するプロジェクトを選択します。
    リポジトリ リポジトリのリストから、追加するリポジトリを選択します。
    ブランチ ブランチを選択します。
    フォルダー パス Dev Box は、ブランチ内のフォルダーのリストを取得します。 IaC テンプレートを格納するフォルダーを選択します。

    [カタログの追加] ウィンドウのエントリの例を示すスクリーンショット。[追加] が強調表示されています。

  4. デベロッパー センターまたはプロジェクトの [カタログ] で、カタログが表示されることを確認します。 接続が成功した場合、[状態][Sync successful]\(同期に成功しました\) になります。 初めてカタログに接続する場合、数分かかる場合があります。

同期されたカタログ項目を表示する

使用するリポジトリの種類に関係なく、カタログから同期されているカタログ項目を表示できます。

  1. デベロッパー センターまたはプロジェクトの左側のメニューの [環境の構成] で、[カタログ] を選択します。

  2. [カタログ] ウィンドウで、カタログ名を選択します。

    [カタログ] ウィンドウを示すスクリーンショット。アタッチされたカタログ名が強調表示されている。

  3. 正常に同期されたカタログ項目の一覧が表示されます。

    アタッチされたカタログから正常に同期されたカタログ項目を示すスクリーンショット。

カタログを更新する

アタッチされたリポジトリ内の定義またはテンプレート コンテンツを更新する場合は、カタログを同期することで、開発チームに最新の環境定義のセットを提供できます。 カタログは手動または自動で同期できます。

手動でカタログを同期する

カタログを手動で同期すると、Deployment Environments によってリポジトリがスキャンされ、環境定義の最新のリストをデベロッパー センター内のすべての関連プロジェクトが利用できるようになります。

  1. デベロッパー センターの左側のメニューの [環境の構成] で、[カタログ] を選択します。

  2. 特定のカタログを選んでから、コマンド バーの [同期] を選びます。

    コマンド バーの [同期] ボタンを示すスクリーンショット。

自動的にカタログを同期する

カタログを自動的に同期するように構成すると、Deployment Environments によって 30 分ごとにリポジトリがスキャンされ、環境定義の最新のリストをデベロッパー センター内のすべての関連プロジェクトが利用できるようになります。

  1. デベロッパー センターまたはプロジェクトの左側のメニューの [環境の構成] で、[カタログ] を選択します。

  2. 特定のカタログを選んでから、[編集] を選びます。

    カタログの [編集] ボタンを示すスクリーンショット。

  3. [カタログの編集] ウィンドウで、[このカタログを自動的に同期する] を選択し、[保存] を選択します。

    カタログの [詳細の編集] ウィンドウを示すスクリーンショット。[このカタログを自動的に同期する] が強調表示されてる。

カタログを削除する

カタログを削除して、Azure Deployment Environments デベロッパー センターまたはプロジェクトから削除できます。 削除されたカタログ内のテンプレートは、開発チームが新しい環境をデプロイするときに使用できません。 削除したカタログ内の環境定義を使って作成した既存の環境がある場合は、環境定義の参照を更新します。 参照が更新されておらず、環境が再デプロイされた場合、デプロイは失敗します。

カタログを削除するには:

  1. デベロッパー センターまたはプロジェクトの左側のメニューの [環境の構成] で、[カタログ] を選択します。

  2. 特定のカタログを選んでから、[削除] を選びます。

  3. [カタログの削除] ダイアログで、[続行] を選択してカタログを削除します。

カタログ同期エラーのトラブルシューティング

カタログを追加または同期するときに、同期エラーまたは警告が発生する場合があります。 同期エラーは、カタログが正常に同期できなかったことを示します。同期警告は、一部またはすべてのカタログ項目にエラーがあることを示します。 Azure portal で同期の状態とエラーを表示するか、Azure CLI と REST API を使用してエラーのトラブルシューティングと解決を行うことができます。

カタログの同期状態を表示する

Azure portal で、状態リンクを選択すると、カタログの同期状態と警告またはエラーに関する詳細情報を取得できます。 状態リンクにより、同期の状態、追加された環境定義の数、無視されたまたは失敗した環境定義の数を示すウィンドウが表示されます。

カタログ同期の失敗を表示する

  1. デベロッパー センターまたはプロジェクトの左側のメニューの [環境の構成] で、[カタログ] を選択します。

  2. [状態] 列で、同期に失敗したカタログの状態リンクを選択します。

    [カタログ] ウィンドウを示すスクリーンショット。同期の失敗が強調表示されている。

  3. 最後の同期の変更、同期エラーの数、エラーの種類を示す詳細ウィンドウが表示されます。

    [カタログ同期失敗] ウィンドウを示すスクリーンショット。

カタログ同期の警告を表示する

  1. デベロッパー センターまたはプロジェクトの左側のメニューの [環境の構成] で、[カタログ] を選択します。

  2. [状態] 列で、同期したが警告を報告したカタログの状態リンクを選択します。

    [カタログ] ウィンドウを示すスクリーンショット。3 つの項目の警告が強調表示されている。

  3. 最後の同期の変更、項目エラーの数、各エラーの種類とソースを示す詳細ウィンドウが表示されます。

    [カタログ同期エラー] ウィンドウを示すスクリーンショット。

  4. 同様に同期エラーを報告するカタログから、正常に同期されたアイテムを表示できます。 [カタログ] ウィンドウで、カタログ名を選択します。

    [カタログ] ウィンドウを示すスクリーンショット。カタログ名が強調表示されている。

  5. 正常に同期されたカタログ項目の一覧が表示されます。

    正常に同期されたカタログ項目を示すスクリーンショット。

Azure CLI を使用したカタログ同期エラーのトラブルシューティング

Azure CLI または REST API を使用してカタログの GET を行います。 GET の応答には、以下のようなエラーの種類が表示されます。

  • 重複が検出され、無視された環境定義。
  • スキーマ、参照、または検証エラーにより失敗した無効な環境定義。

無視された環境定義エラーを解決する

同じ名前の環境定義を複数追加すると、無視された環境定義エラーが発生します。 この問題を解決するには、環境定義の名前を変更して、各環境定義がカタログ内で一意の名前になるようにします。

無効な環境定義エラーを解決する

無効な環境定義エラーは、さまざまな理由で発生する可能性があります。

  • マニフェスト スキーマ エラー。 環境定義環境ファイルが必要なスキーマと一致していることを確認します。

  • 検証エラー。 検証エラーを解決するには、次の項目を確認します。

    • 環境ファイルのエンジンの種類が、正しく構成されていることを確認します。
    • 環境定義名は 3 文字から 63 文字にする必要があります。
    • 必ず、環境定義名には、URL として有効な文字 (英数字と記号 ~ ! , . ' ; : = - _ + ( ) * & $ @) のみを含めます。
  • 参照エラー。 環境ファイルによって参照されているテンプレート パスが、リポジトリ内のファイルに対する有効な相対パスであることを確認します。