[今月の技術トピック] Windows PowerShell スクリプトを絶対に落とさない方法

多くのインフラエンジニアの方々は、何かしらのスクリプトを作成した経験があると思います。Windows 環境で従来使われていたバッチファイルや VBScript といったスクリプティングツールは、徐々に高機能な Windows PowerShell に置き換えられつつあります。PowerShell の大きな特徴は、その堅牢性です。スクリプトの一時停止や途中経過の保存など、バッチファイルや VBScript では絶対にまねできない機能が実装されています。複数のターゲットを同時に処理するパラレル機能も用意されているので、数十台のサーバーを同時に管理する時間を大幅に短縮することが可能です。

Microsoft Azure でも PowerShell は無視することができないツールの 1 つであり、Azure が提供するほぼ 100% に近い機能が PowerShell から操作、管理することができます。最近では Azure 用のモジュールが多要素認証にも対応し、ユーザー ID とパスワードに加え、電話応答などを認証要素に加えることができるようになりました。これによって、より安全にスクリプトを実行することができるようになりました。

このようにスクリプトが高機能化し、かつ安全性が高まる一方で、スクリプトの実行環境には問題が残ります。いくらスクリプト自体が堅牢であっても、実行環境であるサーバーやパソコンが停電等で落ちてしまっては意味が無いからです。 そこで、マイクロソフトは堅牢なクラウド上で PowerShell スクリプトを実行する環境を提供しています。

Azure Automation という機能です。Azure Automation を使用すると、クラウド上に PowerShell スクリプトを Runbook として登録し、スケジューリングすることができます。Azure 上の仮想マシンを定時に起動、停止するなんてことはお手の物です。仮想マシンの中に入りこんで、Active Directory ユーザーを管理するといったことも当然できます。

最近、Azure Automation には注目すべきいくつかの機能が新たに実装されました。

1. Firewall の内側にあるサーバーの管理

多くを説明する必要はないでしょう。オンプレミスのサーバーをクラウド上のスクリプトから管理できるという意味です。実は、この機能を使用するには Operations Management Suite (OMS) が必要です。OMS 用の管理エージェントを管理対象のサーバーにインストールすると、管理エージェントが OMS サービスとの通信パスを確保します。Azure Automation はこの通信パスを使用して、オンプレミスのサーバーを PowerShell から操作することができます。

Linux はどうなのか? という疑問を持つ方もいらっしゃるでしょう。あまり知られていませんが、Linux にWinRM サービスをインストールすることで PowerShell から管理することが可能です。Linux 用の WinRM サービスは、Open Management Infrastructure (OMI) としてマイクロソフトから提供されています。

OMI をインストール後、OMS の Linux 用エージェントをインストールすることで、Linux も Azure Automation の管理下に置くことができます。

2. フローチャート方式による複数 Runbook の連続実行

Runbook にグラフィカルツールが導入されました。これは、複数の Runbook やコマンドレットの実行順番や入出力値をフローチャートの形式で定義することができるツールです。スクリプトの難点は視認性です。いくらコメント行を付けたところで、慣れていない人から見れば意味のない文字列に見えてしまいます。そのおかげで、大勢のエンジニアの方々は、構成スクリプトに加えて Excel で別途手順を作成するといった二度手間に悩まされています。この機能は、そのような悩みを完全に解消できるわけではありませんが、複雑な処理の視認性をよくすることでバグを減らし、メンテナンスをしやすくできる効果を得られます。

3. PowerShell DSC のサポート

多くのオープンソース系プロジェクトでは Chef や Puppet など、サーバーの自動構成スクリプトが広く使われています。Windows PowerShell V4 でも、PowerShell DSC という機能がサポートされ、「構成スクリプト」を作成することで必要な機能やプログラムをサーバーに展開することができるようになりました。PowerShell DSC は Azure Automation にも実装されました。これにより、DSC 用構成スクリプトと適用先サーバーの管理も Automation 上で行えます。また、構成スクリプトの適用状況は定期的に Azure Automation によりチェックされ、常に構成スクリプト通りの状態になっていることが確認され、もし準拠していない場合には再度構成スクリプトが適用されます。

上記以外にも、GitHub とのリポジトリ統合、テスト実行の機能強化、アセット入力の簡便化、Webhook による Runbook キックのサポートなど、多くの機能向上が図られています。是非 Azure Automation を使用して DevOps 実践に着手してください!