WindowsServer2003という古のOSがありまして、
そのVMイメージをAWSで動かせるのかというお試し。
結果から言うととりあえず動かせはした。
VMインポートの手順は大まかに下記の流れ。
1. VMをエクスポートしておく 2. S3にバケット用意(既存を使うならそれはそれで 3. IAMで作業用のユーザ作っておく 4. aws cliをインストールしてconfig 5. aws cliでロールとか作る 6. aws cliでS3にVMイメージをアップロード 7. aws cliでアップロードしたイメージをAMIに変換 8. AMIからインスタンスを起動
基本的に公式のココのページ通りやっていけば大丈夫。
1. VMをエクスポート
色々やり方あると思うのですが、基本的にこのページのやり方でやらないとだめ。
2. S3にバケット用意
これはS3のサービス開けば問題ないでしょう。
3. IAMで作業用のユーザ作っておく
既存のユーザでも問題ないですが、後続のaws cliでアクセスキーとシークレットアクセスキーを使うのでそれが分からない場合は作るしかないかなと。
色々面倒そうなので、adminグループのユーザ作ってやった。。。
4. aws cliをインストールてconfig
公式のインストールのページから。windowsでやるのでwindows用をDLしてインストール。v2でやる。
インストールできたら、コンフィグ。
aws configure > AWS Access Key ID [None]: ******* > AWS Secret Access Key [None]: ******* > Default region name [None]: ap-northeast-1 > Default output format [None]: json 東京リージョンは ap-northeast-1
5. aws cliでロールとか作る
- trust-policy.jsonを作成
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "vmie.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals":{ "sts:Externalid": "vmimport" } } } ] }
- JSON作ったら vmimport っていう名前で作成
aws iam create-role --role-name vmimport --assume-role-policy-document "file://C:\work\trust-policy.json"
- role-policy.json を作る
{ "Version":"2012-10-17", "Statement":[ { "Effect": "Allow", "Action": [ "s3:GetBucketLocation", "s3:GetObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::hoge-bucket", "arn:aws:s3:::hoge-bucket/*" ] }, { "Effect": "Allow", "Action": [ "s3:GetBucketLocation", "s3:GetObject", "s3:ListBucket", "s3:PutObject", "s3:GetBucketAcl" ], "Resource": [ "arn:aws:s3:::hoge-bucket", "arn:aws:s3:::hoge-bucket/*" ] }, { "Effect": "Allow", "Action": [ "ec2:ModifySnapshotAttribute", "ec2:CopySnapshot", "ec2:RegisterImage", "ec2:Describe*" ], "Resource": "*" } ] }
- JSON作ったら vmimport に反映
aws iam put-role-policy --role-name vmimport --policy-name vmimport --policy-document "file://C:\work\role-policy.json"
※ローカルのファイルパスはフルパスで作ったJSONファイルを指定。
6. aws cliでS3にVMイメージをアップロード
下記の感じ。
aws s3 cp "C:\work\hogehoge.disk1.vmdk" s3://work/vm
vmdkだけあればよいっぽいけどとりあえずエクスポートで作られたファイルは全部上げた。
7. aws cliでアップロードしたイメージをAMIに変換
- containers.json ファイルを作る
[ { "Description": "Disk01", "Format": "vmdk", "UserBucket": { "S3Bucket": "work", "S3Key": "vm/hogehoge.disk1.vmdk" } }, { "Description": "Disk02", "Format": "vmdk", "UserBucket": { "S3Bucket": "work", "S3Key": "vm/hogehoge.disk2.vmdk" } }, { "Description": "Disk03", "Format": "vmdk", "UserBucket": { "S3Bucket": "work", "S3Key": "vm/hogehoge.disk3.vmdk" } } ]
vmdk複数ある場合は↑の感じ。
- インポートする
aws ec2 import-image --description "HogeTestVM" --disk-containers "file://C:\work\containers.json"
8. AMIからインスタンスを起動
インポートが終わったら、AMIにイメージが出来てるのでそれを選んで起動すればOK。
ここまでで、大体動くようにはなってると思う。
ただ、本当はここから下記の設定をした方がよいっぽい。
- Windows インスタンスでの拡張ネットワーキングの有効化(enaSupportの有効化)
インスタンス上げてみてみると、EC2Configの方は勝手にインストールされてた。
ただ、ENAとNVMe のドライバーのインストールはWindowsServer2003では不可能っぽい。
何でかって言うとPowerShellが2.0しか入れられないから。
がんばれば3.0以降も入るのかな?どこかで2003は2.0しか動作しないような事を見た記憶ががが...
ENAとNVMeはあきらめましたとさ。
でも、とりあえず動いてはいる。
顧客向け用の環境としてはあり得ないんだけど、開発用でどうしても一時的に必要な状況はあるので、何かの参考に置いておきます。
windows server 2003をAWS上に復元するのとか検索しても全然出てこなかった。
まーやる人なんかいないですよね。。。