16

20150127 jawsug京王線 ec2_config

  • Upload
    -

  • View
    673

  • Download
    2

Embed Size (px)

Citation preview

株式会社グラニ勤務ソーシャルゲーム開発・運用

C#, ASP.NET, Windows Server とOSから上はMicrosoft技術中心

インフラまわりの設計・構築・運用担当

個人活動Microsoft MVP for .NET (C#) (2013/07~)

Twitter: @tanaka_733

ブログ: (銀の光と碧い空) http://tech.tanaka733.net

神獄のヴァルハラゲート

Ec2上のWindowsを運用・監視するのに不可欠詳しいことはほぼほぼ、このページに書いてあります

EC2Config サービスを使用したWindows インスタンスの設定

http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/WindowsGuide/UsingConfig_WinAMI.html#UsingConfig_Install

初回起動時管理者アカウントに暗号化パスワード生成

RDP用にホスト証明書生成・インストール

ユーザーデータの実行

起動時KMSによるWindowsのアクティベーション

ボリュームのマウントやドライブ文字列のマップ

そのほか、壁紙生成やsysprepの実行など

• ActivationSettings.xmlKMSを使った製品ライセンス認証を制御

• AWS.EC2.Windows.CloudWatch.jsonCloudWatchに送信するパフォーマンスカウンタと CloudWatch Logs に送信するログを制御

• BundleConfig.xmlEC2Config が AMI 作成のためにインスタンスを準備する方法

• Config.xml主要な設定

• DriveLetterConfig.xmlドライブ文字のマッピングを制御

• EventLogConfig.xmlコンソールに表示されるイベントログ情報を制御

• WallpaperSettings.xml壁紙の設定

Ver2.2.5以降の新機能• Windows EventLogの内容をCloudWatch Logsへ転送

• Performance Counterの値をCloudWatch Custom Metricsへ転送

転送できるのはWindowsEventLogに表示されるもの (+IISアクセスログ)

Excel VSTOで設定ファイル作成ツール新し目の機能で仕様変更とかがある気配も感じている

編集UIはExcelで手抜きしつつ、json生成部分だけC#で自動化

jsonおよびそのほかの設定ファイルはDSC経由の配布PowerShell DSC: WindowsにおけるChef的なもの

{ip_address}が使えない既知の不具合らしいので、{hostname} などで代用

ログの送信で延々と例外が発生IndexOutOfRangeExceptionが出て一切ログが送信できない

Ec2Configのサービス起動のタイミングによるらしく、

スタートアップの種類を「自動(遅延開始)」にするとおさまった

バージョンの確認プログラムと機能から…

最近のバージョンだとUIから取れる。

CLIからは取れない。

Ec2Configの取得Webページから。リンク先はS3っぽい

インストーラーの実行

$ServiceName = 'Ec2Config'$exePath = "C:¥tmp¥Ec2Install.exe"

Stop-Service $ServiceName –Force# Ec2Install.exe はzipから解凍して自前のバケットに置いてある前提Read-S3Object -BucketName mybucket -Key Ec2Install.exe -File $exePath$param = @{

FilePath = $exePathargument = [string]@(

"/norestart","/quiet"

)}Start-Process @param -Wait# Configを編集してCloudWatch Logsへの送信を有効化しておくのを保証する$configXml = "$env:ProgramFiles¥Amazon¥Ec2ConfigService¥Settings¥Config.xml"[xml]$xml = Get-Content "$configXml"$xml.get_DocumentElement().Plugins.Plugin `| where Name -in "AWS.EC2.Windows.CloudWatch.PlugIn" `| %{

$_.State = "Enabled"$xml.Save($configXml)

}

Start-Service $ServiceName