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。


ここまでで、大体動くようにはなってると思う。

ただ、本当はここから下記の設定をした方がよいっぽい。

インスタンス上げてみてみると、EC2Configの方は勝手にインストールされてた。

ただ、ENAとNVMe のドライバーのインストールはWindowsServer2003では不可能っぽい。

何でかって言うとPowerShellが2.0しか入れられないから。

がんばれば3.0以降も入るのかな?どこかで2003は2.0しか動作しないような事を見た記憶ががが...

ENAとNVMeはあきらめましたとさ。

でも、とりあえず動いてはいる。

顧客向け用の環境としてはあり得ないんだけど、開発用でどうしても一時的に必要な状況はあるので、何かの参考に置いておきます。

windows server 2003をAWS上に復元するのとか検索しても全然出てこなかった。

まーやる人なんかいないですよね。。。