0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AWS Database Migration ServiceをRDBで使う前のセットアップ

0
Posted at

AWS Database Migration Service (DMS)

データベースや分析システム間のデータを安全かつ最小限のダウンタイムで移行できるサービス。
業務を止めずに安全にデータを引越しできるツール。

仕組みを簡潔に整理する

VPCの中に、レプリケーションインスタンスをたて、そのレプリケーションインスタンスを使用してソースデータストアに接続し、ソースデータを読み取り、ターゲットデータストアで使用するためにデータをフォーマットする。

主なデータ連携は3つ

  1. フルロード

    • 移行開始時点にある既存データをまとめてコピーする
  2. CDC

    • 移行開始後にソースDBで発生したデータの追加・変更・削除(差分)をリアルタイムで検知し、ターゲットDBに反映
  3. フルロードとODC

    • 既存データをフルロードで移行したあと、CDCによる差分同期を実施する

多いのが3のパターン。
既存のデータを移行しつつ、CDCとの差分を同期する。

実行までに必要なステップ

1. エンドポイントとエンジンタイプの確認

ソース(移行元)かターゲット(移行先)かを確認。MySQL、Oracle、PostgreSQL、Auroraなど、データベースの種類を指定。

2. 接続情報の確認

ホスト名(IPアドレス)、ポート、ユーザー名、パスワードなどの認証情報を指定する。

※ 以下、oracle→postgresの移行にあたって確認したことを記載します

2-1. ロールレベルの基本権限確認

スーパーユーザー権限やデータベース作成権限の有無を確認。

.sql
SELECT 
    rolname AS current_user,
    rolsuper AS is_superuser,
    rolcreatedb AS can_create_db,
    rolcreaterole AS can_create_role
FROM pg_roles
WHERE rolname = CURRENT_USER;

2-2. 対象データベースへ接続権限の確認

同期先のデータベースに対する CONNECT 権限があるか確認する

.sql
SELECT has_database_privilege(CURRENT_USER, current_database(), 'CONNECT') AS has_connect_privilege;

2-3. 対象スキーマへの権限確認

データ移行先のスキーマ(例: public や移行用スキーマ)に対する権限を確認します。

.sql
-- 'public' の部分を移行対象のスキーマ名に変更してください
SELECT 
    has_schema_privilege(CURRENT_USER, 'public', 'USAGE') AS has_usage,
    has_schema_privilege(CURRENT_USER, 'public', 'CREATE') AS has_create;

2-4. 対象テーブルの権限と所有者チェック

DMSのCDC(継続的同期)やフルロード時の制約処理では、「ユーザーが対象テーブルの所有者(Owner)であるか」 または 「ALL権限(CRUD)を持っているか」

.sql
-- 'public' の部分を移行対象のスキーマ名に変更して実行してください
SELECT 
    t.tablename,
    -- ログインユーザーがテーブル所有者か
    (t.tableowner = CURRENT_USER) AS is_owner,
    -- DML・DDL操作権限
    has_table_privilege(CURRENT_USER, quote_ident(t.schemaname) || '.' || quote_ident(t.tablename), 'SELECT') AS can_select,
    has_table_privilege(CURRENT_USER, quote_ident(t.schemaname) || '.' || quote_ident(t.tablename), 'INSERT') AS can_insert,
    has_table_privilege(CURRENT_USER, quote_ident(t.schemaname) || '.' || quote_ident(t.tablename), 'UPDATE') AS can_update,
    has_table_privilege(CURRENT_USER, quote_ident(t.schemaname) || '.' || quote_ident(t.tablename), 'DELETE') AS can_delete,
    has_table_privilege(CURRENT_USER, quote_ident(t.schemaname) || '.' || quote_ident(t.tablename), 'TRUNCATE') AS can_truncate
FROM pg_tables t
WHERE t.schemaname = 'public';

3. SSLモード

通信を暗号化するための設定です。セキュリティ要件に応じて証明書を適用する。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?