ピンチ
AWSから突然メールが来て、Windows Server 2012 R2のインスタンスは、再起動すると二度とつながらなくなるらしい!
Important information about Amazon EC2 instances running Windows Server 2012 R2
http://aws.amazon.com/jp/windows/2012r2-network-drivers/ServerWorksさん早い!
http://blog.serverworks.co.jp/tech/2014/09/04/importantinformationaboutec2win2012r2/
しかし!
・ちょ〜いっぱいのインスタンスを見ないといけない
・AMIはいろいろコピーして使っているので、名前からはWindowsのバージョンまでわからない
・一台づつRDPして調べると一生かかってしまいそう
などなど、いろいろな事情があるのでピンチです。
そこで、なるべく労力をかけずにWindowsInstancesのバージョンを一挙に調べる方法を考えてみます。
もっといい方法があったら逆に教えてください!
調査用のWindowsインスタンスを用意
直接AWSにPrivate IP AddressにてIP RechableなWindowsマシンがあるかたはそれを利用します。
無い方は、AWS上に適当なWindowsInstanceを用意しましょう。(2012R2じゃないやつを)
調査用スクリプトを作る
PowerShellやバッチファイルで作ればよかったのですが、手抜きでShellScriptで作ったので、Cygwinなどを入れて準備します。
AWS CLIを入れる
http://aws.amazon.com/jp/cli/
64ビットか32ビットっていう所を押して、実行するだけで入ります。
ここからインストールしてください。
Cygwinなどを入れる
たとえばCygwinなど、ShellScriptを実行できる環境を入れてください。
http://cygwin.com/
setup-x86.exe (32-bit installation)か
setup-x86_64.exe (64-bit installation)
という所を押して、
途中で近いミラーサイトを選んで、つぎつぎ行けばとりあえず入ります。
AWS CLIを使う準備をする
Cygwin Terminalなどを立ち上げて、
$ mkdir ~/.aws
$ vi ~/.aws/config
[default]
output = text
region = ap-northeast-1
aws_access_key_id = ACCESS_KEY
aws_secret_access_key = SECRET_KEY
のような感じでAWS CLIを使えるようにしてください。
詳しくは、
http://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-set-up.html
※ Windowsコマンドにて日本語が文字化けする場合は、ターミナルを右クリック->Options...->TextのFontをMSゴシックなどに、Localeをja_JPに、Character setをSJISにすると文字化けしなくなります。
調査用スクリプトを入れる
こんな感じのを作ります(手抜き)
#!/bin/bash
AWSCLIPATH="/cygdrive/c/Program Files/Amazon/AWSCLI/aws.exe"
AWSCLIOPT="--output text "
for IID in $("${AWSCLIPATH}" ${AWSCLIOPT} ec2 describe-instances --filter Name=platform,Values=windows --query "Reservations[].Instances[].[InstanceId]" | sed -e 's/\r//g')
do
echo
PRIIP=$("${AWSCLIPATH}" ${AWSCLIOPT} ec2 describe-instances --instance-id ${IID} --query "Reservations[].Instances[].NetworkInterfaces[].[PrivateIpAddress]" | sed -e 's/\r//g')
KEYNAME=$("${AWSCLIPATH}" ${AWSCLIOPT} ec2 describe-instances --instance-id ${IID} --query "Reservations[].Instances[].[KeyName]" | sed -e 's/\r//g')
KEYPATH="./keys/${KEYNAME}.pem"
echo "Instance ID : ${IID}"
echo "KeyPath : ${KEYPATH}"
echo "Private IP Address : ${PRIIP}"
PASSWD=$("${AWSCLIPATH}" ${AWSCLIOPT} ec2 get-password-data --instance-id ${IID} --priv-launch-key ${KEYPATH} --query "[PasswordData]" | sed -e 's/\r//g')
if [ "" = "${PASSWD}" ]
then
echo "can not get windows password."
else
echo "Windows Password : ${PASSWD}"
systeminfo /s ${PRIIP} /u Administrator /p "${PASSWD}" | findstr "^OS"
fi
done
AWSに設定した鍵を準備する
WindowsInstanceに設定した鍵の秘密鍵を用意して、./keys/に入れておきます。
名前は、.pemをつけましょう。(仕様)
$ mkdir keys ; cat "ssh-rsa xxxxx" > ./keys/default.pem
スクリプトを実行してみる
$ bash ./list_windows_instance_version_aws.sh
で実行してみます。
※ WindowsのAdministratorPasswordをキーと結びつかないように変更していると、内部で実行している
systeminfo /s ${PRIIP} /u Administrator /p ${PASSWD} | findstr "^OS"
が失敗するので、有効なユーザ名、パスワードにて「結局手動で」実行してくださいw
うまく実行されると、
Instance ID : i-02xxxxx
KeyPath : ./keys/default.pem
Private IP Address : 10.1.1.100
Windows Password : xxxxxxx
OS 名: Microsoft Windows Server 2012 R2 Standard
OS バージョン: 6.3.9600 N/A ビルド 9600
OS 製造元: Microsoft Corporation
OS 構成: スタンドアロン サーバー
OS ビルドの種類: Multiprocessor Free
Instance ID : i-4exxxxxx
KeyPath : ./keys/win.pem
Private IP Address : 10.1.1.176
Windows Password : xxxxxxx
OS 名: Microsoft Windows Server 2008 R2 Datacenter
OS バージョン: 6.1.7601 Service Pack 1 ビルド 7601
OS 製造元: Microsoft Corporation
OS 構成: スタンドアロン サーバー
OS ビルドの種類: Multiprocessor Free
Instance ID : i-c1xxxxxxx
KeyPath : ./keys/default2.pem
Private IP Address : 10.1.1.21
Windows Password : xxxxxxxx
OS 名: Microsoft Windows Server 2012 Standard
OS バージョン: 6.2.9200 N/A ビルド 9200
OS 製造元: Microsoft Corporation
OS 構成: スタンドアロン サーバー
OS ビルドの種類: Multiprocessor Free
こんな感じで出てきます。対象がたくさんあった場合はAWSさんを恨みましょうw