Docker を使用して Azure Stack Hub に対して PowerShell を実行する

注意事項

この記事では、End Of Life (EOL) 状態に近い Linux ディストリビューションである CentOS について説明します。 使用を検討し、それに応じて計画してください。 詳細については、 CentOS End Of Life ガイダンスを参照してください。

この記事では、Docker を使用してコンテナーを作成します。そのコンテナー上で、さまざまなインターフェイスの操作に必要な PowerShell のバージョンを実行できます。 AzureRM モジュールと最新の Az モジュールの両方を使用する手順がわかります。 AzureRM を使用するには、Windows ベースのコンテナーが必要です。 Az では、Linux ベースのコンテナーが使用されます。

Docker の前提条件

Docker をインストールする

  1. Docker をインストールします。

  2. PowerShell や Bash などのコマンドライン ツールで、次を入力します。

    docker --version
    

PowerShell を使用してサービス プリンシパルを設定する

PowerShell を使用して Azure Stack Hub のリソースにアクセスするには、Microsoft Entra テナントにサービス プリンシパルが必要です。 ユーザーのロールベースのアクセス制御 (RBAC) を使用してアクセス許可を委任します。 クラウド オペレーターにサービス プリンシパルを要求することが必要になる場合があります。

  1. サービス プリンシパルを設定するには、サービス プリンシパルを作成することによるアプリケーションへの Azure Stack Hub リソースに対するアクセスの付与に関するページの手順に従います。

  2. 後で使用するので、アプリケーション ID、シークレット、テナント ID、オブジェクト ID を記録しておきます。

Docker で PowerShell を実行する

以下の手順では、PowerShell と、Azure Stack Hub に必要なモジュールが含まれる Linux ベースのコンテナー イメージを実行します。

  1. Docker は、Linux コンテナーを使用して実行する必要があります。 Docker を実行するときは、Linux コンテナーに切り替えます。

  2. Azure Stack Hub と同じドメインに参加しているマシンから Docker を実行します。 Azure Stack Development Kit (ASDK) を使用している場合は、お使いのリモート マシン上に VPN をインストールする必要があります。

Linux コンテナーに Azure Stack Hub Az モジュールをインストールする

  1. コマンド ラインから、次の Docker コマンドを実行して、Ubuntu コンテナーで PowerShell を実行します。

    docker run -it mcr.microsoft.com/azurestack/powershell
    

    Ubuntu、Debian、または Centos を実行できます。 次の Docker ファイルは、GitHub リポジトリ azurestack-powershell で見つけることができます。 Docker ファイルに対する最新の変更については、GitHub リポジトリを参照してください。 各 OS にタグが付けられています。 タグ (コロンの後のセクション) を目的の OS のタグに置き換えます。

    Linux Docker イメージ
    Ubuntu docker run -it mcr.microsoft.com/azurestack/powershell:ubuntu-18.04
    Debian docker run -it mcr.microsoft.com/azurestack/powershell:debian-9
    Centos docker run -it mcr.microsoft.com/azurestack/powershell:centos-7
  2. コマンドレットに対するシェルの準備が整いました。 サインインして Test-AzureStack.ps1 を実行し、シェルの接続をテストします。

    最初に、サービス プリンシパルの資格情報を作成します。 シークレットアプリケーション ID が必要になります。 また、Test-AzureStack.ps1 を実行してコンテナーを確認するときは、オブジェクト ID も必要になります。 クラウド オペレーターにサービス プリンシパルを要求することが必要になる場合があります。

    次のコマンドレットを入力して、サービス プリンシパル オブジェクトを作成します。

    $passwd = ConvertTo-SecureString <Secret> -AsPlainText -Force
    $pscredential = New-Object System.Management.Automation.PSCredential('<ApplicationID>', $passwd)
    
  3. Azure Stack Hub インスタンスから、次の値を使用して次のスクリプトを実行し、環境に接続します。

    説明
    環境の名前。 Azure Stack Hub 環境の名前。
    Resource Manager エンドポイント Resource Manager の URL。 不明な場合は、クラウド オペレーターに問い合わせてください。 これは、https://management.region.domain.com のように表示されます。
    ディレクトリ テナント ID Azure Stack Hub テナント ディレクトリの ID。
    資格情報 サービス プリンシパルが含まれるオブジェクト。 この場合は、$pscredential です。
    ./Login-Environment.ps1 -Name <String> -ResourceManagerEndpoint <resource manager endpoint> -DirectoryTenantId <String> -Credential $pscredential
    

    PowerShell からアカウント オブジェクトが返されます。

  4. コンテナーで Test-AzureStack.ps1 スクリプトを実行して、環境をテストします。 サービス プリンシパルのオブジェクト ID を指定します。 オブジェクト ID を指定しなくても、スクリプトは実行されますが、テナント (ユーザー) モジュールだけがテストされ、管理者特権を必要とするモジュールでは失敗します。

    ./Test-AzureStack.ps1 <Object ID>
    

次のステップ