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

主にインフラエンジニアからみて、過去から現在までの流れ…のようなものを私が見えている範囲で記載してみました。昨今はクラウド化の流れと相まって非常に高度な自動化やインフラのコード化まで実現可能となっており例えば「スクリプトも書いたことありません」という人に対してどの領域から飛び込んでもらうのが効率的か…をちょっと悩んでいます。 もうコーディングレスで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 · 胡田昌彦

Windows Server 2012へのSQL Server 2012のインストール時に出るエラー(NetFx3)

Windows Server 2012 Hyper-V上にWindows Server 2012をGUIでインストールし、単純にSQL Server 2012の評価版をインストールしようとしたところ、以下のエラーに遭遇しました。 Windows機能(NetFx3)を有効にしているときにエラーが発生しました。エラーコード:-2146498298。Windows管理ツールからWindows機能(NetFx3)を有効にして、再度セットアップを実行してください。Windows機能を有効にする方法の詳細については、http://go.microsoft.com/fwlink/?linkid=227143を参照してください。 SQL Server 2012は.NET Framework 3.5を利用しているので、Windows Server 2012に機能追加しないといけません。 Windows Server 2012への.NET Framework 3.5への機能追加方法は以前紹介した通りです。 - [ペイロードが削除された役割、機能をインストールする際のsourceの指定方法(Windows Server 2012への.NET Framework 3.5のインストール) - WindowsServer管理者への道](https://windowsadmin.ebisuda.net/2012/07/10/%e3%83%9a%e3%82%a4%e3%83%ad%e3%83%bc%e3%83%89%e3%81%8c%e5%89%8a%e9%99%a4%e3%81%95%e3%82%8c%e3%81%9f%e5%bd%b9%e5%89%b2%e3%80%81%e6%a9%9f%e8%83%bd%e3%82%92%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc-2/) PowerShellでやるならインストールDVDをマウントした状態で(以下の例ではDドライブにマウントしている)以下のコマンドで機能追加ができます。 I n s t a l l - W i n d o w s F e a t u r e N E T - F r a m e w o r k - F e a t u r e s - S o u r c e " D : \ \ s o u r c e s \ \ s x s " ...

September 13, 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 · 胡田昌彦

PowerShellはオブジェクト指向

とりあえずget-commandとget-helpでヘルプを見ながらある程度のことができるようになってきたら、次に把握すべきはPowerShellが「オブジェクト指向」である、ということだと思います。これは既存のほかのシェルとは決定的に異なる点であり、PowerShellのもっともすばらしい点だと思います。 具体的に見てみましょう。例えば文字列。 P S C : \ > $ h o g e = " h o g e " .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, “Courier New”, courier, monospace; background-color: #ffffff; /white-space: pre;/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; } ...

June 22, 2009 · 19 min · 胡田昌彦

PowerShellに触れてみる

インストール シェル、プログラムはやはり「習うより慣れろ」です。早速インストールして触ってみましょう。 .NET Framework PowerShellは.NET Framework上で動作しますので、まずは.NET Frameworkを導入します。バージョンは.NET Frameworkの2.0以上が入っていればOKです。自分の環境に合うものを導入してください。 - [ダウンロードの詳細 : .NET Framework Version 2.0 再頒布可能パッケージ (x86)](http://www.microsoft.com/Downloads/details.aspx?familyid=0856EACB-4362-4B0D-8EDD-AAB15C5E04F5&displaylang=ja) - [ダウンロードの詳細 : Microsoft .NET Framework 3.0 再頒布可能パッケージ](http://www.microsoft.com/downloads/details.aspx?familyid=10CC340B-F857-4A14-83F5-25634C3BF043&displaylang=ja) - [ダウンロードの詳細 : .NET Framework 3.5](http://www.microsoft.com/downloads/details.aspx?familyid=333325FD-AE52-4E35-B531-508D977D32A6&displaylang=ja) PowerShell PowerShellはVista用のものとそれ以外用のものとで提供されているページが異なりますので、使用しているOSにあったものを導入してください。 - [ダウンロードの詳細 : Windows Vista 用 Windows PowerShell 1.0 インストール パッケージ (KB928439)](http://www.microsoft.com/downloads/details.aspx?familyid=C6EF4735-C7DE-46A2-997A-EA58FDFCBA63&displaylang=ja) - [Windows Server 2003 用および Windows XP 用の Windows PowerShell 1.0 ローカライズ版インストール パッケージ](http://support.microsoft.com/Default.aspx?kbid=926140) とりあえず触ってみる! get-command, get-help インストールが完了したら、とりあえず起動してみましょう。 コマンドプロンプトとほぼ同じようなウインドウが表示されます。派手さは全くありませんね・・・。CUIの最大の問題として、「で、何をしたらいいの?どんなコマンドがあるの?」と、起動したあと何をしていいかわからなくなってしまうことがあげられます。 が、PowerShellでは心配無用です。まずはいつもコマンドプロンプトで使っているコマンドをたたいて見ましょう。 上記はping www.google.comを実行してみたところですが、このように普通に実行できます。PowerShellでは通常のDosのコマンドは全て使えるのです。 これだけでは、コマンドプロンプトと同じですね。PowerShellならではのコマンドは何が使えるのでしょうか?これを知るためのコマンドが用意されています。その名もそのまま「get-command」コマンドレットです。 ...

March 6, 2009 · 1 min · 胡田昌彦

PowerShellはぜひマスターしよう

PowerShellとは PowerShellはマイクロソフトがWindows環境で提供する最新のシェルです。対話型のシェルとしても使えますし、スクリプティング環境としても使えます。本格的にオブジェクト指向を取り入れていますし、.NET Frameworkを利用することができるので、かなり強力な環境です。C#でできることなら何でもPowerShellでできるわけですね。 また、さまざまな環境で利用できます。Windows XP, Windows Server 2003以降のすべてのOSで利用できますし、Windows Server 2008以降であれば(おそらくすべてのOSに)標準搭載されます。 また、「スナップイン」を追加することでできることがどんどん増えていきます。マイクロソフトはExchange Server 2007以降のサーバー製品はすべてPowerShellのスナップインを提供する意向を表明しているので、Exchange Server 2007以降に登場するすべての製品のすべての操作がPowerShell上から行えることになります。 PowerShellの何がいいのか これは、管理者にとってはものすごく大きな変化です。サーバーを導入して、設定を変更して…ということを今までは(ほぼ)すべてGUIで行っていました。これがWindowsの長所であったのですが、同時に短所でもありました。設定値がどうなっているか知りたかったら、GUIツールですべての項目をクリックしてまわって調べないといけませんでしたし、同じ環境を作ろうと思ったら、すべての設定を全部記録しておいて、それを一からすべてGUIツールをつかってマウスでカチカチ設定して回らなければいけませんでした。 それがPowerShellに移行されれば、PowerShellのコマンドを全て記録しておくことで設定の履歴を残すことも非常に簡単ですし、たとえば検証環境で実行したコマンドを本番環境で流し込むだけで構築完了、というようなこともできるようになります。設定が一部漏れていて、検証環境と本番環境で挙動が異なってしまい、すべてのパラーメーターを確認し直す…というようなことが頻繁にあった今までのことを考えると夢のような話です。 また、今までGUIツールで手作業でやっていたら1日かかっても終わらないようなことも、PowerShellなら1行で簡単にできるのが当たり前です。「Exchangeのメールボックスのうち、使用容量が80%以上のメールボックスで、かつきちんと使われているもの(最終ログオン日時が1週間以内のもの)だけ、メールボックスの容量を1.5倍にして」なんて言われて、それをGUIツールでやろうと思ったら、10個、20個ならいいですけど、100個、1000個、1万個に対して…となったらもう手作業ではやっていられませんよね?PowerShellならコマンドを1行書けばおしまいです。 いつからPowerShellが活躍するのか 惜しいのは、Windows Vistaで標準搭載にならなかったことですね。WSHの時もそうでしたが、サーバーはいいとしても、結局クライアントの管理を全てPowerShellで完結させようと思ったら、やはり標準搭載の環境でなければハードルが高すぎるのです。これが現在でもまだDOSが使われている一番大きな原因でしょうし、WSHが便利な理由です。そういう意味ではWindows Server 2008、Windows 7からPowerShellが標準搭載されるのは非常に嬉しいことです。 サーバー管理ではすでにPowerShellが使いこなせることはすでに必須条件になりつつあります。クライアント管理に関してはまだまだ先の話にはなると思いますが、数年後にはPowerShellが当たり前の時代が来ると私は思っています。いまのうちからPowerShellに馴染んでおくのがWindows管理者として今後も活躍できるための必要条件になると思います。 ということで、このブログでもPowerShellのことも書いていこうと思っています。お付き合いください。

March 5, 2009 · 1 min · 胡田昌彦