技術

【AWS】VMWareからAWSへサーバ移設

投稿日:

どうも中田です。
今回はVMWareからAWSへのマイグレーションに関するお話。

先日、仕事でVMWareからAWSへのサーバ移設をやったので、その時のメモを残しておきます。

前提話

AWSへは、コマンドツール(CLI)を使ってインポートします。
流れとしては、コマンド実行するとS3に一旦イメージが配置され、
その後、EC2インスタンスの生成が行われるといったものです。

なので、S3の領域や、APIキーを取得しておく必要があります。

準備

サーバイメージの準備

移設対象となるサーバ(VMWare)からイメージを取得します。

vSphere Clientからデータストアブラウザを使ってイメージをエクスポートする
するとファイル群はこんな感じ。

*****.vmx
*****.nvram
*****.vmdk
*****.vmsd
*****.vmxf
*****.log
インポートツールのインストール

AWSで用意してあるコマンドツールを使ってインポートするので、
事前に入れておきます。

$ brew install ec2-api-tools ec2-api-tools

移設実行!

では早速実行します。

$ ec2-import-instance --(オプション色々)

って感じで行ったんですが、

ERROR: This does not appear to be a Stream Optimized VMDK. It contains invalid magic number 277891307

あらら、、エラー発生。
要は、データストアブラウザ経由でダウンロードしたVMDKファイルはインポートできませんってことらしい。。

イメージサイズが半端なく大きいので、このままなんとかやっちゃえないかという話になり
なんとかやっちゃった話をします。

なんとかやっちゃった話

調べていくとどうやらOVF形式でないとダメっぽい。
なので、VMX形式のファイルをOVF形式に変換できればオッケーってことになった。

OVF形式に変換

VMWareが提供しているOVFToolでこれを使えば変換できるようなのでインストールしておきます。
ちなみに、データストアブラウザで取得してきたファイル群を一つのディレクトリにまとめておく必要があります。

$ ovftool /(ファイル群の場所)/disk_image.vmx /(出力先)/disk_image.ovf

すると、こんな形式のファイルが出力されます。

*****.ovf
*****.mf
*****.vmdk
本気でインポート!

先ほどは失敗しましたが、今度は本気でインポートするので
シェルを作って実行しました。

インスタンプタイプやローカルIPアドレスの指定もしています。

#!/bin/bash
 
VMDK=../disk.vmdk
S3_OWNER_ACCESS_KEY=(APIキー)
S3_OWNER_SECRET_KEY=(APIシークレットキー)
S3_BUCKET_NAME=(S3バケット名)
 
ec2-import-instance \
    --region ap-northeast-1 \
    -O $S3_OWNER_ACCESS_KEY \
    -W $S3_OWNER_SECRET_KEY \
    -p Linux \
    --instance-type t2.micro \
    --format VMDK \
    --architecture x86_64 \
    --bucket $S3_BUCKET_NAME \
    --owner-akid $S3_OWNER_ACCESS_KEY \
    --owner-sak $S3_OWNER_SECRET_KEY \
    --availability-zone ap-northeast-1a \
    --private-ip-address 192.168.200.220 \
    --subnet subnet-eae2579d $VMDK

これでうまくいきました!

-技術
-,

執筆者:


comment

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

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

関連記事

[ Ionic ] A problem occurred evaluating project ‘:app’. > Failed to apply plugin [class ‘com.google.gms.googleservices.GoogleServicesPlugin’] > For input string: “+”

こんにちは。たなかです。 相変わらずモバイルアプリ開発やっています。 先日、Io …

no image

【Android/ionic】これさえやればOK!アプリ公開への道

どうも、中田です。 ionicでHTML5/CSSハイブリッドアプリ開発してるん …

Siriに笑って欲しいから [iOS 11、macOS High Sierra](「Siri」の笑い声まとめ)

iPhone Xが発売されて巷はiPhone Xの記事ばかり。 なんとなく見てい …

[ Rails ]ActiveRecord::RecordInvalidで怒られ、saveができない!

こんにちは。たなかです。 新しいプロジェクトの参画が決まって、今はrailsを書 …

no image

[Angular]リアクティブフォームでバリデーション名を動的に出し分ける。

Angularのリアクティブフォームのカスタムバリデーションで、動的にエラー名を …