VirtualBoxの仮想マシンをAWSに移行してみた
はじめに
本記事では、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/
(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にどんどんあげていこうと思う。
Author And Source
この問題について(VirtualBoxの仮想マシンをAWSに移行してみた), 我々は、より多くの情報をここで見つけました https://qiita.com/yes_dog/items/97598d5f938534209b75著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .