5
6

More than 3 years have passed since last update.

VirtualBoxの仮想マシンをAWSに移行してみた

Last updated at Posted at 2019-11-03

はじめに

本記事では、VirtualBoxで稼働中の仮想マシンをAWSに移行したので、その備忘録として書いたものです。
AWSの移行には、AWSサービス「VM Import」を使用する。
※今回の手順は、イメージをAMIに変換する手順です(import-image)。

VMimportの前提条件

・VMimportのサポート対象のOSであること。 ※今回は、「CentOS7.6」で実施するので、サポート対象である。
・VMimportの対象ファイルが、VMimportでサポートされていること。 ※今回は、VirtualBoxのイメージファイルの「OVAファイル」なのでサポート対象である。
・aws-cliの環境構築が完了していること。
※AWS-CLIは、これを参考にすれば構築できると思います。
・aws-cliの実行環境は、VirtualBoxで稼働中の「CentOS7.6」である。
・VMimportの対象OSで、Firewallが無効化されていること。
・(VMware VM の場合は、 VMware Toolsをアンインストールする必要がある )

参考までに、以下のキャプチャがわかりやすくまとまっているので、貼っときます。
※出典元:https://dev.classmethod.jp/cloud/aws/vm-import-image-import/
キャプチャ.PNG

(1)VMimport実施用のIAMユーザを作成

①以下、IAMポリシーを作成する。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListAllMyBuckets"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:CreateBucket",
                "s3:DeleteBucket",
                "s3:DeleteObject",
                "s3:GetBucketLocation",
                "s3:GetObject",
                "s3:ListBucket",
                "s3:PutObject"
            ],
            "Resource": [
                "arn:aws:s3:::test-20191103",
                "arn:aws:s3:::test-20191103/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iam:CreateRole",
                "iam:PutRolePolicy"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "ec2:ImportImage",
                "ec2:DescribeImportImageTasks",
                "ec2:CancelImportTask"
            ],
            "Resource": "*"
        }
    ]
}

※今回、テスト用で使用するS3バケットは「test-20191103」とする。

②AWS-CLI用のユーザに、ポリシーのアタッチをする。
③以下、コマンドを実施してS3バケットの一覧が表示されればOK

$ aws s3 ls

備考

今回、適用するIAMユーザのポリシーは以下の通りです。

項目 説明 許可範囲
s3:ListAllMyBuckets S3バケットの表示 全許可
s3:CreateBucket S3バケットの作成 S3バケット「test-20191103」のみ
s3:DeleteBucket S3バケットの削除 S3バケット「test-20191103」のみ
s3:DeleteObject S3バケット内のオブジェクトを削除 S3バケット「test-20191103」のみ
s3:GetBucketLocation S3バケットの置かれているリージョンを取得する S3バケット「test-20191103」のみ
s3:GetObject S3バケット内のオブジェクトを取得する S3バケット「test-20191103」のみ
s3:ListBucket S3バケットの中身の一覧を取得する S3バケット「test-20191103」のみ
s3:PutObject S3バケットにオブジェクトを追加する S3バケット「test-20191103」のみ
iam:CreateRole IAMロールの作成 全許可
iam:PutRolePolicy IAMロールのインラインアクセスの許可 全許可
ec2:ImportImage ボリュームのディスクイメージまたはEBSスナップショットをAmazon Machine Image(AMI)にインポートする 全許可
ec2:DescribeImportImageTasks インポートスナップショットのタスクを表示する 全許可
ec2:CancelImportTask インプロセス仮想マシンまたはスナップショットのインポートをキャンセルする 全許可

(2)テスト用のS3バケットを作成・仮想マシンのアップロード

(2.1)S3バケット作成

①S3バケット「test-20191103」を作成

$ aws s3 mb s3://test-20191103

②バケット作成後の確認

$ aws s3 ls

※バケットが作成されていればOK

(2.2)S3バケットに仮想マシンのイメージファイルをアップロード

①仮想マシンのイメージファイルをアップロード

$ aws s3 cp  /tmp/vmimpot/data/CentOS7.ova s3://test-20191103

※今回は、「/tmp/vmimpot/data/」に仮想マシンのイメージファイルがあることを前提に実施。

②アップロード後の確認

$ aws s3 ls s3://test-20191103

※データがアップロードされていればOK

(3)IAMロール作成・適用

(3.1)IAMロール作成

①作業ディレクトリを作成

$  sudo mkdir -p /tmp/vmimpot/json

②VMImportのIAMロールを定義

$ sudo vi /tmp/vmimpot/json/trust-policy.json
↓以下、項目を入力
{
   "Version": "2012-10-17",
   "Statement": [
      {
         "Effect": "Allow",
         "Principal": { "Service": "vmie.amazonaws.com" },
         "Action": "sts:AssumeRole",
         "Condition": {
            "StringEquals":{
               "sts:Externalid": "vmimport"
            }
         }
      }
   ]
}

③VMImportのIAMロールを作成

$ aws iam create-role --role-name vmimport --assume-role-policy-document "file:///tmp/vmimpot/json/trust-policy.json"

(3.1)IAMロール インラインポリシーの適用

①IAMロール インラインポリシーを定義

$ sudo vi /tmp/vmimpot/json/role-policy.json
↓以下、項目を入力
{
   "Version":"2012-10-17",
   "Statement":[
      {
         "Effect":"Allow",
         "Action":[
            "s3:GetBucketLocation",
            "s3:GetObject",
            "s3:ListBucket" 
         ],
         "Resource":[
                "arn:aws:s3:::test-20191103",
                "arn:aws:s3:::test-20191103/*"
         ]
      },
      {
         "Effect":"Allow",
         "Action":[
            "ec2:ModifySnapshotAttribute",
            "ec2:CopySnapshot",
            "ec2:RegisterImage",
            "ec2:Describe*"
         ],
         "Resource":"*"
      }
   ]
}

②IAMロール インラインポリシーの適用

$ aws iam put-role-policy --role-name vmimport --policy-name vmimport --policy-document "file:///tmp/vmimpot/json/role-policy.json"

VMimportの実施

①VMimportの定義ファイルを作成

$ sudo vi /tmp/vmimpot/json/containers.json
↓以下、項目を入力
[
  {
    "Description": "My Server OVA",
    "Format": "ova",
    "UserBucket": {
        "S3Bucket": "test-20191103",
        "S3Key": "CentOS7.ova"
    }
}]

②VMImport実施

$ aws ec2 import-image --description "My server VM" --disk-containers "file:///tmp/vmimpot/json/containers.json"

※上記コマンドの出力結果で「 "ImportTaskId": "import-ami-aaaaaaaaaaaaaaaaa"」のような項目が出力されるのでメモする。
★S3バケット「test-20191103」にあるOSイメージ「CentOS7.ova」をもとにAMIを生成する。

③VMimportの進捗確認

$ aws ec2 describe-import-image-tasks --import-task-ids import-ami-aaaaaaaaaaaaaaaaa

※「--import-task-ids」で、手順②で出力されたImportIDを指定

stautsで「completed」になれば、アップロードが完了する。(15~25分ぐらいかかる)

以下、stautsに表示される項目

出力項目 説明
active インポートタスクは進行中です。
deleting インポートタスクはキャンセルされています。
deleted インポートタスクはキャンセルされました。
updating インポートのステータスを更新しています。
validating インポートしたイメージを検証中です。
validated インポートしたイメージが検証されました。
converting インポートしたイメージを AMI に変換しています。
completed インポートタスクは完了し、AMI はすぐに使用できます。

④VMimportの事後処理
使用しないS3バケットを以下のコマンドで削除

$ aws s3 rb s3://test-20191103 --force

※イメージファイルをAMIに変換後、S3バケットとその中身を同時に削除する。※もういらないため
※検証用のS3バケットは、使い終わったらすぐ削除することを心掛ける!!(←自分に言い聞かせてる)

参考URL

https://docs.aws.amazon.com/ja_jp/vm-import/latest/userguide/vmie_prereqs.html
https://docs.aws.amazon.com/ja_jp/vm-import/latest/userguide/vmimport-image-import.html
https://docs.aws.amazon.com/ja_jp/vm-import/latest/userguide/vmimport-troubleshooting.html
http://iga-ninja.hatenablog.com/entry/2015/06/07/202208
https://dev.classmethod.jp/cloud/aws/vm-import-image-import/
http://blog.serverworks.co.jp/tech/2014/02/07/iam-ec2/
https://www.kabegiwablog.com/entry/2017/08/29/213104
https://www.kabegiwablog.com/entry/2017/08/30/192854

最後に

VirtualBoxの仮想マシンをAWSに移行できるのは、個人的には凄いと感じた。
昔、検証用で作ったやつとかをAWSにどんどんあげていこうと思う。

5
6
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
5
6