(主にインフラ系エンジニアから見た)コーディングやスクリプティングに関しての流れ

主にインフラエンジニアからみて、過去から現在までの流れ…のようなものを私が見えている範囲で記載してみました。昨今はクラウド化の流れと相まって非常に高度な自動化やインフラのコード化まで実現可能となっており例えば「スクリプトも書いたことありません」という人に対してどの領域から飛び込んでもらうのが効率的か…をちょっと悩んでいます。 もうコーディングレスでLogic Appとかそういうところに飛び込んでもらった方がはやいのかもしれないし、仮想基盤のことやWindows, Linuxの中の事はすっ飛ばしてTerraformとかコンテナとかそこに注力するところから入って必要が出たところで仮想マシン内部の処理に入ったほうがいいのかもしれません。でも、現実的にはシェルスクリプトとかPowerShellスクリプトの基礎とかは抑えておかないとだめかもしれないし・・・。結構悩ましい所です。 - 昔はバッチファイルやシェルスクリプトで繰り返し実施する作業の効率化がありました。 - その後Windows的にはWSHの時代があり、vbscriptでスクリプトを書いたひとも多かったと思います。 - その後Microsoft的にはコマンド毎にオプションが違ったりコマンドがなかったりすることを解決し、全て統一するものとしてPowerShellを生み出しました。(私の大好きな[Jeffery Snover](https://twitter.com/jsnover)さんの仕事です。) - これでMicrosoft系はPowerShellで全てオブジェクト指向の管理となりました。(バックグラウンドにあるのは.net framework) - 一方UNIX系は当初からなんでもかんでもテキストであるという思想でした。 - MicrosoftはPowerShellを標準として様々な製品を開発しました。GUIではできないことでもPowerShellでなら操作できる。GUIで操作しても裏ではPowerShellコマンドが自動生成されてそれが実行されている…というものも多くありました。(結果、仕方がなくPowerShellを使うようになった方も多いと思います。) - Microsoftはクラウドサービスにもその流れを取り入れました。PowerShellにてクラウドサービスの管理も行うことになりました。 - Chef, Puppetなどに代表されるような冪等性を備えた仕組みが登場してきました。(Infrastructure as code, Configuration as code) 何度実行しても「記載した望むべき状態になる」ことを特徴とします。 - これ以前は「これを実行したらこうなる、やって見る前に状態を確認して、やってみて、やった結果を確認する」というような作業の流れを記述するようなイメージでした。 - MicrosoftもPowerShell DSCにて冪等性を持つフレームワークを提供しました。 - Microsoftのオープンソース指向が進む中でよりマルチプラットフォーム化を意識した取り組みがなされるようになっていきます。 - PowerShellの継続開発が打ち切られ、PowerShellCoreに舵がきられます。PowerShellCoreはWindowsだけではなく、Linux, Mac等でも動作するマルチプラットフォームなPowerShellです。(バックグラウンドにあるのは.net core) - AzureにもCloudShellの機能がつき、ポータル上でもコードで制御できるようになります。これまでのAzure PowerShellよりも先にAzure CLI(UNIX系の文化)の方が先に搭載されました。Azure管理はPowerShellよりもCLIの方が優先されるようになってきています。 - クラウドサービスも普及する中で、大規模な環境ではもう個別に1台づつターミナルで作業するなり、RDPではいってGUIで操作するなりすることが現実的に不可能な規模になりました。このような環境ではコードで全てを制御可能な環境にすることは必須条件となりました。 - WindowsもWindows Server Coreが出てGUIがなくなり、さらにNano Serverにてどんどん軽量化していきます。 - Windows Server 2016, 2019となると継続的に進化するモデルはGUIが利用できなくなりました。 - 更に軽量化を推し進める中で仮想マシンではなく、コンテナに大きくトレンドが傾きます。 - コンテナの標準であるDockerはDockerfileというコンテナをコードで定義できる機構を備えています。 - クラウドサービスも冪等性をもったテンプレートにて展開可能な構造となります。AzureであればARMテンプレート、AWSであればCloud formationなど。 - ARMテンプレート、Cloud formationによるInfrastructre as Codeと仮想マシンの内部を構成するChef, Puppet, AnsibleのようなConfiguration as Codeによって仮想マシンベースの環境構築の完全自動化が可能となりました。 - ARMテンプレート、Cloud formationによるInfrastructre as CodeとDockerによるコンテナコントロールで完全自動化が可能となりました。 - 複数のコンテナプラットフォーム自体のコントロールという観点ではKubernetesが標準化してきています。 - AWSLambda, Azure Fuctionsのようなインフラ自体を意識せずアプリケーションロジックのみを記載すればそれでおしまいとなるようなサービスも出てきました。ここではInfrastructure as CodeやConfiguration as Codeすら必要ない世界があります。(これですべてまかなえるわけでもないですが) - DevOpsという流れもありますが、NoOpsに向かう流れの方が強そうに感じています。(私の感想) ※NoOpsはインフラ管理者がいらないという意味ではなく、極力インフラの面倒を見なくていいアーキテクチャを採用する、くらいの意味で捉えています。 ...

May 16, 2018 · 1 min · 胡田昌彦

Hyper-V Server 2012用のローカルGUIツール Corefig

Hyper-V Server 2012用のGUIツールであるCorefigの紹介です。 Hyper-V Server 2012は無償でHyper-Vが利用できるOSですが、GUIは付属せずコマンドですべて管理するものです。が、それ用のGUツールを開発している方達がいます。個人での検証用には有力な選択肢になりそうです。 - [Corefig for Windows Server 2012 Core and Hyper-V Server 2012](http://corefig.codeplex.com/releases)

June 21, 2013 · 1 min · 胡田昌彦

Server Coreからアプリケーションをアンインストールする方法

SCVMM 2012をSP1 CTP3からSP1 Betaに上げた上でSCVMMのエージェントを配布しようとしたら、「SCVMMのサーポートされていないバージョンがインストールされている!」ということで怒られてしまいました。 仕方がないので、アンインストールしようと思うのですが、Server Coreでインストールしてあります。Server Coreでアプリケーションのアンインストールはどのようにできるのかを調べました。残念ながらGet-InstalledApplication, Remove-InstalledApplicationなんていうようなコマンドレットは存在していないようです。 WmiObjectを使ったアンインストール 仕方がないので、WmiObjectを使ってアンインストールをします。「Get-WmiObject –Class Win32_Product」でインストールされているアプリケーションが取得できます。 Get-Memberを見てみると「Uninstall」メソッドがあることがわかります。 Uninstallメソッドを呼ぶとアンインストールができました。 1行でやるなら以下のような感じで。 Get-WmiObject -Class Win32_Product | Where-Object {$.Name -eq “Microsoft System Center Virtual Machine Manager Agent (x64)”} | ForEach-Object { $.Uninstall()} 参考 - [How can I uninstall an application using PowerShell? - Stack Overflow](http://stackoverflow.com/questions/113542/how-can-i-uninstall-an-application-using-powershell)

September 18, 2012 · 1 min · 胡田昌彦

ペイロードが削除された役割、機能をインストールする際のsourceの指定方法(Windows Server 2012への.NET Framework 3.5のインストール)

Windows Server 2012ではインストールされていない役割、機能のバイナリファイル自体をディスクから削除する機能が追加されました。ディスクが節約できる反面、追加インストール時にひと手間必要になるので少々注意が必要になっています。特に「source」の指定が導入する役割、機能によって別のものになることがあるようなのでその点に注意が必要です。 私がちょっと戸惑ってしまったのは以下のパターンです。 はじめにServer Coreでインストール - その後GUIを追加 - その後.NET Framework 3.5を追加 ※初めからGUIもインストールしておいても.NET Framework 3.5のバイナリもインストールされていません。 同じことでつまずく人がいるかもしれないので記録しておきます。 ServerCoreにGUIを追加する Server Coreでインストール後に、GUIを追加する方法は技術文章に記載されています。 Windows Server インストール オプション Windows PowerShell を使用して、Server Core インストールからフル インストールに変換するには - コマンド mkdir c:\mountdir を使用して Windows イメージ ファイル (WIM) をマウントするフォルダーを作成します。 - 管理者特権のコマンド プロンプトでコマンド Dism /get-wiminfo /wimfile::sources\install.wim を使用して、サーバーのインデックス番号を GUI イメージで確認します (たとえば、SERVERDATACENTERCORE ではなくSERVERDATACENTER)。 - 管理者特権のコマンド プロンプトで、次のコマンドを使用して WIM ファイルをマウントします。Dism /mount-wim /WimFile::\sources\install.wim /Index:<#_from_step_2> /MountDir:c:\mountdir /readonly - Windows PowerShell を起動し、次のコマンドレットを実行します。Install-WindowsFeature Server-Gui-Mgmt-Infra,Server-Gui-Shell –Restart –Source c:\mountdir\windows\winsxs - または、ソースとして WIM ファイルではなく Windows Update を使用する場合は、次の Windows PowerShell コマンドレットを使用します。Install-WindowsFeature Server-Gui-Mgmt-Infra,Server-Gui-Shell –Restart ...

July 10, 2012 · 1 min · 胡田昌彦