Operations Lab.

Archive for the ‘Microsoft Azure’ Category

Windows Virtual Desktop(WVD)を試す ~おまけ~

leave a comment »

この記事では、展開した環境を探索してみます。

他の記事へのリンク

  1. Windows Virtual Desktop(WVD)を試す ~概要~
  2. Windows Virtual Desktop(WVD)を試す ~その1~ Azure AD の準備
  3. Windows Virtual Desktop(WVD)を試す ~その2~ Active Directory の準備と AAD Connect
  4. Windows Virtual Desktop(WVD)を試す ~その3~ WVD へのオンボード
  5. Windows Virtual Desktop(WVD)を試す ~その4~ WVD Hostpool の展開
  6. Windows Virtual Desktop(WVD)を試す ~おまけ~ ※この記事

展開されたホスト

img004683

今回の環境では Intel Xeon CPU E5-2673 v4 でした。基本的には、ホストプールのベースとして選択した VM の種類(シリーズ)に依存するはずです。

Windows のエディション

img004684

Windows の Edition は Windows 10 for Virtual Desktops でした。Windows Virtual Desktop のみで利用できる特殊なエディションですね。

img004686

もちろんアクティベーションされています。

Windows Update

img004685

失敗しました。(偶々かも。サービスの起動状態など未確認・未調査。)

Dism

一般的な管理者であれば、とりあえず dism.exe を実行してみたくなりますよね?

img004687

Current Edition は ServerRdsh !!

これ以上深入りしないほうが良い気がしたので、この辺で。

Written by kazu

2019/04/03 at 23:55

Windows Virtual Desktop(WVD)を試す ~その4~

leave a comment »

この記事では、Windows Virtual Desktop のホストプールを展開します。

他の記事へのリンク

 

  1. Windows Virtual Desktop(WVD)を試す ~概要~
  2. Windows Virtual Desktop(WVD)を試す ~その1~ Azure AD の準備
  3. Windows Virtual Desktop(WVD)を試す ~その2~ Active Directory の準備と AAD Connect
  4. Windows Virtual Desktop(WVD)を試す ~その3~ WVD へのオンボード
  5. Windows Virtual Desktop(WVD)を試す ~その4~ WVD Hostpool の展開 ※この記事
  6. Windows Virtual Desktop(WVD)を試す ~おまけ~

Windows Virtual Desktop Host Pool の展開

Azure Portal で「新規」を選択し、「Windows Virtual Desktop」を検索します。

img004636

「Windows Virtual Desktop – Provision a host pool」を選択します。

img004637

「作成」をクリックします。

img004638

「Hostpool name」、「リソース グループ」、「場所」(リージョン)を入力・選択します。リソース グループは、ホストプール用に新規作成するか、空のリソース グループを選択する必要があります。(既にリソースが存在するリソース グループには作成できません。)

img004639

Default desktop users は空白でも問題ありません。(後から設定します。)入力したら OK をクリックします。

img004640

「Usage Profile」、「Total users」、「Virtual machine size」、「Virtual machine name prefix」を入力して OK をクリックします。(ここでは、検証用想定でそれほど負荷のかからない Light なユーザが 5 名利用する想定としています。VM サイズを選択すると、利用負荷想定と VM サイズから 1VM あたり何ユーザ収容できるかが自動的に計算され、必要な VM 台数が自動計算・自動展開されます。)(つまり、100 ユーザ等の入力を行うと、100 ユーザ収容できるだけの VM 台数が自動展開されます!)

img004645

展開される VM のイメージとディスク、接続するネットワーク、AD(Azure AD ではなく、AD DS 側)へ参加する際の認証情報を入力します。展開される(ホストプール用の)VM は、現時点では Azure AD へ直接 Join するのではなく、「その2」で構築した Azure VM 上の(環境によっては Azure Active Directory Domain Services 上やオンプレ上の)Active Directory ドメインに参加します。

img004649

Windows Virtual Desktop インフラストラクチャー側の設定を入力します。基本的に Windows Virtual Desktop Infrastructure は Azure AD で認証を行うアプリケーションとして構成されますので、Azure AD 側(「その3」でオンボードしたテナント)の認証情報を入力します。

img004650

検証が完了したら、デプロイを実施します。

img004652img004653

デプロイが完了するまで待ちます。

img004669

ユーザーに対する Virtual Desktop の割り当て

デプロイが完了したら、PowerShell コンソールを起動し、以下のコマンドで Virtual Desktop Host pool にユーザーを関連付けます。

Install-Module -Name Microsoft.RDInfra.RDPowerShell
Import-Module Microsoft.RDInfra.RDPowerShell
Add-RdsAccount -DeploymentUrl "https://rdbroker.wvd.microsoft.com"
New-RdsTenant -Name <Windows Virtual Desktop tenant name> -AadTenantId <AzureAD Tenant ID> -AzureSubscriptionId <Azure Subscription ID>
Add-RdsAppGroupUser -TenantName <Windows Virtual Desktop tenant name> -HostPoolName <Host pool name> -AppGroupName "Desktop App
lication Group" -UserPrincipalName <Azure AD 上に同期された Virtual Desktop の利用を許可するユーザーの UPN>

Add-RdsAccount 実行時は、Azure AD の管理者ユーザーを入力します。

実行例は以下の通りです。

PS C:\PowerShell> Install-Module -Name Microsoft.RDInfra.RDPowerShell -Scope CurrentUser

信頼されていないリポジトリ
信頼されていないリポジトリからモジュールをインストールしようとしています。このリポジトリを信頼する
場合は、Set-PSRepository コマンドレットを実行して、リポジトリの InstallationPolicy
の値を変更してください。'PSGallery' からモジュールをインストールしますか?
[Y] はい(Y)  [A] すべて続行(A)  [N] いいえ(N)  [L] すべて無視(L)  [S] 中断(S)  [?] ヘルプ
(既定値は "N"):Y

PS C:\> Add-RdsAccount -DeploymentUrl "https://rdbroker.wvd.microsoft.com"

DeploymentUrl                      TenantGroupName      UserName
-------------                      ---------------      --------
https://rdbroker.wvd.microsoft.com Default Tenant Group g-admin@wvddemovdi.onmicrosoft.com


PS C:\> New-RdsTenant -Name WVDDemoVDI -AadTenantId e8465146-1e3c-4550-8768-25db09c629
51 -AzureSubscriptionId 81323b9f-7590-4e46-b4a9-13b8a89be759

TenantGroupName         : Default Tenant Group
AadTenantId             : e8465146-1e3c-4550-8768-25db09c62951
TenantName              : WVDDemoVDI
Description             :
FriendlyName            :
SsoAdfsAuthority        :
SsoClientId             :
SsoClientSecret         :
AzureSubscriptionId     : 81323b9f-7590-4e46-b4a9-13b8a89be759
LogAnalyticsWorkspaceId :
LogAnalyticsPrimaryKey  :

PS C:\> Get-RdsTenant

TenantGroupName         : Default Tenant Group
AadTenantId             : e8465146-1e3c-4550-8768-25db09c62951
TenantName              : WVDDemoVDI
Description             :
FriendlyName            :
SsoAdfsAuthority        :
SsoClientId             :
SsoClientSecret         :
AzureSubscriptionId     : 81323b9f-7590-4e46-b4a9-13b8a89be759
LogAnalyticsWorkspaceId :
LogAnalyticsPrimaryKey  :

PS C:\> Get-RdsAppGroupUser -TenantName "WVDDemoVDI" -HostPoolName "HP01" -AppGroupName "Desktop App
lication Group"

PS C:\> Add-RdsAppGroupUser -TenantName "WVDDemoVDI" -HostPoolName "HP01" -AppGroupName "Desktop App
lication Group" -UserPrincipalName "user01@wvddemovdi.onmicrosoft.com"

PS C:\> Get-RdsAppGroupUser -TenantName "WVDDemoVDI" -HostPoolName "HP01" -AppGroupName "Desktop App
lication Group"

UserPrincipalName : user01@wvddemovdi.onmicrosoft.com
TenantName        : WVDDemoVDI
TenantGroupName   : Default Tenant Group
HostPoolName      : HP01
AppGroupName      : Desktop Application Group

PS C:\>

Virtual Desktop へのアクセス

以下の URL へアクセスします。

Azure AD のアカウント(Virtual Desktop を割り当てた Azure AD ユーザー(一般ユーザー))でログインします。

img004675

「全てのリソース」に、割り当てた Session Desktop が表示されているはずなので、クリックします。

img004677

VM へログインする際のアカウント=Azure AD への同期元となっている Active Directory のユーザーとパスワードを入力します。

img004678img004682

これで、Windows Virtual Desktop で展開された、Windows 10 に接続できるはずです。

Written by kazu

2019/03/29 at 23:55

Windows Virtual Desktop(WVD)を試す ~その3~

leave a comment »

この記事では、Windows Virtual Desktop へのオンボードを行います。これにより、当該の Azure AD テナントで Windows Virtual Desktop を利用可能になります。

他の記事へのリンク

 

  1. Windows Virtual Desktop(WVD)を試す ~概要~
  2. Windows Virtual Desktop(WVD)を試す ~その1~ Azure AD の準備
  3. Windows Virtual Desktop(WVD)を試す ~その2~ Active Directory の準備と AAD Connect
  4. Windows Virtual Desktop(WVD)を試す ~その3~ WVD へのオンボード ※この記事
  5. Windows Virtual Desktop(WVD)を試す ~その4~ WVD Hostpool の展開
  6. Windows Virtual Desktop(WVD)を試す ~おまけ~

Azure AD Tenant ID の確認

Azure AD のプロパティで「ディレクトリ ID」を確認(コピー)しておきます。

img004419

Windows Virtual Desktop へのオンボード

以下の URL にアクセスします。

Server App を選択し、先程コピーした Azure AD の Tenant ID を入力して Submit します。

img004421

Azure AD の全体管理者権限を持つユーザーでログインし、アプリケーションを承認します。

img004428

img004432

完了したら、再度以下の URL へアクセスします。

今度は、Client App を選択し、同様に Azure AD の Tenant ID を入力して Submit します。

img004434

(既にログインしているため、ログインの認証は省略されますが、)同様にアプリケーションを承認します。

img004437

完了したら、Azure AD 管理センターへアクセスし、アプリケーションが追加されていることを確認します。

img004442

テナント管理者ユーザーの割り当て

Azure AD 管理センター上に登録された、「Windows Virtual Desktop」アプリケーションをクリックします。(Client ではないほうをクリックします。)ユーザーとグループをクリックし、登録済みのユーザーを確認します。

img004446

割り当てられたロールが「Default Access」となっているユーザーしかいないはずですので、「ユーザーの追加」をクリックして、Default Access が割り当て済みのユーザー(これは、全体管理者ユーザーとなっているはずです)を改めて明示的に追加します。(Tenant Creator のロールが割り当てられます。)

img004451

これで展開の準備は完了です。

Written by kazu

2019/03/28 at 23:55

Windows Virtual Desktop を試す ~概要~

leave a comment »

Windows Virtual Desktop が Public Preview となったので試してみます。

Windows Virtual Desktop とは

一言で言うと、VDI 及びアプリケーション仮想化環境を提供(提供をサポート)する、Azure のサービスです。

Microsoft Azure の Web サイトによると、以下の通りです。

Windows Virtual Desktop プレビューはクラウドで実行される包括的なデスクトップおよびアプリ仮想化サービスです。簡素な管理、マルチセッションの Windows 10、Office 365 ProPlus 用の最適化、リモート デスクトップ サービス (RDS) 環境のサポートを実現する唯一の仮想デスクトップ インフラストラクチャ (VDI) です。Azure 上に数分でお使いの Windows デスクトップとアプリをデプロイしてスケーリングし、組み込みのセキュリティとコンプライアンス機能を利用できます。

接続先のOSとしてサポートされているもの

  • Windows 10 multi-session
  • Windows 10 single-session
  • Windows 7 single-session
  • Windows Server 2012 R2 以降のサーバー オペレーティングシステム

費用など

画期的なのは、コントローラに相当する部分の費用が不要(追加ではかからない)、というところでしょうか。

VDI を提供するセッションベース、又は VM ベースの Compute リソース(要するに、ユーザーのログオン先のマシンが使用するリソース)が Azure の VM 上に構成されますので、使用した分だけ VM インスタンスとして課金されます。

前提条件

  • Windows 10 や Windows 7 の環境を使用するためには、Windows 10 Enterprise 又は Microsoft 365 の有効なライセンス(サブスクリプション)が必要。
  • Windows Server 2012 R2 などで、Remote Desktop Services ベースのリソースを提供する場合には、Remote Desktop Services Client Access License (RDS CAL) が必要。

テスト環境の概要と展開手順

実際に Windows 10 multi-session ベースの VDI 環境を展開してみます。手順については、以下の記事で個別に記載します。

今回は以下の形で展開を行います。

図2

以下の記事は、AAD や ADDS 環境の事前準備となります。既存の(展開済みの)Azure AD 及びドメインコントローラを使用する場合には(本番環境への展開時等)、その1とその2は不要です。また、今回は既存のサブスクリプションを使用して展開を行うために AAD を別途作成していますが、検証専用で AAD を用意し、その中でサブスクリプションを契約している場合には、その1は不要です。

  1. Windows Virtual Desktop(WVD)を試す ~概要~ ※この記事
  2. Windows Virtual Desktop(WVD)を試す ~その1~ Azure AD の準備
  3. Windows Virtual Desktop(WVD)を試す ~その2~ Active Directory の準備と AAD Connect
  4. Windows Virtual Desktop(WVD)を試す ~その3~ WVD へのオンボード
  5. Windows Virtual Desktop(WVD)を試す ~その4~ WVD Hostpool の展開
  6. Windows Virtual Desktop(WVD)を試す ~おまけ~

Written by kazu

2019/03/25 at 23:55

Azure と AWS のアイコンセット

leave a comment »

Microsoft Azure と Amazon AWS の資料を作成する際に利用できる、アイコンやステンシルの図形セットは、以下からダウンロード可能です。

Azure のアイコンセットは、主に SVG と PNG 形式のアイコンをダウンロードできます。

img004750

AWS のアイコンセットは Power Point 形式となっており、直接 Power Point 上でコピー&ペーストができます。

img004751

それぞれの利用規約は、ダウンロードページやダウンロードしたファイルの中に記載がありますので、読んでから利用しましょう。

Written by kazu

2019/02/20 at 00:13

カテゴリー: Amazon AWS, Microsoft Azure

PowerShell DSC と Linux

leave a comment »

DSC による Linux の管理

PowerShell DSC は Linux にも対応しています。(Linux でも使えます。)正確には、Linux 向けの DSC エージェント及び DSC リソースの開発が進められており、GitHub 上でコード(及びバイナリ)が公開されています。

絶賛開発中ですので Windows と比較すると様々な制約がありますが、試しに使ってみる、といったレベルであれば十分利用できます。(バグを見つけたらフィードバックしましょう!)

2016/12/23 時点で対応しているディストリビューションは以下の通りです。(最新の対応状況は GitHub のプロジェクトページを参照。)

  • CentOS 5, 6, and 7 (x86/x64)
  • Debian GNU/Linux 6, 7 and 8 (x86/x64)
  • Oracle Linux 5, 6 and 7 (x86/x64)
  • Red Hat Enterprise Linux Server 5, 6 and 7 (x86/x64)
  • SUSE Linux Enterprise Server 10, 11 and 12 (x86/x64)
  • Ubuntu Server 12.04 LTS, 14.04 LTS, 16.04 LTS (x86/x64)

対応ディストリビューションについては、rpm 又は deb パッケージが公開されていますので、それをダウンロードしてインストールすれば利用できます。対応していないディストリビューションの場合は、コードを自力でコンパイルしてインストールする必要があります。

DSC for Linux の前提条件

DSC for Linux を利用するためには、いくつかのパッケージ(ソフトウェア)が必要です。こちらも GitHub 上に記載があります。

  • glibc 2.4 以上
  • openssl 0.9.8 又は 1.0.x
  • libcurl 7.15.1 以上
  • python 2.4 – 3.4
  • python-ctypes (python のバージョンに対応したバージョン)
  • omi 1.0.8-4

OpenSSL については、Requirements に 1.0 としか記載されていませんが、試したところ 1.0 系であれば(1.0.0 でなくとも)動作するようです。Python については新しすぎると正常に動作しない場合があります(ありました)ので、記載されているバージョンの範囲内とした方が無難です。

omi (Open Management Infrastructure)DMTF (Distributed Management Task Force)の標準である CIM (Common Information Model)及び WBEM (Web-Based Enterprise Management)を Microsoft が Linux 向けに実装したものになります。ちなみに、CIM/WBEM の Windows 向け実装が WMI (Windows Management Instrumentation)です。

PowerShell DSC for Linux では CIM を利用しているため、omi が必要となります。

DSC for Linux のインストール

ここでは、Azure 上の Linux (CentOS 7.2)VM 上で DSC を使用して httpd を構成してみます。仮想マシンのデプロイは実施済みとします。

dsclinux-161223-01dsclinux-161223-02

Linux 仮想マシンへ SSH でログインします。何はともあれ、まずはパッケージをアップデートしておきます。

[admin01@centos72 ~]$ sudo yum update -y
[sudo] password for admin01:
Loaded plugins: fastestmirror, langpacks
base                                                     | 3.6 kB     00:00
extras                                                   | 3.4 kB     00:00
openlogic                                                | 1.3 kB     00:00
updates                                                  | 3.4 kB     00:00
Loading mirror speeds from cached hostfile
Resolving Dependencies
--> Running transaction check
(略)

Installed:
  kernel.x86_64 0:3.10.0-514.2.2.el7     python2-pyasn1.noarch 0:0.1.9-7.el7

Dependency Installed:
  GeoIP.x86_64 0:1.5.0-11.el7
  firewalld-filesystem.noarch 0:0.4.3.2-8.el7
  ipset.x86_64 0:6.19-6.el7
  ipset-libs.x86_64 0:6.19-6.el7
  libstoragemgmt-python-clibs.x86_64 0:1.3.4-1.el7
  python-firewall.noarch 0:0.4.3.2-8.el7

Updated:
  NetworkManager.x86_64 1:1.4.0-13.el7_3
  NetworkManager-libnm.x86_64 1:1.4.0-13.el7_3
  NetworkManager-team.x86_64 1:1.4.0-13.el7_3
  NetworkManager-tui.x86_64 1:1.4.0-13.el7_3
  WALinuxAgent.noarch 0:2.2.2-1.el7.centos
  abrt.x86_64 0:2.1.11-45.el7.centos
  abrt-addon-ccpp.x86_64 0:2.1.11-45.el7.centos
  abrt-addon-kerneloops.x86_64 0:2.1.11-45.el7.centos
  abrt-addon-pstoreoops.x86_64 0:2.1.11-45.el7.centos
  abrt-addon-python.x86_64 0:2.1.11-45.el7.centos
  abrt-addon-vmcore.x86_64 0:2.1.11-45.el7.centos
  abrt-addon-xorg.x86_64 0:2.1.11-45.el7.centos
  abrt-cli.x86_64 0:2.1.11-45.el7.centos
  abrt-console-notification.x86_64 0:2.1.11-45.el7.centos
  abrt-dbus.x86_64 0:2.1.11-45.el7.centos
  abrt-libs.x86_64 0:2.1.11-45.el7.centos
  abrt-python.x86_64 0:2.1.11-45.el7.centos
  abrt-retrace-client.x86_64 0:2.1.11-45.el7.centos
  abrt-tui.x86_64 0:2.1.11-45.el7.centos
  alsa-lib.x86_64 0:1.1.1-1.el7
  alsa-tools-firmware.x86_64 0:1.1.0-1.el7
  at.x86_64 0:3.1.13-22.el7
  authconfig.x86_64 0:6.2.8-14.el7
  avahi-autoipd.x86_64 0:0.6.31-17.el7
  avahi-libs.x86_64 0:0.6.31-17.el7
  bash.x86_64 0:4.2.46-21.el7_3
  bind-libs.x86_64 32:9.9.4-38.el7_3
  bind-libs-lite.x86_64 32:9.9.4-38.el7_3
  bind-license.noarch 32:9.9.4-38.el7_3
  bind-utils.x86_64 32:9.9.4-38.el7_3
  binutils.x86_64 0:2.25.1-22.base.el7
  biosdevname.x86_64 0:0.7.2-1.el7
  blktrace.x86_64 0:1.0.5-8.el7
  boost-system.x86_64 0:1.53.0-26.el7
  boost-thread.x86_64 0:1.53.0-26.el7
  btrfs-progs.x86_64 0:4.4.1-1.el7
  ca-certificates.noarch 0:2015.2.6-73.el7
  centos-release.x86_64 0:7-3.1611.el7.centos
  chkconfig.x86_64 0:1.7.2-1.el7
  chrony.x86_64 0:2.1.1-4.el7.centos
  cifs-utils.x86_64 0:6.2-9.el7
  coreutils.x86_64 0:8.22-18.el7
  crda.x86_64 0:3.13_2016.02.08-1.el7
  cryptsetup.x86_64 0:1.7.2-1.el7
  cryptsetup-libs.x86_64 0:1.7.2-1.el7
  cups-libs.x86_64 1:1.6.3-26.el7
  curl.x86_64 0:7.29.0-35.el7.centos
  dbus.x86_64 1:1.6.12-17.el7
  dbus-libs.x86_64 1:1.6.12-17.el7
  device-mapper.x86_64 7:1.02.135-1.el7_3.1
  device-mapper-event.x86_64 7:1.02.135-1.el7_3.1
  device-mapper-event-libs.x86_64 7:1.02.135-1.el7_3.1
  device-mapper-libs.x86_64 7:1.02.135-1.el7_3.1
  device-mapper-persistent-data.x86_64 0:0.6.3-1.el7
  dhclient.x86_64 12:4.2.5-47.el7.centos
  dhcp-common.x86_64 12:4.2.5-47.el7.centos
  dhcp-libs.x86_64 12:4.2.5-47.el7.centos
  dmidecode.x86_64 1:3.0-2.el7
  dmraid.x86_64 0:1.0.0.rc16-28.el7
  dmraid-events.x86_64 0:1.0.0.rc16-28.el7
  dnsmasq.x86_64 0:2.66-21.el7
  dracut.x86_64 0:033-463.el7
  dracut-network.x86_64 0:033-463.el7
  e2fsprogs.x86_64 0:1.42.9-9.el7
  e2fsprogs-libs.x86_64 0:1.42.9-9.el7
  ebtables.x86_64 0:2.0.10-15.el7
  elfutils.x86_64 0:0.166-2.el7
  elfutils-libelf.x86_64 0:0.166-2.el7
  elfutils-libs.x86_64 0:0.166-2.el7
  ethtool.x86_64 2:4.5-3.el7
  expat.x86_64 0:2.1.0-10.el7_3
  file.x86_64 0:5.11-33.el7
  file-libs.x86_64 0:5.11-33.el7
  filesystem.x86_64 0:3.2-21.el7
  firewalld.noarch 0:0.4.3.2-8.el7
  freetype.x86_64 0:2.4.11-12.el7
  gdb.x86_64 0:7.6.1-94.el7
  glib2.x86_64 0:2.46.2-4.el7
  glibc.x86_64 0:2.17-157.el7_3.1
  glibc-common.x86_64 0:2.17-157.el7_3.1
  gnupg2.x86_64 0:2.0.22-4.el7
  gnutls.x86_64 0:3.3.24-1.el7
  grub2.x86_64 1:2.02-0.44.el7.centos
  grub2-tools.x86_64 1:2.02-0.44.el7.centos
  grubby.x86_64 0:8.28-18.el7
  hunspell.x86_64 0:1.3.2-15.el7
  hwdata.x86_64 0:0.252-8.4.el7
  hyperv-daemons-license.noarch 0:0-0.29.20160216git.el7
  hypervkvpd.x86_64 0:0-0.29.20160216git.el7
  initscripts.x86_64 0:9.49.37-1.el7
  iproute.x86_64 0:3.10.0-74.el7
  iprutils.x86_64 0:2.4.13.1-1.el7
  iptables.x86_64 0:1.4.21-17.el7
  iputils.x86_64 0:20160308-8.el7
  irqbalance.x86_64 3:1.0.7-6.el7
  iw.x86_64 0:4.3-1.el7
  iwl100-firmware.noarch 0:39.31.5.1-49.el7
  iwl1000-firmware.noarch 1:39.31.5.1-49.el7
  iwl105-firmware.noarch 0:18.168.6.1-49.el7
  iwl135-firmware.noarch 0:18.168.6.1-49.el7
  iwl2000-firmware.noarch 0:18.168.6.1-49.el7
  iwl2030-firmware.noarch 0:18.168.6.1-49.el7
  iwl3160-firmware.noarch 0:22.0.7.0-49.el7
  iwl3945-firmware.noarch 0:15.32.2.9-49.el7
  iwl4965-firmware.noarch 0:228.61.2.24-49.el7
  iwl5000-firmware.noarch 0:8.83.5.1_1-49.el7
  iwl5150-firmware.noarch 0:8.24.2.2-49.el7
  iwl6000-firmware.noarch 0:9.221.4.1-49.el7
  iwl6000g2a-firmware.noarch 0:17.168.5.3-49.el7
  iwl6000g2b-firmware.noarch 0:17.168.5.2-49.el7
  iwl6050-firmware.noarch 0:41.28.5.1-49.el7
  iwl7260-firmware.noarch 0:22.0.7.0-49.el7
  iwl7265-firmware.noarch 0:22.0.7.0-49.el7
  kbd.x86_64 0:1.15.5-12.el7
  kbd-legacy.noarch 0:1.15.5-12.el7
  kbd-misc.noarch 0:1.15.5-12.el7
  kernel-tools.x86_64 0:3.10.0-514.2.2.el7
  kernel-tools-libs.x86_64 0:3.10.0-514.2.2.el7
  kexec-tools.x86_64 0:2.0.7-50.el7
  kmod.x86_64 0:20-9.el7
  kmod-libs.x86_64 0:20-9.el7
  kpartx.x86_64 0:0.4.9-99.el7
  kpatch.noarch 0:0.3.2-1.el7
  krb5-libs.x86_64 0:1.14.1-27.el7_3
  libX11.x86_64 0:1.6.3-3.el7
  libX11-common.noarch 0:1.6.3-3.el7
  libblkid.x86_64 0:2.23.2-33.el7
  libcom_err.x86_64 0:1.42.9-9.el7
  libcurl.x86_64 0:7.29.0-35.el7.centos
  libdrm.x86_64 0:2.4.67-3.el7
  libffi.x86_64 0:3.0.13-18.el7
  libfprint.x86_64 0:0.5.0-4.el7
  libgcc.x86_64 0:4.8.5-11.el7
  libgcrypt.x86_64 0:1.5.3-13.el7_3.1
  libgomp.x86_64 0:4.8.5-11.el7
  libldb.x86_64 0:1.1.26-1.el7
  libmount.x86_64 0:2.23.2-33.el7
  libndp.x86_64 0:1.2-7.el7
  libnl3.x86_64 0:3.2.28-2.el7
  libnl3-cli.x86_64 0:3.2.28-2.el7
  libproxy.x86_64 0:0.4.11-10.el7
  libreport.x86_64 0:2.1.11-35.el7.centos
  libreport-centos.x86_64 0:2.1.11-35.el7.centos
  libreport-cli.x86_64 0:2.1.11-35.el7.centos
  libreport-filesystem.x86_64 0:2.1.11-35.el7.centos
  libreport-plugin-mailx.x86_64 0:2.1.11-35.el7.centos
  libreport-plugin-mantisbt.x86_64 0:2.1.11-35.el7.centos
  libreport-plugin-rhtsupport.x86_64 0:2.1.11-35.el7.centos
  libreport-plugin-ureport.x86_64 0:2.1.11-35.el7.centos
  libreport-python.x86_64 0:2.1.11-35.el7.centos
  libreport-web.x86_64 0:2.1.11-35.el7.centos
  libsoup.x86_64 0:2.48.1-6.el7
  libss.x86_64 0:1.42.9-9.el7
  libsss_idmap.x86_64 0:1.14.0-43.el7_3.4
  libsss_nss_idmap.x86_64 0:1.14.0-43.el7_3.4
  libstdc++.x86_64 0:4.8.5-11.el7
  libstoragemgmt.x86_64 0:1.3.4-1.el7
  libstoragemgmt-python.noarch 0:1.3.4-1.el7
  libtalloc.x86_64 0:2.1.6-1.el7
  libtasn1.x86_64 0:3.8-3.el7
  libteam.x86_64 0:1.25-4.el7
  libtevent.x86_64 0:0.9.28-1.el7
  libtirpc.x86_64 0:0.2.4-0.8.el7
  libusbx.x86_64 0:1.0.20-1.el7
  libuuid.x86_64 0:2.23.2-33.el7
  libwbclient.x86_64 0:4.4.4-9.el7
  linux-firmware.noarch 0:20160830-49.git7534e19.el7
  lm_sensors-libs.x86_64 0:3.4.0-4.20160601gitf9185e5.el7
  logrotate.x86_64 0:3.8.6-12.el7
  lsscsi.x86_64 0:0.27-4.el7
  lua.x86_64 0:5.1.4-15.el7
  lvm2.x86_64 7:2.02.166-1.el7_3.1
  lvm2-libs.x86_64 7:2.02.166-1.el7_3.1
  make.x86_64 1:3.82-23.el7
  man-pages-overrides.x86_64 0:7.3.2-2.el7
  mariadb-libs.x86_64 1:5.5.52-1.el7
  mdadm.x86_64 0:3.4-14.el7
  microcode_ctl.x86_64 2:2.1-16.el7
  mlocate.x86_64 0:0.26-6.el7
  mozjs17.x86_64 0:17.0.0-19.el7
  nettle.x86_64 0:2.7.1-8.el7
  nss.x86_64 0:3.21.3-2.el7_3
  nss-softokn.x86_64 0:3.16.2.3-14.4.el7
  nss-softokn-freebl.x86_64 0:3.16.2.3-14.4.el7
  nss-sysinit.x86_64 0:3.21.3-2.el7_3
  nss-tools.x86_64 0:3.21.3-2.el7_3
  nss-util.x86_64 0:3.21.3-1.1.el7_3
  ntpdate.x86_64 0:4.2.6p5-25.el7.centos
  ntsysv.x86_64 0:1.7.2-1.el7
  openldap.x86_64 0:2.4.40-13.el7
  openssh.x86_64 0:6.6.1p1-31.el7
  openssh-clients.x86_64 0:6.6.1p1-31.el7
  openssh-server.x86_64 0:6.6.1p1-31.el7
  openssl.x86_64 1:1.0.1e-60.el7
  openssl-libs.x86_64 1:1.0.1e-60.el7
  os-prober.x86_64 0:1.58-9.el7
  pam.x86_64 0:1.1.8-18.el7
  parted.x86_64 0:3.1-28.el7
  pciutils.x86_64 0:3.5.1-1.el7
  pciutils-libs.x86_64 0:3.5.1-1.el7
  perl.x86_64 4:5.16.3-291.el7
  perl-Pod-Escapes.noarch 1:1.04-291.el7
  perl-Socket.x86_64 0:2.010-4.el7
  perl-libs.x86_64 4:5.16.3-291.el7
  perl-macros.x86_64 4:5.16.3-291.el7
  pinentry.x86_64 0:0.8.1-17.el7
  plymouth.x86_64 0:0.8.9-0.26.20140113.el7.centos
  plymouth-core-libs.x86_64 0:0.8.9-0.26.20140113.el7.centos
  plymouth-scripts.x86_64 0:0.8.9-0.26.20140113.el7.centos
  polkit.x86_64 0:0.112-9.el7
  procps-ng.x86_64 0:3.3.10-10.el7
  psacct.x86_64 0:6.6.1-11.el7
  pytalloc.x86_64 0:2.1.6-1.el7
  python.x86_64 0:2.7.5-48.el7
  python-libs.x86_64 0:2.7.5-48.el7
  python-perf.x86_64 0:3.10.0-514.2.2.el7
  python-pycurl.x86_64 0:7.19.0-19.el7
  python-urlgrabber.noarch 0:3.10-8.el7
  quota.x86_64 1:4.01-14.el7
  quota-nls.noarch 1:4.01-14.el7
  rdma.noarch 0:7.3_4.7_rc2-5.el7
  rng-tools.x86_64 0:5-8.el7
  rpcbind.x86_64 0:0.2.0-38.el7
  rpm.x86_64 0:4.11.3-21.el7
  rpm-build-libs.x86_64 0:4.11.3-21.el7
  rpm-libs.x86_64 0:4.11.3-21.el7
  rpm-python.x86_64 0:4.11.3-21.el7
  rsyslog.x86_64 0:7.4.7-16.el7
  samba-client-libs.x86_64 0:4.4.4-9.el7
  samba-common.noarch 0:4.4.4-9.el7
  samba-common-libs.x86_64 0:4.4.4-9.el7
  samba-common-tools.x86_64 0:4.4.4-9.el7
  samba-libs.x86_64 0:4.4.4-9.el7
  satyr.x86_64 0:0.13-14.el7
  setup.noarch 0:2.8.71-7.el7
  sg3_utils-libs.x86_64 0:1.37-9.el7
  shadow-utils.x86_64 2:4.1.5.1-24.el7
  smartmontools.x86_64 1:6.2-7.el7
  sos.noarch 0:3.3-5.el7.centos
  sssd-client.x86_64 0:1.14.0-43.el7_3.4
  sudo.x86_64 0:1.8.6p7-21.el7_3
  sysstat.x86_64 0:10.1.5-11.el7
  systemtap-runtime.x86_64 0:3.0-7.el7
  tar.x86_64 2:1.26-31.el7
  tcsh.x86_64 0:6.18.01-13.el7
  teamd.x86_64 0:1.25-4.el7
  traceroute.x86_64 3:2.0.22-2.el7
  tuned.noarch 0:2.7.1-3.el7_3.1
  tzdata.noarch 0:2016j-1.el7
  unzip.x86_64 0:6.0-16.el7
  usb_modeswitch.x86_64 0:2.4.0-5.el7
  usb_modeswitch-data.noarch 0:20160612-2.el7
  util-linux.x86_64 0:2.23.2-33.el7
  vim-common.x86_64 2:7.4.160-1.el7_3.1
  vim-enhanced.x86_64 2:7.4.160-1.el7_3.1
  vim-filesystem.x86_64 2:7.4.160-1.el7_3.1
  vim-minimal.x86_64 2:7.4.160-1.el7_3.1
  virt-what.x86_64 0:1.13-8.el7
  wget.x86_64 0:1.14-13.el7
  wpa_supplicant.x86_64 1:2.0-20.el7
  xdg-utils.noarch 0:1.1.0-0.17.20120809git.el7
  xfsprogs.x86_64 0:4.5.0-8.el7
  xz.x86_64 0:5.2.2-1.el7
  xz-libs.x86_64 0:5.2.2-1.el7
  yum.noarch 0:3.4.3-150.el7.centos
  yum-langpacks.noarch 0:0.4.2-7.el7
  yum-plugin-fastestmirror.noarch 0:1.1.31-40.el7
  yum-utils.noarch 0:1.1.31-40.el7
  zip.x86_64 0:3.0-11.el7
  zlib.x86_64 0:1.2.7-17.el7

Replaced:
  python-pyasn1.noarch 0:0.1.6-2.el7

Complete!
[admin01@centos72 ~]$

kernel が Update されたので、念のため再起動しておきます。

[admin01@centos72 ~]$ sudo shutdown -r now
[sudo] password for admin01:

omi と dsc のパッケージを wget でダウンロードしてインストールします。CentOS 7 の場合は、以下の rpm を使用します。

[admin01@centos72 ~]$ uptime
 12:01:41 up 3 min,  1 user,  load average: 0.09, 0.21, 0.11
[admin01@centos72 ~]$ wget https://github.com/Microsoft/omi/releases/download/v1.1.0-0/omi-1.1.0.ssl_100.x64.rpm
--2016-12-23 12:03:05--  https://github.com/Microsoft/omi/releases/download/v1.1.0-0/omi-1.1.0.ssl_100.x64.rpm
Resolving github.com (github.com)... 192.30.253.112, 192.30.253.113
Connecting to github.com (github.com)|192.30.253.112|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://github-cloud.s3.amazonaws.com/releases/46681501/48043966-644a-11e6-9229-10d424e119a1.rpm?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAISTNZFOVBIJMK3TQ%2F20161223%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20161223T120306Z&X-Amz-Expires=300&X-Amz-Signature=55d94084803fef29dd768ffe6582061fc480ac49f8ee741d6ade2902274bf1d7&X-Amz-SignedHeaders=host&actor_id=0&response-content-disposition=attachment%3B%20filename%3Domi-1.1.0.ssl_100.x64.rpm&response-content-type=application%2Foctet-stream [following]
--2016-12-23 12:03:06--  https://github-cloud.s3.amazonaws.com/releases/46681501/48043966-644a-11e6-9229-10d424e119a1.rpm?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAISTNZFOVBIJMK3TQ%2F20161223%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20161223T120306Z&X-Amz-Expires=300&X-Amz-Signature=55d94084803fef29dd768ffe6582061fc480ac49f8ee741d6ade2902274bf1d7&X-Amz-SignedHeaders=host&actor_id=0&response-content-disposition=attachment%3B%20filename%3Domi-1.1.0.ssl_100.x64.rpm&response-content-type=application%2Foctet-stream
Resolving github-cloud.s3.amazonaws.com (github-cloud.s3.amazonaws.com)... 54.231.81.0
Connecting to github-cloud.s3.amazonaws.com (github-cloud.s3.amazonaws.com)|54.231.81.0|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 6180206 (5.9M) [application/octet-stream]
Saving to: ‘omi-1.1.0.ssl_100.x64.rpm’

100%[======================================>] 6,180,206   2.32MB/s   in 2.5s

2016-12-23 12:03:10 (2.32 MB/s) - ‘omi-1.1.0.ssl_100.x64.rpm’ saved [6180206/6180206]

[admin01@centos72 ~]$ wget https://github.com/Microsoft/PowerShell-DSC-for-Linux/releases/download/v1.1.1-294/dsc-1.1.1-294.ssl_100.x64.rpm
--2016-12-23 12:03:14--  https://github.com/Microsoft/PowerShell-DSC-for-Linux/releases/download/v1.1.1-294/dsc-1.1.1-294.ssl_100.x64.rpm
Resolving github.com (github.com)... 192.30.253.113, 192.30.253.112
Connecting to github.com (github.com)|192.30.253.113|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://github-cloud.s3.amazonaws.com/releases/19926695/f3091de6-6f89-11e6-8a38-199f991e92e4.rpm?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAISTNZFOVBIJMK3TQ%2F20161223%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20161223T120314Z&X-Amz-Expires=300&X-Amz-Signature=e5156607f9670240562225e3e55196451ef1aa490211dd58ce0a886e5fa2db0d&X-Amz-SignedHeaders=host&actor_id=0&response-content-disposition=attachment%3B%20filename%3Ddsc-1.1.1-294.ssl_100.x64.rpm&response-content-type=application%2Foctet-stream [following]
--2016-12-23 12:03:15--  https://github-cloud.s3.amazonaws.com/releases/19926695/f3091de6-6f89-11e6-8a38-199f991e92e4.rpm?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAISTNZFOVBIJMK3TQ%2F20161223%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20161223T120314Z&X-Amz-Expires=300&X-Amz-Signature=e5156607f9670240562225e3e55196451ef1aa490211dd58ce0a886e5fa2db0d&X-Amz-SignedHeaders=host&actor_id=0&response-content-disposition=attachment%3B%20filename%3Ddsc-1.1.1-294.ssl_100.x64.rpm&response-content-type=application%2Foctet-stream
Resolving github-cloud.s3.amazonaws.com (github-cloud.s3.amazonaws.com)... 54.231.40.171
Connecting to github-cloud.s3.amazonaws.com (github-cloud.s3.amazonaws.com)|54.231.40.171|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 5807498 (5.5M) [application/octet-stream]
Saving to: ‘dsc-1.1.1-294.ssl_100.x64.rpm’

100%[======================================>] 5,807,498   2.31MB/s   in 2.4s

2016-12-23 12:03:18 (2.31 MB/s) - ‘dsc-1.1.1-294.ssl_100.x64.rpm’ saved [5807498/5807498]

[admin01@centos72 ~]$ sudo rpm -Uvh omi-1.1.0.ssl_100.x64.rpm dsc-1.1.1-294.ssl_100.x64.rpm
[sudo] password for admin01:
warning: omi-1.1.0.ssl_100.x64.rpm: Header V3 RSA/SHA256 Signature, key ID be1229cf: NOKEY
Preparing...                          ################################# [100%]
Unconfiguring omid (systemd) service ...
Removed symlink /etc/systemd/system/multi-user.target.wants/omid.service.
Updating / installing...
   1:omi-1.1.0-0                      ################################# [ 33%]

************************************************************
* Warning: The certificate and keyfile were not generated  *
* since they already exist.                                *
************************************************************
omi already configured
Configuring OMI service ...
Created symlink from /etc/systemd/system/multi-user.target.wants/omid.service to /usr/lib/systemd/system/omid.service.
Checking for ctypes python module...ok!
   2:dsc-1.1.1-294                    ################################# [ 67%]
Installing resource MSFT_nxGroupResource
Installing resource MSFT_nxFileResource
Installing resource MSFT_nxUserResource
Installing resource MSFT_nxArchiveResource
Installing resource MSFT_nxServiceResource
Installing resource MSFT_nxScriptResource
Installing resource MSFT_nxFileLineResource
Installing resource MSFT_nxPackageResource
Installing resource MSFT_nxSshAuthorizedKeysResource
Installing resource MSFT_nxEnvironmentResource
Cleaning up / removing...
   3:omi-1.0.8-6                      ################################# [100%]
[admin01@centos72 ~]$

omid (OMI Server)が起動していることを確認します。

[admin01@centos72 ~]$ sudo systemctl status omid
● omid.service - OMI CIM Server
   Loaded: loaded (/usr/lib/systemd/system/omid.service; enabled; vendor preset: disabled)
   Active: active (running) since Fri 2016-12-23 12:03:39 UTC; 1min 31s ago
  Process: 1774 ExecStop=/opt/omi/bin/omiserver -s (code=exited, status=0/SUCCESS)
  Process: 1806 ExecStart=/opt/omi/bin/omiserver -d (code=exited, status=0/SUCCESS)
  Process: 1776 ExecStartPre=/opt/omi/bin/support/installssllinks (code=exited, status=0/SUCCESS)
 Main PID: 1810 (omiserver)
   CGroup: /system.slice/omid.service
           mq1810 /opt/omi/bin/omiserver -d

Dec 23 12:03:39 centos72 systemd[1]: Starting OMI CIM Server...
Dec 23 12:03:39 centos72 systemd[1]: PID file /var/opt/omi/run/omiserver.pi...t.
Dec 23 12:03:39 centos72 systemd[1]: Started OMI CIM Server.
Hint: Some lines were ellipsized, use -l to show in full.
[admin01@centos72 ~]$

また、現時点で Apache (httpd) がインストールされていないことを確認しておきます。(この後、DSC から構成するため。)

[admin01@centos72 ~]$ sudo rpm -qa | grep httpd
[admin01@centos72 ~]$

 

最後に、root のパスワードを構成しておきます。(既に root のパスワードを付与している場合は、改めて設定する必要はありません。)今のところ、DSC for Linux では root を使用して CIM セッションを確立し構成を行います。Credential として root アカウントおよびパスワードを使用するため、root のパスワードが設定されている必要があります。

[admin01@centos72 ~]$ sudo passwd root
[sudo] password for admin01:
Changing password for user root.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
[admin01@centos72 ~]$

Linux 向け Configuration の作成

Linux 向けの構成(Configuration)も基本的な構文は同じです。利用できる DSC リソースが Windows のものとは異なりますので、Linux 用の DSC リソースを使用します。

Windows ホスト上で Linux 向けの DSC Configuration を作成する場合や、Windows ホストから Linux に向けて Configuration を PUSH する場合(Windows 上でコンパイルする場合)、Windows で PULL サーバーを実装する場合は、nx モジュール(Linux 向けの DSC コアリソースが含まれるモジュール)をインストールする必要があります。

nx リソースは PowerShell Gallery で公開されていますので、Install-Module コマンドなどを使用してインストールできます。

Windows PowerShell
Copyright (C) 2016 Microsoft Corporation. All rights reserved.

PS C:\Users\admin01> Find-Module nx

NuGet provider is required to continue
PowerShellGet requires NuGet provider version '2.8.5.201' or newer to interact with NuGet-based repositories. The NuGet
 provider must be available in 'C:\Program Files\PackageManagement\ProviderAssemblies' or
'C:\Users\admin01\AppData\Local\PackageManagement\ProviderAssemblies'. You can also install the NuGet provider by
running 'Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force'. Do you want PowerShellGet to install
and import the NuGet provider now?
[Y] Yes  [N] No  [S] Suspend  [?] Help (default is "Y"):

Version    Name                                Repository           Description
-------    ----                                ----------           -----------
1.0        nx                                  PSGallery            Module with DSC Resources for Linux

PS C:\Users\admin01> Install-Module nx

Untrusted repository
You are installing the modules from an untrusted repository. If you trust this repository, change its
InstallationPolicy value by running the Set-PSRepository cmdlet. Are you sure you want to install the modules from
'PSGallery'?
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "N"): Y
PS C:\Users\admin01> Get-Module nx -ListAvailable

    Directory: C:\Program Files\WindowsPowerShell\Modules

ModuleType Version    Name                                ExportedCommands
---------- -------    ----                                ----------------
Manifest   1.0        nx

PS C:\Users\admin01>

初めて Find-Module / Install-Module などを使用する場合は NuGet Provider のインストールが必要になりますので、表示に従ってインストールします。

nx モジュールをインストールすると、Linux 向けの DSC リソースを利用できるようになります。Linux 向けの DSC リソースは nx から始まるリソース名となっています。(今のところ)

PS C:\Users\admin01> Get-DscResource

ImplementedAs   Name                      ModuleName                     Version    Properties
-------------   ----                      ----------                     -------    ----------
Binary          File                                                                {DestinationPath, Attributes, Ch...
Binary          nxArchive                                                           {DestinationPath, SourcePath, Ch...
Binary          nxEnvironment                                                       {Name, DependsOn, Ensure, Path...}
Binary          nxFile                                                              {DestinationPath, Checksum, Cont...
Binary          nxFileLine                                                          {ContainsLine, FilePath, Depends...
Binary          nxGroup                                                             {GroupName, DependsOn, Ensure, M...
Binary          nxPackage                                                           {Name, Arguments, DependsOn, Ens...
Binary          nxScript                                                            {GetScript, SetScript, TestScrip...
Binary          nxService                                                           {Controller, Name, DependsOn, En...
Binary          nxSshAuthorizedKeys                                                 {KeyComment, DependsOn, Ensure, ...
Binary          nxUser                                                              {UserName, DependsOn, Descriptio...
Binary          SignatureValidation                                                 {SignedItemType, TrustedStorePath}
PowerShell      Archive                   PSDesiredStateConfiguration    1.1        {Destination, Path, Checksum, Cr...
PowerShell      Environment               PSDesiredStateConfiguration    1.1        {Name, DependsOn, Ensure, Path...}
PowerShell      Group                     PSDesiredStateConfiguration    1.1        {GroupName, Credential, DependsO...
Composite       GroupSet                  PSDesiredStateConfiguration    1.1        {DependsOn, PsDscRunAsCredential...
Binary          Log                       PSDesiredStateConfiguration    1.1        {Message, DependsOn, PsDscRunAsC...
PowerShell      Package                   PSDesiredStateConfiguration    1.1        {Name, Path, ProductId, Argument...
Composite       ProcessSet                PSDesiredStateConfiguration    1.1        {DependsOn, PsDscRunAsCredential...
PowerShell      Registry                  PSDesiredStateConfiguration    1.1        {Key, ValueName, DependsOn, Ensu...
PowerShell      Script                    PSDesiredStateConfiguration    1.1        {GetScript, SetScript, TestScrip...
PowerShell      Service                   PSDesiredStateConfiguration    1.1        {Name, BuiltInAccount, Credentia...
Composite       ServiceSet                PSDesiredStateConfiguration    1.1        {DependsOn, PsDscRunAsCredential...
PowerShell      User                      PSDesiredStateConfiguration    1.1        {UserName, DependsOn, Descriptio...
PowerShell      WaitForAll                PSDesiredStateConfiguration    1.1        {NodeName, ResourceName, Depends...
PowerShell      WaitForAny                PSDesiredStateConfiguration    1.1        {NodeName, ResourceName, Depends...
PowerShell      WaitForSome               PSDesiredStateConfiguration    1.1        {NodeCount, NodeName, ResourceNa...
PowerShell      WindowsFeature            PSDesiredStateConfiguration    1.1        {Name, Credential, DependsOn, En...
Composite       WindowsFeatureSet         PSDesiredStateConfiguration    1.1        {DependsOn, PsDscRunAsCredential...
PowerShell      WindowsOptionalFeature    PSDesiredStateConfiguration    1.1        {Name, DependsOn, Ensure, LogLev...
Composite       WindowsOptionalFeatureSet PSDesiredStateConfiguration    1.1        {DependsOn, PsDscRunAsCredential...
PowerShell      WindowsPackageCab         PSDesiredStateConfiguration    1.1        {Ensure, Name, SourcePath, Depen...
PowerShell      WindowsProcess            PSDesiredStateConfiguration    1.1        {Arguments, Path, Credential, De...


PS C:\Users\admin01>

この状態になれば、Windows ホスト上でも Linux 用の DSC Configuration を記述しコンパイル(MOF ファイルを生成)できるようになります。

以下のスクリプト(DSC Configuration)を記述して、ps1 ファイルとして保存します。

※パスワード及び SSH 公開鍵の値は適切なものに変更してください。

Configuration LinuxConfig {

    param (
        [parameter(mandatory)]
        [string[]]$Node
    )

    Import-DscResource -Module nx

    Node $Node {

        nxGroup TestGroup {
            GroupName = "testgrp"
            Ensure = "Present"
        }

        nxUser TestUser {
            UserName = "testuser"
            Ensure = "Present"
            Password  = '$6$fZAne/Qc$MZejMrOxDK0ogv9SLiBP5J5qZFBvXLnDu8HY1Oy7ycX.Y3C7mGPUfeQy3A82ev3zIabhDQnj2ayeuGn02CqE/0'
            HomeDirectory = "/home/testuser"
            Description = "test user"
            GroupID = "testgrp"
            DependsOn = "[nxGroup]TestGroup"
        }

        nxSshAuthorizedKeys ScugjSSHKey {
            UserName = "testuser"
            Key = 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCX8+lLrYjJYYJv0XPIinEkuUpudcj2Z7TzFMxY+QEFfKXIOC8a2hOmA5kSOchYowDQjujVWOJv07cB9756ce2CJ9BGEmRKUq1ws0fUix9fTziN7n7f/I2UO6rOkUoZwcUdNVXeDdx0CR8IWxXrP1q490nLwFYfL/Tee6RVmn9DVPx6uS/ZAJkBqDcD189BpeKcps18y8tcYUaIe7ner7j30bj+6icqOgYLfHShc62L8DK6v8YDumLY76PhHGCkCZwl8SA4upuMEQJeROcOaSsIBMq4KU1Ljezgu54L4VCIyN71itw/wtIx+7gVagVjx0sGm4BxDWNoyM3ObpFaTSqx testuser@linux'
            Ensure = "Present"
            KeyComment = "SSH RSA for testuser"
            DependsOn = "[nxUser]TestUser"
        }

        nxPackage Apache2 {
            Name = "httpd"
            Ensure = "Present"
            PackageManager = "yum"
        }

        nxService Apache2Service {
            Name = "httpd"
            State = "running"
            Enabled = $true
            Controller = "systemd"
            DependsOn = "[nxPackage]Apache2"
        }

        nxFile TestFile {
            Type = "File"
            Ensure = "Present"
            DestinationPath = "/var/www/html/welcome.html"
            Contents = "
<h1>Merry Christmas!!</h1>

"
            DependsOn = "[nxPackage]Apache2"
        }

    }

}

Configuration の PUSH による Linux の構成

Linux ターゲットに対しても Windows と同様、Pull と Push 両方の展開方法を利用できます。Pull を使用する場合は、Windows の場合と同様、Pull サーバーの場所などを LCM (ローカル構成マネージャー、Linux の場合は Linux DSC エージェント)へ設定しておく必要があります。

ここでは Windows ホストから構成を Push してみます。前述の通り、Windows ホストから Linux 向けの Configuration をコンパイルして Push する場合は、nx モジュールを事前にインストールしておく必要があります。

※Linux ホストと同じ仮想ネットワークにデプロイされている Windows ホストから Push します。異なるネットワークから構成を Push する場合は、CIM セッションを確立できるよう FW など(Azure の場合は NSG など)の構成が必要となる場合があります。

まずは、作成した Configuration を PowerShell 上でロードしておきます。その後、MOF ファイルを生成します。

PS C:\Windows\system32> $Node = "centos72"
PS C:\Windows\system32> LinuxConfig -Node $Node -OutputPath $env:TEMP

    Directory: C:\Users\admin01\AppData\Local\Temp

Mode                LastWriteTime         Length Name                                                                                                                                                                                                            
----                -------------         ------ ----                                                                                                                                                                                                            
-a----       12/23/2016  12:34 PM           6590 centos72.mof                                                                                                                                                                                                    

PS C:\Windows\system32> 

ターゲットとなる Linux ホストへ接続性があることを確認しておきます。

PS C:\Windows\system32> Test-Connection $Node

Source        Destination     IPV4Address      IPV6Address                              Bytes    Time(ms) 
------        -----------     -----------      -----------                              -----    -------- 
TESTVM01      centos72        10.0.0.5                                                  32       3        
TESTVM01      centos72        10.0.0.5                                                  32       0        
TESTVM01      centos72        10.0.0.5                                                  32       2        
TESTVM01      centos72        10.0.0.5                                                  32       8        

PS C:\Windows\system32>

接続に使用する Credential の情報を入力します。root アカウントのパスワードを入力します。また、接続は SSL により保護されますが、SSL で使用される証明書がデフォルトでは自己署名証明書となっているため、証明書のチェックなどをスキップするよう接続オプションを構成します。(本番環境では、外部又は社内の認証局から発行された証明書を使用したほうが良いでしょう。)

PS C:\Windows\system32> $cred = Get-Credential -UserName "root" -Message "Enter password."
PS C:\Windows\system32> $opt = New-CimSessionOption -UseSsl:$true -SkipCACheck:$true -SkipCNCheck:$true -SkipRevocationCheck:$true
PS C:\Windows\system32> $s = New-CimSession -ComputerName $Node -Credential $cred -Port:5986 -Authentication Basic -SessionOption:$opt -OperationTimeoutSec:90
PS C:\Windows\system32> Get-CimSession

Id           : 1
Name         : CimSession1
InstanceId   : e37e1c4a-1162-43b5-908f-367ffd3384d9
ComputerName : centos72
Protocol     : WSMAN

PS C:\Windows\system32>

CIM セッションを確立できたら、DSC Configuration を PUSH します。

PS C:\Windows\system32> Start-DscConfiguration -Path $env:TEMP -CimSession $s -Wait -Verbose -Force
VERBOSE: Perform operation 'Invoke CimMethod' with following parameters, ''methodName' = SendConfigurationApply,'className' = MSFT_DSCLocalConfigurationManager,'namespaceName' = root/Microsoft/Windows/DesiredStateConfiguration'.
VERBOSE: Operation 'Invoke CimMethod' complete.
VERBOSE: Time taken for configuration job to complete is 15.693 seconds

PS C:\Windows\system32> 

Windows と異なり、Linux の場合は各リソースの構成状況が表示されません。(現時点では。)何かエラーが発生した場合は、エラーが表示されます。

構成が正常に完了した場合、httpd がインストールされ、welcome.html が配置されているはずです。

[admin01@centos72 ~]$ sudo rpm -qa | grep httpd
[sudo] password for admin01:
httpd-tools-2.4.6-45.el7.centos.x86_64
httpd-2.4.6-45.el7.centos.x86_64
[admin01@centos72 ~]$ sudo systemctl status httpd
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
   Active: active (running) since Fri 2016-12-23 12:44:00 UTC; 9min ago
     Docs: man:httpd(8)
           man:apachectl(8)
 Main PID: 4589 (httpd)
   Status: "Total requests: 0; Current requests/sec: 0; Current traffic:   0 B/sec"
   CGroup: /system.slice/httpd.service
           tq4589 /usr/sbin/httpd -DFOREGROUND
           tq4590 /usr/sbin/httpd -DFOREGROUND
           tq4591 /usr/sbin/httpd -DFOREGROUND
           tq4592 /usr/sbin/httpd -DFOREGROUND
           tq4593 /usr/sbin/httpd -DFOREGROUND
           mq4594 /usr/sbin/httpd -DFOREGROUND

Dec 23 12:44:00 centos72 systemd[1]: Starting The Apache HTTP Server...
Dec 23 12:44:00 centos72 httpd[4589]: AH00558: httpd: Could not reliably de...ge
Dec 23 12:44:00 centos72 systemd[1]: Started The Apache HTTP Server.
Hint: Some lines were ellipsized, use -l to show in full.
[admin01@centos72 ~]$ ls -lha /var/www/html/welcome.html
-rw-r--r--. 1 root root 26 Dec 23 12:44 /var/www/html/welcome.html
[admin01@centos72 ~]$ cat /var/www/html/welcome.html

<h1>Merry Christmas!!</h1>

[admin01@centos72 ~]$

ブラウザでアクセスすると、配置したページを表示できます。

dsclinux-161223-03dsclinux-161223-04

また、テストユーザーも生成できています。

[admin01@centos72 ~]$ id testuser
uid=1001(testuser) gid=1001(testgrp) groups=1001(testgrp)
[admin01@centos72 ~]$

まとめ

Linux でも DSC を用いて構成を行うことができます。まだまだ DSC リソースが充実していないため、できることが限られている印象はありますが、PowerShell for Linux の開発と併せて DSC リソースも充実していくことを期待です。

GitHub 上で開発が進められているため、フィードバックしやすい部分もありますので、バグを発見された方は是非ご報告を!

今回まとめきれなかった Azure Automation DSC で Linux をオンボードする方法は、また何れまとめたいと思います。

Written by kazu

2017/05/23 at 22:06

Azure Automation DSC を使ってみる

with one comment

Microsoft Azure Automation DSC とは

Azure Automation DSC は、Azure Automation アカウントを作成することで利用可能な機能の一つです。シンプルに言うと、DSC Pull サーバー相当の機能を Azure のサービスとして利用できます。これにより、自分で DSC サーバーを用意(Windows Server で構築)することなく、管理対象のサーバーを Azure へ接続するだけで、DSC による構成管理を行えます。

そもそも DSC とは?

Desired State Configuration (DSC)は PowerShell をベースとした構成管理のためのテクノロジーです。ChepAnsible などと同じく、対象の構成を管理するためのものです。Configuration as Code を実現するという点においても似ています。

余談:Configuration as Code と Infrastructure as Code

Configuration as Code と Infrastructure as Code は同じような概念ですが、対象としている範囲が若干違います。

  • Infrastructure as Code は、主にインフラのファブリック構成をコードとして定義し、管理するものです。
  • Configuration as Code は、主に各機器(ノード)の設定をコードとして定義し、管理するものです。

両方をまとめて、広義の Infrastructure as Code として取り扱う場合もあります。Microsoft Azure 利用者の場合、Azure 内の(利用者としての)インフラ(どのような VM や仮想ネットワークを作成して、どうつなげるか)は ARM (Azure Resource Manager)が担っていますが、ARM テンプレートに記載される構成が Infrastructure as Code の部分、作成された仮想マシンの内部を設定する DSC が Configuration as Code となるイメージです。

PowerShell DSC と Azure Automation DSC

PowerShell DSC は特にサーバーがなくても(Configuration を対象に PUSH できれば)利用できます。ローカルノードを構成したいだけであれば、PowerShell DSC を PUSH モードで利用することが一番お手軽です。オンプレミスでもクラウド上の仮想マシンでも、Windows でも Linux でも PowerShell DSC を利用できます。(Linux で使用する場合は、それなりに準備が必要です。)

Azure Automation DSC は PowerShell DSC の PULL サーバー(及びレポートサーバー)相当の機能を提供します。このため、DSC で集中管理を行いたい場合に、DSC のためのサーバーをわざわざ自分で用意する必要がなくなります。オンプレミスの危機でもクラウド上の仮想マシンでも、Windows でも Linux でも、Azure Automation DSC の管理対象とすることができます。さらに、Azure の Windows 仮想マシンの場合は、Azure Automation DSC との連携を簡単に設定できるようになっています。(※)

(※)通常、DSC を PULL モードで使用する場合は、ローカルノード(管理対象)側で、PULL サーバの場所などを設定する必要があります。(当たり前ですが、PULL サーバがどこにあるか分からないと、接続できないですので。)Azure Automation DSC を利用する場合、同じサブスクリプション内の Windows 仮想マシンであれば、ポータルから紐づけを行うことができるようになっており、VM の内部で設定を行う必要がありません。

Azure Automation DSC を使用して、Azure の Windows 仮想マシンを管理する

ここからは Step-by Step で。

  1. Azure 管理ポータルから「新規」→「Monitoring + management」→「オートメーション」を選択します。
    aadsc-161214-001
  2. 「Automation アカウント」を作成します。「名前」は管理用の名前ですので、何でも OK です。その他の項目は、VM を作成する場合と同じです。アクションアカウントは、作成しておいたほうが後々面倒なことになりません。
    aadsc-161214-002
  3. Automation アカウントを新規に作成すると、以下のリソースが作成されます。
    aadsc-161214-003
  4. 管理対象となる VM をデプロイしておきます。既に存在する VM へ設定を行う場合は、改めてデプロイする必要はありません。VM デプロイ時に特殊な設定は不要で、デプロイされている VM を後から紐づけることができます。尚、ARM(Azure Resource Manager)管理の Virtual Machine (クラシック仮想マシンではないもの)で、OS が Windows Server となるものを選択すると、設定時の手間が少ないです。(以下はその手順を記載しています。)
    aadsc-161214-005aadsc-161214-006aadsc-161214-007aadsc-161214-008aadsc-161214-009aadsc-161214-010
  5. 以下の PowerShell スクリプト(DSC Configuration)を作成し、適当な名前で保存します。
    Configuration SampleConfig {
        
        Node "WebServer" {
    
            WindowsFeature IIS {
                Name = "Web-Server"
                Ensure = "Present"
            }
    
            WindowsFeature IISTools {
                Name = "Web-Mgmt-Tools"
                Ensure = "Present"
            }
    
            WindowsFeature xTelnet {
                Name = "Telnet-Client"
                Ensure = "Absent"
            }
            
        }
    
        Node "DNSServer" {
    
            WindowsFeature DNS {
                Name = "DNS"
                Ensure = "Present"
            }
    
            WindowsFeature DNSTools {
                Name = "RSAT-DNS-Server"
                Ensure = "Present"
            }
    
            WindowsFeature xTelnet {
                Name = "Telnet-Client"
                Ensure = "Absent"
            }
    
        }
    
    }
    
  6. Azure ポータルで、作成した Azure Automation アカウントを選択します。Automation アカウントの管理画面は以下の構成となっています。

    aadsc-161214-004Azure Automation DSC で主に使用するのは「リソース」内の「DSC 構成」と「DSC ノード」です。標準の DSC モジュール以外を使用する場合は。「資産」も使用します。(今回は使用しません。)

  7. 「DSC 構成」から「構成を追加」を選択し、先ほど作成した DSC Configuration ファイルをアップロードします。「名前」欄は、DSC Configuration で記載した Configuration 名が自動で入力されます。

    aadsc-161214-011

  8. 「DSC 構成」に先ほど登録した構成(SampleConfig)が追加されていることを確認します。

    aadsc-161214-012

  9. 追加した構成の名前(SampleConfig)を選択し、「コンパイル」をクリックします。DSC Configuration のコンパイルが実行されます。コンパイル ジョブはキューイングされた後、順次実行されますので、ジョブが完了するまで待ちます。

    aadsc-161214-013aadsc-161214-014

    aadsc-161214-015

  10. コンパイル ジョブが完了すると、コンパイルした DSC Configuration 内で定義された DSC 構成が利用できる状態になります。「プル サーバーで使用可能」の「ノード構成」に定義したノード構成が表示されていることを確認します。

    aadsc-161214-016

  11. 「DSC ノード」から「Azure VM の追加」を選択し、「Virtual Machine – オンボードする仮想マシンの選択」をクリックします。

    aadsc-161214-017

  12. 構成対象とする VM を選択します。尚、ここで選択できるのは ARM 管理の Virtual Machine で、OS が Windows のもののみです。クラシック仮想マシンの Windows については、仮想マシンの拡張機能の設定から操作を行います。Linux の場合は、OS にログインして構成スクリプトを実行する必要があります。

    aadsc-161214-018

  13. 「登録 – 登録データの構成」を選択し、先ほど選択した VM に対して紐づける DSC 構成を選択します。コンパイル済みの DSC ノード構成が表示されるため、プルダウンから選択します。その他のオプションは、オンプレミスの PowerShell DSC でプル サーバーを使用する際定義するものと同じです。(詳細は省略します。)

    aadsc-161214-019

  14. 「作成」をクリックして VM とノード構成の紐づけを作成します。正常に作成が完了すると、プル サーバーから DSC ノード構成が配布される(各管理対象ノードが構成を取得しに行く)状態となります。

    aadsc-161214-020

  15. しばらく待つと、各管理対象ノードが Azure Automation DSC プル サーバーから構成を取得し、取得した構成をもとに自身を再構成します。

    aadsc-161214-021一度構成を適用した後は、定期的にチェックが実行され結果がレポートサーバー(Azure Automation DSC プル サーバー)上に保存されます。各レポートの行を選択すると、詳細を表示できます。

まとめ

Azure Automation DSC は DSC サーバーを自前で用意する必要がないので楽。Azure 上の仮想マシンを管理対象とする場合にはとても楽。

機会があれば、Linux の DSC、及び Linux を Azure Automation DSC で管理する方法もまとめたいと思います。

Written by kazu

2017/04/14 at 00:00