こんにちは!SBクラウドソリューションアーキテクトLeoです。現在マイグレーションをテーマにした投稿をしております。当記事はその第2段!オブジェクトストレージ編です。
アプリのバックアップ等で用いているストレージをAlibaba Cloud OSS(Object Storage Service)へマイグレーションする際の方法を簡単にご紹介していきます。
その他サーバーやDBに関しては他の手法も別記事でご紹介いたします。ぜひご覧ください!
[embed]https://techblog.sbcloud.co.jp/2018/10/26/migration_ecs/#more-4134[/embed]
[embed]https://techblog.sbcloud.co.jp/2018/06/14/data-transmission-service/[/embed]
クラウドマイグレーションを捉える
サーバーのマイグレーションといってもそのパターンはいくつも存在するということはご存知のことと思います。我々も日々パターン検証を行っているところでありますが、まずは1つの例として以下の構成をご覧ください。
オンプレ上のWebアプリがあったとして、そこからマイグレーションする場合は「バックアップとして立てているストレージをAlibaba CloudのOSSへ」という形になります。「AWSのS3」をという場合も迷わずECSへ移しましょう。
ではどうやって実施すれば良いか?この場合重要なツールになるのがOssImportになります。
ストレージ移行ツール
Alibaba Cloud 独自のリソース移行ツールです。ローカルまたは他のクラウドストレージシステムに格納されたデータを OSS に移行でき、以下のような特徴があります。
- 豊富なデータソースをサポート(ローカル、AWS S3、Azure Blob etc.)
- データ転送を中断しても途中から再開可能
- トラフィック制御をサポート
- パラレルでデータのアップロード・ダウンロードが可能
- スタンドアロンモードと分散モードをサポート。スタンドアロンモードは展開と使用が容易で、分散モードは大規模なデータ移行に適しています。
実際にこのツールを動かすにはECS(Alibaba Cloud Elastic Compute Service) が必要になります。全体的な手順は以下の通りです。
- ツール稼動用のECS, 移行先となるOSSバケットを作成
- ECSへOssImportをインストール
- 移行ジョブ設定ファイルに移行元/移行先の情報を付与する
- OssImportを実行する
導入実例
それでは実際にストレージの移行作業をご覧いただきたいと思います。今回のご紹介では移行元のストレージにAWSのS3を使用していることにし適当なファイルを配置しておきます。ここに対しECSにて移行ツールを実行、Alibaba Cloud OSSにて同様ファイル構成を再現していきます。
*本来ご紹介すべきはローカルからのマイグレーションとは思うのですが、準備の関係でクラウドからクラウドでの事例になっています。もしローカルからという場合であれば、OssImportはローカル上で導入/実行してください。
移行先となるOSSバケットを作成
OSSのバケット作成は当ブログの他の記事でもご紹介していますのでこちらをご覧ください。作業としては以下の
- Alibaba CloudのコンソールからOSSを選択
- バケットを1つ新規作成
- 空のディレクトリを作成
で完了です。
ECSの構築
続いてツール実行用にECSを立てます。2Core4GBを推奨スペックとしてしておりますので参考にしてください。またマイグレーション後に仮想サーバーを別の用途に流用するといった場合は最初からそのスペックでご購入いただいても構いません。
ECSへOssImportを導入
無事にECSが購入できたらsshでそのサーバーへログインしてください。インストール自体は以下を参考にしてください。(unzip等も含む)
# yum install -y unzip # wget http://gosspublic.alicdn.com/ossimport/standalone/ossimport-2.3.1.zip?spm=a2c4g.11186623.2.4.QjujkL&file=ossimport-2.3.1.zip # mkdir ossimport # mv ossimport-2.3.1.zip\?spm\=a2c4g.11186623.2.4.QjujkL ossimport-2.3.1.zip # mv ossimport-2.3.1.zip ossimport # cd ossimport # unzip ossimport-2.3.1.zip
無事に解答できると以下のファイルがあることと思います。
# ll 合計 19376 -rw-r--r-- 1 root root 6298 7月 10 2017 README.md drwxr-xr-x 2 root root 4096 12月 20 2017 bin drwxr-xr-x 2 root root 4096 10月 23 17:04 conf -rw-r--r-- 1 root root 1363 10月 11 2017 console.bat -rw-r--r-- 1 root root 3611 10月 20 2017 console.sh -rw-r--r-- 1 root root 1740 8月 23 2017 import.bat -rw-r--r-- 1 root root 3998 10月 20 2017 import.sh drwxr-xr-x 2 root root 4096 7月 29 2017 logs -rw-r--r-- 1 root root 19801481 12月 20 2017 ossimport-2.3.1.zip
移行ジョブ設定ファイルに移行元/移行先の情報を付与する
confディレクトリに移動し、local_job.cfgを編集いきます。(以下コマンドでは念のためバックアップを取っています)
# cd conf # cp -p local_job.cfg local_job.cfg.bak # vi local_job.cfg
local_job.cnfでは場合によりますが、今回の様な例では以下の項目の編集が必要となります。サンプルソースの赤字になっている部分を参考にしてください。
移行元(今回の例ではそれぞれAWS S3のコンソールから確認できます)
- srcType:
- srcAccessKey:
- srcSecretKey:
- srcDomain:
- srcBucket:
- srcPrefix:
移行先(それぞれAlibaba Cloud OSSのコンソールから確認できます)
- destAccessKey:
- destSecretKey:
- destDomain:
- destPrefix:
#インクリメンタルモードがオンかどうか、trueに設定すると、incrementalModeInterval(秒単位)ごとにインクリメンタルデータが再スキャンされ、インクリメンタルデータはossに同期します。incrementalModeIntervalは3600秒未満であることは推奨されません。これは多くのリクエストを無駄にし、 オーバーヘッドになる(現在設定可能な最小間隔は900秒) isIncremental=false incrementalModeInterval=86400 ##############################################################同期ソース設定############################################################## #現在サポートされている同期ソースタイプ: #1.local(ローカルファイル、このオプションはsrcPrefixを記入するだけで、srcAccessKey、srcSecretKey、srcDomain、srcBucketを記入する必要はありません) #2.oss(ossの1つのバケットから別のバケットに移動) #3.qiniu(七牛) #4.bos(Baiduのクラウドストレージ) #5.ks3(Kingsoftのクラウドストレージ) #6.s3(Amazon S3) #7.youpai(upyun、upyunはファイルのリストを得るためのインターフェイスは非常に特別ですが、リストは同期の中でブレークポイントをサポートしていないので、リストが完了していないときに同期プロセスを終了するとリストファイルのリストが次回にリストアップされます) #8.http (提供されたhttpリンクリストを介して同期されたデータですが、このオプションはsrcAccessKey、srcSecretKey、srcDomain、srcBucket、srcPrefixを記入する必要はありません) #9.cos(テンセントクラウド) #10.azure(Microsoft BLOB) rcType="S3(移行元によって上記を参考に変更 今回はS3を指定)" #ソースaccess key、ローカルファイルの同期、およびhttpアドレス同期を記入する必要はありません。ほとんどのクラウドプラットフォームは、コンソールで取得したaccess key / accss key IDを入力します。Upyunはオペレーターアカウントを入力してください。 srcAccessKey="S3のアクセスキーを記述(localからの場合は不要)" #ソースaccess key、ローカルファイルの同期、およびhttpアドレス同期を記入する必要はありません。ほとんどのクラウドプラットフォームは、コンソールで取得したsecret key/access key secret,Upyunはオペレーターパスワードを入力してください。 srcSecretKey="S3のシークレットキーを記述(localからの場合は不要)" #ソースエンドポイント、ローカルファイルの同期、およびhttpアドレス同期に記入する必要はありません #1.oss: コンソールからドメイン名(バケット接頭辞なしの第2レベルのドメイン名)を取得します。ドメイン名の一覧については、https://help.aliyun.com/document_detail/31834.html; 例:"srcDomain=http://oss-cn-hangzhou-internal.aliyuncs.com";Alibaba Cloud ECS仮想マシンを使用して内部ドメイン名を移行すると、仮想マシンの帯域幅に制限されません(非仮想マシンは使用できません)。例:http://oss-cn-hangzhou-internal.aliyuncs.com #2.七牛: 七牛コンソールからバケットのドメイン名を取得する #3.Baiduのbos: http://bj.bcebos.comまたはhttp://gz.bcebos.com #4.Kingsoftのks3: http://kss.ksyun.comまたはhttp://ks3-cn-beijing.ksyun.comまたはhttp://ks3-us-west-1.ksyun.com #5.Amazon S3: 各リージョンのアドレスについては、http://docs.aws.amazon.com/general/latest/gr/rande.html#s3_regionを参照してください。 #6.upyun: http://v0.api.upyun.com(自動的に最適なルートを決定する)またはhttp://v1.api.upyun.com(China Telecom回線)またはhttp://v2.api.upyun.com(China Unicom回線)またはhttp://v3.api.upyun.com(China Mobile TieTong回線) #7.テンセントクラウド: cos v3バージョンは記入する必要ない;cos v4バージョンはバケットリージョンを記入する必要があります。たとえば、China Southの場合:gz,China Northの場合:tj,China Eastの場合:sh #8.Microsoft blob: core.chinacloudapi.cnなどの接続文字列内のEndpointSuffix srcDomain="S3のドメイン例;http://s3.ap-northeast-1.amazonaws.com(local時は不要)" #ソースバケット名、ローカルファイル同期とhttpアドレス同期を記入する必要ない、を追加する必要はありません;Microsoft BLOBはコンテナ名を記入してください。 srcBucket="S3のバケット名を記述(local時は不要)" #ソース接頭辞、デフォルトはEmpty。srcType=localの場合、ディレクトリはローカルディレクトリであり、他のタイプの場合は、同期が必要なソースバケット内のオブジェクトの接頭辞です。ローカルディレクトリの場合、完全なディレクトリパス( '/'で区切られ、 '/'で終わります。例: c:/example/)が必要です。 srcPrefix="移行するディレクトリ名(localの場合はここのみ記述)" ##############################################################同期先設定################################################################ #目的 access key destAccessKey="OSSのアクセスキーを記述" #目的 secret key destSecretKey="OSSのシークレットキーを記述" #目的のエンドポイント、実際のOSSリージョンに応じて記入してください。デフォルトでは、杭州のドメイン名です。Alibaba Cloud ECS仮想マシンを使用して移行する場合は、内部ドメイン名を使用してください。仮想マシンの帯域幅に制限されない(非仮想マシンは使用できません)。例:http://oss-cn-hangzhou-internal.aliyuncs.com #注:ドメイン名にバケット接頭辞を含めないでください。ossドメインのヘルプページ:https://help.aliyun.com/document_detail/31837.html destDomain="OSSドメイン日本リージョン例:http://oss-ap-northeast-1.aliyuncs.com" #目的のバケット、 "/"を追加する必要はない destBucket="OSSのバケット名を記述" #ターゲット接頭辞、デフォルトはエンプティー。バケットの直後(OSSの下級ディレクトリにデータを同期させたい場合は、 '/'で終わってください)注:OSSは '/'でファイルの先頭をサポートしていません。したがって、destPrefixの設定について '/'で始まるを記入しないでください。 #ローカルファイルパスが srcPrefix + relativePathのファイル。OSSに移行するパスは、destDomain/destBucket/destPrefix + relativePathです。 #クラウドファイルパスは srcDomain/srcBucket/srcPrefix + relativePathのファイル。OSSに移行するパスは、destDomain/destBucket/destPrefix + relativePathです。 destPrefix="移行先のディレクトリ名を記述" ##############################################################srcType=cosの場合の設定項目########################################################### #テンセントクラウドのappId #appId=0 ##############################################################srcType=youpaiの場合の設定項目######################################################## #Upyunデータ移行ファイルをCDNからダウンロードするかどうか。Upyunクラウドストレージのダウンロードの動作速度の制限は、データの移行速度に影響を与えます。CDNを設定している場合は、クラウドストレージから移行されたファイルのリストを取得できます。データはCDNからダウンロードされます。 cdnHost + keyはダウンロードアドレスです。 #isDownloadFromCdn=false #cdnDomain= ##############################################################srcType=httpの場合の設定項目######################################################## #srcType="http"の場合、httpリストファイルの絶対パスを指定する必要があります。このファイルのhttpリンクは、2つの列に分割する必要があり、OSSにアップロードした後の接頭辞と相対パスを表します。 #たとえば、完全なhttpリンクは127.0.0.1/aa/bb.jpgです。異なるスライス方法は、最終的にossにアップロードするための異なるパスにつながります。 #c:/example/http.listファイルの内容: #127.0.0.1/aa/ bb.jpg #127.0.0.1/ aa/bb.jpg # OSSへのファイルの最初の行のパスは "destDomain/destBucket/destPrefix" + "bb.jpg"です。 # OSSへのファイルの2行目のパスは "destDomain/destBucket/destPrefix" + "aa/bb.jpg"です。 httpListFilePath=c:/example/http.list httpPrefixColumn=1 relativePathColumn=2 ##############################################################タスク構成、特別な要件は変更する必要ない################################################# #ジョブ名、各ジョブはユニークで、スタンドアロンモードでこの項目を変更しないでください jobName=local_test #ジョブ・タイプ(import/audit),importはデータをossに同期させ、auditはソース・データとossデータが同じかどうかを検査します。 jobType=import #ソースファイルの最後の変更時刻が今回よりも大きいデータのみをインポートします。デフォルト値は0です。この時刻は、UNIXのタイムスタンプ(秒)です。 importSince=0 #検証時にファイルの最終変更時刻が値より大きい場合、ファイルのチェックはスキップされます。デフォルト値0は関数を無効にし、すべてのファイルをチェックする必要があります。この時刻はUNIXのタイムスタンプ(秒)です。 この項目は、jobTypeがauditの場合には無効です。 lastModify=0 #データ移行中に既存のファイルをスキップするかどうか。trueに設定されている場合は、ファイルサイズとLastModifedTimeに従ってスキップするかどうかを判断します。falseの場合、OSS上の既存のファイルは常に上書きされます。 この項目は、jobTypeがauditの場合には無効です。 isSkipExistFile=true #サブタスクあたりの最大ファイル数は制限されており、タスク実行の並列度に影響します。一般的な構成はファイルの総数/ 120です。 taskObjectCountLimit=10000 #各サブタスクのダウンロードの最大ファイルサイズ制限(bytes) taskObjectSizeLimit=1000000000 #パラレルでファイルリストをスキャンするスレッドの数は、ファイルをスキャンする効率にのみ影響します。特別な要件が無ければ変更しないでください。 scanThreadCount=10000 #パラレルスキャンディレクトリの最大許容深度、デフォルトは1で、最上位のディレクトリ間でのみスキャンすることができます。特別な要件がなければ修正しないでください。任意に設定されているため、タスクが正しく実行されません。 maxMultiThreadScanDepth=1 #この値より大きいファイルは、シャードを使用してアップロードされます。それ以外の場合は通常のアップロードが使用されます。1MB以上、有効な設定値:50m / 1024m / 5g multipartUploadThreshold=150m ##アップロード時にフラグメントのサイズを割り当て、100kより大きいデータを設定してください。それ以外の場合は無効です。デフォルト値は50MB、有効な設定値は500k / 50m / 2g multipartUploadPartSize=50m #1つの大きなファイルフラグメントの同時アップロード数。大容量ファイルの場合、デフォルトは150MB以上、断片化は50MB、srcType = localは有効です。それ以外の場合、設定項目は無効です。 uploadThreadNumPerLargeFile=3 #OSSに保存されているデータは暗号化されていますか、デフォルトは暗号化されてない isServerSideEncryption=false #ローカルモードでは、リンクされたファイルがアップロードされているかどうか。デフォルトではアップロードされない isAllowSymbolicLink=false #Qiniuのクラウドストレージは、メタメソッド、ヘッドと統計値の有効値、デフォルトの使用統計値を取得し、HTTP HEADリクエストを介してBucketManager.statを通じてstat getObjectMetaMode=stat #データ移行後のデータの正確性を検証するかどうか、デフォルトは検証されます isAuditAfterImport=true #データ検証モードでは、有效值はsimple/general/detailed、デフォルト値はgeneral。simpleは、ファイルのサイズのみをチェックし、generalはファイルのsize/lastModify/headerをチエックし,detailedファイルのCRCまたはMD5をチェックし、開発中 auditMode=general
設定としては以上となります。あとはツールを実行するだけです。
OssImportを実行
OssImport実行ではjava環境が必要となりますが、立てたばかりのECSにはその環境がありませんのでインストールしておく必要があります。
# yum install -y java # java -version
今度こそ移行前の準備が終わりましたので、OSSimportを実行していきます。
# bash import.sh stat
「Clean the previous job, Yes or No:」が表示されますので、続けて「Yes」を記述してエンターキーを押してください。
submit job:/root/ossimport/conf/local_job.cfg submit job:local_test success! Start import service completed. -------------- job stats --------------- ---------------- job stat ------------------ JobName:local_test JobState:Running PendingTasks:1 DispatchedTasks:0 RunningTasks:0 SucceedTasks:0 FailedTasks:0 ScanFinished:true RunningTasks Progress: ---------------------------------------- 〜省略〜 -------------- job stats --------------- ---------------- job stat ------------------ JobName:local_test JobState:Succeed PendingTasks:0 DispatchedTasks:0 RunningTasks:0 SucceedTasks:1 FailedTasks:0 ScanFinished:true RunningTasks Progress: ---------------------------------------- Import to oss completed.
上の用にcompletedと出てくれば移行完了です。Alibaba Cloud OSSの指定したディレクトリ内にファイルが作られているはずです。
まとめ
今回はファイルサーバーやバックアップなどとして使っているストレージをAlibaba Cloudへ移行する際のツールとしてOssImportをご紹介してきました。特に難しい作業もなかったかと思います。移行元がlocalとその他クラウドサービスで少し違いが出てくるので、都度注意していただければと思います。