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

Simple Windows Architecture on AWS

Simple Windows Architecture on AWS

Amazon Windows 自動化Round Table 13/May/2016 発表資料

- AWS における シンプルなWindows アーキテクチャと自動化の事例

セッションの補足記事
- AWS Windows 自動化ラウンドテーブルのセッション資料公開 http://tech.guitarrapc.com/entry/2016/05/15/105054

事前に読んでおくべき資料
- Scalable Deployments - How we deploy Rails app to 150+ hosts in a minute
https://speakerdeck.com/sorah/scalable-deployments-how-we-deploy-rails-app-to-150-plus-hosts-in-a-minute

- Cloud Design Patterns: Prescriptive Architecture Guidance for Cloud Applications (アプリケーション視点)
https://msdn.microsoft.com/ja-jp/library/dn568099.aspx

- Amazon Cloud Design Pattern (インフラ視点)
http://aws.clouddesignpattern.org/index.php/%E3%83%A1%E3%82%A4%E3%83%B3%E3%83%9A%E3%83%BC%E3%82%B8

C61c4df7cb3f2da2b4a7e7fe08bca7e1?s=128

guitarrapc

May 13, 2016
Tweet

Transcript

  1. May-13/2016 Windows on AWS @guitarrapc_tech

  2. Job Private http://tech.guitarrapc.com @guitarrapc_tech

  3. AWS + Windows + C# ウェブソーシャルゲーム開発 40-130 アプリケーションサーバー 10,000 リクエスト/秒

    100,000,000 ページビュー/日 Unity を用いたスマホ向けネイティブゲーム開発 事前登録5万人突破
  4. 目的 ゴール

  5. None
  6. Architecture of Valhalla Gate

  7. Windows Environment Windows Server 2012 R2 .NET Framework 4.6.1 ASP

    .NET MVC 5.2.3 Windows Management Framework 5.0
  8. Main Automation Targets

  9. Automation Tools ツール AWS SDK for .NET AWS PowerShell PowerShell

    DSC RapidHouse サービス GitHub Visual Studio Team Service API Gateway / Lambda Azure Functions Zapier
  10. Basic Cloud Design Pattern External configuration store Pattern https://msdn.microsoft.com/ja-jp/library/dn589803.aspx Retry

    Pattern https://msdn.microsoft.com/ja-jp/library/dn589788.aspx Prescriptive Architecture Guidance for Cloud Applications グラニのインフラはこの考えを全コンポーネントで踏襲
  11. None
  12. None
  13. Cloud Design Pattern http://en.clouddesignpattern.org/index.php/CDP:Stamp_Pattern

  14. Tools ツール AWS SDK for .NET AWS PowerShell PowerShell DSC

    サービス GitHub Visual Studio Team Service API Gateway / Lambda Azure Functions
  15. Windows Provisioning 自動化フロー - AWS SDK で EC2 起動 (PowerShell

    / C#) - UserData による初期化処理 - Configuration Management (PowerShell DSC) 適用 - AMI の状態をテスト - AMI を作成 - AMI イメージ更新を Chat通知
  16. Configuration Management PowerShell DSC の採用 • C# からの呼び出しやすさ、Windowsネイティブで利用可能な面から • 必要なリソースは自分で開発

    https://github.com/guitarrapc/DSCResources PowerShell DSCの適用 • PULL 方式で自動適用 • Role単位で制御
  17. Recommendation UserData はPowerShell 一択 • スクリプトを直接渡さず .ps1 をダウンロード • PowerShell

    DSC で処理を記述して宣言的に • 現在 ps1 から C# に移行中 極力シンプルに • PowerShell はワンライナー or DSCのみ • DSC など制御周りは C# で
  18. Linux Provisioning AMI と起動 • Redis を Amazon AMI で利用

    • Windows インスタンスと同様に AWS SDK for .NET で起動処理 Capistrano • Redis は完全に枯れていて稼働が安定している • 初期状態から Redis構成までは Capistrano でスケーラブルに並列実行 cap redis initial:redis
  19. None
  20. None
  21. Tools ツール AWS SDK for .NET AWS PowerShell PowerShell DSC

    RapidHouse サービス Azure Functions
  22. Time Based Auto Scaling 自動化フロー - Stamp AMI から EC2

    を AWS SDK for .NET で起動 - UserData で初期化処理を適用 - EC2毎にアプリをS3から自動ダウンロード - シンボリックリンクを張り替えてアプリを適用 - 疎通状態をテスト - ELB に登録 - スケール完了をChat に通知
  23. NOT using “Auto Scaling” Windowsタスクスケジューラ で実行 サクッとコードが書けたため大きな支障がなく後回しになっていた Auto Scaling がベターな選択肢なので検討している

    90% Spot Instance プロダクトによって、ほぼすべてを Spot インスタンスに寄せている Spot Instance は OnDemand より起動が遅め インスタンス障害時は調査より破棄を優先 最近6-10min 程度で起動す るようになった
  24. None
  25. None
  26. None
  27. Previous Deployment (MSDeploy)

  28. How long is it take for each deploy? 10min 12min

  29. How long is it take for each deploy? 10min 12min+?

  30. Automation Tools ツール AWS SDK for .NET RapidHouse サービス GitHub

    Visual Studio Team Service API Gateway / Lambda Azure Functions
  31. What’s RapidHouse グラニにおけるインフラ基盤 • LightNode + TopShelf によるエージェント 操作範囲 •

    ビルドパッケージの自動取得 • インスタンス操作API公開 • Swaggerデバッグ • ファイルアクセス • サーバーデバッグ
  32. RapidHouse deploy flow merge build+push chat notification pass prepare switch

    deploy
  33. RapidHouse is almost instant 1 sec 10 sec

  34. None
  35. How to Deploy ASP .NET MVC in a second 自動化フロー

    - Github へ push - VSTS でビルドを実行 - 生成されたパッケージを S3 にアップロード - WebサーバーのS3監視で更新を検知したらダウンロード - パッケージを展開して待機 RapidHouse による 1秒デプロイ - 任意のタイミングでシンボリックを張り替え
  36. Result (msdeploy → RapidHouse) Before : 720 sec (12 min+)

    After : 29 sec (1sec + ELB 28sec)
  37. It’s like a Mamiya @CookPad https://speakerdeck.com/sorah/scalable-deployments-how-we-deploy-rails-app-to-150-plus-hosts-in-a-minute

  38. None
  39. AWS SDK for .NET AWSPowerShell とAWS SDK のアセンブリ署名問題 AWS PowerShell

    と AWS SDK .NET は同一 AppDomain で併用しない AWS PowerShell → AWS SDK for .NET 3.5 を参照 Nuget AWS SDK v3 → AWS SDK for .NET 4.5 を参照 AWS PowerShell を先に呼び出すとAWS SDKがAppDomainに読み込 まれない罠
  40. Amazon AMI with WMF5.0 Amazon AMI は Windows Update の重要のみ適用

    Server Provisioning の段階でインストール検討が必要 WMF 5.0 の適用はサーバー再起動が必須
  41. User Data User Data の起動が遅い問題 EC2Config サービスの起動が完了してから UserDataが呼び出される UserData が適用しないと本番に入れられない場合に注意

    User Data の実行ユーザー制御 Stamp時の Sysprep で起動時の実行ユーザーが変化 $env:ProgramFiles¥Amazon¥Ec2ConfigService¥Settings¥Config.xml Ec2SetPassword と Ec2HandleUserData を Enableに
  42. Host Name require Restart コンピュータ名変更は再起動が必須 • 正確にはレジストリである程度ごまかすことが可能 • 正攻法で変更するなら再起動が必要で処理が中断する タグベースがおすすめ

    • ホスト名に依存しない構成にするのが一番シンプル • インスタンスの変更からも影響を受けにくい • ホスト名の代わりに タグ を利用するとより疎結合に構成できる
  43. Forgive Automation コンテナ周りは Windows Server 2016 待ち • 現状からさらに高速化するには、コンテナが求められる •

    Windows 版 Docker (Nano Server)
  44. None
  45. Love Windows and love Unix/Linux Unix/Linux のトレンドは注目 高速にイテレーションを回す

  46. using

  47. None