大雪高原沼 緑沼


Date/Time: 2014:09:24 10:42:47
Camera: PENTAX
Model: PENTAX K-5 II s
Exporsure Time: 1/800
FNumber: 5.6
Aperture Value: 5.0
Focal Length: 21.0

Close

y2blog » AWS WorkMailを試してみる(その2:データ移行編)

1

12

2021

AWS WorkMailを試してみる(その2:データ移行編)

現行メールサーバ(Postfix/Dovecot)からのデータ移行方法


前回の記事で自ドメインでのメール運用環境を構築したので、今すぐにでも新しいメール環境で運用開始することができるのだが、現行のメール環境からの移行の場合、これまでのメールデータを新しいメール環境に取り込むことができなければ片手落ちだろう.勿論、新旧の環境を平行運用させながら段階的に移行していくことも可能ではあるが、できることなら新しいメール環境にこれまでのメールデータを全て取り込むことができれば言うことはない.


組織のメールサーバを運用した経験があれば、メール環境の移行作業が面倒で厄介な骨の折れる作業であることは承知のことだろう.今回は、個人のプライベートメール環境の移行なので失敗しても元に戻せば良いだけだ.


Office365のExchangeサービスでは、データ移行に関するドキュメントがある程度提供されており、SIerさんもそれなりに経験を積んで慣れているので、Exchangeサーバへの移行は何とかなりそうだ.今回のWorkMailはAWS版のExchangeライクなサービスなので、移行に関するドキュメントもそれなりに用意されているかと思いきや、AWS側の移行に関するドキュメントは殆ど見当たらない.


最近のAWSの取り組みを見ていると、WorkMailサービス事態を積極的に展開する気は無さそう(Office365 Exchangeとの勝負では勝ち目がないから?)なので、そのうちAWSのサービスメニューから無くなるのでは無いかという一抹の不安があるが、とりあえず現行のメールデータをWorkMailに取り込む方法を探すことにする.


とりあえず、WorkMailのドキュメントから、データ移行に関係する箇所を調べておく.”Documentation > Amazon WorkMail > Administrator Guide : Migrating to Amazon WorkMail” では、データ移行用のユーザを設定してMailBoxにアクセスする許可を与える必要があるようだ.



Set Migration Perimittion
ユーザにMailBoxへのアクセス許可を設定しておく

WorkMailに関するドキュメントが殆ど無いのであれば、とりあえずExchangeの移行に関するドキュメントを探して、WorkMailへの移行のヒントにすることにする.


ネットを漁っていたら、OSSのインテグレーションで有名なサイオステクノロジーさんのブログ記事(「imapsync でOffice365にメールデータ移行してみた。」)を見つけた.この記事では、ImapsyncというオープンソースのIMAPベースのデータ移行ツールを使ったExchange サーバへのデータ移行の方法が紹介されている.


今回のWorkMailでもIMAPクライアント環境がユーザに提供されているので、同じ方法でWorkMail環境へデータを転送できそうだ.


Imapsync のインストール方法は epel-releaseリポジトリが有効化されていれば、yumで簡単にインストール可能だ.Imapsync自体は単なるPerlスクリプトのようだ.


Imapsyncの簡単な使い方が上記のブログ記事に紹介されているが、Imapsyncの詳細はGitHubの “README” に記載されている.


Imapsyncを使ったIMAPによるデータ移行作業


個人用のプライベートメール環境と言えども、いきなり本番環境でテストする訳にはいかないので、この正月まで運用していた “ConoHa” のVPSサーバのバックアップイメージから、テスト用のメールサーバ環境を復元した.この環境には、メールスプールデータも含めて以前のメールサーバ環境一式が含まれているので、検証環境としては申し分ない.


今回の検証では、この復活メールサーバ上にImapsynをインストールして、メールデータの転送を試みた.



[root@xxxxxxxxxx ~]# yum -y install imapsync
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: ftp.iij.ad.jp
 * epel: ftp.riken.jp
 * epel-debuginfo: ftp.riken.jp
 * epel-source: ftp.riken.jp
 * extras: ftp.iij.ad.jp
 * updates: ftp.iij.ad.jp
Resolving Dependencies
--> Running transaction check
---> Package imapsync.noarch 0:1.727-1.el7 will be installed
--> Processing Dependency: perl(Mail::IMAPClient) >= 3.25 for package: imapsync-1.727-1.el7.noarch
--> Processing Dependency: perl(Mail::IMAPClient) >= 3.30 for package: imapsync-1.727-1.el7.noarch
--> Processing Dependency: perl(Authen::NTLM) for package: imapsync-1.727-1.el7.noarch
--> Processing Dependency: perl(Data::Uniqid) for package: imapsync-1.727-1.el7.noarch
--> Processing Dependency: perl(File::Copy::Recursive) for package: imapsync-1.727-1.el7.noarch
--> Processing Dependency: perl(IO::Socket::INET6) for package: imapsync-1.727-1.el7.noarch
--> Processing Dependency: perl(IO::Tee) for package: imapsync-1.727-1.el7.noarch
--> Processing Dependency: perl(JSON::WebToken) for package: imapsync-1.727-1.el7.noarch
--> Processing Dependency: perl(Readonly) for package: imapsync-1.727-1.el7.noarch
--> Processing Dependency: perl(Test::MockObject) for package: imapsync-1.727-1.el7.noarch
--> Processing Dependency: perl(Test::More) for package: imapsync-1.727-1.el7.noarch
--> Processing Dependency: perl(Test::Pod) for package: imapsync-1.727-1.el7.noarch
--> Processing Dependency: perl(Test::Simple) for package: imapsync-1.727-1.el7.noarch
--> Processing Dependency: perl(Unicode::String) for package: imapsync-1.727-1.el7.noarch
--> Running transaction check
---> Package perl-Data-Uniqid.noarch 0:0.12-2.el7 will be installed
---> Package perl-File-Copy-Recursive.noarch 0:0.38-14.el7 will be installed
---> Package perl-IO-Socket-INET6.noarch 0:2.69-5.el7 will be installed
 
 ...

[root@xxxxxxxxxx ~]# which imapsync
/usr/bin/imapsync
[root@xxxxxxxxxx ~]# cat /usr/bin/imapsync
#!/usr/bin/perl

# $Id: imapsync,v 1.727 2016/08/19 10:30:36 gilles Exp gilles $
# structure
# pod documentation
# pragmas
# main program
# global variables initialisation
# get_options(  ) ;
# default values
# folder loop
# subroutines
# sub usage {
# IMAPClient 3.xx ads

# pod documentation

=pod

=head1 NAME

imapsync - Email IMAP tool for syncing, copying and migrating email mailboxes.

 ...


先ずは、Imapsync のコマンドパラメータをチェックする.特に難しい項目は無いが、 先ずは”–dry” オプションを付けてエラーが発生しないかどうかテストしてみよう.これでエラーが発生していなければ、”–dry” オプションを外して本番実行を行えば良い.



     --host1        str  : 移行元のIMAPサーバ(IPアドレス or FQDN)
     --port1        int  : IMAPポート番号(暗号化の場合993)
     --ssl1              : SSL暗号化指定オプション

     --user1        str  : 移行元IMAPサーバ上のユーザアカウント
     --password1    str  : 同パスワード情報(プレーンテキスト)

     --host2        str  : 移行先のIMAPサーバ  (今回は "imap.mail.us-west-2.awsapps.com" )
     --port2        int  : IMAPポート番号   (993)
     --ssl2              : SSL暗号化指定オプション

     --user2        str  : 移行先IMAPサーバ上のユーザアカウント
     --password2    str  : 同パスワード情報(プレーンテキスト)

     --showpasswords     : ログ出力上にユーザのパスワード情報を生テキスト出力する
     --passfile1    str  : コマンドライン上でパスワード情報を入力したくない場合に、代わりに
     --passfile2    str  : テキストファイルにパスワード情報を記載する

     --dry               :  ドライランテスト




[root@xxx.yyy.zzz.144 ~]# imapsync --host1 xxx.yyy.zzz.144 --port1 993 --ssl1 --authmech1 LOGIN --user1 xxxxxx  --password1 PASSWORD --host2 imap.mail.us-west-2.awsapps.com --port2 993 --ssl2 --authmech2 LOGIN --user2 xxxxxx@workmail.com --password2 PASSWORD 
Transfer started at Tue Jan 12 15:41:18 2021
PID is 2961
Log file is LOG_imapsync/2021_01_12_15_41_18_xxxxx@workmail.com.txt ( to change it, use --logfile path ; or use --nolog to turn off logging )
$RCSfile: imapsync,v $ $Revision: 1.727 $ $Date: 2016/08/19 10:30:36 $ 
Here is a [linux] system (Linux archive ----.el7.x86_64 #1 SMP Fri Dec 18 16:34:56 UTC 2020 x86_64)
with Perl 5.16.3 Mail::IMAPClient 3.37
Command line used:
/bin/imapsync --host1 xxx.yyy.zzz.144 --port1 993 --ssl1 --authmech1 LOGIN --user1 xxxxx --password1 MASKED --host2 imap.mail.us-west-2.awsapps.com --port2 993 --ssl2 --authmech2 LOGIN --user2 xxxxx@workmail.com --password2 MASKED
Temp directory is /tmp  ( to change it use --tmpdir dirpath )
PID file is /tmp/imapsync.pid ( to change it use --pidfile filepath ; to avoid it use --pidfile "" )
Wrinting my PID 2961 in /tmp/imapsync.pid
Modules version list:
Mail::IMAPClient     3.37
IO::Socket           1.34
 
 ...
 
msg Sent Messages/207 {2707}          copied to Sent Messages/3156       1.43 msgs/s  81.450 KiB/s 174.392 MiB copied  ETA: Tue Jan 12 16:17:56 2021  1 s  1/3133 msgs left
msg Sent Messages/208 {2678}          copied to Sent Messages/3157       1.43 msgs/s  81.430 KiB/s 174.395 MiB copied  ETA: Tue Jan 12 16:17:56 2021  0 s  0/3133 msgs left
Folder   13/13 [Trash]                             -> [Trash]                            
Host1 folder [Trash] has 0 messages in total (mentioned by SELECT)
Creating folder [Trash] on host2
Created folder [Trash] on host2
Host2 folder [Trash] has 0 messages in total (mentioned by SELECT)
Host2: Subscribing to folder Trash
Host1 folder [Trash] considering 0 messages
Host2 folder [Trash] considering 0 messages
++++ End looping on each folder

Folders sizes after the synchronization.
You can remove this foldersizes listing by using  "--nofoldersizesatend"
++++ Calculating sizes of 13 folders on Host1
Host1 folder    1/13 [&Tgtm+DBN-] = [下書き]          Size:         0 Messages:     0 Biggest:         0
Host1 folder    2/13 [&UkqWZG4IMH8wojCkMMYw4A-] = [削除済みアイテム] Size:         0 Messages:     0 Biggest:         0
Host1 folder    3/13 [&j,dg0TDhMPww6w-] = [迷惑メール] Size:         0 Messages:     0 Biggest:         0
Host1 folder    4/13 [&kAFP4W4IMH8wojCkMMYw4A-] = [送信済みアイテム] Size:         0 Messages:     0 Biggest:         0
Host1 folder    5/13 [Archive]                           Size:      6020 Messages:     1 Biggest:      6020
Host1 folder    6/13 [Deleted Messages]                  Size:         0 Messages:     0 Biggest:         0
Host1 folder    7/13 [Drafts]                            Size:         0 Messages:     0 Biggest:         0
Host1 folder    8/13 [INBOX]                             Size: 138277176 Messages:  2949 Biggest:   9067767
Host1 folder    9/13 [Junk]                              Size:         0 Messages:     0 Biggest:         0
Host1 folder   10/13 [Notes]                             Size:         0 Messages:     0 Biggest:         0
Host1 folder   11/13 [Sent]                              Size:     10724 Messages:     3 Biggest:      4324
Host1 folder   12/13 [Sent Messages]                     Size:  44572475 Messages:   180 Biggest:  10268561
Host1 folder   13/13 [Trash]                             Size:         0 Messages:     0 Biggest:         0
Host1 Nb folders:               13 folders
Host1 Nb messages:            3133 messages
Host1 Total size:        182866395 bytes (174.395 MiB)
Host1 Biggest message:    10268561 bytes (9.793 MiB)
Host1 Time spent:              0.4 seconds

++++ Statistics
Transfer started on               : Tue Jan 12 15:41:18 2021
Transfer ended on                 : Tue Jan 12 16:18:31 2021
Transfer time                     : 2233.6 sec  <=== (3000程度のメール数で約38分ほど)
Folders synced                    : 13/13 synced
Messages transferred              : 3133 
Messages skipped                  : 0
Messages found duplicate on host1 : 0
Messages found duplicate on host2 : 0
Messages void (noheader) on host1 : 0
Messages void (noheader) on host2 : 1
Messages deleted on host1         : 0
Messages deleted on host2         : 0
Total bytes transferred           : 182866395 (174.395 MiB)
Total bytes duplicate host1       : 0 (0.000 KiB)
Total bytes duplicate host2       : 0 (0.000 KiB)
Total bytes skipped               : 0 (0.000 KiB)
Total bytes error                 : 0 (0.000 KiB)
Message rate                      : 1.4 messages/s
Average bandwidth rate            : 80.0 KiB/s
Memory consumption                : 354.6 MiB
Biggest message                   : 10268561 bytes (9.793 MiB)
Memory/biggest message ratio      : 36.2
Start difference host2 - host1    : -3129 messages, -182844762 bytes (-174.374 MiB)
Final difference host2 - host1    : -180 messages, -44567586 bytes (-42.503 MiB)
Detected 1 errors

New imapsync release 1.977 available
Homepage: http://imapsync.lamiral.info/
++++ Listing 1 errors encountered during the sync ( avoid this listing with --noerrorsdump ).
Err 1/1: Could not create folder [Notes] from [Notes]: 3018 NO [CANNOT] CREATE folder already exists (0.062 + 0.000 + 0.061 secs).
Exiting with return value 111
Log file is LOG_imapsync/2021_01_12_15_41_18_xxxxx@workmail.com.txt ( to change it, use --logfile filepath ; or use --nolog to turn off logging )
[root@xxx.yyy.zzz.144 ~]# 



IMAP data importing
とりあえずImapsyncでWorkMail環境へデータ移行できることを確認


今回は個人のプライベートメールサーバ上のコンテンツ移動だったので、メール数、転送容量ともに少なかったので数十分程度の時間で転送が終わったが、組織や会社のメールサーバだとこのような方法ではメールデータの移行は難しいだろう.とりあえず小規模なメールデータの移行に関してはこの Imapsyncによるデータ移行が利用できそうだ.