AWS DMSを使ってAuroraのデータをS3に出力(検証用)

## 前提
・利用環境：AWS
・参考アーキテクチャ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/7a0cc367-3b1b-4938-9f97-727e7962ed4d.png)

https://www.databricks.com/jp/try-databricks?scid=7018Y000001Fi15QAC&utm_medium=paid+search&utm_source=google&utm_campaign=17377047998&utm_adgroup=138148229998&utm_content=trial&utm_offer=try-databricks&utm_ad=732035937815&utm_term=databricks%20%E3%83%88%E3%83%A9%E3%82%A4%E3%82%A2%E3%83%AB&gad_source=1&gclid=CjwKCAiA8Lu9BhA8EiwAag16b8b3zbkIb3V7gp-8VUwKukXnhtVZRQ-1RY8SbETmGVgNT4bQramYmRoCX5wQAvD_BwE#account

https://aws.amazon.com/jp/free/?gclid=CjwKCAiA8Lu9BhA8EiwAag16bz9ymovIOJzlwFFMfg75NQxxY8FJPB4Hslg7RheD7ipZ5gbvOWCd1RoCyP0QAvD_BwE&trk=8a8e7906-914d-4577-93a2-d09e75ae5941&sc_channel=ps&ef_id=CjwKCAiA8Lu9BhA8EiwAag16bz9ymovIOJzlwFFMfg75NQxxY8FJPB4Hslg7RheD7ipZ5gbvOWCd1RoCyP0QAvD_BwE:G:s&s_kwcid=AL!4422!3!487544183224!e!!g!!aws%20%E7%84%A1%E6%96%99%E5%88%A9%E7%94%A8%E6%9E%A0!11772965715!117413644991&all-free-tier.sort-by=item.additionalFields.SortRank&all-free-tier.sort-order=asc&awsf.Free%20Tier%20Types=*all&awsf.Free%20Tier%20Categories=*all

## 参考
https://aws.amazon.com/jp/blogs/news/replicate-data-from-amazon-aurora-to-amazon-s3-with-aws-database-migration-service/

https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.PostgreSQL.html

https://www.cockroachlabs.com/blog/aws-dms-cdc-cockroachdb/

https://www.youtube.com/watch?v=uIqKtn2vbsU

## 目次
1. Auroraを作成
1. S3バケットを作成
1. DMSを設定

## 手順
#### 1.Auroraを作成
1)AWSから「Aurora」を検索し、「Aurora and RDS」を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/e05d25ae-7561-4b04-a3be-1f3e654ecc71.png)
2)以下のドキュメントとブログを参考にパラメータを作成

https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.PostgreSQL.html

https://www.cockroachlabs.com/blog/aws-dms-cdc-cockroachdb/

https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/Appendix.PostgreSQL.CommonDBATasks.pglogical.basic-setup.html

3)「パラメータグループ」→「パラメータグループの作成」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/f807d7d1-54f7-4281-aaf7-7c3a2ea646c0.png)
4)以下を参考に設定し、「作成」をクリック
例：
・パラメータグループ名：postgres-custompara
・説明：postgres-custompara
・エンジンのタイプ：Aurora PostgreSQL
・パラメータグループファミリー：aurora-postgresql16
・タイプ：DB Cluster Parameter Group
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/16d7288b-f031-4720-8d06-e30b54f278d5.png)
5)作成したパラメータをクリックし、「編集」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/aeb40a49-0fa9-4564-bdf8-ab3e9aabf8cb.png)
6)以下の四つのパラメータ値を編集し、「変更の保存」をクリック
rds.logical_replication：1
wal_sender_timeout：0
max_worker_processes：そのまま
shared_preload_libraries：pglogical追加（,区切り）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/89379496-044e-487c-a95c-84cd92045ba7.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/abc13ecd-adea-4cc8-92ac-bd519131e562.png)

7)「データベース」→「データベースの作成」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/52178c4f-02b8-4d9b-a343-98f30dcb3753.png)
8)以下の内容を参考に設定し、「データベースの作成」をクリック
（検証用のため、セキュリティなどゆるくしてます）
・データベースの作成方法を選択：標準作成
・エンジンのオプション：Aurora（PostgreSQL Compatible）
・テンプレート：開発/テスト
・DBクラスター識別子：ho-postgresdb
・マスターユーザー名：postgres
・認証情報管理：セルフマネージド
・マスターパスワード：手入力
・DBインスタンス：Serverless v2
・容量の範囲：0.5GiB~16GiB
・可用性と耐久性：Auroraレプリカを作成しない
・Virtual Private Cloud(VPC)：新しいVPCの作成
・DBサブネットグループ：新しいDBサブネットグループの作成
・パブリックアクセス：あり（簡単な検証のため）
・VPCセキュリティグループ：新規作成
・新しいVPCセキュリティグループ名：ho-postgresdb
・アベイラビリティーゾーン：ap-northeast-1a
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/4698479e-f81c-4d47-9a76-f1fc2a4ee960.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/e7d45741-0bd6-4a5e-9cfd-e898eea600a3.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/91b4c714-2c44-4cba-8979-6781a194046e.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/98d3b270-183d-4e12-9344-a72feb1c0f03.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/a64b2f47-cf19-4394-8f99-081fe594d6eb.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/6e3397d6-25e0-49d2-8d2e-a1f149341b7c.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/7da08206-dac0-4906-a0ae-14f75ff58c80.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/b262b3ce-4b2b-4532-beed-ca1434ea29d0.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/04704628-d8a9-413f-b387-7bca91c865ac.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/6d076f4f-5a5a-410b-9fcd-1cc7b8a7ec45.png)
追加設定で、DB クラスターのパラメータグループを上で作成したパラメータグループに変更
例：postgres-custompara
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/cbf2ebc6-c994-4e97-9cb4-998afd1f030a.png)
9)無事作成されてることを確認（数分かかる）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/157ba3fe-7f9d-4d46-a13d-1dba3d6c637e.png)
10)セキュリティグループにDMSレプリケーションインスタンスのインバウンドを許可する
「VPC」→「セキュリティグループ」で、上記で作成したセキュリティグループを開く
11)「インバウンドルール」→「インバウンドのルールを編集」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/321779b7-1327-41a5-9b25-c8e848a61b7e.png)
12)インバウンドルールを追加
・タイプ：PostgresSQL
・ソース：カスタム、VPCのプライベートIP
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/1b071b16-6026-4870-bf84-2915a540d6e3.png)
13)Auroraのエンドポイント名をコピー
作成したAuroraをクリックし、表示されるライターのエンドポイント
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/6348e1fa-fc59-40ba-b1b6-6aed2e682aa2.png)
14)DBeaverを利用して、AuroraにDBを作成する
無料ダウンロード先：

https://dbeaver.io/

15)「+」→「PostgreSQL」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/ac93d8fb-f63a-408b-9780-6f6668b62728.png)
16)「PostgreSQL」→「次へ」クリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/d833b497-2eef-4c39-b2e2-043a53312ec9.png)
17)上でコピーしたエンドポイントをhostに貼り付ける
・host：AuroraのEndpoint
・パスワードにAurora作成時設定したパスワードを入力
・☑︎Show all databases
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/32d01545-78e3-4ab0-9cc3-8d5aebecdc3b.png)
18)テスト接続をクリック
19)接続がうまくいったら、終了をクリック
20)SQLエディタを開き、データベースを作成する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/0bdcf5fd-3b54-4b90-9f9c-d483b986ae13.png)
21)データベースを作成
`create database postgresdb`
`CREATE EXTENSION pglogical`
22)スキマ、テーブルを作成し、データを入れる
#### 2.S3バケットを作成
1)S3を検索し、「S3」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/78ae09fa-2de5-4118-ab66-4b1053ead949.png)
2)「バケットを作成」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/f2af019f-dd43-453a-bd08-c4cabe55d435.png)
3)バケット名を入力し、「バケットを作成」をクリック
例：バケット名：ho-iceberg
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/dc5ddfa7-e942-496d-8338-e01139c38cd8.png)
#### 3.DMSを設定
###### 前提：dms-vpc-roleというIAMロールを作成してない場合は、以下の手順に沿って作成
https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_DMS_migration-IAM.dms-vpc-role.html

###### 1.サブネットグループを作成
1)検索からdmsを検索し、「Database Migration Service」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/d1a26c21-df12-4900-afb4-bc6796ae9d99.png)
2)ナビゲーションメニュから「サブネットグループ」→「サブネットグループの作成」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/ccb20221-5aaf-4a14-ab99-b02b92727565.png)
3)以下の情報を設定し、サブネットグループの作成
例：
・名前：ho-iceberg-subnetgroup
・説明：ho-iceberg-subnetgroup
・VPC：Auroraと同様なVPC
・サブネットの追加：上記のVPC上のサブネットを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/85fd5c2d-4c33-4a52-a309-d0c369368b8a.png)
###### 2.レプリケーションインスタンスを作成
前提：「dms-cloudwatch-logs-role」IAMロールが作成されてない場合は、以下の手順に沿って作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/9cc161ca-5c1d-4007-99b9-f311f5258ec4.png)
1)「レプリケーションインスタンス」→「レプリケーションインスタンスの作成」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/e48f224b-aa8d-4439-a44d-adf4094863ea.png)
2)以下の内容を参考に設定し、「レプリケーションインスタンスの作成」をクリック
例：
・名前：ho-instance
・インスタンスクラス：dms.t3.micro(2vCPU, 1GiB)
・レプリケーションインスタンスのための：開発またはテストワークロード（シングルAZ）
・IPv4 用仮想プライベートクラウド (VPC)：サブネットグループと同様なVPC
・レプリケーションサブネットグループ：上の手順で作成したサブネットグループ（ho-ceberg-subnetgroup）
・VPC セキュリティグループ：default
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/23b5e823-db65-4ce6-ac46-9785d2b92dd7.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/abb043e1-32d5-47bb-acec-84415e60dcdd.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/5c95d2f5-3226-4e67-9583-681ebf07a416.png)
###### 3.ソースエンドポイントを作成
1)「エンドポイント」→「エンドポイントの作成」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/9abf672e-6803-4708-a3d7-36496267c667.png)
2)下記を参考にソースエンドポイントを作成
例：
ソースエンドポイント
☑︎RDS DBインスタンスの選択
RDSインスタンス：上で作成したRDSインスタンス
☑︎アクセス情報を手動で提供する
パスワード：RDSのPostgresユーザのパスワード
データベース名：上で作成したデータベース名
レプリケーションインスタンス：上で作成したレプリケーションインスタンス
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/9420cb1f-c12f-41c1-989c-07e4342b9887.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/eaa7e440-0414-44a0-80bc-1c6b3bbcea1e.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/3ca65f72-2bbf-4872-b0fe-130519191870.png)
3)「テストの実行」をクリックし、Successfulと表示されたら、「エンドポイントの作成」をクリック
###### 4.IAMロールを作成
1)IAMロールを開く
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/f3495eb5-f936-45b6-a82a-8263447d3db4.png)
2)「ロール」→「ロールを作成」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/c696d988-1f7b-4e8c-b51d-4d55730b0718.png)
3)「AWSのサービス」→「DMS」を選択し、「次へ」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/40de942b-2a6e-4c58-bb2a-174746997330.png)
4)「AmazonS3FullAccess」を選択し、「次へ」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/e8a1106b-0b82-455d-9299-a5690f7eb8fb.png)
5)ロール名を入力し、「ロールの作成」をクリック
例：
ロール名：postgres-cdc
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/d3223f5f-7b8f-4e38-b0cc-a32a6f599931.png)
6)作成したロールのARNをコピーする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/5f24d76e-3c7b-4850-ba53-f368cd026b27.png)
###### 5.ターゲットエンドポイントを作成
1)DMS画面で「エンドポイント」→「エンドポイントの作成」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/9abf672e-6803-4708-a3d7-36496267c667.png)
2)下記を参考にターゲットエンドポイントを作成
例：
・ターゲットエンドポイント
・エンドポイント識別子：target-s3
・ターゲットエンジン：Amazon S3
・Amazon S3 bucket：Browse S3から、上で作成したバケットを選択
・IAM role for S3 bucket：Enter a IAM role ARN
・IAM role ARN：上でコピーしたARNを貼り付ける
・AddColumnName：true（ヘッダーを出力の場合、追加）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/266683df-4758-4a06-b2ec-644d13b8c27e.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/0b1f4f52-41c7-4dc6-b9d3-90ac1958e97a.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/2af14acd-8223-4412-9325-284ab5a32908.png)
Parquetファイルを出力したい場合は、以下を設定

https://repost.aws/knowledge-center/dms-s3-parquet-format

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/c4d63892-3a13-4b07-8245-3a96a4a6707a.png)


3)上で作成したレプリケーションインスタンスを選択し、「テストの実行」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/2daf8c64-67b1-45f4-bf77-7aced5233c16.png)
4)ステータスがsuccessfulと表示されたら、「エンドポイントの作成」をクリック
###### 6.DMSデータベース移行タスクを作成
1)「データベース移行タスク」→「データ移行タスクを作成」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/ba893c83-b718-4e2e-9c9b-43bb95e0b661.png)
2)以下の参考に設定し、「データ移行タスクを作成」をクリック
例：
・タスク識別子：postgres-cdc-task
・レプリケーションインスタンス：上で作成したもの
・ソースデータベースエンドポイント：上で作成したもの
・ターゲットデータベースエンドポイント：上で作成したもの
・移行タイプ：移行と複製
・ソースからターゲットへのレプリケーションをどのくらいの期間継続する予定ですか?：無制限
・ターゲットテーブル準備モード：何もしない
・選択ルール→「新しい選択ルールの追加」
    スキーマ：スキーマの入力
    ソース名：RDSで作成したスキーマ名
    ソーステーブル名：RDSで作成したテーブル名
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/4962eeca-626e-4090-a926-6c3247b2ea6b.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/ceeecd87-c4eb-4c30-a5a1-0e4c87021b05.png)
3)評価と移行の進捗を確認し、成功したら、完了
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/87e62c4a-1b4e-4c0d-8b25-f98c00bf96c7.png)
以上