Save 37% off PRO during our Black Friday Sale! »

PowerShell Automation Windows Servers on AWS

C61c4df7cb3f2da2b4a7e7fe08bca7e1?s=47 guitarrapc
September 27, 2013

PowerShell Automation Windows Servers on AWS

これからを生き抜くソーシャルゲーム X オンライン広告 http://kokucheese.com/event/index/110660/ で話した内容です。
AWS 上で Windows を用いた大規模ゲーム基盤。 Linux から Windows への以降に伴いデプロイ基盤の考慮にPowerShell や C# をどう活用しているのか。
具体的な事例などを紹介します。

C61c4df7cb3f2da2b4a7e7fe08bca7e1?s=128

guitarrapc

September 27, 2013
Tweet

Transcript

  1. PowerShell Automation Windows Servers on AWS 2013/09/27 株式会社グラニ インフラエンジニア @guitarrapc_tech

  2. 自己紹介  業務  株式会社グラニ エンジニア(インフラ担当)  仕事で PowerShell をしたくて

    ((  AWSクラウド上にWindowsインフラ基盤を作りたい (DCとかサーバールームに籠るのもういいです)  経歴  IaaS 環境での 自社アプリケーションのSaaS提供を構築・運用  Windows Server の 構築、運用  VMware ESXi での仮想サーバー環境構築、運用
  3. Linux to Windows

  4. Windows + IIS + MySQL + ASP .NET MVC への移行

    グラニ は LAMP から Windows環境 へ Linux (Amazon AMI) Apache + Nginx MySQL PHP Windows Server 2012 IIS 8.0 + ARR3.0 MySQL ASP.NET MVC (C#)
  5. Windows 移行によるデプロイ環境の変化 Windows には Capistrano に代わるライブラリがなかった(当時)  何がまずいの? OS Linux

    Windows Application PHP C# + ASP .NET MSC CLI基盤 Capistrano 代わりになるものがない VCS GitHub GitHub CI - Jenkins
  6. Capistrano とは Ruby on Rails アプリケーションのデプロイ  複数サーバーに対しコマンドをssh経由で並列実行するツール  つまり、リモート操作がなんでもできちゃう

  7. グラニでのCapistrano利用例 数十~百を超えるサーバーに同じ設定を行う作業を自動化  PHPコードをデプロイする一連の流れ/ロールバック処理 GitHub > PHP コードを git pull

    > デプロイ > ハードリンク貼替  コンフィグやファイルの配布  コマンドの複数マシンへの同時実行
  8. 話をWindows に戻して

  9. (再び) Windows 移行によるデプロイ環境の変化 Windows には Capistrano に代わるライブラリがなかった(当時) OS Linux Windows

    Application PHP C# + ASP .NET MSC CLI基盤 Capistrano 代わりになるものがない VCS GitHub GitHub CI - Jenkins
  10. 数10 ~ 100台を超える Windows サーバー設定 の変更適用どうするの?

  11. Capistrano と 同様の処理ができないのは絶望

  12. Capistrano to PowerShell PowerShell が Windows CUI環境のスタンダード  PowerShell 標準でもリモート処理が可能

     標準のままでは並列操作に難があり処理が遅い  Capistrano のように cap コマンドで自動化したい  pstrano のような capistrano の PowerShell版があるも開発停止 ないなら PowerShell デプロイライブラリを作ろう
  13. What’s PowerShell ?

  14. Windows PowerShell とは? Jeffery Snover 他 が作った言語  .NETが扱える +

    Windowsのほぼすべての管理が可能  WMF/WinRM を基盤として、リモートPCもローカル同様に操作可能  近日 PowerShell 4.0 が正式リリース (Windows 8.1 / Windows Server 2012 R2) AWS Tools for Windows PowerShell で AWSサービスも操作可能  EC2 Instance の一覧を取得 (describe-instances と同様)
  15. PowerShell こそ Windows CUIリモート操作 の基盤なんです

  16. じゃぁPowerShell って どう操作するの?

  17. PowerShellの実行例  Alias で cmd や shell ユーザーにおなじみのコマンドを用意したり  対象パスのフォルダ一覧

    : dir = ls = Get-ChildItem  動詞–名詞 形式で統一されたコマンド表記  Pipeline で.Netオブジェクトを次のCmdletに渡せる  テキスト処理(grepやawk) が不要
  18. cmd とは違う… .NET使えてる!

  19. 少し bashに似てる…..?

  20. bash と PowerShell は似ていたり Pipelineでコマンドをつなげる (Process から id を出力する) 

    bash : vim の process id  PowerShell : IE の process id 日付を取得したり  bash : date  PowerShell : Get-Date
  21. ShellScript のような スクリプティングはどう?

  22. ShellScript と PowerShell は違っていたり  スクリプト開発環境 PowerShell ISE でインテリセンスが効く 

    Ctrl + Space で 入力可能なコマンドレットの候補が表示  取得結果が型、プロパティを持ってるから処理が容易  Process 一覧から Process名のみ取得する bash : PowerShell :
  23. インテリセンスや .NET オブジェクトが使える!

  24. PowerShell って シェル + スクリプティング?

  25. いいえ

  26. PowerShell は Automation技術 (by Jeffrey Snover) PowerShell は自動化技術であって CLI にとどまらない

     もちろん CLI での自動化も得意  CLIの枠にとらわれず、いかに自動化を行うかを追求している言語  GUI : WPF (Windows Presentation Foundation)  Workflow : PSWF (Windows PowerShell Workflow)  Web Access : PWA (Windows PowerShell Web Access)  Declarative : DSC (Desired State Configuration)
  27. Grani meets Powershell

  28. 実際PowerShellでどうするの?

  29. Capistrano デプロイ操作 を PowerShellで実装する

  30. 加えてGrani は using Csharp;

  31. C#とPowerShellを組み合わせる

  32. Grani は PowerShell と出会いました C# への移行で Windows 環境での 運用、デプロイは必至 

    PowerShell による サーバーの管理自動化 C# と PowerShell は親和性が高い = 組み合わせて好いとこどり  PowerShell は .NET で実装 (System.Management.Automation)  C# コード内部でPowerShell自体を呼び出し、実行が可能  PowerShellデプロイ操作を GUI インターフェースで提供可能
  33. C# と PowerShell の住み分けも大事  得意なことは得意な方に任せると幸せになれる  C# が得意 

    高速  複雑な処理  外部連携  使用者にWPF による GUI操作を!  PowerShellが得意  Windows管理  リモート処理  コマンドレットの組み合わせ (AWS コマンドレットと連携)
  34. Operate with C# and PowerShell

  35. リモートサーバー管理 : PowerShell valentia : PowerShell製 デプロイツール  Capistrano で行っていたCUI管理を

    Windowsでも 可能に  コマンド体系も Capistrano に近くすることで経験を活かせるように  一般の PowerShell スクリプトが ほぼ そのまま利用できる  コマンド例 : webserver群 へ taskhogehoge を実行する Capistrano valentia
  36. デプロイ : C# × PowerShell デプロイは CUI より マウスでポチポチしたい 

    GUI = C# + WPF で簡単、リッチに作れる  GUI による カジュアルなデプロイ環境 (開発者が投入まで見届ける) C#でデプロイフローを管理/進捗表示 C# コードで PowerShell を呼び出し/実行 可能  valentia を呼び出し、実行、結果の取得
  37. Other cases

  38. PowerShell × Windows Server on AWS スナップショット Windows Server からのセットアップ自動化

     SysPrep含む、環境再設定は valentia で スクリプト実行(Sysprep こわくない) ソフトウェアインストール / 設定変更  インストーラの配布や停止、コンフィグ入れ替え、再開
  39. PowerShell × AWS Services 毎デプロイ時の ELB連携  ELBのヘルス外し > デプロイ実行

    > ELBのヘルスアサイン 半オートスケール  時間ごとの負荷予測がしやすい + 半年の運営で経験が蓄積  スケジュール方式でスケーリング  AWS Tools for Windows PowerShell を活用して状態管理  対象停止サーバーの停止, ELB処理, EC2処理, 自動デプロイ
  40. Conclusion

  41. Grani × Windows Server on AWS PHP to C# 

    増大する負荷にも Webサーバーを削減しつつ処理時間の減少を達成 Linux to Windows  C#, PowerShell を全面的に利用して C# 企業としての本領を発揮  PowerShell なら Windows運用管理の自動化は容易 C# + PowerShell は Windows環境において強力なタッグ
  42. valentia 公開しています  https://github.com/guitarrapc/valentia

  43. グラニではエンジニアを募集しています

  44. エンジニアを募集しています アプリケーションエンジニア フロントエンドエンジニア インフラエンジニア

  45. 詳細はこちら mailto:recruit@grani.jp http://grani.jp/recruit.html アドレス間違えるとロリポップが!