[Alibaba Cloud] FunctionComputeで実現するDTS(DataTransmissionService)データ移行サービスのスケジューリング（DTS紹介編）

# まずはじめに
もし気に入っていただけたり、役に立ったらぜひ　”いいね！”　お待ちしております！^^¥

# この記事の目的
DTS（DataTransmissionService）をFunctionComputeで操り、
「データ移行」サービスを定期実行（バッチ処理）させるスクリプトをFunctionComputeで実現します。***FunctionComputeって何？***という方は前回のECSをFunctionComputeで自動停止&起動させる記事を書いているのでご参照ください。


[Function Computeで実現するECSインスタンスの起動&自動のスケジューリング
](https://qiita.com/tnoce/items/453f9a6e2fafdbe61b1f)

この記事では、まずDTSを詳しく紹介していきます。<br>2本目の記事を、FunctionComputeを利用したバッチ処理の実行編とします。



# Alibaba Cloud DTS（DataTransmissionServiceとは）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274358/22d440fa-4373-8437-2787-8be63a6c7985.png)

- Alibaba Cloudでデータベース間のデータ転送や同期ができるマネージドサービス。
  マネージドのため、インスタンスはデフォルトで冗長化されている
- RDBMSやNoSQLを含む、幅広いDBエンジンに対応している。
- SLAは99.95%
- なんと"あの"中国アリババの「独身の日」においての運用に実際使われている。
- おそらく、何万ものアプリケーション向けにリアルタイムにデータ同期する用途で使われている様子...?
- 中国では5年間順調に運用されている信頼できるプロダクトとのこと



## DTSのポイント

- 増分データのみを移行させることができる
- ホットマイグレーションが可能（DBがread, writeのステータスにかかわらず影響を与えない）
  - それによってデータ移行におけるダウンタイムが発生しない
- 高性能
  - DTSがホストされている物理サーバーは高スペックマシンが採用されているため、優れたパフォーマンスが発揮できる
  - データ移行においては、ピーク時で毎秒200,000レコードの転送が可能
  - データ同期においては、ピーク時で毎秒30,000レコードの転送が可能



## DTSにおけるマイグレーションの対応種別（2020-02-20時点）

| 種別                               | 機能                                                         | 対応DBエンジン                                               | 対応リージョン                                               | データ移行が利用できる環境                                   |
| ---------------------------------- | ------------------------------------------------------------ | :----------------------------------------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ |
| データ移行（Data Migration）       | ・スキーマ移行、完全なデータ移行、増分データ移行をサポート<br>・ダウンタイムを最小限に抑えてデータ移行をするためには、スキーマ移行、完全データ移行、増分データ移行をすべて選択すると良き<br>・異なるDBエンジン間の移行の場合、DTS側でソースDBのスキーマを読み取り、宛先DBエンジンの構文に変換してくれる<br>・すべてのデータ構造を移行するにはある程度の時間を要する。このプロセスが走るとき、増分として書き込まれたレコードは継続的に書き込まれる（ホットマイグレーションが可能）| MySQL<br>Oracle<br>PostgreSQL<br>SQLServer<br>Redis<br>MongoDB<br>DB2<br>AmazonRDS<br>AmazonAurora<br>【Alibaba系】<br>RDS, PorlaDB, MongoDB<br> | 杭州、北京、青島、深セン、上海、シリコンバレー、バージニア、シンガポール、ドバイ、フランクフルト、クアラルンプール、香港、オーストラリア、ジャカルタ、日本、インド、フフホト、ロンドン | ①Alibaba Cloud RDS<br>②オンプレミスデータベース<br>③AlibabaCloud ECSベースのデータベース |
| データ同期（Data Synchronization） | ・ソースデータベースとターゲットデータベースをリアルタイムに常時同期させることができる<br>・OLTPデータベースからOLTPデータベースへがサポートされている(※OTPL=オンライントランザクションプロセッシング)<br>・増分データのリアルタイム同期が可能<br>・①初回に初期同期 → ②その後増分データの同期という流れ<br>・ | 【ソースDB】<br>MySQL<br>Redis<br>PolarDB<br><br><br>【ターゲットDB】<br>MySQL<br>MaxCompute<br>ElasticSearch<br>AnalyticDB for PostgreSQL<br>PolarDB<br>AnalyticDB for MySQL | 【ソースDB】<br>杭州、北京、青島、深セン、上海、シリコンバレー、バージニア、シンガポール、ドバイ、フランクフルト、クアラルンプール、オーストラリア、インド、日本、ジャカルタ、フフホト、張家口、香港、ロンドン<br><br>【ターゲットDB】<br>杭州、北京、青島、深セン、上海、フフホト | ①Alibaba Cloud RDS<br/>②オンプレミスデータベース（ただしVPN必須）<br/>③AlibabaCloud ECSベースのデータベース |
| データサブスクリプション(Data Subscription)           | ・データサブスクリプションを利用すると、リアルタイムで増分データを取得することができる。<br> | MySQL                                                        | 杭州、北京、青島、深セン、上海、シリコンバレー、シンガポール | ①Alibaba Cloud RDS<br/>②オンプレミスデータベース<br/>③AlibabaCloud ECSベースのデータベース |



## FunctionComputeを利用する理由

上記表の通り、DTSには3つのサービス（機能）があります。<br>データ移行サービスが最も対応しているDBエンジンが多く、汎用的に利用できると思われますが、実は**データ移行はバッチ処理のようにスケジューリングできる機能**がありません。<br>そこで、FunctionComputeのタイムトリガー機能を利用することで、バッチ処理でデータ移行サービスを実行させることが可能になります。



## DTSの従量課金とサブスクリプションの違い

| 種別                               | 対象サービス                                            | 説明                                                         | 注意点                                                       |
| ---------------------------------- | ------------------------------------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ |
| Pay-As-You-Go(従量課金タイプ)      | ①データ移行<br>②データ同期<br>③データサブスクリプション                | ・実際の使用量に基づいて請求される<br>・時間単位で課金される<br>・短期的な利用において活用される<br>・仕様後のインスンタスをリリースすることで費用節約ができる<br>・従量課金→サブスクインスタンスへ切り替えることができる | -                                                            |
| サブスクリプション(月額固定タイプ) | ①データ移行<br>②データ同期<br>③データサブスクリプション | ・長期利用においては従量課金よりもコストが安いのでおすすめ   | ・サブスクリプションインスタンスを従量課金インスタンスへ変更することはできない<br>・サブスクが切れるまでインスタンスリリースはできない<br> |



## 利用料金の対象


| 種別                               | 課金対象アイテム                                             | 請求ルール                                                   | 注意点                                                       | 費用（/時間）※杭州リージョンの場合                           |
| ---------------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ |
| データ移行（Data Migration）       | ①データ移行インスタンス<br><br>②インターネットのトラフィック料金 | ①時間課金。また、増分データの移行が進行中の場合（増分データの移行が一時停止されている期間を含む）が請求対象となる。スキーマの行こうと完全なデータ移行については課金されない<br><br>②アウトバウンドトラフィックのみ課金がされる。つまり、Alibaba Cloudから外に出るときの通信に課金が発生する。実際のチャージは実際の通信に準じる。 | ・増分データ移行が失敗した時間は、料金発生しない<br>・アウトバウンドトラフィックは1GBが最低課金単位。500MBの通信であっても1GB分の料金が課金される | small：0.158ドル<br>medium：0.287ドル<br>large：0.462ドル<br>xlarge：0.846ドル<br>2xlarge：1.502ドル |
| データ同期（Data Synchronization） | ①データ同期インスタンス                                      | ①時間課金。設定が完了しデータ同期インスタンスが実行されると、請求が開始される。（インスタンスが一時停止されている期間も時間課金が発生）<br><br>②サブスクリプション課金 | -                                                            | small：0.158ドル<br/>medium：0.287ドル<br/>large：0.462ドル<br/>xlarge：0.846ドル<br/>2xlarge：1.502ドル |
| データサブスクリプション           | ①データサブスクリプションインタンス                          | ①時間課金。設定が完了しデータサブスクリプションインスタンスが実行されると、請求が開始される。（インスタンスが一時停止されている期間も時間課金が発生）<br><br>②サブスクリプション課金 | -                                                            | 0.46ドル                                                     |



## DTSのコンソール画面
今回はAlibaba Cloudのインターナショナルサイト（国際サイト）ベースで見ていきます。<br>データベース系プロダクトの中にあります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274358/8fb26de5-c02a-9cb9-e88d-9cd2a1f7c293.png)

DTSのトップページです。<br>左のペインでも、真ん中のアイコンどちらからでもそれぞれのサービスページに遷移可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274358/f059f176-d95a-8b3c-35f6-59843e81f702.png)

例えばデータ移行サービスに遷移してみると、移行タスクが起動できるリージョン一覧が表示されます。<br>注意するべきポイントとして、Alibaba Cloud RDSなどをソース or ターゲットインスタンスとして選択したい場合は、RDSが存在するリージョンのタスクインスタンスを作成する必要があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274358/825d150e-ca1f-8141-5b37-ce7c3b594de0.png)

操作ログ画面です。<br>タスクを実行したログなどがここに出ます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274358/e6a23200-eed2-19f2-9df2-6dd63075d1dd.png)


# 最後に
取り急ぎDTSの説明を行いました。<br>次は実際にFunctionComputeを使ったDTSのデータ移行サービスのバッチ処理編を投稿しようと思います。