備考欄に感想を書くタイプのエンジニア

それで出世が遅れ(ry

Azure ストレージ アカウントを作成するときにちょっとハマった

Windows Azure で Azure ストレージを利用する場合、ストレージ アカウントを作成する必要がありますが、Windows Azure PowerShell も公開されていることですし、Web 上のポータル サイトで GUI をポチポチせずとも常に起動しっぱなしの PowerShell でサッと作ってしまおうと思うわけです。こんな風に。

PS > New-AzureStorageAccount -StorageAccountName "azureStorage1" -Label "Storage Account for SQL" -Location "North Central US"

すると、こんなエラーが出ます。

 New-AzureStorageAccount : 指定された引数は、有効な値の範囲内にありません。
 パラメーター名: parameters.ServiceName
 発生場所 行:1 文字:1
 + New-AzureStorageAccount `
 + ~~~~~~~~~~~~~~~~~~~~~~~~~
     + CategoryInfo          : NotSpecified: (:) [New-AzureStorageAccount], ArgumentOutOfRangeException
     + FullyQualifiedErrorId : System.ArgumentOutOfRangeException,Microsoft.WindowsAzure.Commands.ServiceManagement.Storage 
    Services.NewAzureStorageAccountCommand

最初は有効な値の範囲内とか何事かと思ったのですが、ちゃんと New-AzureStorageAccount に関する公式サイトWindows Azure の Web 上の GUI、そして PowerShellGet-Help New-AzureStorageAccount -Detailed には書いてあります(-Detailed パラメーターがない場合はフィールドの文字入力制限について言及されている文章は出てきません)。

フィールドは 3 ~ 24 文字で指定する必要があります。 フィールドに使用できるのは、小文字のアルファベットおよび数字のみです。 (The storage account name (...) must be between 3 and 24 characters in length and use lowercase letters and numbers only. )

なぜこういう制限があるかというとおそらく、サービスのエンドポイントの URL の形式が以下のようになっていて、大文字と記号が使えないからだと思われます。

http://mystorageaccount.*.core.windows.net/*

ともかく、いくら PowerShell が "動詞-名詞" 形式の命名規則で、ストレージ アカウントを新たに作成するなら NewStorageAccount な感じかなーあーあったあったーってヘラヘラ使ってると、ときどきこんな落とし穴に…(普通ははまらないですね)。

第1回 PowerShell 勉強会に参加してきた

12月21日に開催された第1回 PowerShell 勉強会に参加してきたのですが、内容は後述のリンクを見てもらうとして、雑感というか。

個人的に PowerShell は登場してから結構年月が経っているにもかかわらず利用者がそれほど多くないという印象を持っていて、だからというわけではないですが PowerShell というカテゴリでの勉強会に魅力を感じて参加してみた結果、想像以上に面白い勉強会だったと思っています。

また、登壇者をはじめとして PowerShell を様々な形で利用している(利用できる)のは公開されているスライドを見れば明らかで、現時点でも PowerShell は非常に強力な言語で今後さらによくなっていくものと思われます(vbs とは対照的に)。

一方で、勉強会の中でWindows PowerShell イン アクションは聖書みたいな話があって、それに異論はないのですが in Action の Second Edition も in Depth も Deep Dive も出版されているにもかかわらず翻訳されていない、v3 に対応している日本語の書籍が @mutaguchi 氏著の【改訂新版】 Windows PowerShell ポケットリファレンスだけ(?)みたいな状況を見るに Windows 系エンジニアは基本的に英語の書籍が読めて翻訳書籍の需要がないか、PowerShell に興味がないかのどっちかで、どちらかというと後者っぽい雰囲気を"ソースは俺"レベルの観測範囲で感じますが実際のところどうなんでしょうか。

懇親会の時にも、PowerShell について日本語でぐぐると結構な確率で @mutaguchi 氏@guitarrapc_tech 氏の記事が出てくるよねっていう話をちょっとしていたのですが、PowerShell Advent Calendar レベルでほかの人ももっとエントリーを書いて PowerShell のググラビリティをあげていくと、例えばサーバー構成においてスクリーン ショットとセットになったエクセル手順書は必須みたいな世界にさよならできる、みたいないいことがあったりするのかなと PowerShell 推進派としては思ったのでした(最初からそんな世界自体が藁人形だったらいいのですが)。

ところで会場の株式会社グラニにある UFO キャッチャーを試す権利を得た人の中で一人だけマスコットをゲットできなかったのがこちらのあかうんt(ry

PowerShell DSC を実際に動かしてみる

※これは PowerShell Advent Calendar 2013: ATND 14 日目の記事です。

Windows 8.1 および Windows Server 2012 R2 が発表されてからしばらく経ちますが、PowerShell DSC に関する情報や手順があんまり出ていないようですので(公式もまだですよね?)、正式な情報が揃うまでの間でちょっと触ってみようということで簡単な構成を作ってみました。

そもそも PowerShell DSC が何かということについては @guitarrapc_tech 氏がご自身のブログで丁寧に説明されていますので丸投げしてしまいます。

環境を準備する

まず、PSDSC を実行する環境ですが、基本的には IIS が動かせるコンピューターと DSC 適用対象のコンピューターの2台程度があればいいです。もちろんもっと DSC 適用対象コンピューターを用意すると構成情報の大量のコピペが楽しめます。ドメインを構成しているほうがコンピューター間の通信が簡単にできるんじゃないかなとは思いますが、スタンドアロン構成で実施するかどうかはお好みで…。

構成例:

  • PSDSCHost001 (DC, DSC: WS2012 R2)
  • PSDSCClient001 (WS2012 R2)

DSC の管理サーバー(?)を構成する

では早速 PSDSCHost001 上で PowerShell を起動し、Windows PowerShell Desired State Configuration Service 機能をインストールします。GUI でもなんでも結構ですが、せっかくなので PowerShell で。この機能、のちに適切な日本語に変更されたりするんでしょうか…。MCP の翻yいえなんでもありません。

 PS > Install-WindowsFeature DSC-Service

 Success Restart Needed Exit Code      Feature Result                               
 ------- -------------- ---------      --------------                               
 True    No             Success        {Windows PowerShell Desired State Configur...

上のコマンドレットを実行して成功していることを確認します。関連する機能として Web-Server の一部の機能もインストールされます。今回は使いませんすみませんすみません。続いて Desired State Configuration ファイルを作ります。こんな感じ。

 PS > New-Item c:\PSDSC -ItemType Directory

 Directory: C:\

 Mode                LastWriteTime     Length Name                                                       
 ----                -------------     ------ ----                                                       
 d----        2013/12/13     20:19            PSDSC  

 PS > New-Item c:\PSDSC\IISConfig.ps1 -ItemType File

 Directory: C:\PSDSC

 Mode                LastWriteTime     Length Name                                                       
 ----                -------------     ------ ----                                                       
 -a---        2013/12/13     20:19          0 iisconfig.ps1  

で、作成した IISConfig.ps1 ファイルを開いて以下の内容を書き込んで保存、実行します。

  Configuration IISConfiguration
  {
     Node PSDSCClient001
     {
         WindowsFeature IIS
         {
             Ensure = "Present"
             Name = "Web-Server"
         }

         WindowsFeature ASP
         {
             Ensure = "Present"
             Name = "Web-Asp-Net45"
         }
     }
  }

 IISConfiguration

実行すると PowerShell のカレント ディレクトリ(Get-Location で表示されるディレクトリ)に MOF ファイルが作成されます。

 PS > C:\PSDSC\iisconfig.ps1

 Directory: C:\PSDSC\WebSiteConfig

 Mode                LastWriteTime     Length Name                                                       
 ----                -------------     ------ ----                                                       
 -a---        2013/12/13     20:54       1732 PSDSCClient001.mof    

これで準備は完了です。

DSC でクライアントに IIS を展開する

まずは DSC 適用前の PSDSCCllient001 に PowerShell で接続して機能のインストール状態を確認します。Get-Credential のクレデンシャル認証は PSDSCClient001 に対して十分な権限があれば何でもいいです(Domain Admins とかw)。

 PS > Enter-PSSession -ComputerName PSDSCClient001 -Credential $(Get-Credential)

問題なく接続できれば、プロンプトの部分が [PSDSCClient001]: PS > みたいな形になりますので Get-WindowsFeature を実行します。

 [PSDSCClient001]: PS > Get-WindowsFeature -Name Web*

 Display Name                                            Name                     Install State
 ------------                                            ----                     -------------
 [ ] Web サーバー (IIS)                                      Web-Server                   Available
     [ ] Web サーバー                                        Web-WebServer                Available
         [ ] HTTP 共通機能                                   Web-Common-Http              Available
             [ ] HTTP エラー                                Web-Http-Errors              Available
             [ ] ディレクトリの参照                               Web-Dir-Browsing             Available
             [ ] 既定のドキュメント                               Web-Default-Doc              Available
             [ ] 静的なコンテンツ                                Web-Static-Content           Available
             [ ] HTTP リダイレクト                             Web-Http-Redirect            Available
             [ ] WebDAV 発行                               Web-DAV-Publishing           Available
             [ ] .NET 拡張機能 4.5                           Web-Net-Ext45                Available
             [ ] Application Initialization              Web-AppInit                  Available
             [ ] ASP                                     Web-ASP                      Available
             [ ] ASP.NET 3.5                             Web-Asp-Net                  Available
             [ ] ASP.NET 4.5                             Web-Asp-Net45                Available
   ※途中割愛してます

こんな感じでまだ何もインストールされていないことを確認したら PSSession は Exit しておきます。では DSC を実行してみましょう。

 Start-DscConfiguration -ComputerName PSDSCClient001 -Path IISConfiguration -Wait -Verbose -Credential $(Get-Credential)

するとこんな感じの結果が表示されます。

f:id:arumumu:20131213194519p:plain

ここで、もう一度 PowerShell から先ほどと同じコマンドレットを実行して PSDSCClient001 に接続し、機能のインストール状況を確認してみると…

 [PSDSCClient001]: PS > Get-WindowsFeature -Name web*

 Display Name                                            Name                       Install State
 ------------                                            ----                       -------------
 [X] Web サーバー (IIS)                                      Web-Server                     Installed
     [X] Web サーバー                                        Web-WebServer                  Installed
         [X] HTTP 共通機能                                   Web-Common-Http                Installed
             [X] HTTP エラー                                Web-Http-Errors                Installed
             [X] ディレクトリの参照                               Web-Dir-Browsing               Installed
             [X] 既定のドキュメント                               Web-Default-Doc                Installed
             [X] 静的なコンテンツ                                Web-Static-Content             Installed
             [ ] HTTP リダイレクト                             Web-Http-Redirect              Available
             [ ] WebDAV 発行                               Web-DAV-Publishing             Available
             [X] .NET 拡張機能 4.5                           Web-Net-Ext45                  Installed
             [ ] Application Initialization              Web-AppInit                    Available
             [ ] ASP                                     Web-ASP                        Available
             [ ] ASP.NET 3.5                             Web-Asp-Net                    Available
             [X] ASP.NET 4.5                             Web-Asp-Net45                  Installed
 ※途中割愛してます

インストールされてますね!ということで本当はウェブサイトを作ってコンテンツも一緒に DSC で構成したほうがデモっぽい感じですが、そういうのはブログよりも動画で見るほうがおおーっ!ってなるので Channel 9 で公開されている Teched 2013 の Desired State Configuration in Windows Server 2012 R2 PowerShell でカップケーキのウェブサイトが増殖する様子を見てもらえればと思います。

追記

そういえばせっかく Desired State Configuration って言っているのに構成済みの環境に再度 DSC を適用したときにどんな振る舞いをするのかについても結果を書いておいた方がいいかなと思いますので、実行したら追記しようと思います。環境もうつぶしちゃった (・ω<)


あと、全然本文とは関係ないですがブロガーなら誰しも、ふと書き続けていたブログをぶち壊したくなる衝動に駆られることがあるかと思いますが、多分に漏れず私もその衝動のままにこれまで使っていたブログを消去し、ここからまた始めることにしました。

ということでこれが最新の記事となります()