LoginSignup
0
0

More than 3 years have passed since last update.

ローカルの CentOS 6.x の VM を AWS の EC2 にもっていく

Posted at

はじめに

ローカルにあるCenOS 6.x の VMWare の VM を AWS の EC2 にもっていく。
レガシーなローカル環境というか、サーバがぼろいので AWS に上げようという話。

AWSCLIを利用してコマンドラインでローカルにある VM を移動する。

大まかながれ

  1. VMWare の VM をエクスポート (OVF形式)
  2. エクスポートした(OVF形式)ファイルを S3 へコピー
  3. S3 から EC2 へコピーするロールを作成しポリシーを割り当てる
  4. S3へコピーしたファイルを AMI にインポート
  5. AMI から EC2 へ登録

準備

  • AWSCLI が利用できるようになっていること
  • S3でバケットが作れること
  • AWSCLI でロール作成とポリシー割り当てができるようになっていること
    • IAM でアクセスID、アクセスキーでアクセスするユーザーにロール作成とポリシー割り当てができるようになっていること

手順

VMWare の VM をエクスポート (OVF形式)

VM を停止させてから行う必要がある。
「ファイル」メニューの「OVFへエクスポート(E)」を選択してファイルを出力する。

image.png

これを実行すると、以下の3つのファイルが出力される。

  • test.mf
  • test.ovf
  • test.vmdk

エクスポートした(OVF形式)ファイルを S3 へコピー

S3 でバケットを作成

「バケットを作成する」をクリック

mojikyo45_640-2.gif

バケット名を入力して「次へ」

mojikyo45_640-2.gif

特に何もないので、何もしないで「次へ」

mojikyo45_640-2.gif

移行したらすぐ消すのでパブリックアクセスにしてバケットを作成

mojikyo45_640-2.gif

mojikyo45_640-2.gif

バケットへ OVF形式ファイルをコピー

バケットを選択

「アップロード」をクリックして、エクスポートした VM の3つのファイルをアップロードする。

  • test.mf
  • test.ovf
  • test.vmdk

S3 から EC2 へコピーするロールを作成しポリシーを割り当てる

ロールの作成

以下の JSONファイルを用意する
```json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": { "Service": "vmie.amazonaws.com" },
"Action": "sts:AssumeRole",
"Condition": {
"StringEquals":{
"sts:Externalid": "vmimport"
}
}
}
]
}

上記のJSONファイルを利用し、以下のコマンドを実行する。

/root/.local/bin/aws iam create-role --role-name vmimport --assume-role-policy-document "file:///tmp/trust-policy.json"

もしロールを作成できる権限がなければ以下のようなエラーになる

An error occurred (AccessDenied) when calling the PutRolePolicy operation: User: arn:aws:iam::105252861779:user/cliadmin is not authorized to perform:

コマンド実行が正常に終われば以下のようなものが表示される

ROLE    arn:aws:iam::105252861779:role/vmimport 2020-07-15T10:36:22Z    /       AROARRAMPG5J2MR35GNQ3   vmimport
ASSUMEROLEPOLICYDOCUMENT        2012-10-17
STATEMENT       sts:AssumeRole  Allow
STRINGEQUALS    vmimport
PRINCIPAL       vmie.amazonaws.com

ポリシーの割り当て

以下のJSONファイルを用意する。「バケット名」に作成したバケット名を記載する。

{
   "Version":"2012-10-17",
   "Statement":[
      {
         "Effect":"Allow",
         "Action":[
            "s3:GetBucketLocation",
            "s3:GetObject",
            "s3:ListBucket"
         ],
         "Resource":[
            "arn:aws:s3:::バケット名",
            "arn:aws:s3:::バケット名/*"
         ]
      },
      {
         "Effect":"Allow",
         "Action":[
            "ec2:ModifySnapshotAttribute",
            "ec2:CopySnapshot",
            "ec2:RegisterImage",
            "ec2:Describe*"
         ],
         "Resource":"*"
      }
   ]
}

上記のJSONファイルを利用して以下のコマンドを実行してロールにポリシーを割り当てる。

 /root/.local/bin/aws iam put-role-policy --role-name vmimport --policy-name vmimport --policy-document "file:///tmp/role-policy.json"

もしロールを作成できる権限がなければ以下のようなエラーになる

An error occurred (AccessDenied) when calling the PutRolePolicy operation: User: arn:aws:iam::105252861779:user/cliadmin is not authorized to perform:

S3へコピーしたファイルを AMI にインポート

以下のJSONファイルを用意する。

[
  {
    "Description": "First disk",
    "Format": "vmdk",
    "UserBucket": {
        "S3Bucket": "バケット名",
        "S3Key": "フォルダ名/インポート対象VMDK(test.vmdk)"
    }
  }
]

上記で用意したJSONファイルを利用し以下のコマンドを実行する

/root/.local/bin/aws ec2 import-image --description "vmec2mig" --disk-containers "file:///tmp/containers.json"

ロールがない、ロールにポリシーが割り当たっていないと以下のエラーになる

An error occurred (InvalidParameter) when calling the ImportImage operation: The service role vmimport provided does not exist or does not have sufficient permissions

実行できるとインポートが始まるのでしばらく待つ

/root/.local/bin/aws ec2 import-image --description "vmec2mig" --disk-containers "file:///tmp/containers.json"
vmec2mig        import-ami-0746702dcd8ae0ba4    1       active  pending
SNAPSHOTDETAILS First disk      0.0     VMDK
USERBUCKET      testlink-vm     TestLink_CentOS6.6_extl0104ce6-disk1.vmdk
/root/.local/bin/aws ec2 describe-import-image-tasks --import-task-ids import-ami-0746702dcd8ae0ba4
IMPORTIMAGETASKS        vmec2mig        import-ami-0746702dcd8ae0ba4    4       active  validated
# /root/.local/bin/aws ec2 describe-import-image-tasks --import-task-ids import-ami-0746702dcd8ae0ba4
IMPORTIMAGETASKS        x86_64  vmec2mig        ami-019afc5f9ae98ab03   import-ami-0746702dcd8ae0ba4    BYOL    Linux   completed

ステータスが completed になれば AMI に使いされている

AMI から EC2 へ登録

登録した AMI を選択し「アクション」で「起動」をクリックすると EC2 で起動する。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0