AWS
vmware
SMS

Server Migration Service[SMS]を使ってVMware環境からAWSへ

こんちは!
エキゾチックショートヘア(猫)を飼ってます。
加藤です。

AWS Server Migration Service(以下SMS)を検証してました。
だいたい動きが掴めてきたので、いっぺんまとめようと思います。

1. SMSの使用要件

以下参照
http://docs.aws.amazon.com/ja_jp/server-migration-service/latest/userguide/prereqs.html

2. 概要

VMware社のvSphereESXiサーバーで稼働している仮想マシンを
自動でAWSにイメージを転送し、AMIにしてくれるものです。

3. 前提

当たり前ですが、ESXiサーバの環境と、稼働している仮想マシン、
そしてvCenterサーバーが必要です。

以下参照
http://docs.aws.amazon.com/ja_jp/server-migration-service/latest/userguide/SMS_setup.html

3.1. vCenterサーバ SMS権限のユーザーを作成

以下抜粋

vCenter で以下の権限を持つロールを作成します。

[Datastore] > [Browse datastore and Low level file operations] -
(Datastore.Browse と Datastore.FileManagement)

[vApp] > [Export] - (VApp.Export)

[Virtual Machine] > [Snapshot management] > [Create snapshot and Remove Snapshot] - (VirtualMachine.State.CreateSnapshot と VirtualMachine.State.RemoveSnapshot)

次のようにロールを割り当てます。

この vCenter ロールを、コネクター で vCenter へのログインに使用するサービスアカウントに割り当てます。

このロールを伝達権限と共に VM の移行元のデータセンターに割り当てます。

vCenter サービスアカウントのアクセス許可を手動で確認するには、コネクタのサービスアカウントの認証情報を使用して vSphere クライアントにログインできること、VM を OVF テンプレートとしてエクスポートできること、データストアのブラウザを使用して VM があるデータストアからファイルをダウンロードできること、および VM の ESXi ホストの概要タブでプロパティを表示できることを確認します。

今回は面倒なので、Administrator@vsphere.localで実施しました。

3.2. AWS IAMユーザーとIAMロールの作成

いちいちどの権限が必要かドキュメントみるのも面倒なので、
CloudFormation化した。
下記のスタックを作成したらいいです。

iam.yml
AWSTemplateFormatVersion: '2010-09-09'

Resources:
  SmsUser:
    Type: AWS::IAM::User
    Properties:
      ManagedPolicyArns:
      - arn:aws:iam::aws:policy/ServerMigrationConnector
      Path: '/'
      UserName: sms-connector

  SmsUserAccessKey:
    Type: AWS::IAM::AccessKey
    Properties:
      UserName: !Ref SmsUser

  SmsRole:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Version: "2012-10-17"
        Statement:
        - Sid: ""
          Effect: "Allow"
          Principal:
            Service:
            - "sms.amazonaws.com"
          Action:
          - "sts:AssumeRole"
          Condition:
            StringEquals:
              sts:ExternalId: sms
      ManagedPolicyArns:
      - arn:aws:iam::aws:policy/service-role/ServerMigrationServiceRole
      Path: '/'
      RoleName: sms-connector-role

Outputs:
  AccessKeySmsUser:
    Value: !Ref SmsUserAccessKey
  SecretKeySmsUser:
    Value: !GetAtt SmsUserAccessKey.SecretAccessKey

4. 手順

流れはこんな感じ
1. [SMS Connector]をダウンロード
2. vCenterサーバから[SMS Connector]をデプロイし起動
3. 起動後、IPとか設定
4. [SMS Connector]にWebで接続

5. 構成図

sms構成.png

SMSはAMI作成までで、インスタンスの作成はAMI選んでインスタンス起動です。

6. sms-connectorダウンロード → デプロイ手順

【AWS環境】
1. AWSマネージメントコンソールから[Server Migration Service]を選択
2. [今すぐ始める]
3. AWS Server Migration Connectorのセットアップ画面から[Download OVA]をクリックし、ダウンロード

【オンプレミス環境】
4. ダウンロードしたovaファイルをvCenterからデプロイする

7. sms-connector設定手順

【オンプレミス環境】
vCenterサーバから[SMS Connector]をデプロイし起動後、以下の手順を実施

1.WebUIで接続
[Get Started now]をクリック
sms-connector01.png

2.Lincense Agreement画面
sms-connector02.png

一番下までスクロールし、
[I have read and agree to the AWS License Agreement]をチェックし、[Next]
sms-connector03.png

3.Create a Password画面
sms-connectorのパスワードを入力し、[Next]
sms-connector04.png

4.Network Info画面
デプロイ後はDHCP環境下ではIPアドレスが自動で設定されるため、固定化したい場合は下記の手順を実施する
(sms-connectorデプロイ時に固定のIPを入力したんですが、なぜかDHCPで振られたIPになっとりました。なので改めてここで静的IPを設定)
sms-connector05_edit.png

コンソールから設定
ユーザー名:ec2-user
パスワード:ec2pass
ログインできたら、sudo setup.rbを入力
sms-connector06.png

IP設定の場合は2を選択
sms-connector07.png

コンソールにて変更後、設定したIPアドレスにWebUIから接続する
パスワードを聞かれるので、設定したパスワードでログイン
sms-connector08.png

[Next]
sms-connector09.png

5.Log Uploads and Upgrades画面
[Next]
sms-connector10.png

6.Server Migration Service画面
SMSで転送先のリージョンを選択する
事前に作成した[IAM User]のAccess Key、Secret Keyを入力する
(最初の手順のCloudFormationで作成した方は[CloudFormation]→[IAMスタック]→[出力]タブにキーがでてるはず)
[Next]
sms-connector11.png

vCenterサーバの情報を入力する
sms-connector12.png

vCenter Host Name:[DNS名 or IPアドレス]
Username:権限のあるユーザー情報を入力
Password:パスワード
「I gnore hostname mismatch and expiration errors for vCenter and ESXi Certificates.」にチェック
[Next]
sms-connector13.png

AWSとの接続が成功すると下記のような状態になる
sms-connector14_edit.png

ちょー簡単っすねw

8. Server Migration Service

8.1. Connector

【AWS環境】
Connectorタブをクリックする。
接続が成功していると下記のうようにステータスが「HEALTHY」になってるはず。
aws_sms01_edit.png

VMware環境の仮想マシン情報を取得する必要があるため、
[サーバーカタログのインポート]をクリックする。

8.2. サーバー

サーバータブ画面が表示される
vSphere環境の仮想マシン一覧情報が表示されているはずなので、移行対象の仮想マシンを選択し、
[レプリケーションジョブの作成]をクリックする。

8.3. レプリケーションジョブ

レプリケーションジョブ作成画面にて、事前に作成したIAMサービスロールを入力する必要がある。

あとは時間どおりジョブが動くはずです。

9. SMSの動作について

ここから細かい動作観察してみたので説明します。(間違ってるかもしれません)

  1. AWS SMSのジョブが開始
  2. VMware環境の仮想マシンでスナップショットが作成される
  3. 対象の仮想マシンからovfファイルが作成され、選択したリージョンのS3バケットへVMDKファイルが転送される
  4. VMDKファイルをEBSスナップショットへ変換
  5. S3バケットの中身を削除
  6. AMIが作成される

9.1. 注意事項

9.1.1. 一点目

SMSのスケジュールジョブは12〜24時間単位で定期的に差分データをAWSヘ送り続けることになるが、
初回転送からジョブを削除するまで、VMware側の仮想マシンスナップショットは残り続ける。
(正確には直近のSMSジョブ時のスナップショットが作られ、古いスナップショットは統合される)

シンプロディスクとかであればあまり問題になりにくいが、シックディスクの場合に大量の変更データが発生するとVMFSストレージを圧迫する可能性があるので、ご注意を

9.1.2. 二点目

SMSの要件に

vCenter バージョン 5.5 以上 (6.5 まで検証済み)
ESXi 5.1 以上 (6.5 まで検証済み)

※ 2017年9月の話です

とあるので上記条件(vcenter6.5、ESXi6.5)でSMSを動かしたところ、初回レプリケーションは成功するが、
2回目の差分レプリケーションが失敗した。

ServerError: Failed to upload delta disk(s) to S3. If this problem persists, please contact AWS support: java.io.FileNotFoundException: https://[vcenterのIP]/folder/win2012r2%2Fwin2012r2-000001-delta.vmdk?dcPath=Datacenter&dsName=data01

メッセージのとおりxxxxx-delta.vmdkがねえぞ!ということらしい。
差分レプリケーションにdeltaファイルが必要なんですね。
そして、仮想マシンスナップショットにdeltaファイルが作成されるのは
VMFS5まで

VMFS6からはスナップショットを取ると、
000001-sesparse.vmdkという形式になっとりました。

VMFS5で稼働している仮想マシンであれば問題なく2回目以降の差分レプリケーションも動作するので、お気をつけて。