CloudWatch Logs で WorkSpaces のイベントログを記録する

CloudWatch

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

Amazon WorkSpaces

こんにちは! ももんが大好きの小山です。多少の出オチ感が否めませんが、きょうは WorkSpaces のトラブルシューティングを少しだけ簡単にする方法についてご紹介しようと思います。

背景

固まった、つながらない、開かない、できない、わからない...

WorkSpaces はフルマネージドの VDI 環境ですから、基本的にはメンテナンスフリーと考えて差し支えのないものです。ないものですが、やはりいろんな人が使う VDI です。頻度は落ちるにしても、利用者からの どうしようもない 問い合わせに頭を抱えることもあるでしょう。きちんと VDI ネイティブな運用がなされていれば問題の WorkSpace を Rebuild (標準/カスタムイメージからリストア) してしまえば最終的に片が付くことですが、それにしても数十分の待ち時間が発生します。Rebuild したら、どんな操作が原因になって問題が起こったのか追跡することもできなくなります。ああ、イベントビューアだけでも見ることができたなら...

CloudWatch へのパフォーマンスカウンタの送信と EC2Config を使用した CloudWatch Logs へのログの記録 - Amazon Elastic Compute Cloud

覚えていますか? Windows Server の EC2 インスタンスでは EC2Config サービスが実行されていて、タスクトレイにはfaviconこんなアイコンが出ていました。WorkSpaces で起動したインスタンスには見当たりません。では、WorkSpaces で EC2Config は使われていないのでしょうか?

Bildschirmfoto 2016-02-24 um 19.44.39

そんなことありません。WorkSpaces の実体は "見えない CFn" で起動される EC2 インスタンスですから、Windows のライセンス認証や User Data の実行に EC2Config サービスが活躍しています。今回ご紹介する内容は、「だったら直接 config.xml を触れば EC2Config サービスの他の機能も使えるでない?」という期待がきっかけになっています。

手順

ヤブから棒で恐縮ですが、今回は EC2Config サービスから CloudWatch へのアクセスに IAM ロールを使いません。困ったことに、起動する WorkSpace に対して IAM ロールを与えることはできないからです。仕方がありませんから、CloudWatchFullAccess という名称で IAM ユーザーを作成しました。

CloudWatchFullAccess Do-not-do-this

耳にたんこぶかと存じますが、「AccessKey」や「SecretKey」のような情報をアプリケーションの設定ファイルにベタ打ってしまうのはアンチパターンです。ベタ打つだけで飽き足らずブログに載せるなんてもってのほか! 今回のダミーはもちろん消してあります。

設定ファイルの編集 (1)

とにかくやってみましょう。イベントログを記録したい WorkSpace に接続して、エクスプローラで C:Program FilesAmazonEc2ConfigServiceSettings を開きます。ここにある config.xml をデスクトップにコピーして開いたら、以下のように AWS.EC2.Windows.CloudWatch.PlugInEnabled に書き換えてください。

<?xml version="1.0" standalone="yes"?>
<Ec2ConfigurationSettings>
  <Plugins>
    <Plugin>
      <Name>Ec2SetPassword</Name>
      <State>Disabled</State>
    </Plugin>
    <Plugin>
      <Name>Ec2SetComputerName</Name>
      <State>Enabled</State>
    </Plugin>
    <Plugin>
      <Name>Ec2InitializeDrives</Name>
      <State>Enabled</State>
    </Plugin>
    <Plugin>
      <Name>Ec2EventLog</Name>
      <State>Enabled</State>
    </Plugin>
    <Plugin>
      <Name>Ec2ConfigureRDP</Name>
      <State>Disabled</State>
    </Plugin>
    <Plugin>
      <Name>Ec2OutputRDPCert</Name>
      <State>Enabled</State>
    </Plugin>
    <Plugin>
      <Name>Ec2SetDriveLetter</Name>
      <State>Enabled</State>
    </Plugin>
    <Plugin>
      <Name>Ec2WindowsActivate</Name>
      <State>Enabled</State>
    </Plugin>
    <Plugin>
      <Name>Ec2DynamicBootVolumeSize</Name>
      <State>Disabled</State>
    </Plugin>
    <Plugin>
      <Name>Ec2HandleUserData</Name>
      <State>Enabled</State>
    </Plugin>
    <Plugin>
      <Name>AWS.EC2.Windows.CloudWatch.PlugIn</Name>
      <State>Enabled</State>
    </Plugin>
  </Plugins>
  <GlobalSettings>
    <ManageShutdown>true</ManageShutdown>
    <SetDnsSuffixList>false</SetDnsSuffixList>
    <WaitForMetaDataAvailable>true</WaitForMetaDataAvailable>
    <ShouldAddRoutes>true</ShouldAddRoutes>
    <RemoveCredentialsfromSysprepOnStartup>true</RemoveCredentialsfromSysprepOnStartup>
  </GlobalSettings>
</Ec2ConfigurationSettings>

変更を保存して、元の場所に上書きします。これで EC2Config サービスが CloudWatch とやりとりできるようになりました。

設定ファイルの編集 (2)

つぎに同じフォルダの AWS.EC2.Windows.CloudWatch.json をデスクトップにコピーして、次の箇所を書き換えます。

            {
                "Id": "CloudWatchLogs",
                "FullName": "AWS.EC2.Windows.CloudWatch.CloudWatchLogsOutput,AWS.EC2.Windows.CloudWatch",
                "Parameters": {
                    "AccessKey": "AKIAJUXJ4NZHJKLIPOTQ",
                    "SecretKey": "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",
                    "Region": "ap-northeast-1",
                    "LogGroup": "WorkSpaces/Default-Log-Group",
                    "LogStream": "{instance_id}"
                }
            },
            {
                "Id": "CloudWatch",
                "FullName": "AWS.EC2.Windows.CloudWatch.CloudWatch.CloudWatchOutputComponent,AWS.EC2.Windows.CloudWatch",
                "Parameters": 
                {
                    "AccessKey": "",
                    "SecretKey": "",
                    "Region": "us-east-1",
                    "NameSpace": "Windows/Default"
                }
            }

AccessKey SecretKey には、冒頭で用意しておいた IAM ユーザーのアクセスキーを指定してください。Region には (ふつう) WorkSpaces と同じリージョン、LogGroup には任意のグループ名を指定します。

ロググループ

ロググループは、保持、監視、アクセス制御について同じ設定を共有するログストリームのグループを定義します。各ログストリームは、1 つのロググループに属している必要があります。たとえば、Apache ウェブサーバー群の一般的なロググループは、MyWebsite.com/Apache/access_log または MyWebsite.com/Apache/error_log のような形になっています。

ログファイルのモニタリング - Amazon CloudWatch

書き換えたファイルを元の場所に上書きして、WorkSpace を再起動すれば完了です! CloudWatch Management Console から WorkSpace のイベントログが見えることを確かめましょう。

Bildschirmfoto 2016-02-25 um 17.36.38

おわりに

これまで小山には、WorkSpaces を避けていた部分がありました。理由を打ち明けるとするなら、「最新の Windows に慣れた目で Windows 7 相当のデスクトップ環境を使うのは苦であること」「WorkSpaces がどのような仕組みで実装されているかよくわからないということ」の2つでした。1つめは未だに解消できていませんが、2つめは克服できてきたんではないかと思っています。

これをご覧のみなさんも、どうぞ WorkSpaces の仕組みについて関心をもって調べてみてください。すばらしい使い方を思いつくかもしれませんよ! *1

What is Amazon WorkSpaces? - Amazon WorkSpaces

脚注