[AWS CLI]手元の仮想マシンをEC2に移行するときにドハマりした。

Xen server上で動作している仮想環境をAWS VPC内のEC2に移行
させたかったんですが、ドハマりしたのでメモ

まず気をつけたほうがいいこと

僕は今までAWSはすべてWEB上のGUIから処理を行っており
この作業のために初めてaws cliをインストールしました。

当初、AWS CLIについて全く知らない状況でとりあえずXenServerの
イメージ(vhdファイル)をEC2にインポートさせようと
Google検索すると、おそらく2種類の方法が見つかると思います。

ec2コマンドでimport-instanceする手法と、awsコマンドでec2 import-image
用いる方法です。

結論からいうと、後者のec2 import-imageを使いましょう。
ec2コマンドのほうではawsコマンドで切り替えられるcredentialsを
共有できないため不便です。(他にもメリット・デメリット
ありそうだけど、僕全然詳しくないので教えてください・・・m(__)m )

前提条件

  1. AWS CLI(AWS Command Line Interface)をインストールしていること
  2. 専用のIAMユーザを作成していて、そのkeyとsecretを取得していること
    • (例としてuser1というユーザがいることにします)
  3. AWS CLIにIAMユーザの情報を登録していること( $ aws configure )
  4. EC2にインポートしたいVMイメージを用意できている
    • (例としてsample-vm.vhdというVMイメージがあることにします )
  5. VMイメージをアップロードするためのs3のbucketを作成している
    • (Critex XenCenterからVM Exportしたものです)
    • (VHD(hyper-v,Xen互換), VMHD(VMWareESX,vSphere互換), OVAに対応しているらしい)
    • (例としてvmbucketというs3bucketを作成してあることにします)

前提3は行わなくてもコマンド1つずつ指定することで、同じことが可能です。
しかし非常にめんどくさいです。
この記事でも設定がされている前提でコマンドを書いています。

[IAM]ロール、グループの設定

参考 AWSの新しいVM Import ImportImage で複数ディスクを一気にAMIへ!

後述する公式での手順をそのまま実行すると、おそらく
権限がありません的なエラーが出ます。ので、専用のポリシーとグループ、
そしてそれをログインしているユーザに適用しましょう。

まずはポリシー(を定義したjsonがこちら。これをIAMで設定してください)
名前はvmimport、がいいかも

(公式ではaws cliからコマンドでrole作成していたが、IAMユーザでログインしてると
その手順では上手く行かなかった。)

続いてグループを新規作成し、作成したポリシーを適用します。
その後、そのグループにログインしているIAMユーザuser1を所属させます。

これで準備OK
ここまですれば、手順通りでアップロードまで出来ます(僕はできました…)。

公式で紹介されている手順

  1. s3にVMイメージをアップロードする
    • $ aws s3 cp sample-vm.vhd s3://vmbucket
  2. それをAMIにするリクエストを投げる
    • リクエスト用のjsonを作成する
    • # importvm.json
      {
      "Description": "sample vhd",
      "DiskContainers": [
      {
      "Description": "First CLI task",
      "UserBucket": {
      "S3Bucket": "vmbucket(vmイメージをアップロードしたs3bucket)",
      "S3Key" : "samplevm.vhd(s3においてあるvmイメージのパス)"
      }
      }
      ]
      }
    • $ aws ec2 import-image --cli-input-json file://importvm.json
  3. 進捗を確認しつつ待つ
    • $ aws ec2 describe-import-image-tasks
  4. 出来上がるとEC2 AMIで確認できるようになる
  5. あとはお好みでインスタンスタイプとディスクを追加しましょう

Statue Message: an Internal error….

進捗を確認していると、Statue Message: an Internal error.... のようなエラーが
出ることがあります。この場合は残念ながらやり直しです・・・

この場合、詳細を知るにはサポートデスク等にImportTaskIDを伝えることで
調査していただけるようで、ユーザが自分で調べることはできません。

参考
Qiita ImportImageによるVMインポート

ただ、次の日くらいになんとなく、見てみたら
StatusMessage: ClientError: Unsupported kernel versionと出ていたので
ざっくりとしたエラーは、しばらく待てるのであれば確認できるのかもしれません。
(いくつもエラーが出たわけでなく、僕も偶然このメッセージを見ただけなので他に
どんなメッセージが出るのかは把握できておりません。)

公式にあった前提条件

参考 aws document VM Import/Export の前提条件

以下は公式からほとんどまるまる引用。
なんかつまったら役に立つ、かも。

そもそも対応しているOS

Linuxは32bitはサポート外、Windowsは32bit/64bit両対応

  • RedHatEnterpriseLinux 5.1-5.11、6.1-6.6、7.0-7.1
  • CentOS 5.1~5.11、6.1~6.6、7.0-7.1
  • Ubuntu 12.04、12.10、13.04、13.10、14.04、14.10
  • Debian 6.0.0-6.0.8, 7.0.0-7.2.0
  • Windows(7とServerは2003以降, 8は2015/07/23時点では載ってませんでした)

移植後のインスタンスタイプ

Windowsは任意
Linuxは、次のインスタンスタイプにインポート可能。
この辺はAMIからEC2インスタンス作るときに有効な選択肢が出るので
まぁ覚えてなくても大丈夫そうではあります。

  • 汎用:
    t2.micro | t2.small | t2.medium | m3.medium | m3.large | m3.xlarge | m3.2xlarge
  • コンピューティングの最適化:
    c3.large | c3.xlarge | c3.2xlarge | c3.4xlarge | cc2.8xlarge
  • メモリを最適化:
    cr1.8xlarge
  • ストレージの最適化:
    hi1.4xlarge | hs1.8xlarge | i2.xlarge | i2.2xlarge | i2.4xlarge
  • GPU: cg1.4xlarge

ボリュームタイプとファイルシステム

Windows(32bit/64bit)

NTFS ファイルシステムを使用した、MBR パーティション分割ボリューム

Linux/Unix(64bit only)

ext2、ext3、ext4、Btrfs、JFS、XFS ファイルシステムを使用した、MBRパーティション分割ボリューム

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です