

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Target migrasi data
<a name="CHAP_Target"></a>

AWS Database Migration Service (AWS DMS) dapat menggunakan banyak database paling populer sebagai target replikasi data. Target dapat berada di instans Amazon Elastic Compute Cloud (Amazon EC2), instans Amazon Relational Database Service (Amazon RDS), atau database lokal. 

Untuk daftar target valid selengkapnya, lihat [Target untuk AWS DMS](CHAP_Introduction.Targets.md).

**catatan**  
AWS DMS tidak mendukung migrasi lintas AWS Wilayah untuk jenis titik akhir target berikut:  
Amazon DynamoDB
 OpenSearch Layanan Amazon
Amazon Kinesis Data Streams
Amazon Aurora PostgreSQL Limitless tersedia sebagai target untuk (). AWS Database Migration Service AWS DMS Untuk informasi selengkapnya lihat [Menggunakan database PostgreSQL](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.PostgreSQL.html) sebagai target. AWS Database Migration Service

**Topics**
+ [Menggunakan database Oracle sebagai target untuk AWS Database Migration Service](CHAP_Target.Oracle.md)
+ [Menggunakan database Microsoft SQL Server sebagai target AWS Database Migration Service](CHAP_Target.SQLServer.md)
+ [Menggunakan database PostgreSQL sebagai target untuk AWS Database Migration Service](CHAP_Target.PostgreSQL.md)
+ [Menggunakan database yang kompatibel dengan MySQL sebagai target untuk AWS Database Migration Service](CHAP_Target.MySQL.md)
+ [Menggunakan database Amazon Redshift sebagai target AWS Database Migration Service](CHAP_Target.Redshift.md)
+ [Menggunakan database SAP ASE sebagai target AWS Database Migration Service](CHAP_Target.SAP.md)
+ [Menggunakan Amazon S3 sebagai target untuk AWS Database Migration Service](CHAP_Target.S3.md)
+ [Menggunakan database Amazon DynamoDB sebagai target AWS Database Migration Service](CHAP_Target.DynamoDB.md)
+ [Menggunakan Amazon Kinesis Data Streams sebagai target AWS Database Migration Service](CHAP_Target.Kinesis.md)
+ [Menggunakan Apache Kafka sebagai target AWS Database Migration Service](CHAP_Target.Kafka.md)
+ [Menggunakan kluster OpenSearch Layanan Amazon sebagai target AWS Database Migration Service](CHAP_Target.Elasticsearch.md)
+ [Menggunakan Amazon DocumentDB sebagai target AWS untuk Database Migration Service](CHAP_Target.DocumentDB.md)
+ [Menggunakan Amazon Neptunus sebagai target AWS Database Migration Service](CHAP_Target.Neptune.md)
+ [Menggunakan Redis OSS sebagai target AWS Database Migration Service](CHAP_Target.Redis.md)
+ [Menggunakan Babelfish sebagai target AWS Database Migration Service](CHAP_Target.Babelfish.md)
+ [Menggunakan Amazon Timestream sebagai target untuk AWS Database Migration Service](CHAP_Target.Timestream.md)
+ [Menggunakan Amazon RDS untuk Db2 dan IBM Db2 LUW sebagai target AWS DMS](CHAP_Target.DB2.md)

# Menggunakan database Oracle sebagai target untuk AWS Database Migration Service
<a name="CHAP_Target.Oracle"></a>

Anda dapat memigrasikan data ke target database Oracle menggunakan AWS DMS, baik dari database Oracle lain atau dari salah satu database lain yang didukung. Anda dapat menggunakan Lapisan Soket Aman (SSL) untuk mengenkripsi koneksi antara titik akhir Oracle dan instans replikasi. Untuk informasi lebih lanjut tentang menggunakan SSL dengan endpoint Oracle, lihat. [Menggunakan SSL dengan AWS Database Migration Service](CHAP_Security.SSL.md) AWS DMS juga mendukung penggunaan enkripsi data transparan Oracle (TDE) untuk mengenkripsi data saat istirahat di database target karena Oracle TDE tidak memerlukan kunci enkripsi atau kata sandi untuk menulis ke database.

Untuk informasi tentang versi Oracle yang AWS DMS mendukung sebagai target, lihat[Target untuk AWS DMS](CHAP_Introduction.Targets.md). 

Ketika Anda menggunakan Oracle sebagai target, kami berasumsi bahwa data tersebut akan dimigrasi ke dalam skema atau pengguna yang digunakan sebagai koneksi target. Jika Anda ingin melakukan migrasi data ke skema yang berbeda, lakukan dengan menggunakan transformasi skema. Contohnya, anggaplah titik akhir target Anda terhubung ke pengguna `RDSMASTER` dan Anda ingin melakukan migrasi dari pengguna `PERFDATA1` ke `PERFDATA2`. Dalam situasi ini buatlah transformasi seperti contoh berikut.

```
{
   "rule-type": "transformation",
   "rule-id": "2",
   "rule-name": "2",
   "rule-action": "rename",
   "rule-target": "schema",
   "object-locator": {
   "schema-name": "PERFDATA1"
},
"value": "PERFDATA2"
}
```

Saat menggunakan Oracle sebagai target, AWS DMS memigrasikan semua tabel dan indeks ke tabel default dan indeks ruang tabel di target. Jika Anda ingin melakukan migrasi tabel dan indeks ke tabel dan tablespace indeks yang berbeda, lakukan dengan menggunakan tranformasi tablespace. Contohnya, anggaplah Anda memiliki seperangkat tabel di skema `INVENTORY` yang ditetapkan untuk beberapa tablespace dalam sumber Oracle. Untuk migrasi, Anda ingin menetapkan semua tabel ini untuk satu tablespace `INVENTORYSPACE` di dalam target. Dalam situasi ini, buat transformasi seperti berikut.

```
{
   "rule-type": "transformation",
   "rule-id": "3",
   "rule-name": "3",
   "rule-action": "rename",
   "rule-target": "table-tablespace",
   "object-locator": {
      "schema-name": "INVENTORY",
      "table-name": "%",
      "table-tablespace-name": "%"
   },
   "value": "INVENTORYSPACE"
}
```

Untuk informasi lebih lanjut tentang transformasi, lihat [Menentukan pemilihan tabel dan transformasi aturan menggunakan JSON](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.md).

Jika Oracle berperan sebagai sumber dan target, Anda dapat mempertahankan tabel atau penugasan tablespace indeks yang ada dengan mengatur atribut koneksi tambahan sumber Oracle, `enableHomogenousTablespace=true`. Untuk informasi selengkapnya, lihat [Pengaturan titik akhir saat menggunakan Oracle sebagai sumber AWS DMS](CHAP_Source.Oracle.md#CHAP_Source.Oracle.ConnectionAttrib)

Untuk detail tambahan tentang bekerja dengan database Oracle sebagai target AWS DMS, lihat bagian berikut: 

**Topics**
+ [Keterbatasan pada Oracle sebagai target untuk AWS Database Migration Service](#CHAP_Target.Oracle.Limitations)
+ [Hak akun pengguna diperlukan untuk menggunakan Oracle sebagai target](#CHAP_Target.Oracle.Privileges)
+ [Mengkonfigurasi database Oracle sebagai target untuk AWS Database Migration Service](#CHAP_Target.Oracle.Configuration)
+ [Pengaturan titik akhir saat menggunakan Oracle sebagai target AWS DMS](#CHAP_Target.Oracle.ConnectionAttrib)
+ [Target tipe data untuk Oracle](#CHAP_Target.Oracle.DataTypes)

## Keterbatasan pada Oracle sebagai target untuk AWS Database Migration Service
<a name="CHAP_Target.Oracle.Limitations"></a>

Keterbatasan saat menggunakan Oracle sebagai target untuk migrasi data meliputi hal berikut:
+ AWS DMS tidak membuat skema pada database Oracle target. Anda harus membuat skema yang Anda inginkan di target basis data Oracle. Nama skema harus sudah ada untuk target Oracle. Tabel dari skema sumber diimpor ke pengguna atau skema, yang AWS DMS digunakan untuk terhubung ke instance target. Untuk memigrasikan beberapa skema, Anda dapat membuat beberapa tugas replikasi. Anda juga dapat memigrasikan data ke skema yang berbeda pada target. Untuk melakukan ini, Anda perlu menggunakan aturan transformasi skema pada pemetaan AWS DMS tabel.
+ AWS DMS tidak mendukung `Use direct path full load` opsi untuk tabel dengan INDEXTYPE CONTEXT. Sebagai solusi, Anda dapat menggunakan beban array. 
+ Dengan pilihan penerapan batch yang dioptimalkan, memuat ke tabel net changes akan melalui jalur langsung yang tidak mendukung tipe XML. Sebagai solusi, Anda dapat menggunakan mode penerapan transaksional.
+ String kosong yang dimigrasi dari basis data sumber dapat diperlakukan berbeda oleh target Oracle (contoh: dikonversi ke string satu ruang). Hal ini dapat mengakibatkan AWS DMS validasi melaporkan ketidakcocokan.
+ Anda dapat mengekspresikan jumlah kolom per tabel yang didukung dalam mode penerapan yang dioptimalkan oleh Batch, menggunakan rumus berikut:

  ```
  2 * columns_in_original_table + columns_in_primary_key <= 999
  ```

  Misalnya, jika tabel asli memiliki 25 kolom dan Kunci Primernya terdiri dari 5 kolom, maka jumlah kolom adalah 55. Jika tabel melebihi jumlah kolom yang didukung, maka semua perubahan diterapkan dalam one-by-one mode.
+ AWS DMS tidak mendukung Autonomous DB di Oracle Cloud Infrastructure (OCI).
+ Dalam mode penerapan transaksional, target Oracle dapat memproses pernyataan DHTML hingga 32 KB. Meskipun batas ini cukup untuk banyak kasus penggunaan, pernyataan DHTML melebihi 32 KB akan gagal dengan kesalahan: “ORA-01460: konversi yang tidak diterapkan atau tidak masuk akal diminta.” Untuk mengatasi masalah ini, Anda harus mengaktifkan fitur penerapan batch dengan menyetel pengaturan `BatchApplyEnabled` tugas ke`true`. Batch apply mengurangi ukuran pernyataan keseluruhan, memungkinkan Anda untuk melewati batasan 32 KB. Untuk informasi selengkapnya, lihat [Menargetkan pengaturan tugas metadata](CHAP_Tasks.CustomizingTasks.TaskSettings.TargetMetadata.md).
+ AWS DMS Beban penuh jalur langsung untuk tabel LOB mungkin gagal dengan kesalahan ORA-39777 karena persyaratan penanganan khusus untuk data LOB. Kesalahan ini terjadi selama proses pemuatan jalur langsung dan dapat mengganggu tugas migrasi yang melibatkan kolom LOB. Untuk mengatasinya, nonaktifkan `useDirectPathFullLoad` pengaturan pada titik akhir target dan coba lagi operasi beban.

## Hak akun pengguna diperlukan untuk menggunakan Oracle sebagai target
<a name="CHAP_Target.Oracle.Privileges"></a>

Untuk menggunakan target Oracle dalam AWS Database Migration Service tugas, berikan hak istimewa berikut dalam database Oracle. Anda memberikan itu pada akun pengguna yang telah ditentukan dalam definisi basis data Oracle untuk AWS DMS.
+ SELECT ANY TRANSACTION 
+ SELECT on V\$1NLS\$1PARAMETERS 
+ SELECT on V\$1TIMEZONE\$1NAMES 
+ SELECT on ALL\$1INDEXES 
+ SELECT on ALL\$1OBJECTS 
+ SELECT on DBA\$1OBJECTS
+ SELECT on ALL\$1TABLES 
+ SELECT on ALL\$1USERS 
+ SELECT on ALL\$1CATALOG 
+ SELECT on ALL\$1CONSTRAINTS 
+ SELECT on ALL\$1CONS\$1COLUMNS 
+ SELECT on ALL\$1TAB\$1COLS 
+ SELECT on ALL\$1IND\$1COLUMNS 
+ DROP ANY TABLE 
+ SELECT ANY TABLE
+ INSERT ANY TABLE 
+ UPDATE ANY TABLE
+ CREATE ANY VIEW
+ DROP ANY VIEW
+ CREATE ANY PROCEDURE
+ ALTER ANY PROCEDURE
+ DROP ANY PROCEDURE
+ CREATE ANY SEQUENCE
+ ALTER ANY SEQUENCE
+ DROP ANY SEQUENCE 
+ HAPUS TABEL APA PUN

Untuk persyaratan berikut, berikan tambahan hak istimewa tambahan:
+ Untuk menggunakan daftar tabel tertentu, berikan SELECT pada setiap tabel yang direplikasi dan ALTER pada setiap tabel yang direplikasi.
+ Untuk mengizinkan pengguna membuat tabel di tablespace default, berikan hak GRANT UNLIMITED TABLESPACE.
+ Untuk masuk, berikan hak CREATE SESSION.
+ Jika Anda menggunakan jalur langsung (yang merupakan default untuk beban penuh),`GRANT LOCK ANY TABLE to dms_user;`.
+ Jika skema berbeda saat menggunakan mode persiapan tabel “DROP and CREATE”,. `GRANT CREATE ANY INDEX to dms_user;`
+ Untuk beberapa skenario beban penuh, Anda dapat memilih pilihan “DROP and CREATE table” atau “TRUNCATE before loading” ketika skema target tabel berbeda dari target pengguna DMS. Dalam kasus ini, berikan hak DROP ANY TABLE.
+ Untuk menyimpan perubahan dalam tabel perubahan atau tabel audit yang skema table targetnya berbeda dengan pengguna DMS, berikan CREATE ANY TABLE dan CREATE ANY INDEX.
+ Untuk memvalidasi kolom LOB dengan fitur validasi, berikan EXECUTE privelege ke pengguna DMS. `SYS.DBMS_CRYPTO`

### Hak istimewa baca yang diperlukan untuk AWS Database Migration Service basis data target
<a name="CHAP_Target.Oracle.Privileges.Read"></a>

Akun AWS DMS pengguna harus diberikan izin baca untuk tabel DBA berikut:
+ SELECT on DBA\$1USERS
+ SELECT on DBA\$1TAB\$1PRIVS
+ SELECT on DBA\$1OBJECTS
+ SELECT on DBA\$1SYNONYMS
+ SELECT on DBA\$1SEQUENCES
+ SELECT on DBA\$1TYPES
+ SELECT on DBA\$1INDEXES
+ SELECT on DBA\$1TABLES
+ SELECT on DBA\$1TRIGGERS
+ PILIH pada SYS.DBA\$1REGISTRY

Jika salah satu hak yang diperlukan tidak dapat diberikan kepada V\$1xxx, maka berikan hak tersebut pada V\$1\$1xxx.

### Penilaian Premigrasi
<a name="CHAP_Target.Oracle.Privileges.Premigration"></a>

Untuk menggunakan penilaian premi yang tercantum [Penilaian Oracle](CHAP_Tasks.AssessmentReport.Oracle.md) dengan Oracle sebagai Target, Anda harus menambahkan izin berikut ke akun pengguna yang ditentukan dalam titik akhir target database Oracle:

```
GRANT SELECT ON V_$INSTANCE TO dms_user;
GRANT EXECUTE ON SYS.DBMS_XMLGEN TO dms_user;
```

## Mengkonfigurasi database Oracle sebagai target untuk AWS Database Migration Service
<a name="CHAP_Target.Oracle.Configuration"></a>

Sebelum menggunakan database Oracle sebagai target migrasi data, Anda harus memberikan akun pengguna Oracle. AWS DMS Akun pengguna harus memiliki read/write hak istimewa pada database Oracle, seperti yang ditentukan dalam. [Hak akun pengguna diperlukan untuk menggunakan Oracle sebagai target](#CHAP_Target.Oracle.Privileges)

## Pengaturan titik akhir saat menggunakan Oracle sebagai target AWS DMS
<a name="CHAP_Target.Oracle.ConnectionAttrib"></a>

Anda dapat menggunakan pengaturan endpoint untuk mengkonfigurasi database target Oracle Anda mirip dengan menggunakan atribut koneksi tambahan. Anda menentukan pengaturan saat Anda membuat titik akhir target menggunakan AWS DMS konsol, atau dengan menggunakan `create-endpoint` perintah di [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html), dengan sintaks `--oracle-settings '{"EndpointSetting": "value", ...}'` JSON.

Tabel berikut menunjukkan pengaturan endpoint yang dapat Anda gunakan dengan Oracle sebagai target.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/dms/latest/userguide/CHAP_Target.Oracle.html)

## Target tipe data untuk Oracle
<a name="CHAP_Target.Oracle.DataTypes"></a>

Database Oracle target yang digunakan dengan AWS DMS mendukung sebagian besar tipe data Oracle. Tabel berikut menunjukkan tipe data target Oracle yang didukung saat menggunakan AWS DMS dan pemetaan default dari tipe AWS DMS data. Untuk informasi lebih lanjut tentang cara melihat tipe data yang dipetakan dari sumber, lihat di bagian sumber yang Anda gunakan.


|  AWS DMS tipe data  |  Tipe data Oracle  | 
| --- | --- | 
|  BOOLEAN  |  NUMBER (1)  | 
|  BYTES  |  RAW (length)  | 
|  DATE  |  DATETIME  | 
|  TIME  | TIMESTAMP (0) | 
|  DATETIME  |  TIMESTAMP (scale)  | 
|  INT1  | NUMBER (3) | 
|  INT2  |  NUMBER (5)  | 
|  INT4  | NUMBER (10) | 
|  INT8  |  NUMBER (19)  | 
|  NUMERIC  |  NUMBER (p,s)  | 
|  REAL4  |  FLOAT  | 
|  REAL8  | FLOAT | 
|  STRING  |  Dengan indikasi tanggal: DATE  Dengan indikasi waktu: TIMESTAMP  Dengan indikasi timestamp: TIMESTAMP  Dengan indikasi timestamp\$1with\$1timezone: TIMESTAMP WITH TIMEZONE  Dengan indikasi timestamp\$1with\$1local\$1timezone: TIMESTAMP WITH LOCAL TIMEZONE. Dengan indikasi interval\$1year\$1to\$1month: INTERVAL YEAR TO MONTH  Dengan indikasi interval\$1day\$1to\$1second: INTERVAL DAY TO SECOND  Jika panjang > 4000: CLOB Dalam semua kasus lain: VARCHAR2 (panjang)  | 
|  UINT1  |  NUMBER (3)  | 
|  UINT2  |  NUMBER (5)  | 
|  UINT4  |  NUMBER (10)  | 
|  UINT8  |  NUMBER (19)  | 
|  WSTRING  |  Jika panjang > 2000: NCLOB Dalam semua kasus lain: NVARCHAR2 (panjang)  | 
|  BLOB  |  BLOB Untuk menggunakan tipe data ini AWS DMS, Anda harus mengaktifkan penggunaan BLOBs untuk tugas tertentu. Tipe data BLOB hanya didukung dalam tabel yang memiliki kunci primer  | 
|  CLOB  |  CLOB Untuk menggunakan tipe data ini AWS DMS, Anda harus mengaktifkan penggunaan CLOBs untuk tugas tertentu. Selama perubahan pengambilan data (CDC), tipe data CLOB didukung hanya dalam tabel yang memiliki kunci primer. STRING Tipe VARCHAR2 data Oracle pada sumber dengan ukuran yang dinyatakan lebih besar dari 4000 byte memetakan melalui AWS DMS CLOB ke STRING pada target Oracle.  | 
|  NCLOB  |  NCLOB Untuk menggunakan tipe data ini AWS DMS, Anda harus mengaktifkan penggunaan NCLOBs untuk tugas tertentu. Selama CDC berjalan, tipe data NCLOB hanya didukung di dalam tabel yang mencakup kunci primer. WSTRING Tipe VARCHAR2 data Oracle pada sumber dengan ukuran yang dinyatakan lebih besar dari 4000 byte memetakan melalui AWS DMS NCLOB ke WSTRING pada target Oracle.   | 
| XMLTYPE |  Tipe data target XMLTYPE hanya relevan dalam tugas Oracle-to-Oracle replikasi. Ketika Oracle digunakan sebagai sumber basis data, tipe data sumber direplikasi apa adanya pada target Oracle. Contohnya sebuah tipe data XMLTYPE pada sumber dibuat sebagai tipe data XMLTYPE pada target.  | 

# Menggunakan database Microsoft SQL Server sebagai target AWS Database Migration Service
<a name="CHAP_Target.SQLServer"></a>

Anda dapat memigrasikan data ke database Microsoft SQL Server menggunakan. AWS DMS Dengan basis data SQL Server sebagai target, Anda dapat memigrasi data dari basis data SQL Server lain atau salah satu basis data didukung lainnya.

Untuk informasi tentang versi SQL Server yang AWS DMS mendukung sebagai target, lihat[Target untuk AWS DMS](CHAP_Introduction.Targets.md). 

AWS DMS mendukung edisi lokal dan Amazon RDS Enterprise, Standard, Workgroup, dan Developer.

Untuk detail tambahan tentang bekerja dengan AWS DMS dan database target SQL Server, lihat berikut ini.

**Topics**
+ [Keterbatasan dalam menggunakan SQL Server sebagai target AWS Database Migration Service](#CHAP_Target.SQLServer.Limitations)
+ [Persyaratan keamanan saat menggunakan SQL Server sebagai target AWS Database Migration Service](#CHAP_Target.SQLServer.Security)
+ [Pengaturan titik akhir saat menggunakan SQL Server sebagai target AWS DMS](#CHAP_Target.SQLServer.ConnectionAttrib)
+ [Jenis data target untuk Microsoft SQL Server](#CHAP_Target.SQLServer.DataTypes)

## Keterbatasan dalam menggunakan SQL Server sebagai target AWS Database Migration Service
<a name="CHAP_Target.SQLServer.Limitations"></a>

Batasan berikut berlaku saat menggunakan basis data SQL Server sebagai sumber untuk AWS DMS:
+ Ketika Anda membuat tabel target SQL Server secara manual dengan kolom terkomputasi, maka penggunaan utilitas salinan massal BCP tidak mendukung replikasi beban penuh. Untuk menggunakan replikasi beban penuh, nonaktifkan pemuatan BCP dengan menyetel atribut koneksi tambahan (ECA) `'useBCPFullLoad=false'` pada titik akhir. Untuk informasi tentang pengaturan ECAs pada titik akhir, lihat[Membuat titik akhir sumber dan target](CHAP_Endpoints.Creating.md). Untuk informasi lebih lanjut tentang bekerja menggunakan BCP, lihat [dokumentasi Microsoft SQL Server.](https://docs.microsoft.com/en-us/sql/relational-databases/import-export/import-and-export-bulk-data-by-using-the-bcp-utility-sql-server)
+ Saat mereplikasi tabel dengan tipe data spasial SQL Server (GEOMETRI dan GEOGRAFI), AWS DMS ganti pengenal referensi spasial (SRID) apa pun yang mungkin telah Anda masukkan dengan SRID default. SRID default adalah 0 untuk GEOMETRY dan 4326 untuk GEOGRAPHY.
+ Tidak mendukung tabel sementara. Migrasi tabel temporal dapat bekerja dengan tugas yang hanya terdiri dari replikasi saja dalam mode penerapan transaksional jika tabel tersebut dibuat secara manual pada target.
+ Saat ini, tipe `boolean` data dalam sumber PostgreSQL dimigrasikan ke target sebagai `bit` tipe data dengan nilai SQLServer yang tidak konsisten. 

  Sebagai solusinya, lakukan hal berikut:
  + Buat tabel dengan tipe `VARCHAR(1)` data untuk kolom (atau biarkan AWS DMS membuat tabel). Kemudian buatlah pemrosesan hilir memperlakukan “F” sebagai False dan “T” sebagai True.
  + Untuk menghindari keharusan mengubah pemrosesan hilir, tambahkan aturan transformasi ke tugas untuk mengubah nilai “F” menjadi “0" dan “T” menjadi 1, dan simpan sebagai tipe data bit server SQL.
+ AWS DMS tidak mendukung pemrosesan perubahan untuk mengatur nullabilitas kolom (menggunakan `ALTER COLUMN [SET|DROP] NOT NULL` klausa dengan pernyataan). `ALTER TABLE`
+ Autentikasi Windows tidak didukung.

## Persyaratan keamanan saat menggunakan SQL Server sebagai target AWS Database Migration Service
<a name="CHAP_Target.SQLServer.Security"></a>

Berikut ini menjelaskan persyaratan keamanan untuk menggunakan AWS DMS dengan target Microsoft SQL Server:
+ Akun AWS DMS pengguna harus memiliki setidaknya peran `db_owner` pengguna pada database SQL Server yang Anda sambungkan.
+ Administrator sistem SQL Server harus memberikan izin ini untuk semua akun pengguna AWS DMS .

## Pengaturan titik akhir saat menggunakan SQL Server sebagai target AWS DMS
<a name="CHAP_Target.SQLServer.ConnectionAttrib"></a>

Anda dapat menggunakan pengaturan endpoint untuk mengkonfigurasi database target SQL Server Anda mirip dengan menggunakan atribut koneksi tambahan. Anda menentukan pengaturan saat Anda membuat titik akhir target menggunakan AWS DMS konsol, atau dengan menggunakan `create-endpoint` perintah di [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html), dengan sintaks `--microsoft-sql-server-settings '{"EndpointSetting": "value", ...}'` JSON.

Tabel berikut menunjukkan pengaturan endpoint yang dapat Anda gunakan dengan SQL Server sebagai target.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/dms/latest/userguide/CHAP_Target.SQLServer.html)

## Jenis data target untuk Microsoft SQL Server
<a name="CHAP_Target.SQLServer.DataTypes"></a>

Tabel berikut menunjukkan tipe data target Microsoft SQL Server yang didukung saat menggunakan AWS DMS dan pemetaan default dari tipe AWS DMS data. Untuk informasi tambahan tentang tipe AWS DMS data, lihat[Tipe data untuk AWS Database Migration Service](CHAP_Reference.DataTypes.md).


|  AWS DMS tipe data  |  Tipe data SQL Server  | 
| --- | --- | 
|  BOOLEAN  |  TINYINT  | 
|  BYTES  |  VARBINARY(length)  | 
|  DATE  |  Untuk SQL Server 2008 dan yang lebih tinggi, gunakan DATE. Untuk versi sebelumnya, jika skalanya 3 atau kurang, gunakan DATETIME. Selain itu gunakan VARCHAR (37).  | 
|  TIME  |  Untuk SQL Server 2008 dan yang lebih tinggi, gunakan DATETIME2 (%d). Untuk versi sebelumnya, jika skalanya 3 atau kurang, gunakan DATETIME. Selain itu gunakan VARCHAR (37).  | 
|  DATETIME  |  Untuk SQL Server 2008 dan yang lebih tinggi, gunakan DATETIME2 (skala).  Untuk versi sebelumnya, jika skalanya 3 atau kurang, gunakan DATETIME. Selain itu gunakan VARCHAR (37).  | 
|  INT1  | SMALLINT | 
|  INT2  |  SMALLINT  | 
|  INT4  | INT | 
|  INT8  |  BIGINT  | 
|  NUMERIC  |  NUMERIC (p,s)  | 
|  REAL4  |  REAL  | 
|  REAL8  | FLOAT | 
|  STRING  |  Jika kolom berupa kolom tanggal atau waktu, lakukan hal berikut:  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/dms/latest/userguide/CHAP_Target.SQLServer.html) Jika kolom bukan berupa kolom tanggal atau waktu, gunakan VARCHAR (length).  | 
|  UINT1  |  TINYINT  | 
|  UINT2  |  SMALLINT  | 
|  UINT4  |  INT  | 
|  UINT8  |  BIGINT  | 
|  WSTRING  |  NVARCHAR (length)  | 
|  BLOB  |  VARBINARY(max) IMAGE Untuk menggunakan tipe data ini AWS DMS, Anda harus mengaktifkan penggunaan BLOBs untuk tugas tertentu. AWS DMS mendukung tipe data BLOB hanya dalam tabel yang menyertakan kunci utama.  | 
|  CLOB  |  VARCHAR(max) Untuk menggunakan tipe data ini AWS DMS, Anda harus mengaktifkan penggunaan CLOBs untuk tugas tertentu. Selama perubahan penangkapan data (CDC) berjalan, AWS DMS mendukung tipe data CLOB hanya dalam tabel dengan kunci primer.  | 
|  NCLOB  |  NVARCHAR(max) Untuk menggunakan tipe data ini AWS DMS, Anda harus mengaktifkan penggunaan NCLOBs untuk tugas tertentu. Selama CDC, AWS DMS mendukung tipe data NCLOB hanya dalam tabel yang menyertakan kunci utama.  | 

# Menggunakan database PostgreSQL sebagai target untuk AWS Database Migration Service
<a name="CHAP_Target.PostgreSQL"></a>

Anda dapat memigrasikan data ke database PostgreSQL AWS DMS menggunakan, baik dari database PostgreSQL lain atau dari salah satu database lain yang didukung. 

Untuk informasi tentang versi PostgreSQL AWS DMS yang mendukung sebagai target, lihat. [Target untuk AWS DMS](CHAP_Introduction.Targets.md)

**catatan**  
Amazon Aurora Serverless tersedia sebagai target Amazon Aurora dengan kompatibilitas PostgreSQL. *Untuk informasi selengkapnya tentang Amazon Aurora Tanpa Server, lihat Menggunakan Amazon [Aurora Tanpa Server v2 di Panduan Pengguna Amazon Aurora](https://docs.aws.amazon.com//AmazonRDS/latest/AuroraUserGuide/aurora-serverless-v2.html).*
Klaster DB Aurora Nirserver hanya dapat diakses dari Amazon VPC dan tidak dapat menggunakan [alamat IP publik](https://docs.aws.amazon.com//AmazonRDS/latest/AuroraUserGuide/aurora-serverless-v2.requirements.html). Jadi jika Anda ingin memiliki instans replikasi di wilayah yang berbeda dari Aurora PostgreSQL Nirserver, Anda harus mengonfigurasi [peering VPC](https://docs.aws.amazon.com//dms/latest/userguide/CHAP_ReplicationInstance.VPC.html#CHAP_ReplicationInstance.VPC.Configurations.ScenarioVPCPeer). Jika tidak, periksa ketersediaan [Wilayah](https://docs.aws.amazon.com//AmazonRDS/latest/AuroraUserGuide/Concepts.AuroraFeaturesRegionsDBEngines.grids.html#Concepts.Aurora_Fea_Regions_DB-eng.Feature.Serverless) Aurora PostgreSQL Nirserver, dan putuskan untuk menggunakan salah satu wilayah tersebut untuk Aurora PostgreSQL Nirserver dan instans replikasi Anda.
Kemampuan Babelfish dibangun ke Amazon Aurora dan tidak memiliki biaya tambahan. Untuk informasi lebih lanjut, lihat [Menggunakan Babelfish untuk Aurora PostgreSQL](#CHAP_Target.PostgreSQL.Babelfish) sebagai target. AWS Database Migration Service

AWS DMS mengambil table-by-table pendekatan saat memigrasikan data dari sumber ke target dalam fase Full Load. Urutan tabel selama fase beban penuh tidak terjamin. Tabel tidak sinkron selama fase beban penuh dan saat penerapan transaksi yang di-cache untuk masing-masing tabel. Akibatnya, kendala integritas referensial aktif dapat mengakibatkan gagal tugas selama fase beban penuh.

Dalam PostgreSQL, foreign key (kendala integritas referensial) diimplementasikan menggunakan pemicu. Selama fase beban penuh, AWS DMS muat setiap tabel satu per satu. Kami sangat menyarankan Anda nonaktifkan pembatasan kunci asing selama beban penuh dengan menggunakan salah satu metode berikut:
+ Nonaktifkan sementara semua pemicu dari instans, dan selesaikan beban penuh.
+ Gunakan parameter `session_replication_role` di PostgreSQL.

Sewaktu-waktu, pemicu dapat berada di salah satu kondisi berikut: `origin`, `replica`, `always`, atau `disabled`. Saat parameter `session_replication_role` diatur ke `replica`, hanya pemicu dalam kondisi `replica` yang aktif, dan akan dipicu saat dipanggil. Jika tidak, pemicu tetap tidak aktif. 

PostgreSQL memiliki mekanisme failsafe untuk mencegah tabel terpotong, bahkan ketika `session_replication_role` sudah diatur. Anda dapat menggunakan ini sebagai alternatif untuk menonaktifkan pemicu, untuk membantu menjalankan beban penuh hingga selesai. Untuk melakukannya, tetapkan mode persiapan tabel target untuk `DO_NOTHING`. Jika tidak, operasi DROP dan TRUNCATE gagal ketika ada pembatasan kunci asing.

Di Amazon RDS, Anda dapat mengontrol pengaturan parameter ini menggunakan grup parameter. Anda dapat mengatur parameter secara langsung untuk instans PostgreSQL yang berjalan di Amazon EC2.



Untuk detail tambahan tentang bekerja dengan database PostgreSQL sebagai target AWS DMS, lihat bagian berikut: 

**Topics**
+ [Batasan menggunakan PostgreSQL sebagai target untuk AWS Database Migration Service](#CHAP_Target.PostgreSQL.Limitations)
+ [Batasan menggunakan Amazon Aurora PostgreSQL Limitless sebagai target AWS Database Migration Service](#CHAP_Target.PostgreSQL.Aurora.Limitations)
+ [Persyaratan keamanan saat menggunakan database PostgreSQL sebagai target AWS Database Migration Service](#CHAP_Target.PostgreSQL.Security)
+ [Pengaturan titik akhir dan Atribut Koneksi Ekstra (ECAs) saat menggunakan PostgreSQL sebagai target AWS DMS](#CHAP_Target.PostgreSQL.ConnectionAttrib)
+ [Tipe data target untuk PostgreSQL](#CHAP_Target.PostgreSQL.DataTypes)
+ [Menggunakan Babelfish untuk Aurora PostgreSQL sebagai target untuk AWS Database Migration Service](#CHAP_Target.PostgreSQL.Babelfish)

## Batasan menggunakan PostgreSQL sebagai target untuk AWS Database Migration Service
<a name="CHAP_Target.PostgreSQL.Limitations"></a>

Batasan berikut berlaku ketika menggunakan basis data PostgreSQL sebagai target untuk AWS DMS:
+ Untuk migrasi heterogen, tipe data JSON dikonversi ke tipe data CLOB Asli secara internal.
+ Dalam migrasi Oracle ke PostgreSQL, jika kolom di Oracle berisi karakter NULL (nilai hex U\$10000), mengubah karakter NULL menjadi spasi (nilai hex U\$10020) AWS DMS . Hal ini disebabkan oleh keterbatasan PostgreSQL.
+ AWS DMS tidak mendukung replikasi ke tabel dengan indeks unik yang dibuat dengan fungsi coalesce.
+ Jika tabel Anda menggunakan urutan, perbarui nilai `NEXTVAL` untuk setiap urutan dalam database target setelah Anda menghentikan replikasi dari database sumber. AWS DMS menyalin data dari database sumber Anda, tetapi tidak memigrasikan urutan ke target selama replikasi yang sedang berlangsung.

## Batasan menggunakan Amazon Aurora PostgreSQL Limitless sebagai target AWS Database Migration Service
<a name="CHAP_Target.PostgreSQL.Aurora.Limitations"></a>

Batasan berikut berlaku saat menggunakan Amazon Aurora PostgreSQL Limitless sebagai target untuk: AWS DMS
+ AWS DMS Validasi Data tidak mendukung Amazon Aurora PostgreSQL Limitless.
+ AWS DMS memigrasikan tabel sumber sebagai tabel Standar, yang tidak didistribusikan. Setelah migrasi, Anda dapat mengonversi tabel Standar ini ke tabel Tanpa Batas dengan mengikuti panduan konversi resmi.

## Persyaratan keamanan saat menggunakan database PostgreSQL sebagai target AWS Database Migration Service
<a name="CHAP_Target.PostgreSQL.Security"></a>

Untuk tujuan keamanan, akun pengguna yang digunakan untuk migrasi data harus merupakan pengguna terdaftar di basis data PostgreSQL yang Anda gunakan sebagai target.

Titik akhir target PostgreSQL Anda memerlukan izin pengguna minimum untuk menjalankan AWS DMS migrasi, lihat contoh berikut.

```
    CREATE USER newuser WITH PASSWORD 'your-password';
    ALTER SCHEMA schema_name OWNER TO newuser;
```

Atau,

```
    GRANT USAGE ON SCHEMA schema_name TO myuser;
    GRANT CONNECT ON DATABASE postgres to myuser;
    GRANT CREATE ON DATABASE postgres TO myuser;
    GRANT CREATE ON SCHEMA schema_name TO myuser;
    GRANT UPDATE, INSERT, SELECT, DELETE, TRUNCATE ON ALL TABLES IN SCHEMA schema_name TO myuser;
    GRANT TRUNCATE ON schema_name."BasicFeed" TO myuser;
```

## Pengaturan titik akhir dan Atribut Koneksi Ekstra (ECAs) saat menggunakan PostgreSQL sebagai target AWS DMS
<a name="CHAP_Target.PostgreSQL.ConnectionAttrib"></a>

Anda dapat menggunakan pengaturan endpoint dan Extra Connection Attributes (ECAs) untuk mengonfigurasi database target PostgreSQL Anda. 

Anda menentukan pengaturan saat Anda membuat titik akhir target menggunakan AWS DMS konsol, atau dengan menggunakan `create-endpoint` perintah di [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html), dengan sintaks `--postgre-sql-settings '{"EndpointSetting": "value", ...}'` JSON.

Anda menentukan ECAs menggunakan `ExtraConnectionAttributes` parameter untuk titik akhir Anda.

Tabel berikut menunjukkan pengaturan endpoint yang dapat Anda gunakan dengan PostgreSQL sebagai target.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/dms/latest/userguide/CHAP_Target.PostgreSQL.html)

## Tipe data target untuk PostgreSQL
<a name="CHAP_Target.PostgreSQL.DataTypes"></a>

Titik akhir database PostgreSQL untuk AWS DMS mendukung sebagian besar tipe data database PostgreSQL. Tabel berikut menunjukkan tipe data target database PostgreSQL yang didukung saat AWS DMS menggunakan dan pemetaan default dari tipe data. AWS DMS 

Untuk informasi tambahan tentang tipe AWS DMS data, lihat[Tipe data untuk AWS Database Migration Service](CHAP_Reference.DataTypes.md).


|  AWS DMS tipe data  |  Tipe data PostgreSQL  | 
| --- | --- | 
|  BOOLEAN  |  BOOLEAN  | 
|  BLOB  |  BYTEA  | 
|  BYTES  |  BYTEA  | 
|  DATE  |  DATE  | 
|  TIME  |  TIME  | 
|  DATETIME  |  Jika skala dari 0 sampai 6, gunakan TIMESTAMP. Jika skala dari 7 sampai 9, gunakan VARCHAR (37).  | 
|  INT1  |  SMALLINT  | 
|  INT2  |  SMALLINT  | 
|  INT4  |  INTEGER  | 
|  INT8  |  BIGINT  | 
|  NUMERIC   |  DECIMAL (P,S)  | 
|  REAL4  |  FLOAT4  | 
|  REAL8  |  FLOAT8  | 
|  STRING  |  Jika panjangnya dari 1 sampai 21.845, gunakan VARCHAR (panjang dalam bytes).  Jika panjangnya 21.846 hingga 2.147.483.647, gunakan VARCHAR (65535).  | 
|  UINT1  |  SMALLINT  | 
|  UINT2  |  INTEGER  | 
|  UINT4  |  BIGINT  | 
|  UINT8  |  BIGINT  | 
|  WSTRING  |  Jika panjangnya dari 1 sampai 21.845, gunakan VARCHAR (panjang dalam bytes).  Jika panjangnya 21.846 hingga 2.147.483.647, gunakan VARCHAR (65535).  | 
|  NCLOB  |  TEXT  | 
|  CLOB  |  TEXT  | 

**catatan**  
Saat mereplikasi dari sumber PostgreSQL AWS DMS , buat tabel target dengan tipe data yang sama untuk semua kolom, selain kolom dengan tipe data yang ditentukan pengguna. Dalam kasus seperti itu, tipe data dibuat sebagai “karakter bervariasi” dalam target.

## Menggunakan Babelfish untuk Aurora PostgreSQL sebagai target untuk AWS Database Migration Service
<a name="CHAP_Target.PostgreSQL.Babelfish"></a>

Anda dapat memigrasikan tabel sumber SQL Server ke target Babelfish untuk Amazon Aurora PostgreSQL menggunakan. AWS Database Migration Service Dengan Babelfish, Aurora PostgreSQL memahami T-SQL, dialek SQL milik Microsoft SQL Server, dan mendukung protokol komunikasi yang sama. Jadi, aplikasi yang ditulis untuk SQL Server sekarang dapat bekerja dengan Aurora dengan perubahan kode yang lebih sedikit. Kemampuan Babelfish dibangun ke Amazon Aurora dan tidak memiliki biaya tambahan. Anda dapat mengaktifkan Babelfish di cluster Amazon Aurora Anda dari konsol Amazon RDS.

**Saat Anda membuat titik akhir AWS DMS target menggunakan perintah AWS DMS konsol, API, atau CLI, tentukan mesin target sebagai **Amazon Aurora PostgreSQL**, dan beri nama database, babelfish\$1db.** Di bagian **Pengaturan Endpoint**, tambahkan pengaturan untuk mengatur ke `Babelfish` dan `DatabaseMode` `BabelfishDatabaseName` ke nama database target Babelfish T-SQL.

### Menambahkan aturan transformasi ke tugas migrasi Anda
<a name="CHAP_Target.PostgreSQL.Babelfish.transform"></a>

Saat Anda menentukan tugas migrasi untuk target Babelfish, Anda perlu menyertakan aturan transformasi yang memastikan DMS menggunakan tabel T-SQL Babelfish yang telah dibuat sebelumnya dalam database target.

Pertama, tambahkan aturan transformasi ke tugas migrasi Anda yang membuat semua nama tabel menjadi huruf kecil. Babelfish menyimpan sebagai huruf kecil dalam `pg_class` katalog PostgreSQL nama-nama tabel yang Anda buat menggunakan T-SQL. Namun, ketika Anda memiliki tabel SQL Server dengan nama kasus campuran, DMS membuat tabel menggunakan tipe data asli PostgreSQL, bukan tipe data yang kompatibel dengan T-SQL. Untuk alasan itu, pastikan untuk menambahkan aturan transformasi yang membuat semua nama tabel huruf kecil. Perhatikan bahwa nama kolom tidak boleh diubah menjadi huruf kecil.

Selanjutnya, jika Anda menggunakan mode migrasi multidatabase saat menentukan klaster, tambahkan aturan transformasi yang mengganti nama skema SQL Server asli. Pastikan untuk mengganti nama nama skema SQL Server untuk menyertakan nama database T-SQL. Misalnya, jika nama skema SQL Server asli adalah dbo, dan nama database T-SQL Anda adalah mydb, ganti nama skema menjadi mydb\$1dbo menggunakan aturan transformasi.

**catatan**  
Saat menggunakan Babelfish untuk Aurora PostgreSQL 16 atau yang lebih baru, mode migrasi default adalah “mutidatabase”. Saat menjalankan tugas migrasi DMS, pastikan untuk meninjau parameter mode migrasi dan memperbarui aturan transformasi jika diperlukan.

Jika Anda menggunakan mode database tunggal, Anda tidak memerlukan aturan transformasi untuk mengganti nama nama skema. Nama skema memiliki one-to-one pemetaan dengan target database T-SQL di Babelfish.

Aturan transformasi sampel berikut membuat semua nama tabel huruf kecil, dan mengganti nama skema SQL Server asli dari ke. `dbo` `mydb_dbo`

```
{
   "rules": [
   {
      "rule-type": "transformation",
      "rule-id": "566251737",
      "rule-name": "566251737",
      "rule-target": "schema",
      "object-locator": {
         "schema-name": "dbo"
      },
      "rule-action": "rename",
      "value": "mydb_dbo",
      "old-value": null
   },
   {
      "rule-type": "transformation",
      "rule-id": "566139410",
      "rule-name": "566139410",
      "rule-target": "table",
      "object-locator": {
         "schema-name": "%",
         "table-name": "%"
      },
      "rule-action": "convert-lowercase",
      "value": null,
      "old-value": null
   },
   {
      "rule-type": "selection",
      "rule-id": "566111704",
      "rule-name": "566111704",
      "object-locator": {
         "schema-name": "dbo",
         "table-name": "%"
      },
      "rule-action": "include",
      "filters": []
   }
]
}
```

### Keterbatasan untuk menggunakan titik akhir target PostgreSQL dengan tabel Babelfish
<a name="CHAP_Target.PostgreSQL.Babelfish.limitations"></a>

Batasan berikut berlaku saat menggunakan titik akhir target PostgreSQL dengan tabel Babelfish:
+ Untuk mode **persiapan tabel Target**, gunakan hanya mode **Do nothing** atau **Truncate.** Jangan gunakan **tabel Drop pada mode target**. Dalam mode itu, DMS membuat tabel sebagai tabel PostgreSQL yang T-SQL mungkin tidak mengenali.
+ AWS DMS tidak mendukung tipe data sql\$1variant.
+ Babelfish di bawah titik akhir Postgres tidak mendukung`HEIRARCHYID`, `GEOMETRY` (sebelum 3.5.4) dan `GEOGRAPHY` (sebelum 3.5.4) tipe data. Untuk memigrasikan tipe data ini, Anda dapat menambahkan aturan transformasi untuk mengonversi tipe data ke wstring (250).
+ Babelfish hanya mendukung migrasi`BINARY`,`VARBINARY`, dan tipe `IMAGE` data menggunakan tipe data. `BYTEA` [Untuk versi Aurora PostgreSQL sebelumnya, Anda dapat menggunakan DMS untuk memigrasikan tabel ini ke titik akhir target Babelfish.](CHAP_Target.Babelfish.md) Anda tidak perlu menentukan panjang untuk tipe `BYTEA` data, seperti yang ditunjukkan pada contoh berikut.

  ```
  [Picture] [VARBINARY](max) NULL
  ```

  Ubah tipe data T-SQL sebelumnya ke tipe data yang didukung T-SQL. `BYTEA`

  ```
  [Picture] BYTEA NULL
  ```
+ Untuk versi Aurora PostgreSQL Babelfish sebelumnya, jika Anda membuat tugas migrasi untuk replikasi berkelanjutan dari SQL Server ke Babelfish menggunakan titik akhir target PostgreSQL, Anda perlu menetapkan tipe data ke tabel apa pun yang menggunakan kolom. `SERIAL` `IDENTITY` Dimulai dengan Aurora PostgreSQL (versi 15.3/14.8 dan lebih tinggi) dan Babelfish (versi 3.2.0 dan lebih tinggi), kolom identitas didukung, dan tidak lagi diperlukan untuk menetapkan tipe data SERIAL. Untuk informasi selengkapnya, lihat [Penggunaan SERIAL](https://docs.aws.amazon.com/dms/latest/sql-server-to-aurora-postgresql-migration-playbook/chap-sql-server-aurora-pg.tsql.sequences..html) di bagian Urutan dan Identitas dari *SQL Server ke Aurora PostgreSQL* Migration Playbook. Kemudian, saat Anda membuat tabel di Babelfish, ubah definisi kolom dari berikut ini.

  ```
      [IDCol] [INT] IDENTITY(1,1) NOT NULL PRIMARY KEY
  ```

  Ubah yang sebelumnya menjadi berikut.

  ```
      [IDCol] SERIAL PRIMARY KEY
  ```

  Aurora PostgreSQL yang kompatibel dengan Babelfish membuat urutan menggunakan konfigurasi default dan menambahkan batasan ke kolom. `NOT NULL` Urutan yang baru dibuat berperilaku seperti urutan reguler (bertambah 1) dan tidak memiliki opsi komposit`SERIAL`.
+ Setelah memigrasikan data dengan tabel yang menggunakan `IDENTITY` kolom atau tipe `SERIAL` data, setel ulang objek urutan berbasis PostgreSQL berdasarkan nilai maksimum kolom. Setelah melakukan beban penuh tabel, gunakan kueri T-SQL berikut untuk menghasilkan pernyataan untuk menyemai objek urutan terkait.

  ```
  DECLARE @schema_prefix NVARCHAR(200) = ''
  
  IF current_setting('babelfishpg_tsql.migration_mode') = 'multi-db'
          SET @schema_prefix = db_name() + '_'
  
  SELECT 'SELECT setval(pg_get_serial_sequence(''' + @schema_prefix + schema_name(tables.schema_id) + '.' + tables.name + ''', ''' + columns.name + ''')
                 ,(select max(' + columns.name + ') from ' + schema_name(tables.schema_id) + '.' + tables.name + '));'
  FROM sys.tables tables
  JOIN sys.columns columns ON tables.object_id = columns.object_id
  WHERE columns.is_identity = 1
  
  UNION ALL
  
  SELECT 'SELECT setval(pg_get_serial_sequence(''' + @schema_prefix + table_schema + '.' + table_name + ''', 
  ''' + column_name + '''),(select max(' + column_name + ') from ' + table_schema + '.' + table_name + '));'
  FROM information_schema.columns
  WHERE column_default LIKE 'nextval(%';
  ```

  Kueri menghasilkan serangkaian pernyataan SELECT yang Anda jalankan untuk memperbarui nilai IDENTITAS dan SERIAL maksimum.
+ Untuk versi Babelfish sebelum 3.2, **mode LOB Penuh** dapat mengakibatkan kesalahan tabel. Jika itu terjadi, buat tugas terpisah untuk tabel yang gagal dimuat. Kemudian gunakan **mode LOB Terbatas** untuk menentukan nilai yang sesuai untuk **ukuran LOB Maksimum (KB)**. Pilihan lain adalah untuk mengatur pengaturan SQL Server Endpoint Connection Attribute. `ForceFullLob=True`
+ Untuk versi Babelfish sebelum 3.2, melakukan validasi data dengan tabel Babelfish yang tidak menggunakan kunci primer berbasis integer menghasilkan pesan bahwa kunci unik yang sesuai tidak dapat ditemukan. Dimulai dengan Aurora PostgreSQL (versi 15.3/14.8 dan lebih tinggi) dan Babelfish (versi 3.2.0 dan lebih tinggi), validasi data untuk kunci primer non-integer didukung. 
+ Karena perbedaan presisi dalam jumlah tempat desimal selama beberapa detik, DMS melaporkan kegagalan validasi data untuk tabel Babelfish yang menggunakan tipe data. `DATETIME` Untuk menekan kegagalan tersebut, Anda dapat menambahkan tipe aturan validasi berikut untuk tipe `DATETIME` data.

  ```
  {
           "rule-type": "validation",
           "rule-id": "3",
           "rule-name": "3",
           "rule-target": "column",
           "object-locator": {
               "schema-name": "dbo",
               "table-name": "%",
               "column-name": "%",
               "data-type": "datetime"
           },
           "rule-action": "override-validation-function",
           "source-function": "case when ${column-name} is NULL then NULL else 0 end",
           "target-function": "case when ${column-name} is NULL then NULL else 0 end"
       }
  ```

# Menggunakan database yang kompatibel dengan MySQL sebagai target untuk AWS Database Migration Service
<a name="CHAP_Target.MySQL"></a>

Anda dapat memigrasikan data ke database yang kompatibel dengan MySQL menggunakan AWS DMS, dari salah satu mesin data sumber yang mendukung. AWS DMS Jika Anda bermigrasi ke database yang kompatibel dengan MySQL lokal, maka mesin sumber Anda AWS DMS harus berada di dalam ekosistem. AWS Mesin dapat menggunakan layanan yang AWS dikelola seperti Amazon RDS, Amazon Aurora, atau Amazon S3. Atau mesin bisa berada di basis data terkelola mandiri di Amazon EC2. 

Anda dapat menggunakan SSL untuk mengenkripsi koneksi antara titik akhir yang kompatibel dengan MySQL dan instans replikasi. Untuk informasi lebih lanjut tentang penggunaan SSL dengan titik akhir yang kompatibel dengan MySQL, lihat [Menggunakan SSL dengan AWS Database Migration Service](CHAP_Security.SSL.md). 

Untuk informasi tentang versi MySQL AWS DMS yang mendukung sebagai target, lihat. [Target untuk AWS DMS](CHAP_Introduction.Targets.md)

Anda dapat menggunakan database yang kompatibel dengan MySQL berikut sebagai target untuk: AWS DMS
+ MySQL Community Edition
+ MySQL Standard Edition
+ MySQL Enterprise Edition
+ MySQL Cluster Carrier Grade Edition
+ MariaDB Community Edition
+ MariaDB Enterprise Edition
+ MariaDB Column Store
+ Amazon Aurora MySQL

**catatan**  
Terlepas dari mesin penyimpanan sumber yang digunakan (myISAM, MEMORY, dan sebagainya), AWS DMS menciptakan tabel target yang kompatibel dengan MySQL sebagai tabel InnoDB secara default.   
Jika Anda membutuhkan tabel di mesin penyimpanan selain InnoDB, Anda dapat membuatnya secara manual pada target yang kompatibel dengan MySQL dan memigrasi tabel dengan memilih **Tidak melakukan apapun**. Untuk informasi lebih lanjut, lihat [Pengaturan tugas beban penuh](CHAP_Tasks.CustomizingTasks.TaskSettings.FullLoad.md).

Untuk detail tambahan tentang bekerja dengan basis data yang kompatibel dengan MySQL sebagai target AWS DMS, lihat bagian berikut. 

**Topics**
+ [Menggunakan database yang kompatibel dengan MySQL sebagai target untuk AWS Database Migration Service](#CHAP_Target.MySQL.Prerequisites)
+ [Batasan dalam menggunakan database yang kompatibel dengan MySQL sebagai target AWS Database Migration Service](#CHAP_Target.MySQL.Limitations)
+ [Pengaturan titik akhir saat menggunakan database yang kompatibel dengan MySQL sebagai target AWS DMS](#CHAP_Target.MySQL.ConnectionAttrib)
+ [Tipe data target untuk MySQL](#CHAP_Target.MySQL.DataTypes)

## Menggunakan database yang kompatibel dengan MySQL sebagai target untuk AWS Database Migration Service
<a name="CHAP_Target.MySQL.Prerequisites"></a>

Sebelum Anda mulai bekerja dengan basis data yang kompatibel dengan MySQL sebagai target untuk AWS DMS, pastikan bahwa Anda telah memenuhi prasyarat berikut:
+ Berikan akun pengguna yang memiliki read/write hak istimewa ke database AWS DMS yang kompatibel dengan MySQL. Untuk membuat hak yang diperlukan, jalankan perintah berikut.

  ```
  CREATE USER '<user acct>'@'%' IDENTIFIED BY '<user password>';
  GRANT ALTER, CREATE, DROP, INDEX, INSERT, UPDATE, DELETE, SELECT, CREATE TEMPORARY TABLES  ON <schema>.* TO 
  '<user acct>'@'%';
  GRANT ALL PRIVILEGES ON awsdms_control.* TO '<user acct>'@'%';
  ```
+ Selama fase migrasi beban penuh, Anda harus nonaktifkan kunci asing pada tabel target Anda. Untuk menonaktifkan pemeriksaan kunci asing pada database yang kompatibel dengan MySQL selama pemuatan penuh, Anda dapat menambahkan perintah berikut ke bagian **Atribut koneksi tambahan** AWS DMS konsol untuk titik akhir target Anda.

  ```
  Initstmt=SET FOREIGN_KEY_CHECKS=0;
  ```
+ Tetapkan parameter basis data `local_infile = 1` untuk mengaktifkan AWS DMS agar memuat data ke basis data target.
+ Berikan hak istimewa berikut jika Anda menggunakan penilaian premi khusus MySQL.

  ```
  grant select on mysql.user to <dms_user>;
  grant select on mysql.db to <dms_user>;
  grant select on mysql.tables_priv to <dms_user>;
  grant select on mysql.role_edges to <dms_user>  #only for MySQL version 8.0.11 and higher
  ```

## Batasan dalam menggunakan database yang kompatibel dengan MySQL sebagai target AWS Database Migration Service
<a name="CHAP_Target.MySQL.Limitations"></a>

Saat menggunakan database MySQL sebagai target AWS DMS , tidak mendukung hal berikut:
+ Beberapa pernyataan bahasa definisi data (DDL): TRUNCATE PARTITION, DROP TABLE, dan RENAME TABLE.
+ Menggunakan pernyataan `ALTER TABLE table_name ADD COLUMN column_name` untuk menambahkan kolom ke bagian depan atau tengah tabel.
+ Saat memuat data ke target yang kompatibel dengan MySQL dalam tugas pemuatan penuh, AWS DMS tidak melaporkan kesalahan yang disebabkan oleh kendala dalam log tugas, yang dapat menyebabkan kesalahan kunci duplikat atau ketidakcocokan dengan jumlah catatan. Hal ini disebabkan oleh cara MySQL menangani data lokal dengan perintah. `LOAD DATA` Pastikan untuk melakukan hal berikut selama fase beban penuh: 
  + Nonaktifkan kendala
  + Gunakan AWS DMS validasi untuk memastikan data konsisten.
+ Ketika Anda memperbarui nilai kolom ke nilai yang ada, basis data yang kompatibel dengan MySQL akan menampilkan Peringatan `0 rows affected`. Meskipun secara teknis perilaku ini bukan merupakan kesalahan, penanganan situasi ini berbeda dibandingkan mesin basis data lain. Misalnya Oracle melakukan update dari satu baris. Untuk database yang kompatibel dengan MySQL, buat entri di AWS DMS tabel kontrol awsdms\$1apply\$1exceptions dan mencatat peringatan berikut.

  ```
  Some changes from the source database had no impact when applied to
  the target database. See awsdms_apply_exceptions table for details.
  ```
+ Aurora Nirserver tersedia sebagai target untuk Amazon Aurora versi 2, kompatibel dengan MySQL versi 5.7. (Pilih Aurora MySQL versi 2.07.1 untuk dapat menggunakan Aurora Nirserver dengan kompatibilitas terhadap MySQL 5.7.) *Untuk informasi selengkapnya tentang Aurora Tanpa Server, lihat Menggunakan [Aurora Tanpa Server v2 di Panduan Pengguna Amazon Aurora](https://docs.aws.amazon.com//AmazonRDS/latest/AuroraUserGuide/aurora-serverless-v2.html).*
+ AWS DMS tidak mendukung penggunaan titik akhir pembaca untuk Aurora atau Amazon RDS, kecuali instans dalam mode yang dapat ditulis, yaitu parameter `innodb_read_only` dan disetel `read_only` ke atau. `0` `OFF` Untuk informasi selengkapnya tentang penggunaan Amazon RDS dan Aurora sebagai target, lihat berikut ini:
  +  [Menentukan instans DB mana yang terhubung dengan Anda](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.BestPractices.html#AuroraMySQL.BestPractices.DeterminePrimaryInstanceConnection) 
  +  [Memperbarui replika baca dengan MySQL](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_MySQL.Replication.ReadReplicas.html#USER_MySQL.Replication.ReadReplicas.Updates) 
+ Saat mereplikasi tipe data TIME, bagian pecahan dari nilai waktu tidak direplikasi.
+ Saat mereplikasi tipe data TIME dengan Atribut Koneksi Ekstra`loadUsingCSV=false`, nilai waktu dibatasi ke rentang. `[00:00:00, 23:59:59]`

## Pengaturan titik akhir saat menggunakan database yang kompatibel dengan MySQL sebagai target AWS DMS
<a name="CHAP_Target.MySQL.ConnectionAttrib"></a>

Anda dapat menggunakan pengaturan titik akhir untuk mengonfigurasi basis data target yang kompatibel dengan MySQL mirip dengan menggunakan atribut koneksi tambahan. Anda menentukan pengaturan saat Anda membuat titik akhir target menggunakan AWS DMS konsol, atau dengan menggunakan `create-endpoint` perintah di [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html), dengan sintaks `--my-sql-settings '{"EndpointSetting": "value", ...}'` JSON.

Tabel berikut menunjukkan pengaturan endpoint yang dapat Anda gunakan dengan MySQL sebagai target.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/dms/latest/userguide/CHAP_Target.MySQL.html)

Anda juga dapat menggunakan atribut koneksi tambahan untuk mengonfigurasi basis data target yang kompatibel dengan MySQL Anda.

Tabel berikut menunjukkan atribut koneksi tambahan yang dapat Anda gunakan dengan MySQL sebagai target.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/dms/latest/userguide/CHAP_Target.MySQL.html)

Atau, Anda dapat menggunakan `AfterConnectScript` parameter `--my-sql-settings` perintah untuk menonaktifkan pemeriksaan kunci asing dan menentukan zona waktu untuk database Anda.

## Tipe data target untuk MySQL
<a name="CHAP_Target.MySQL.DataTypes"></a>

Tabel berikut menunjukkan tipe data target database MySQL yang didukung saat AWS DMS menggunakan dan pemetaan AWS DMS default dari tipe data.

Untuk informasi tambahan tentang tipe AWS DMS data, lihat[Tipe data untuk AWS Database Migration Service](CHAP_Reference.DataTypes.md).


|  AWS DMS tipe data  |  Tipe data MySQL  | 
| --- | --- | 
|  BOOLEAN  |  BOOLEAN  | 
|  BYTES  |  Jika panjangnya dari 1 sampai 65.535, maka gunakan VARBINARY (length).  Jika panjangnya dari 65.536 hingga 2.147.483.647 maka gunakan LONGLOB.  | 
|  DATE  |  DATE  | 
|  TIME  |  TIME  | 
|  TIMESTAMP  |  “If scale => 0 and =< 6, then: DATETIME (Scale) If scale is => 7 and =< 9, then: VARCHAR (37)"  | 
|  INT1  |  TINYINT  | 
|  INT2  |  SMALLINT  | 
|  INT4  |  INTEGER  | 
|  INT8  |  BIGINT  | 
|  NUMERIC  |  DECIMAL (p,s)  | 
|  REAL4  |  FLOAT  | 
|  REAL8  |  DOUBLE PRECISION  | 
|  STRING  |  Jika panjangnya dari 1 sampai 21.845 maka gunakan VARCHAR (panjang). Jika panjangnya dari 21.846 hingga 2.147.483.647 maka gunakan LONGTEXT.  | 
|  UINT1  |  UNSIGNED TINYINT  | 
|  UINT2  |  UNSIGNED SMALLINT  | 
|  UINT4  |  UNSIGNED INTEGER  | 
|  UINT8  |  UNSIGNED BIGINT  | 
|  WSTRING  |  Jika panjangnya dari 1 sampai 32.767 maka gunakan VARCHAR (panjang).  Jika panjangnya dari 32.768 hingga 2.147.483.647 maka gunakan LONGTEXT.  | 
|  BLOB  |  Jika panjangnya dari 1 sampai 65.535 maka gunakan BLOB. Jika panjangnya dari 65.536 hingga 2.147.483.647 maka gunakan LONGBLOB. Jika panjangnya 0, gunakan LONGBLOB (support LOB penuh).  | 
|  NCLOB  |  Jika panjangnya dari 1 sampai 65.535, gunakan TEXT. Jika panjangnya dari 65.536 hingga 2.147.483.647, gunakan LONGTEXT dengan ucs2 untuk CHARACTER SET. Jika panjangnya 0, gunakan LONGTEXT (support LOB penuh) dengan ucs2 untuk CHARACTER SET.  | 
|  CLOB  |  Jika panjangnya dari 1 sampai 65.535, gunakan TEXT. Jika panjangnya dari 65.536 hingga 2.147.483.647, gunakan LONGTEXT. Jika panjangnya 0, gunakan LONGTEXT (supportLOB penuh).  | 

# Menggunakan database Amazon Redshift sebagai target AWS Database Migration Service
<a name="CHAP_Target.Redshift"></a>

Anda dapat memigrasikan data ke database Amazon Redshift menggunakan. AWS Database Migration Service Amazon Redshift adalah layanan gudang data dengan skala petabyte yang terkelola penuh di cloud. Dengan basis data Amazon Redshift sebagai target, Anda dapat memigrasi data dari semua basis data sumber lain yang didukung.

Anda dapat menggunakan Amazon Redshift Serverless sebagai target. AWS DMS Untuk informasi lebih lanjut, lihat [Menggunakan AWS DMS Amazon Redshift Serverless sebagai TargetAmazon Redshift Tanpa Server](#CHAP_Target.Redshift.RSServerless) berikut ini.

 Cluster Amazon Redshift harus berada di AWS akun yang sama dan AWS Wilayah yang sama dengan instance replikasi. 

Selama migrasi database ke Amazon Redshift, AWS DMS pertama-tama memindahkan data ke bucket Amazon S3. Saat file berada di bucket Amazon S3 AWS DMS , lalu transfer ke tabel yang tepat di gudang data Amazon Redshift. AWS DMS membuat bucket S3 di AWS Wilayah yang sama dengan database Amazon Redshift. Contoh AWS DMS replikasi harus ditempatkan di AWS Wilayah yang sama. 

Jika Anda menggunakan API AWS CLI atau DMS untuk memigrasikan data ke Amazon Redshift, siapkan AWS Identity and Access Management peran (IAM) untuk mengizinkan akses S3. Untuk informasi lebih lanjut tentang pembuatan IAM role, lihat [Membuat peran IAM untuk digunakan AWS DMS](security-iam.md#CHAP_Security.APIRole).

Titik akhir Amazon Redshift menyediakan otomatisasi penuh untuk hal berikut:
+ Pembuatan skema dan pemetaan tipe data
+ Beban penuh dari tabel basis data sumber
+ Beban tambahan dari perubahan yang dibuat ke tabel sumber
+ Penerapan perubahan skema dalam bahasa definisi data (DDL) yang dibuat ke tabel sumber
+ Sinkronisasi antara proses beban penuh dan penangkapan perubahan data (CDC).

AWS Database Migration Service mendukung operasi pemrosesan beban penuh dan perubahan. AWS DMS membaca data dari database sumber dan membuat serangkaian file nilai dipisahkan koma (.csv). Untuk operasi beban penuh, AWS DMS buat file untuk setiap tabel. AWS DMS kemudian menyalin file tabel untuk setiap tabel ke folder terpisah di Amazon S3. Saat file diunggah ke Amazon S3 AWS DMS , kirim perintah salin dan data dalam file disalin ke Amazon Redshift. Untuk operasi pemrosesan perubahan, salin perubahan AWS DMS bersih ke file.csv. AWS DMS kemudian mengunggah file perubahan bersih ke Amazon S3 dan menyalin data ke Amazon Redshift.

Untuk detail tambahan tentang bekerja dengan Amazon Redshift sebagai target AWS DMS, lihat bagian berikut: 

**Topics**
+ [Prasyarat untuk menggunakan database Amazon Redshift sebagai target AWS Database Migration Service](#CHAP_Target.Redshift.Prerequisites)
+ [Hak yang diperlukan untuk menggunakan Redshift sebagai target](#CHAP_Target.Redshift.Privileges)
+ [Batasan dalam menggunakan Amazon Redshift sebagai target AWS Database Migration Service](#CHAP_Target.Redshift.Limitations)
+ [Mengonfigurasi database Amazon Redshift sebagai target AWS Database Migration Service](#CHAP_Target.Redshift.Configuration)
+ [Menggunakan perutean VPC yang disempurnakan dengan Amazon Redshift sebagai target AWS Database Migration Service](#CHAP_Target.Redshift.EnhancedVPC)
+ [Membuat dan menggunakan AWS KMS kunci untuk mengenkripsi data target Amazon Redshift](#CHAP_Target.Redshift.KMSKeys)
+ [Pengaturan titik akhir saat menggunakan Amazon Redshift sebagai target AWS DMS](#CHAP_Target.Redshift.ConnectionAttrib)
+ [Menggunakan kunci enkripsi data, dan bucket Amazon S3 sebagai penyimpanan perantara](#CHAP_Target.Redshift.EndpointSettings)
+ [Pengaturan tugas multithreaded untuk Amazon Redshift](#CHAP_Target.Redshift.ParallelApply)
+ [Tipe data target untuk Amazon Redshift](#CHAP_Target.Redshift.DataTypes)
+ [Menggunakan AWS DMS Amazon Redshift Serverless sebagai Target](#CHAP_Target.Redshift.RSServerless)

## Prasyarat untuk menggunakan database Amazon Redshift sebagai target AWS Database Migration Service
<a name="CHAP_Target.Redshift.Prerequisites"></a>

Daftar berikut menjelaskan prasyarat yang diperlukan untuk bekerja dengan Amazon Redshift sebagai target migrasi data:
+ Gunakan Konsol AWS Manajemen untuk meluncurkan klaster Amazon Redshift. Perhatikan informasi dasar tentang AWS akun Anda dan klaster Amazon Redshift Anda, seperti kata sandi, nama pengguna, dan nama database Anda. Anda perlu nilai-nilai ini saat membuat titik akhir target Amazon Redshift target. 
+ Cluster Amazon Redshift harus berada di AWS akun yang sama dan AWS Wilayah yang sama dengan instance replikasi.
+ Instans AWS DMS replikasi memerlukan konektivitas jaringan ke endpoint Amazon Redshift (nama host dan port) yang digunakan klaster Anda.
+ AWS DMS menggunakan bucket Amazon S3 untuk mentransfer data ke database Amazon Redshift. Agar AWS DMS dapat membuat bucket, konsol tersebut menggunakan IAM role, `dms-access-for-endpoint`. Jika Anda menggunakan AWS CLI atau DMS API untuk membuat migrasi database dengan Amazon Redshift sebagai database target, Anda harus membuat peran IAM ini. Untuk informasi lebih lanjut tentang pembuatan peran, lihat [Membuat peran IAM untuk digunakan AWS DMS](security-iam.md#CHAP_Security.APIRole). 
+ AWS DMS mengonversi BLOBs, CLOBs, dan NCLOBs ke VARCHAR pada instans Amazon Redshift target. Amazon Redshift tidak mendukung tipe data VARCHAR yang lebih besar dari 64 KB, jadi Anda tidak dapat menyimpan tradisional di Amazon LOBs Redshift. 
+ Tetapkan pengaturan tugas metadata target [BatchApplyEnabled](CHAP_Tasks.CustomizingTasks.TaskSettings.ChangeProcessingTuning.md)ke `true` for AWS DMS untuk menangani perubahan pada tabel target Amazon Redshift selama CDC. Diperlukan sebuah Kunci Primer pada sumber dan target tabel. Tanpa Kunci Primer, perubahan diterapkan pernyataan demi pernyataan. Dan hal itu dapat memengaruhi performa tugas selama CDC berlangsung dengan menyebabkan latensi target dan memengaruhi antrean melakukan klaster. 
+ Ketika Keamanan Tingkat Baris diaktifkan pada tabel di Redshift, Anda harus memberikan izin yang sesuai untuk semua pengguna DMS Anda.

## Hak yang diperlukan untuk menggunakan Redshift sebagai target
<a name="CHAP_Target.Redshift.Privileges"></a>

Gunakan perintah GRANT untuk menentukan hak akses pengguna atau grup pengguna. Hak termasuk pilihan akses seperti dapat membaca data dalam tabel dan view, menulis data, dan membuat tabel. Untuk informasi lebih lanjut tentang penggunaan GRANT dengan Amazon Redshift, lihat [GRANT](https://docs.aws.amazon.com//redshift/latest/dg/r_GRANT.html) di *Panduan Developer Basis data Amazon Redshift*. 

Berikut adalah sintaks untuk memberikan hak khusus untuk tabel, basis data, skema, fungsi, prosedur, atau hak tingkat-bahasa pada tabel dan view di Amazon Redshift.

```
GRANT { { SELECT | INSERT | UPDATE | DELETE | REFERENCES } [,...] | ALL [ PRIVILEGES ] }
    ON { [ TABLE ] table_name [, ...] | ALL TABLES IN SCHEMA schema_name [, ...] }
    TO { username [ WITH GRANT OPTION ] | GROUP group_name | PUBLIC } [, ...]

GRANT { { CREATE | TEMPORARY | TEMP } [,...] | ALL [ PRIVILEGES ] }
    ON DATABASE db_name [, ...]
    TO { username [ WITH GRANT OPTION ] | GROUP group_name | PUBLIC } [, ...]

GRANT { { CREATE | USAGE } [,...] | ALL [ PRIVILEGES ] }
    ON SCHEMA schema_name [, ...]
    TO { username [ WITH GRANT OPTION ] | GROUP group_name | PUBLIC } [, ...]

GRANT { EXECUTE | ALL [ PRIVILEGES ] }
    ON { FUNCTION function_name ( [ [ argname ] argtype [, ...] ] ) [, ...] | ALL FUNCTIONS IN SCHEMA schema_name [, ...] }
    TO { username [ WITH GRANT OPTION ] | GROUP group_name | PUBLIC } [, ...]

GRANT { EXECUTE | ALL [ PRIVILEGES ] }
    ON { PROCEDURE procedure_name ( [ [ argname ] argtype [, ...] ] ) [, ...] | ALL PROCEDURES IN SCHEMA schema_name [, ...] }
    TO { username [ WITH GRANT OPTION ] | GROUP group_name | PUBLIC } [, ...]

GRANT USAGE 
    ON LANGUAGE language_name [, ...]
    TO { username [ WITH GRANT OPTION ] | GROUP group_name | PUBLIC } [, ...]
```

Berikut adalah sintaks untuk hak tingkat-kolom pada tabel dan views di Amazon Redshift. 

```
GRANT { { SELECT | UPDATE } ( column_name [, ...] ) [, ...] | ALL [ PRIVILEGES ] ( column_name [,...] ) }
     ON { [ TABLE ] table_name [, ...] }
     TO { username | GROUP group_name | PUBLIC } [, ...]
```

Berikut adalah sintaks untuk hak ASSUMEROLE yang diberikan kepada pengguna dan kelompok dengan peran tertentu.

```
GRANT ASSUMEROLE
    ON { 'iam_role' [, ...] | ALL }
    TO { username | GROUP group_name | PUBLIC } [, ...]
    FOR { ALL | COPY | UNLOAD } [, ...]
```

## Batasan dalam menggunakan Amazon Redshift sebagai target AWS Database Migration Service
<a name="CHAP_Target.Redshift.Limitations"></a>

Batasan berikut berlaku saat menggunakan database Amazon Redshift sebagai target:
+ Jangan aktifkan pembuatan versi untuk bucket S3 yang Anda gunakan sebagai penyimpanan perantara untuk target Amazon Redshift Anda. Jika Anda memerlukan versi S3, gunakan kebijakan siklus hidup untuk menghapus versi lama secara aktif. Jika tidak, Anda mungkin mengalami kegagalan koneksi pengujian titik akhir karena batas waktu `list-object` panggilan S3. Untuk membuat kebijakan siklus hidup bucket S3, lihat [Mengelola siklus hidup](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html) penyimpanan. Untuk menghapus versi objek S3, lihat [Menghapus versi objek dari bucket berkemampuan versi](https://docs.aws.amazon.com/AmazonS3/latest/dev/DeletingObjectVersions.html).
+ DDL berikut ini tidak didukung:

  ```
  ALTER TABLE table name MODIFY COLUMN column name data type;
  ```
+  AWS DMS tidak dapat memigrasi atau mereplikasi perubahan ke skema dengan nama yang dimulai dengan garis bawah (\$1). Jika Anda memiliki skema dengan nama yang dimulai dengan garis bawah, gunakan transformasi pemetaan untuk mengubah nama skema pada target. 
+  Amazon Redshift tidak mendukung VARCHARs lebih dari 64 KB. LOBs dari database tradisional tidak dapat disimpan di Amazon Redshift.
+  Menerapkan pernyataan DELETE ke tabel dengan kunci primer multi-kolom tidak didukung ketika salah satu nama kolom kunci primer menggunakan kata yang dicadangkan. Pergi ke [sini](https://docs.aws.amazon.com/redshift/latest/dg/r_pg_keywords.html) untuk melihat daftar kosakata cadangan pada Amazon Redshift.
+ Anda mungkin mengalami masalah performa jika sistem sumber Anda melakukan operasi UPDATE pada kunci primer tabel sumber. Masalah performa ini terjadi saat menerapkan perubahan pada target. Hal ini disebabkan oleh operasi UPDATE (dan DELETE) bergantung pada nilai kunci primer untuk mengidentifikasi baris target. Jika Anda memperbarui kunci primer dari tabel sumber, log tugas Anda akan berisi pesan seperti berikut:

  ```
  Update on table 1 changes PK to a PK that was previously updated in the same bulk update.
  ```
+ DMS tidak mendukung nama DNS kustom saat mengonfigurasi titik akhir untuk klaster Redshift, dan Anda perlu menggunakan nama DNS yang disediakan Amazon. Karena klaster Amazon Redshift harus berada di AWS akun dan Wilayah yang sama dengan instance replikasi, validasi gagal jika Anda menggunakan titik akhir DNS kustom.
+ Amazon Redshift memiliki batas waktu sesi idle 4 jam default. Jika tidak ada aktivitas apa pun dalam tugas replikasi DMS, Redshift memutus sesi setelah 4 jam. Kesalahan dapat terjadi karena DMS tidak dapat terhubung dan berpotensi perlu memulai ulang. Sebagai solusinya, tetapkan batas WAKTU SESI lebih dari 4 jam untuk pengguna replikasi DMS. Atau, lihat deskripsi [ALTER USER di Panduan Pengembang](https://docs.aws.amazon.com/redshift/latest/dg/r_ALTER_USER.html) *Database Amazon Redshift*.
+ Saat AWS DMS mereplikasi data tabel sumber tanpa kunci primer atau unik, latensi CDC mungkin tinggi sehingga menghasilkan tingkat kinerja yang tidak dapat diterima.
+ Pemotongan partisi tidak didukung selama replikasi CDC dari sumber Oracle ke target Redshift.
+ Rekaman duplikat mungkin muncul di tabel target karena Amazon Redshift tidak menerapkan kunci utama dan AWS DMS dapat memutar ulang CDC saat tugas dilanjutkan. Untuk mencegah duplikat, gunakan `ApplyErrorInsertPolicy=INSERT_RECORD` pengaturan. Untuk informasi selengkapnya, lihat [Penanganan kesalahan pengaturan tugas](CHAP_Tasks.CustomizingTasks.TaskSettings.ErrorHandling.md). Atau, Anda dapat menerapkan deteksi duplikat tingkat aplikasi dan prosedur pembersihan pasca-migrasi.

## Mengonfigurasi database Amazon Redshift sebagai target AWS Database Migration Service
<a name="CHAP_Target.Redshift.Configuration"></a>

AWS Database Migration Service harus dikonfigurasi agar berfungsi dengan instans Amazon Redshift. Tabel berikut menjelaskan properti konfigurasi yang tersedia untuk titik akhir Amazon Redshift.


| Properti | Deskripsi | 
| --- | --- | 
| Server | Nama klaster Amazon Redshift yang Anda gunakan. | 
| port | Nomor port untuk Amazon Redshift. Nilai default adalah 5439. | 
| nama pengguna | Nama pengguna Amazon Redshift untuk pengguna terdaftar. | 
| Kata sandi | Kata sandi untuk pengguna yang disebutkan di properti nama pengguna. | 
| basis data | Nama (layanan) gudang data Amazon Redshift yang Anda gunakan. | 

Jika ingin menambahkan atribut string koneksi tambahan untuk titik akhir Amazon Redshift, Anda dapat menentukan atribut `maxFileSize` dan `fileTransferUploadStreams`. Untuk informasi lebih lanjut tentang atribut ini, lihat [Pengaturan titik akhir saat menggunakan Amazon Redshift sebagai target AWS DMS](#CHAP_Target.Redshift.ConnectionAttrib).

## Menggunakan perutean VPC yang disempurnakan dengan Amazon Redshift sebagai target AWS Database Migration Service
<a name="CHAP_Target.Redshift.EnhancedVPC"></a>

Jika Anda menggunakan Perutean VPC yang disempurnakan dengan target Amazon Redshift, semua lalu lintas COPY antara klaster Amazon Redshift dan repositori data Anda akan melewati VPC tersebut. Karena perutean VPC yang disempurnakan memengaruhi cara Amazon Redshift mengakses sumber daya lain, perintah COPY kmeungkinan gagal jika Anda belum mengonfigurasi VPC Anda dengan benar.

AWS DMS dapat dipengaruhi oleh perilaku ini karena menggunakan perintah COPY untuk memindahkan data di S3 ke cluster Amazon Redshift.

Berikut adalah langkah-langkah yang AWS DMS diperlukan untuk memuat data ke target Amazon Redshift:

1. AWS DMS menyalin data dari sumber ke file.csv di server replikasi.

1. AWS DMS menggunakan AWS SDK untuk menyalin file.csv ke dalam bucket S3 di akun Anda.

1. AWS DMS kemudian menggunakan perintah COPY di Amazon Redshift untuk menyalin data dari file.csv di S3 ke tabel yang sesuai di Amazon Redshift.

Jika Perutean VPC yang Ditingkatkan tidak diaktifkan, Amazon Redshift merutekan lalu lintas melalui internet, termasuk lalu lintas ke layanan lain di dalam jaringan. AWS Jika fitur ini tidak diaktifkan Anda tidak harus mengonfigurasi jalur jaringan. Jika fitur diaktifkan, Anda harus secara khusus membuat jalur jaringan antara Anda VPC dari klaster dan sumber data Anda. Untuk informasi lebih lanjut tentang konfigurasi yang diperlukan, lihat [Perutean VPC](https://docs.aws.amazon.com/redshift/latest/mgmt/enhanced-vpc-routing.html) dalam dokumentasi Amazon Redshift. 

## Membuat dan menggunakan AWS KMS kunci untuk mengenkripsi data target Amazon Redshift
<a name="CHAP_Target.Redshift.KMSKeys"></a>

Anda dapat mengenkripsi data target yang dikirim ke Amazon S3 sebelum disalin ke Amazon Redshift. Untuk melakukannya, Anda dapat membuat dan menggunakan AWS KMS kunci khusus. Anda dapat menggunakan kunci yang Anda buat untuk mengenkripsi data target menggunakan salah satu mekanisme berikut saat Anda membuat titik akhir target Amazon Redshift:
+ Gunakan pilihan berikut ketika Anda menjalankan perintah `create-endpoint` menggunakan AWS CLI.

  ```
  --redshift-settings '{"EncryptionMode": "SSE_KMS", "ServerSideEncryptionKmsKeyId": "your-kms-key-ARN"}'
  ```

  Di sini, `your-kms-key-ARN` adalah Amazon Resource Name (ARN) untuk kunci KMS Anda. Untuk informasi lebih lanjut, lihat [Menggunakan kunci enkripsi data, dan bucket Amazon S3 sebagai penyimpanan perantara](#CHAP_Target.Redshift.EndpointSettings).
+ Tetapkan atribut koneksi tambahan `encryptionMode` ke nilai `SSE_KMS` dan atribut koneksi tambahan `serverSideEncryptionKmsKeyId` ke ARN untuk kunci KMS Anda. Untuk informasi selengkapnya, lihat [Pengaturan titik akhir saat menggunakan Amazon Redshift sebagai target AWS DMS](#CHAP_Target.Redshift.ConnectionAttrib).

Untuk mengenkripsi data target Amazon Redshift menggunakan kunci KMS, Anda memerlukan peran (IAM) AWS Identity and Access Management yang memiliki izin untuk mengakses data Amazon Redshift. IAM role ini kemudian diakses dalam sebuah kebijakan (kebijakan kunci) yang dilampirkan ke kunci enkripsi yang Anda buat. Anda dapat melakukannya melalui konsol IAM Anda dengan membuat hal berikut:
+ Peran IAM dengan kebijakan yang AWS dikelola.
+ Kunci KMS dengan kebijakan kunci yang mereferensikan peran ini.

Prosedur berikut menjelaskan cara pembuatannya.

**Untuk membuat peran IAM dengan kebijakan AWS-managed yang diperlukan**

1. Buka konsol IAM di [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

1. Di panel navigasi, pilih **Peran**. Halaman **Peran** terbuka.

1. Pilih **Buat peran**. Halaman **Buat peran** terbuka.

1. Pilih **Layanan AWS ** sebagai entitas terpercaya, pilih **DMS** sebagai layanan untuk menggunakan peran.

1. Pilih **Berikutnya: Izin**. Halaman **Lampirkan kebijakan izin** akan muncul.

1. Cari dan pilih `AmazonDMSRedshiftS3Role` kebijakan.

1. Pilih **Berikutnya: Penandaan**. Halaman **Tambahkan penandaan** akan muncul. Di sini, Anda dapat menambahkan tanda apa pun yang Anda inginkan.

1. Pilih **Berikutnya: Tinjauan** dan lihat hasil yang dikeluarkan.

1. Jika Anda membutuhkan pengaturan, masukkan nama untuk peran (misalnya, `DMS-Redshift-endpoint-access-role`), dan deskripsi tambahan apa pun, lalu pilih **Buat peran**. Halaman **Peran** terbuka dengan pesan yang menunjukkan bahwa peran Anda telah dibuat.

Anda sekarang telah membuat peran baru untuk mengakses sumber daya Amazon Redshift untuk enkripsi dengan nama tertentu, misalnya `DMS-Redshift-endpoint-access-role`.

**Untuk membuat kunci AWS KMS enkripsi dengan kebijakan kunci yang mereferensikan peran IAM Anda**
**catatan**  
Untuk informasi selengkapnya tentang cara AWS DMS kerja dengan kunci AWS KMS enkripsi, lihat[Menyetel kunci enkripsi dan menentukan izin AWS KMS](CHAP_Security.md#CHAP_Security.EncryptionKey).

1. Masuk ke Konsol Manajemen AWS dan buka konsol AWS Key Management Service (AWS KMS) di [https://console.aws.amazon.com/kms](https://console.aws.amazon.com/kms).

1. Untuk mengubah Wilayah AWS, gunakan pemilih Wilayah di sudut kanan atas halaman.

1. Di panel navigasi, pilih **Kunci yang dikelola pelanggan**.

1. Pilih **Buat kunci**. Halaman **Konfigurasi kunci** terbuka.

1. Untuk **Tipe Kunci**, pilih **Simetris**.
**catatan**  
Saat Anda membuat kunci ini, Anda hanya dapat membuat kunci simetris, karena semua AWS layanan, seperti Amazon Redshift, hanya berfungsi dengan kunci enkripsi simetris.

1. Pilih **Pilihan lanjutan**. Untuk **Asal material kunci**, pastikan bahwa **KMS** dipilih, lalu pilih **Selanjutnya**. Halaman **Tambahkan label** terbuka.

1. Untuk **Buat alias dan deskripsi**, masukkan alias untuk kunci (misalnya, `DMS-Redshift-endpoint-encryption-key`) dan keterangan tambahan apa pun.

1. Untuk **Penandaan**, tambahkan tanda apa pun yang Anda inginkan untuk membantu mengidentifikasi kunci dan melacak penggunaannya, lalu pilih **Selanjutnya**. Halaman **Tentukan izin administratif kunci** terbuka dan menampilkan daftar pengguna dan peran yang dapat Anda pilih.

1. Tambahkan pengguna dan peran yang Anda inginkan untuk mengelola kunci. Pastikan bahwa pengguna dan peran ini memiliki izin yang diperlukan untuk mengelola kunci. 

1. Untuk **Penghapusan kunci**, pilih apakah administrator kunci dapat menghapus kunci, lalu pilih **Selanjutnya**. Halaman **Tentukan izin penggunaan kunci** terbuka dan menampilkan daftar pengguna dan peran tambahan yang dapat Anda pilih.

1. Untuk **Akun ini**, pilih pengguna yang tersedia yang Anda inginkan untuk melakukan operasi kriptografi pada target Amazon Redshift. Juga pilih peran yang sudah Anda buat sebelumnya di **Peran** untuk mengaktifkan akses guna mengenkripsi objek target Amazon Redshift, misalnya `DMS-Redshift-endpoint-access-role`).

1. Jika Anda ingin menambahkan akun lain yang tidak terdaftar untuk memiliki akses yang sama, untuk ** AWS Akun lain**, pilih **Tambah AWS akun lain**, lalu pilih **Berikutnya**. Halaman **Meninjau dan mengedit kebijakan kunci** terbuka dan menampilkan JSON untuk kebijakan kunci yang dapat Anda tinjau dan edit dengan mengetik ke JSON yang ada. Di sini, Anda dapat melihat tempat kebijakan kunci mereferensikan peran dan pengguna (misalnya, `Admin` dan `User1`) yang sudah Anda pilih pada langkah sebelumnya. Anda juga dapat melihat tindakan kunci berbeda diizinkan untuk principals yang berbeda (pengguna dan peran), seperti yang ditunjukkan dalam contoh berikut.

------
#### [ JSON ]

****  

   ```
   {
       "Id": "key-consolepolicy-3",
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "Enable IAM User Permissions",
               "Effect": "Allow",
               "Principal": {
                   "AWS": [
                       "arn:aws:iam::111122223333:root"
                   ]
               },
               "Action": "kms:*",
               "Resource": "*"
           },
           {
               "Sid": "Allow access for Key Administrators",
               "Effect": "Allow",
               "Principal": {
                   "AWS": [
                       "arn:aws:iam::111122223333:role/Admin"
                   ]
               },
               "Action": [
                   "kms:Create*",
                   "kms:Describe*",
                   "kms:Enable*",
                   "kms:List*",
                   "kms:Put*",
                   "kms:Update*",
                   "kms:Revoke*",
                   "kms:Disable*",
                   "kms:Get*",
                   "kms:Delete*",
                   "kms:TagResource",
                   "kms:UntagResource",
                   "kms:ScheduleKeyDeletion",
                   "kms:CancelKeyDeletion"
               ],
               "Resource": "*"
           },
           {
               "Sid": "Allow use of the key",
               "Effect": "Allow",
               "Principal": {
                   "AWS": [
                       "arn:aws:iam::111122223333:role/DMS-Redshift-endpoint-access-role",
                       "arn:aws:iam::111122223333:role/Admin",
                       "arn:aws:iam::111122223333:role/User1"
                   ]
               },
               "Action": [
                   "kms:Encrypt",
                   "kms:Decrypt",
                   "kms:ReEncrypt*",
                   "kms:GenerateDataKey*",
                   "kms:DescribeKey"
               ],
               "Resource": "*"
           },
           {
               "Sid": "Allow attachment of persistent resources",
               "Effect": "Allow",
               "Principal": {
                   "AWS": [
                       "arn:aws:iam::111122223333:role/DMS-Redshift-endpoint-access-role",
                       "arn:aws:iam::111122223333:role/Admin",
                       "arn:aws:iam::111122223333:role/User1"
                   ]
               },
               "Action": [
                   "kms:CreateGrant",
                   "kms:ListGrants",
                   "kms:RevokeGrant"
               ],
               "Resource": "*",
               "Condition": {
                   "Bool": {
                       "kms:GrantIsForAWSResource": true
                   }
               }
           }
       ]
   }
   ```

------

1. Pilih **Selesai**. Halaman **kunci Enkripsi** terbuka dengan pesan yang menunjukkan bahwa Anda AWS KMS key telah dibuat.

Anda sekarang telah membuat bukti kunci KMS baru dengan nama alias tertentu (misalnya `DMS-Redshift-endpoint-encryption-key`). Kunci ini memungkinkan AWS DMS untuk mengenkripsi data target Amazon Redshift.

## Pengaturan titik akhir saat menggunakan Amazon Redshift sebagai target AWS DMS
<a name="CHAP_Target.Redshift.ConnectionAttrib"></a>

Anda dapat menggunakan pengaturan titik akhir untuk mengonfigurasi basis data target Amazon Redshift mirip dengan menggunakan atribut koneksi tambahan. Anda menentukan pengaturan saat Anda membuat titik akhir target menggunakan AWS DMS konsol, atau dengan menggunakan `create-endpoint` perintah di [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html), dengan sintaks `--redshift-settings '{"EndpointSetting": "value", ...}'` JSON.

Tabel berikut menunjukkan pengaturan titik akhir yang dapat Anda gunakan dengan Amazon Redshift sebagai target.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/dms/latest/userguide/CHAP_Target.Redshift.html)

## Menggunakan kunci enkripsi data, dan bucket Amazon S3 sebagai penyimpanan perantara
<a name="CHAP_Target.Redshift.EndpointSettings"></a>

Anda dapat menggunakan Amazon Redshift target endpoint pengaturan untuk mengkonfigurasi berikut:
+ Kunci enkripsi AWS KMS data khusus. Kemudian Anda dapat menggunakan kunci ini untuk mengenkripsi data Anda yang dikirim ke Amazon S3 sebelum disalin ke Amazon Redshift.
+ Sebuah bucket S3 kustom sebagai penyimpanan perantara untuk data yang dimigrasi ke Amazon Redshift.
+ Memetakan boolean sebagai boolean dari sumber PostgreSQL. Secara default, tipe BOOLEAN dimigrasikan sebagai varchar (1). Anda dapat menentukan `MapBooleanAsBoolean` untuk membiarkan target Redshift Anda memigrasikan jenis boolean sebagai boolean, seperti yang ditunjukkan pada contoh berikut.

  ```
  --redshift-settings '{"MapBooleanAsBoolean": true}'
  ```

  Perhatikan bahwa Anda harus mengatur pengaturan ini pada titik akhir sumber dan target agar dapat diterapkan.

### Pengaturan kunci KMS untuk enkripsi data
<a name="CHAP_Target.Redshift.EndpointSettings.KMSkeys"></a>

Contoh berikut menunjukkan konfigurasi kunci KMS kustom untuk mengenkripsi data Anda yang dikirim ke S3. Anda bisa memulai dengan membuat panggilan `create-endpoint` menggunakan AWS CLI.

```
aws dms create-endpoint --endpoint-identifier redshift-target-endpoint --endpoint-type target 
--engine-name redshift --username your-username --password your-password 
--server-name your-server-name --port 5439 --database-name your-db-name 
--redshift-settings '{"EncryptionMode": "SSE_KMS", 
"ServerSideEncryptionKmsKeyId": "arn:aws:kms:us-east-1:111122223333:key/24c3c5a1-f34a-4519-a85b-2debbef226d1"}'
```

Di sini, objek JSON ditentukan oleh pilihan `--redshift-settings` yang mendefinisikan dua parameter. Satu berupa parameter `EncryptionMode` dengan nilai `SSE_KMS`. Yang satu lagi berupa parameter `ServerSideEncryptionKmsKeyId` dengan nilai `arn:aws:kms:us-east-1:111122223333:key/24c3c5a1-f34a-4519-a85b-2debbef226d1`. Nilai ini adalah Amazon Resource Name (ARN) untuk kunci KMS kustom Anda.

Secara default, enkripsi data S3 terjadi menggunakan enkripsi pada sisi server S3. Bagi target Amazon Redshift pada contoh sebelumnya, ini juga setara dengan menentukan pengaturan titik akhir, seperti dalam contoh berikut.

```
aws dms create-endpoint --endpoint-identifier redshift-target-endpoint --endpoint-type target 
--engine-name redshift --username your-username --password your-password 
--server-name your-server-name --port 5439 --database-name your-db-name 
--redshift-settings '{"EncryptionMode": "SSE_S3"}'
```

Untuk informasi selengkapnya tentang bekerja dengan enkripsi sisi server S3, lihat [Melindungi data menggunakan enkripsi sisi server](https://docs.aws.amazon.com/AmazonS3/latest/dev/serv-side-encryption.html) di Panduan Pengguna Layanan Penyimpanan Sederhana *Amazon*.

**catatan**  
Anda juga dapat menggunakan perintah CLI `modify-endpoint` untuk mengubah nilai parameter `EncryptionMode` untuk titik akhir yang ada dari `SSE_KMS` ke `SSE_S3`. Tapi Anda tidak dapat mengubah nilai `EncryptionMode` dari `SSE_S3` ke `SSE_KMS`.

### Pengaturan bucket Amazon S3
<a name="CHAP_Target.Redshift.EndpointSettings.S3Buckets"></a>

Saat Anda memigrasikan data ke titik akhir target Amazon Redshift AWS DMS , gunakan bucket Amazon S3 default sebagai penyimpanan tugas perantara sebelum menyalin data yang dimigrasi ke Amazon Redshift. Misalnya, contoh yang ditampilkan untuk membuat titik akhir target Amazon Redshift dengan kunci enkripsi AWS KMS data menggunakan bucket S3 default ini (lihat). [Pengaturan kunci KMS untuk enkripsi data](#CHAP_Target.Redshift.EndpointSettings.KMSkeys) 

Sebagai gantinya, Anda dapat menentukan bucket S3 kustom untuk penyimpanan perantara ini dengan menyertakan parameter berikut dalam nilai `--redshift-settings` opsi Anda pada AWS CLI `create-endpoint` perintah:
+ `BucketName` – String yang Anda tentukan sebagai nama penyimpanan bucket S3. Jika peran akses layanan Anda didasarkan pada `AmazonDMSRedshiftS3Role` kebijakan, nilai ini harus memiliki awalan`dms-`, misalnya,`dms-my-bucket-name`.
+ `BucketFolder` – (Opsional) Sebuah string yang dapat Anda tentukan sebagai nama folder penyimpanan di bucket S3 yang sudah ditetapkan.
+ `ServiceAccessRoleArn` – ARN dari IAM role yang memberikan akses administratif ke bucket S3. Umumnya, Anda membuat peran ini berdasarkan pada kebijakan `AmazonDMSRedshiftS3Role`. Sebagai contoh, lihat prosedur untuk membuat IAM role dengan kebijakan terkelola AWS di [Membuat dan menggunakan AWS KMS kunci untuk mengenkripsi data target Amazon Redshift](#CHAP_Target.Redshift.KMSKeys).
**catatan**  
Jika Anda menetapkan ARN dari IAM role yang berbeda menggunakan pilihan`--service-access-role-arn` dari perintah `create-endpoint`, maka pilihan IAM role ini akan diutamakan.

Contoh berikut menunjukkan bagaimana Anda bisa menggunakan parameter ini untuk menentukan bucket Amazon S3 kustom dalam panggilan `create-endpoint` yang menggunakan AWS CLI berikut ini. 

```
aws dms create-endpoint --endpoint-identifier redshift-target-endpoint --endpoint-type target 
--engine-name redshift --username your-username --password your-password 
--server-name your-server-name --port 5439 --database-name your-db-name 
--redshift-settings '{"ServiceAccessRoleArn": "your-service-access-ARN", 
"BucketName": "your-bucket-name", "BucketFolder": "your-bucket-folder-name"}'
```

## Pengaturan tugas multithreaded untuk Amazon Redshift
<a name="CHAP_Target.Redshift.ParallelApply"></a>

Anda dapat meningkatkan kinerja tugas full load dan change data capture (CDC) untuk titik akhir target Amazon Redshift dengan menggunakan pengaturan tugas multithreaded. Mereka memungkinkan Anda untuk menentukan jumlah thread serentak dan jumlah catatan untuk disimpan dalam buffer.

### Pengaturan tugas beban penuh multithreaded untuk Amazon Redshift
<a name="CHAP_Target.Redshift.ParallelApply.FullLoad"></a>

Untuk mempromosikan kinerja beban penuh, Anda dapat menggunakan pengaturan `ParallelLoad*` tugas berikut:
+ `ParallelLoadThreads`— Menentukan jumlah thread bersamaan yang digunakan DMS selama pemuatan penuh untuk mendorong catatan data ke titik akhir target Amazon Redshift. Nilai default adalah nol (0) dan nilai maksimum adalah 32. Untuk informasi selengkapnya, lihat [Pengaturan tugas beban penuh](CHAP_Tasks.CustomizingTasks.TaskSettings.FullLoad.md).

  Anda dapat menggunakan `enableParallelBatchInMemoryCSVFiles` atribut yang disetel `false` saat menggunakan pengaturan `ParallelLoadThreads` tugas. Atribut meningkatkan kinerja tugas beban penuh multithreaded yang lebih besar dengan meminta DMS menulis ke disk, bukan memori. Nilai default-nya adalah `true`.
+ `ParallelLoadBufferSize`— Menentukan permintaan catatan data maksimum saat menggunakan thread beban paralel dengan target Redshift. Nilai default adalah 100 dan nilai maksimum adalah 1.000. Kami menyarankan Anda menggunakan opsi ini ketika ParallelLoadThreads > 1 (lebih besar dari satu).

**catatan**  
Support untuk penggunaan pengaturan `ParallelLoad*` tugas selama LOAD PENUH ke titik akhir target Amazon Redshift tersedia dalam AWS DMS versi 3.4.5 dan yang lebih tinggi.  
Pengaturan titik akhir `ReplaceInvalidChars` Redshift tidak didukung untuk digunakan selama pengambilan data perubahan (CDC) atau selama tugas migrasi BEBAN PENUH yang diaktifkan beban paralel. Hal ini didukung untuk migrasi FULL LOAD ketika beban paralel tidak diaktifkan. Untuk informasi selengkapnya lihat [RedshiftSettings](https://docs.aws.amazon.com/dms/latest/APIReference/API_RedshiftSettings.html)di *Referensi AWS Database Migration Service API*

### Pengaturan tugas CDC multithreaded untuk Amazon Redshift
<a name="CHAP_Target.Redshift.ParallelApply.CDC"></a>

Untuk mempromosikan performa CDC, Anda dapat menggunakan pengaturan tugas `ParallelApply*` berikut:
+ `ParallelApplyThreads`— Menentukan jumlah thread bersamaan yang AWS DMS digunakan selama pemuatan CDC untuk mendorong catatan data ke titik akhir target Amazon Redshift. Nilai default adalah nol (0) dan nilai maksimum adalah 32. Nilai minimum yang disarankan sama dengan jumlah irisan di cluster Anda.
+ `ParallelApplyBufferSize` - Tentukan permintaan catatan data maksimum saat menggunakan thread penerapan paraleld dengan target Redshift. Nilai default adalah 100 dan nilai maksimum adalah 1.000. Kami merekomendasikan untuk menggunakan opsi ini ketika ParallelApplyThreads > 1 (lebih besar dari satu). 

  Untuk mendapatkan manfaat yang paling besar untuk Redshift sebagai target, kami merekomendasikan bahwa nilai `ParallelApplyBufferSize` setidaknya dua kali (dobel atau lebih) dari jumlah `ParallelApplyThreads`.

**catatan**  
Support untuk penggunaan pengaturan `ParallelApply*` tugas selama titik akhir target CDC ke Amazon Redshift tersedia AWS DMS dalam versi 3.4.3 dan yang lebih tinggi.

Tingkat paralelisme yang diterapkan tergantung pada korelasi antara total *Ukuran batch* dan *Ukuran file maksimal* yang digunakan untuk mentransfer data. Ketika menggunakan pengaturan tugas CDC multithreaded dengan target Redshift, manfaat yang diperoleh ketika ukuran batch besar dalam kaitannya dengan ukuran file maksimum. Misalnya, Anda dapat menggunakan kombinasi titik akhir dan pengaturan tugas berikut untuk menyetel performa yang optimal. 

```
// Redshift endpoint setting
                
        MaxFileSize=250000;

// Task settings

        BatchApplyEnabled=true;
        BatchSplitSize =8000;
        BatchApplyTimeoutMax =1800;
        BatchApplyTimeoutMin =1800;
        ParallelApplyThreads=32;
        ParallelApplyBufferSize=100;
```

Menggunakan pengaturan pada contoh sebelumnya, pelanggan dengan beban kerja transaksional berat mendapat manfaat dengan buffer batch mereka, berisi 8000 catatan, diisi dalam 1800 detik, memanfaatkan 32 thread paralel dengan ukuran file maksimum 250 MB.

Untuk informasi selengkapnya, lihat [Mengubah pengaturan penyetelan pemrosesan](CHAP_Tasks.CustomizingTasks.TaskSettings.ChangeProcessingTuning.md).

**catatan**  
DMS permintaan yang berjalan selama replikasi berkelanjutan klaster Redshift dapat berbagi sama WLM (beban kerja manajemen) antrean dengan aplikasi lain permintaan yang berjalan. Jadi, pertimbangkan untuk mengonfigurasi properti WLM dengan benar agar memengaruhi performa selama replikasi berkelanjutan ke target Redshift. Sebagai contoh, jika kueri ETL paralel lainnya berjalan, DMS berjalan lebih lambat dan peningkatan performa hilang.

## Tipe data target untuk Amazon Redshift
<a name="CHAP_Target.Redshift.DataTypes"></a>

Titik akhir Amazon Redshift untuk AWS DMS mendukung sebagian besar tipe data Amazon Redshift. Tabel berikut menunjukkan tipe data target Amazon Redshift yang didukung saat menggunakan AWS DMS dan pemetaan default dari AWS DMS tipe data.

Untuk informasi tambahan tentang tipe AWS DMS data, lihat[Tipe data untuk AWS Database Migration Service](CHAP_Reference.DataTypes.md).


| AWS DMS tipe data | Tipe data Amazon Redshift | 
| --- | --- | 
| BOOLEAN | BOOL | 
| BYTES | VARCHAR (Length) | 
| DATE | DATE | 
| TIME | VARCHAR(20) | 
| DATETIME |  Jika skalanya => 0 dan =< 6, tergantung pada jenis kolom target Redshift, maka salah satu dari berikut ini: TIMESTAMP (s) TIMESTAMPTZ (s) - Jika stempel waktu sumber berisi offset zona (seperti di SQL Server atau Oracle) itu dikonversi ke UTC saat disisipkan/diperbarui. Jika tidak mengandung offset, maka waktu sudah dipertimbangkan dalam UTC. Jika skala => 7 dan =< 9, maka:  VARCHAR (37) | 
| INT1 | INT2 | 
| INT2 | INT2 | 
| INT4 | INT4 | 
| INT8 | INT8 | 
| NUMERIC | Jika skala => 0 dan =< 37, maka:  NUMERIC (p,s)  Jika skala => 38 dan =< 127, maka:  VARCHAR (Length) | 
| REAL4 | FLOAT4 | 
| REAL8 | FLOAT8 | 
| STRING | Jika panjangnya 1-65.535, gunakan VARCHAR (length in bytes)  Jika panjangnya 65.536-2.147.483.647, maka gunakan VARCHAR (65535) | 
| UINT1 | INT2 | 
| UINT2 | INT2 | 
| UINT4 | INT4 | 
| UINT8 | NUMERIC (20,0) | 
| WSTRING |  Jika panjangnya 1-65.535, gunakan NVARCHAR (length in bytes)  Jika panjangnya 65.536-2.147.483.647, gunakan NVARCHAR (65535) | 
| BLOB | VARCHAR (maximum LOB size \$12)  Ukuran LOB maksimum tidak dapat melebihi 31 KB. Amazon Redshift tidak mendukung VARCHARs lebih dari 64 KB. | 
| NCLOB | NVARCHAR (maximum LOB size)  Ukuran LOB maksimum tidak dapat melebihi 63 KB. Amazon Redshift tidak mendukung VARCHARs lebih dari 64 KB. | 
| CLOB | VARCHAR (maximum LOB size)  Ukuran LOB maksimum tidak dapat melebihi 63 KB. Amazon Redshift tidak mendukung VARCHARs lebih dari 64 KB. | 

## Menggunakan AWS DMS Amazon Redshift Serverless sebagai Target
<a name="CHAP_Target.Redshift.RSServerless"></a>

AWS DMS mendukung penggunaan Amazon Redshift Serverless sebagai titik akhir target. [Untuk informasi tentang menggunakan Amazon Redshift Tanpa Server, lihat Amazon Redshift Tanpa Server [di Panduan Manajemen Pergeseran Merah Amazon](https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-serverless.html).](https://docs.aws.amazon.com/redshift/latest/mgmt/welcome.html)

Topik ini menjelaskan cara menggunakan titik akhir Amazon Redshift Tanpa Server dengan. AWS DMS

**catatan**  
Saat membuat titik akhir Amazon Redshift Tanpa Server, untuk **DatabaseName**bidang konfigurasi [RedshiftSettings](https://docs.aws.amazon.com/dms/latest/APIReference/API_RedshiftSettings.html)titik akhir Anda, gunakan nama gudang data Amazon Redshift atau nama titik akhir grup kerja. Untuk **ServerName**bidang, gunakan nilai untuk Endpoint yang ditampilkan di halaman **Workgroup** untuk klaster tanpa server (misalnya,). `default-workgroup.093291321484.us-east-1.redshift-serverless.amazonaws.com` Untuk informasi tentang membuat titik akhir, lihat[Membuat titik akhir sumber dan target](CHAP_Endpoints.Creating.md). Untuk informasi tentang titik akhir workgroup, lihat [Menyambung ke Amazon Redshift Tanpa Server](https://docs.aws.amazon.com/redshift/latest/mgmt/serverless-connecting.html).

### Kebijakan Kepercayaan dengan Amazon Redshift Serverless sebagai target
<a name="CHAP_Target.Redshift.RSServerless.policy"></a>

Saat menggunakan Amazon Redshift Tanpa Server sebagai titik akhir target, Anda harus menambahkan bagian yang disorot berikut ke kebijakan kepercayaan Anda. Kebijakan kepercayaan ini melekat pada `dms-access-for-endpoint` peran.

Untuk informasi selengkapnya tentang menggunakan kebijakan kepercayaan dengan AWS DMS, lihat[Membuat peran IAM untuk digunakan AWS DMS](security-iam.md#CHAP_Security.APIRole).

### Keterbatasan saat menggunakan Amazon Redshift Serverless sebagai target
<a name="CHAP_Target.Redshift.RSServerless.Limitations"></a>

Menggunakan Redshift Tanpa Server sebagai target memiliki batasan sebagai berikut:
+ AWS DMS hanya mendukung Amazon Redshift Serverless sebagai titik akhir di wilayah yang mendukung Amazon Redshift Tanpa Server. [Untuk informasi tentang wilayah mana yang mendukung Amazon Redshift Serverless, lihat Redshift **Serverless API di titik akhir Amazon Redshift**[dan topik kuota di Referensi](https://docs.aws.amazon.com/general/latest/gr/redshift-service.html) Umum.AWS](https://docs.aws.amazon.com/general/latest/gr/Welcome.html)
+ Saat menggunakan Perutean VPC yang Ditingkatkan, pastikan Anda membuat endpoint Amazon S3 di VPC yang sama dengan cluster Redshift Serverless atau Redshift Provisioned Anda. Untuk informasi selengkapnya, lihat [Menggunakan perutean VPC yang disempurnakan dengan Amazon Redshift sebagai target AWS Database Migration Service](#CHAP_Target.Redshift.EnhancedVPC).
+ AWS DMS tidak mendukung Enhanced Throughput untuk Amazon Redshift Serverless sebagai target. Untuk informasi selengkapnya, lihat [Throughput yang Ditingkatkan untuk Oracle Beban Penuh ke Amazon Redshift dan Migrasi Amazon S3](CHAP_Serverless.Components.md#CHAP_Serverless.Throughput).
+ AWS DMS tidak mendukung koneksi ke Amazon Redshift Redshift Serverless saat mode SSL disetel ke. `verify-full` Untuk koneksi yang memerlukan verifikasi SSL ke target Amazon Redshift Tanpa Server, gunakan mode SSL alternatif seperti atau. `require` `verify-ca`

# Menggunakan database SAP ASE sebagai target AWS Database Migration Service
<a name="CHAP_Target.SAP"></a>

Anda dapat memigrasikan data ke SAP Adaptive Server Enterprise (ASE) —sebelumnya dikenal sebagai Sybase—database menggunakan AWS DMS, baik dari sumber database yang didukung.

Untuk informasi tentang versi SAP ASE yang AWS DMS mendukung sebagai target, lihat[Target untuk AWS DMS](CHAP_Introduction.Targets.md).

## Prasyarat untuk menggunakan database SAP ASE sebagai target AWS Database Migration Service
<a name="CHAP_Target.SAP.Prerequisites"></a>

Sebelum Anda mulai bekerja dengan database SAP ASE sebagai target AWS DMS, pastikan Anda memiliki prasyarat berikut:
+ Berikan akses akun SAP ASE ke AWS DMS pengguna. Pengguna ini harus memiliki read/write hak istimewa dalam database SAP ASE.
+ Dalam beberapa kasus, Anda dapat mereplikasi SAP ASE versi 15.7 yang diinstal pada instans Amazon EC2 di Microsoft Windows yang dikonfigurasi dengan karakter non-Latin (misalnya bahasa Cina). Dalam kasus seperti itu, AWS DMS diperlukan SAP ASE 15.7 SP121 untuk diinstal pada mesin SAP ASE target.

## Keterbatasan saat menggunakan database SAP ASE sebagai target AWS DMS
<a name="CHAP_Target.SAP.Limitations"></a>

Berikut adalah batasan yang berlaku saat menggunakan basis data SAP ASE sebagai target untuk AWS DMS:
+ AWS DMS tidak mendukung tabel yang menyertakan bidang dengan tipe data berikut. Kolom hasil replikasi dengan tipe data berikut ditampilkan sebagai null. 
  + Tipe yang ditetapkan pengguna (UDT)

## Pengaturan titik akhir saat menggunakan SAP ASE sebagai target AWS DMS
<a name="CHAP_Target.SAP.ConnectionAttrib"></a>

Anda dapat menggunakan pengaturan titik akhir untuk mengonfigurasi basis data target SAP ASE Anda mirip dengan menggunakan atribut koneksi tambahan. Anda menentukan pengaturan saat Anda membuat titik akhir target menggunakan AWS DMS konsol, atau dengan menggunakan `create-endpoint` perintah di [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html), dengan sintaks `--sybase-settings '{"EndpointSetting": "value", ...}'` JSON.

Tabel berikut menunjukkan pengaturan endpoint yang dapat Anda gunakan dengan SAP ASE sebagai target.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/dms/latest/userguide/CHAP_Target.SAP.html)

## Tipe data target untuk SAP ASE
<a name="CHAP_Target.SAP.DataTypes"></a>

Tabel berikut menunjukkan tipe data target database SAP ASE yang didukung saat menggunakan AWS DMS dan pemetaan default dari tipe AWS DMS data.

Untuk informasi tambahan tentang tipe AWS DMS data, lihat[Tipe data untuk AWS Database Migration Service](CHAP_Reference.DataTypes.md).


|  AWS DMS tipe data  |  Tipe data SAP ASE  | 
| --- | --- | 
| BOOLEAN | BIT | 
| BYTES | VARBINARY (panjang) | 
| DATE | DATE | 
| TIME | TIME | 
| TIMESTAMP |  Jika skala => 0 dan =< 6, maka: BIGDATETIME  Jika skala adalah => 7 dan =< 9, maka: VARCHAR (37)  | 
| INT1 | TINYINT | 
| INT2 | SMALLINT | 
| INT4 | INTEGER | 
| INT8 | BIGINT | 
| NUMERIC | NUMERIC (p,s) | 
| REAL4 | REAL | 
| REAL8 | DOUBLE PRECISION | 
| STRING | VARCHAR (Length) | 
| UINT1 | TINYINT | 
| UINT2 | UNSIGNED SMALLINT | 
| UINT4 | UNSIGNED INTEGER | 
| UINT8 | UNSIGNED BIGINT | 
| WSTRING | VARCHAR (Length) | 
| BLOB | IMAGE | 
| CLOB | UNITEXT | 
| NCLOB | TEXT | 

# Menggunakan Amazon S3 sebagai target untuk AWS Database Migration Service
<a name="CHAP_Target.S3"></a>

Anda dapat memigrasikan data ke Amazon S3 AWS DMS menggunakan dari salah satu sumber database yang didukung. Saat menggunakan Amazon S3 sebagai target dalam AWS DMS tugas, data full load dan change data capture (CDC) ditulis ke format comma-separated value (.csv) secara default. Untuk penyimpanan yang lebih ringkas dan pilihan kueri yang lebih cepat, Anda juga memiliki pilihan untuk membuat data ditulis ke format Apache Parquet (.parquet). 

AWS DMS nama file yang dibuat selama beban penuh menggunakan penghitung heksadesimal inkremental—misalnya .csv,... LOAD00001 LOAD00002 , LOAD00009, LOAD0000 A, dan sebagainya untuk file.csv. AWS DMS nama file CDC menggunakan stempel waktu, misalnya 20141029-1134010000.csv. Untuk setiap tabel sumber yang berisi catatan, AWS DMS buat folder di bawah folder target yang ditentukan (jika tabel sumber tidak kosong). AWS DMS menulis semua beban penuh dan file CDC ke bucket Amazon S3 yang ditentukan. Anda dapat mengontrol ukuran file yang AWS DMS dibuat dengan menggunakan pengaturan [MaxFileSize](https://docs.aws.amazon.com/dms/latest/APIReference/API_S3Settings.html#DMS-Type-S3Settings-MaxFileSize)endpoint. 

Parameter `bucketFolder` berisi lokasi di mana file .csv atau .parquet disimpan sebelum diunggah ke bucket S3. Dengan file .csv, data tabel disimpan dalam format berikut dalam bucket S3, ditampilkan dengan file beban penuh.

```
database_schema_name/table_name/LOAD00000001.csv
database_schema_name/table_name/LOAD00000002.csv
...
database_schema_name/table_name/LOAD00000009.csv
database_schema_name/table_name/LOAD0000000A.csv
database_schema_name/table_name/LOAD0000000B.csv
...database_schema_name/table_name/LOAD0000000F.csv
database_schema_name/table_name/LOAD00000010.csv
...
```

Anda dapat menentukan delimiter kolom, delimiter baru, dan parameter lainnya menggunakan atribut koneksi tambahan. Untuk informasi lebih lanjut tentang atribut koneksi tambahan, lihat [Pengaturan titik akhir saat menggunakan Amazon S3 sebagai target untuk AWS DMS](#CHAP_Target.S3.Configuring) pada akhir bagian ini.

Untuk mencegah spoofing, AWS DMS validasi kepemilikan bucket sebelum melakukan operasi. Secara default, jika setelan endpoint `ExpectedBucketOwner` Amazon S3 tidak ditentukan, AWS DMS gunakan ID AWS akun yang memiliki peran AWS DMS layanan sebagai pemilik bucket yang diharapkan.

Untuk memigrasikan data ke bucket S3 yang dimiliki oleh AWS akun lain, Anda harus secara eksplisit menentukan pemilik bucket yang sebenarnya dalam setelan titik akhir Amazon S3`ExpectedBucketOwner`, seperti yang ditunjukkan berikut. Jika tidak, tugas replikasi lintas akun akan gagal.

```
--s3-settings '{"ExpectedBucketOwner": "AWS_Account_ID"}'
```

Saat Anda menggunakan AWS DMS untuk mereplikasi perubahan data menggunakan tugas CDC, kolom pertama dari file keluaran.csv atau.parquet menunjukkan bagaimana data baris diubah seperti yang ditunjukkan untuk file.csv berikut.

```
I,101,Smith,Bob,4-Jun-14,New York
U,101,Smith,Bob,8-Oct-15,Los Angeles
U,101,Smith,Bob,13-Mar-17,Dallas
D,101,Smith,Bob,13-Mar-17,Dallas
```

Untuk contoh ini, anggaplah ada `EMPLOYEE` tabel di database sumber. AWS DMS menulis data ke file.csv atau .parquet, sebagai tanggapan atas peristiwa berikut:
+ Seorang karyawan baru (Bob Smith, ID karyawan 101) dipekerjakan pada 4-Jun-14 di kantor New York. Dalam file .csv atau .parquet, `I` di kolom pertama menunjukkan bahwa baris baru di`INSERT`kan ke tabel EMPLOYEE di basis data sumber.
+ Pada 8-Okt-15, Bob pindah ke kantor Los Angeles. Dalam file .csv atau .parquet, `U` menunjukkan bahwa baris yang sesuai dalam tabel EMPLOYEE di`UPDATE` untuk mencerminkan lokasi kantor Bob yang baru. Sisa barisan mencerminkan baris dalam tabel EMPLOYEE seperti yang muncul setelah `UPDATE`. 
+ Pada 13-Mar-17, Bob ditransfer lagi ke kantor Dallas. Dalam file .csv atau .parquet, `U` menunjukkan bahwa baris ini di`UPDATE` lagi. Sisa barisan mencerminkan baris dalam tabel EMPLOYEE seperti yang muncul setelah `UPDATE`.
+ Setelah beberapa waktu bekerja di Dallas, Bob meninggalkan perusahaan. Dalam file .csv atau .parquet, `D` menunjukkan bahwa baris ini di`DELETE`kan di tabel sumber. Sisa barisan mencerminkan bagaiman tampilan baris dalam tabel EMPLOYEE sebelum data baris dihapus.

Perhatikan bahwa secara default untuk CDC, AWS DMS menyimpan perubahan baris untuk setiap tabel database tanpa memperhatikan urutan transaksi. Jika Anda ingin menyimpan perubahan baris dalam file CDC sesuai urutan transaksi, Anda harus menggunakan pengaturan titik akhir S3 untuk menentukan hal ini dan jalur folder di mana Anda ingin file transaksi CDC disimpan pada target S3. Untuk informasi lebih lanjut, lihat [Perubahan pengambilan data (CDC) termasuk transaksi order pada target S3](#CHAP_Target.S3.EndpointSettings.CdcPath).

Untuk mengontrol frekuensi menulis ke target Amazon S3 selama tugas replikasi data, Anda dapat mengonfigurasi atribut koneksi tambahan `cdcMaxBatchInterval` dan `cdcMinFileSize`. Hal ini dapat menghasilkan performa yang lebih baik ketika menganalisis data tanpa operasi overhead tambahan. Untuk informasi lebih lanjut, lihat [Pengaturan titik akhir saat menggunakan Amazon S3 sebagai target untuk AWS DMS](#CHAP_Target.S3.Configuring) 

**Topics**
+ [Prasyarat penggunaan Amazon S3 sebagai target](#CHAP_Target.S3.Prerequisites)
+ [Keterbatasan penggunaan Amazon S3 sebagai target](#CHAP_Target.S3.Limitations)
+ [Keamanan](#CHAP_Target.S3.Security)
+ [Menggunakan Apache Parquet untuk menyimpan objek Amazon S3](#CHAP_Target.S3.Parquet)
+ [Penandaan objek Amazon S3](#CHAP_Target.S3.Tagging)
+ [Membuat AWS KMS kunci untuk mengenkripsi objek target Amazon S3](#CHAP_Target.S3.KMSKeys)
+ [Menggunakan partisi folder berdasarkan tanggal](#CHAP_Target.S3.DatePartitioning)
+ [Beban paralel sumber yang dipartisi saat menggunakan Amazon S3 sebagai target AWS DMS](#CHAP_Target.S3.ParallelLoad)
+ [Pengaturan titik akhir saat menggunakan Amazon S3 sebagai target untuk AWS DMS](#CHAP_Target.S3.Configuring)
+ [Menggunakan AWS Glue Data Catalog dengan target Amazon S3 untuk AWS DMS](#CHAP_Target.S3.GlueCatalog)
+ [Menggunakan enkripsi data, file parket, dan CDC pada target Amazon S3 Anda](#CHAP_Target.S3.EndpointSettings)
+ [Menunjukkan operasi sumber DB dalam data S3 bermigrasi](#CHAP_Target.S3.Configuring.InsertOps)
+ [Tipe data target untuk S3 Parquet](#CHAP_Target.S3.DataTypes)

## Prasyarat penggunaan Amazon S3 sebagai target
<a name="CHAP_Target.S3.Prerequisites"></a>

Sebelum menggunakan Amazon S3 sebagai target, pastikan bahwa hal berikut ini benar: 
+ Bucket S3 yang Anda gunakan sebagai target berada di AWS Wilayah yang sama dengan instance replikasi DMS yang Anda gunakan untuk memigrasikan data Anda.
+  AWS Akun yang Anda gunakan untuk migrasi memiliki peran IAM dengan akses tulis dan hapus ke bucket S3 yang Anda gunakan sebagai target.
+ Peran ini memiliki akses penandaan sehingga Anda dapat menandai objek S3 apa pun yang ditulis ke target bucket.
+ IAM role memiliki DMS (dms.amazonaws.com) yang ditambahkan sebagai *entitas terpercaya*. 
+ Untuk AWS DMS versi 3.4.7 dan yang lebih tinggi, DMS harus mengakses bucket sumber melalui titik akhir VPC atau rute umum. Untuk informasi tentang titik akhir VPC, lihat. [Mengkonfigurasi titik akhir VPC untuk AWS DMS](CHAP_VPC_Endpoints.md)

Untuk mengatur akses akun ini, pastikan peran yang diberikan ke akun pengguna yang digunakan untuk membuat tugas migrasi memiliki serangkaian izin berikut.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:DeleteObject",
                "s3:PutObjectTagging"
            ],
            "Resource": [
                "arn:aws:s3:::buckettest2/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::buckettest2"
            ]
        }
    ]
}
```

------

Untuk prasyarat untuk menggunakan validasi dengan S3 sebagai target, lihat. [Prasyarat validasi target S3](CHAP_Validating_S3.md#CHAP_Validating_S3_prerequisites)

## Keterbatasan penggunaan Amazon S3 sebagai target
<a name="CHAP_Target.S3.Limitations"></a>

Batasan berikut berlaku saat menggunakan Amazon S3 sebagai target:
+ Jangan aktifkan pembuatan versi untuk S3. Jika Anda memerlukan versi S3, gunakan kebijakan siklus hidup untuk menghapus versi lama secara aktif. Jika tidak, Anda mungkin mengalami kegagalan koneksi pengujian titik akhir karena batas waktu `list-object` panggilan S3. Untuk membuat kebijakan siklus hidup bucket S3, lihat [Mengelola siklus hidup](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html) penyimpanan. Untuk menghapus versi objek S3, lihat [Menghapus versi objek dari bucket berkemampuan versi](https://docs.aws.amazon.com/AmazonS3/latest/dev/DeletingObjectVersions.html).
+ Bucket S3 berkemampuan VPC (gateway VPC) didukung dalam versi 3.4.7 dan yang lebih tinggi.
+ Perintah bahasa definisi data berikut (DDL) didukung untuk perubahan penangkapan data (CDC): Truncate Table, Drop Table, Create Table, Rename Table, Add Column, Drop Column, Rename Column, dan Change COlumn Data Type. Perhatikan bahwa ketika kolom ditambahkan, dihapus, atau diganti namanya pada database sumber, tidak ada pernyataan ALTER yang direkam dalam bucket S3 target, dan AWS DMS tidak mengubah catatan yang dibuat sebelumnya agar sesuai dengan struktur baru. Setelah perubahan, AWS DMS membuat catatan baru menggunakan struktur tabel baru.
**catatan**  
Operasi pemotongan DDL menghapus semua file dan folder tabel yang terkait dari bucket S3. Anda dapat menggunakan pengaturan tugas untuk menonaktifkan perilaku itu dan mengonfigurasi cara DMS menangani perilaku DDL selama pengambilan perubahan data (CDC). Untuk informasi lebih lanjut, lihat [Pengaturan tugas untuk perubahan pengolahan DDL penanganan](CHAP_Tasks.CustomizingTasks.TaskSettings.DDLHandling.md).
+ Mode LOB penuh tidak didukung.
+ Perubahan pada struktur tabel sumber selama beban penuh tidak didukung. Perubahan data didukung selama beban penuh.
+ Beberapa tugas yang mereplikasi data dari tabel sumber yang sama untuk titik akhir bucket S3 target yang sama, mengakibatkan tugas-tugas itu menulis ke dalam file yang sama. Kami sarankan Anda menentukan titik akhir target yang berbeda (buckets) jika sumber data Anda berasal dari tabel yang sama.
+ `BatchApply` tidak didukung untuk titik akhir S3. Menggunakan penerapan Batch (misalnya, pengaturan tugas metadata target `BatchApplyEnabled`) untuk target S3 dapat mengakibatkan hilangnya data.
+ Anda tidak dapat menggunakan `DatePartitionEnabled` atau `addColumnName` bersama-sama dengan `PreserveTransactions` atau`CdcPath`.
+ AWS DMS tidak mendukung penggantian nama beberapa tabel sumber ke folder target yang sama menggunakan aturan transformasi.
+ Jika ada penulisan intensif ke tabel sumber selama fase beban penuh, DMS dapat menulis catatan duplikat ke bucket S3 atau perubahan cache.
+ Jika Anda mengonfigurasi tugas dengan `TargetTablePrepMode` of`DO_NOTHING`, DMS dapat menulis catatan duplikat ke bucket S3 jika tugas berhenti dan dilanjutkan secara tiba-tiba selama fase pemuatan penuh.
+ Jika Anda mengonfigurasi titik akhir target dengan `PreserveTransactions` pengaturan`true`, memuat ulang tabel tidak akan menghapus file CDC yang dihasilkan sebelumnya. Untuk informasi selengkapnya, lihat [Perubahan pengambilan data (CDC) termasuk transaksi order pada target S3](#CHAP_Target.S3.EndpointSettings.CdcPath).

Untuk batasan penggunaan validasi dengan S3 sebagai target, lihat. [Batasan untuk menggunakan validasi target S3](CHAP_Validating_S3.md#CHAP_Validating_S3_limitations)

## Keamanan
<a name="CHAP_Target.S3.Security"></a>

Untuk menggunakan Amazon S3 sebagai target, akun yang digunakan untuk migrasi harus memiliki akses tulis dan hapus terhadap bucket Amazon S3 yang digunakan sebagai target. Tentukan Amazon Resource Name (ARN) dari IAM role yang memiliki izin yang diperlukan untuk mengakses Amazon S3. 

AWS DMS mendukung sekumpulan hibah yang telah ditentukan untuk Amazon S3, yang dikenal sebagai daftar kontrol akses kaleng (). ACLs Setiap ACL terekam memiliki serangkaian penerima dan izin yang dapat Anda gunakan untuk mengatur izin bucket Amazon S3. Anda dapat menentukan ACL terekam menggunakan `cannedAclForObjects` pada atribut string koneksi untuk titik akhir target S3 Anda. Untuk informasi lebih lanjut tentang penggunaan atribut koneksi tambahan `cannedAclForObjects`, lihat [Pengaturan titik akhir saat menggunakan Amazon S3 sebagai target untuk AWS DMS](#CHAP_Target.S3.Configuring). Untuk informasi lebih lanjut tentang Amazon S3 kaleng ACLs, lihat ACL [Kalengan](https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#canned-acl).

IAM role yang Anda gunakan untuk migrasi harus dapat melakukan Operasi API `s3:PutObjectAcl`.

## Menggunakan Apache Parquet untuk menyimpan objek Amazon S3
<a name="CHAP_Target.S3.Parquet"></a>

Format comma-separated value (.csv) adalah format penyimpanan default untuk objek target Amazon S3. Untuk penyimpanan yang lebih ringkas dan kueri lebih cepat, sebagai gantinya Anda bisa menggunakan Apache Parquet (.parquet) sebagai format penyimpanan.

Apache Parquet adalah format penyimpanan file sumber terbuka yang awalnya dirancang untuk Hadoop. Untuk informasi lebih lanjut tentang Apache Parket, lihat [https://parquet.apache.org/](https://parquet.apache.org/).

Untuk mengatur .parquet sebagai format penyimpanan untuk objek target S3 dimigrasikan, Anda dapat menggunakan mekanisme berikut:
+ Pengaturan titik akhir yang Anda berikan sebagai parameter objek JSON ketika Anda membuat titik akhir menggunakan AWS CLI atau API untuk AWS DMS. Untuk informasi selengkapnya, lihat [Menggunakan enkripsi data, file parket, dan CDC pada target Amazon S3 Anda](#CHAP_Target.S3.EndpointSettings).
+ Atribut koneksi tambahan yang Anda berikan sebagai daftar yang dipisahkan titik koma saat Anda membuat titik akhir. Untuk informasi lebih lanjut, lihat [Pengaturan titik akhir saat menggunakan Amazon S3 sebagai target untuk AWS DMS](#CHAP_Target.S3.Configuring).

## Penandaan objek Amazon S3
<a name="CHAP_Target.S3.Tagging"></a>

Anda dapat menandai objek Amazon S3 yang dibuat oleh instans replikasi dengan menentukan objek JSON yang sesuai sebagai bagian dari aturan pemetaan tabel tugas. Untuk informasi selengkapnya tentang persyaratan dan opsi untuk penandaan objek S3, termasuk nama tag yang valid, lihat [Penandaan objek](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-tagging.html) di Panduan Pengguna *Layanan Penyimpanan Sederhana Amazon*. Untuk informasi lebih lanjut tentang pemetaan tabel menggunakan JSON, lihat [Menentukan pemilihan tabel dan transformasi aturan menggunakan JSON](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.md).

Anda menandai objek S3 yang dibuat untuk tabel dan skema tertentu dengan menggunakan satu atau lebih objek JSON dari jenis aturan `selection`. Anda kemudian mengikuti objek `selection` ini (atau beberapa objek) oleh satu atau lebih objek JSON dari jenis aturan `post-processing` dengan tindakan `add-tag`. Aturan pasca-pemrosesan ini mengidentifikasi objek S3 yang ingin Anda, tandai dan menentukan nama dan nilai-nilai tanda yang ingin Anda tambahkan ke objek S3 ini.

Anda dapat menemukan parameter yang akan ditetapkan dalam objek JSON dari tipe aturan `post-processing` dalam tabel berikut.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/dms/latest/userguide/CHAP_Target.S3.html)

Ketika Anda menentukan beberapa jenis aturan `post-processing` untuk menandai pilihan objek S3, setiap objek S3 ditandai menggunakan hanya satu objek `tag-set` dari satu aturan pasca-pemrosesan. Seperangkat tanda tertentu yang digunakan untuk menandai objek S3 yang diberikan adalah yang berasal dari aturan pasca-pemrosesan yang pencari objek terkaitnya paling sesuai dengan objek S3 tersebut. 

Misalnya anggaplah bahwa dua aturan pasca-pemrosesan mengidentifikasi objek S3 yang sama. Misalkan juga pencari objek dari satu aturan menggunakan wildcard dan pencari objek dari aturan lain menggunakan exact match untuk mengidentifikasi objek S3 (tanpa wildcard). Dalam hal ini, seperangkat tanda yang terkait dengan aturan pasca-pemrosesan dengan exact match digunakan untuk menandai objek S3. Jika beberapa aturan pasca-pemrosesan cocok dengan objek S3 yang diberikan dengan sama baiknya, seperangkat tanda yang terkait dengan aturan pasca-pemrosesan pertama digunakan untuk menandai objek.

**Example Menambahkan tanda statis ke objek S3 yang dibuat untuk tabel dan skema tunggal**  
Aturan pemilihan dan pasca-pemrosesan berikut menambahkan tiga tanda (`tag_1`, `tag_2`, dan `tag_3` dengan nilai statis yang sesuai `value_1`, `value_2`, dan `value_3`) ke objek S3 yang sudah dibuat. Objek S3 ini berkaitan dengan sebuah tabel di sumber bernama `STOCK` dengan skema bernama `aat2`.  

```
{
    "rules": [
        {
            "rule-type": "selection",
            "rule-id": "5",
            "rule-name": "5",
            "object-locator": {
                "schema-name": "aat2",
                "table-name": "STOCK"
            },
            "rule-action": "include"
        },
        {
            "rule-type": "post-processing",
            "rule-id": "41",
            "rule-name": "41",
            "rule-action": "add-tag",
            "object-locator": {
                "schema-name": "aat2",
                "table-name": "STOCK"
            },
            "tag-set": [
              {
                "key": "tag_1",
                "value": "value_1"
              },
              {
                "key": "tag_2",
                "value": "value_2"
              },
              {
                "key": "tag_3",
                "value": "value_3"
              }                                     
           ]
        }
    ]
}
```

**Example Menambahkan tanda statis ke objek S3 yang dibuat untuk beberapa tabel dan skema**  
Contoh berikut memiliki satu pilihan dan dua aturan pasca-pemrosesan, dengan masukan dari sumber mencakup semua tabel dan semua skema mereka.  

```
{
    "rules": [
        {
            "rule-type": "selection",
            "rule-id": "1",
            "rule-name": "1",
            "object-locator": {
                "schema-name": "%",
                "table-name": "%"
            },
            "rule-action": "include"
        },
        {
            "rule-type": "post-processing",
            "rule-id": "21",
            "rule-name": "21",
            "rule-action": "add-tag",
            "object-locator": {
                "schema-name": "%",
                "table-name": "%",
            },
            "tag-set": [
              { 
                "key": "dw-schema-name",
                "value":"${schema-name}"
              },
              {
                "key": "dw-schema-table",
                "value": "my_prefix_${table-name}"
              }
            ]
        },
        {
            "rule-type": "post-processing",
            "rule-id": "41",
            "rule-name": "41",
            "rule-action": "add-tag",
            "object-locator": {
                "schema-name": "aat",
                "table-name": "ITEM",
            },
            "tag-set": [
              {
                "key": "tag_1",
                "value": "value_1"
              },
              {
                "key": "tag_2",
                "value": "value_2"
              }           ]
        }
    ]
}
```
Aturan pasca-pemrosesan pertama menambahkan dua tanda (`dw-schema-name` dan `dw-schema-table`) dengan nilai dinamis yang sesuai (`${schema-name}` dan `my_prefix_${table-name}`) untuk hampir semua objek S3 yang dibuat dalam target. Kecuali ketika objek S3 diidentifikasi dan ditandai dengan aturan pasca-pemrosesan kedua. Sehingga setiap objek target S3 yang teridentifikasi oleh pencari objek wildcard dibuat dengan penanda yang mengidentifikasi skema dan tabel yang sesuai dengan sumbernya.  
Aturan pasca-pemrosesan kedua menambahkan `tag_1` dan `tag_2` dengan nilai statis yang sesuai dengan `value_1` dan `value_2` ke objek S3 yang sudah dibuat yang teridentifikasi oleh pencari objek yang sama persis. Objek S3 yang dibuat ini sesuai dengan tabel tunggal di sumber bernama `ITEM` dengan skema bernama `aat`. Karena objek yang sama persis, tanda ini menggantikan tanda apa pun pada objek yang ditambahkan dari aturan pasca-pemrosesan pertama ini, yang membandingkan objek S3 hanya berdasarkan wildcard saja.

**Example Menambahkan nilai maupun nama tanda dinamis ke objek S3**  
Contoh berikut memiliki dua aturan seleksi dan satu aturan pasca-pemrosesan. Di sini, masukan dari sumber hanya menyertakan tabel `ITEM` di skema `retail` atau `wholesale`.  

```
{
    "rules": [
        {
            "rule-type": "selection",
            "rule-id": "1",
            "rule-name": "1",
            "object-locator": {
                "schema-name": "retail",
                "table-name": "ITEM"
            },
            "rule-action": "include"
        },
        {
            "rule-type": "selection",
            "rule-id": "1",
            "rule-name": "1",
            "object-locator": {
                "schema-name": "wholesale",
                "table-name": "ITEM"
            },
            "rule-action": "include"
        },
        {
            "rule-type": "post-processing",
            "rule-id": "21",
            "rule-name": "21",
            "rule-action": "add-tag",
            "object-locator": {
                "schema-name": "%",
                "table-name": "ITEM",
            },
            "tag-set": [
              { 
                "key": "dw-schema-name",
                "value":"${schema-name}"
              },
              {
                "key": "dw-schema-table",
                "value": "my_prefix_ITEM"
              },
              {
                "key": "${schema-name}_ITEM_tag_1",
                "value": "value_1"
              },
              {
                "key": "${schema-name}_ITEM_tag_2",
                "value": "value_2"
              }
            ]
    ]
}
```
Tanda yang ditetapkan untuk aturan pasca-pemrosesan menambahkan dua tanda (`dw-schema-name` dan `dw-schema-table`) untuk semua objek S3 yang dibuat untuk tabel `ITEM` di target. Tanda pertama mempunyai nilai dinamis `"${schema-name}"` dan tanda kedua memiliki nilai statis, `"my_prefix_ITEM"`. Jadi, setiap objek target S3 dibuat dengan tanda yang mengidentifikasi skema dan tabel yang sesuai dengan sumbernya.   
Selain itu, sekolompok tanda menambahkan dua tanda tambahan dengan nama dinamis (`${schema-name}_ITEM_tag_1` dan `"${schema-name}_ITEM_tag_2"`). Tanda Ini memiliki nilai statis yang sesuai `value_1` dan `value_2`. Sehingga penanda ini masing-masing dinamai untuk skema saat ini, `retail` atau `wholesale`. Anda tidak dapat membuat salinan penanda nama dinamis dalam objek ini karena setiap objek dibuat untuk satu nama skema unik. Nama skema digunakan untuk membuat nama tanda yang unik.

## Membuat AWS KMS kunci untuk mengenkripsi objek target Amazon S3
<a name="CHAP_Target.S3.KMSKeys"></a>

Anda dapat membuat dan menggunakan AWS KMS kunci khusus untuk mengenkripsi objek target Amazon S3 Anda. Setelah membuat kunci KMS, Anda dapat menggunakannya untuk mengenkripsi objek menggunakan salah satu pendekatan berikut ketika Anda membuat titik akhir target S3:
+ Gunakan pilihan berikut untuk objek target S3 (dengan format penyimpanan file .csv default) ketika Anda menjalankan perintah `create-endpoint` menggunakan AWS CLI.

  ```
  --s3-settings '{"ServiceAccessRoleArn": "your-service-access-ARN", 
  "CsvRowDelimiter": "\n", "CsvDelimiter": ",", "BucketFolder": "your-bucket-folder", 
  "BucketName": "your-bucket-name", "EncryptionMode": "SSE_KMS", 
  "ServerSideEncryptionKmsKeyId": "your-KMS-key-ARN"}'
  ```

  Di sini, Anda- `your-KMS-key-ARN` adalah Nama Sumber Daya Amazon (ARN) untuk kunci KMS Anda dan diperlukan peran IAM Anda memiliki izin akses, lihat. [Menggunakan enkripsi data, file parket, dan CDC pada target Amazon S3 Anda](#CHAP_Target.S3.EndpointSettings)
+ Tetapkan atribut koneksi tambahan `encryptionMode` ke nilai `SSE_KMS` dan atribut koneksi tambahan `serverSideEncryptionKmsKeyId` ke ARN untuk kunci KMS Anda. Untuk informasi selengkapnya, lihat [Pengaturan titik akhir saat menggunakan Amazon S3 sebagai target untuk AWS DMS](#CHAP_Target.S3.Configuring).

Untuk mengenkripsi objek target Amazon S3 menggunakan kunci KMS, Anda memerlukan peran IAM yang memiliki izin untuk mengakses bucket Amazon S3. IAM role ini kemudian diakses dalam sebuah kebijakan (kebijakan kunci) yang dilampirkan ke kunci enkripsi yang Anda buat. Anda dapat melakukannya melalui konsol IAM Anda dengan membuat hal berikut:
+ Kebijakan dengan izin untuk mengakses bucket Amazon S3.
+ IAM role dengan kebijakan ini.
+ Kunci enkripsi kunci KMS dengan kebijakan kunci yang mereferensikan peran ini.

Prosedur berikut menjelaskan cara pembuatannya.

**Membuat kebijakan IAM dengan izin mengakses bucket Amazon S3**

1. Buka konsol IAM di [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

1. Di panel navigasi, pilih **Kebijakan**. Halaman **Kebijakan** terbuka.

1. Pilih **Buat kebijakan**. Halaman **Buat kebijakan** terbuka.

1. Pilih **Layanan** dan pilih **S3**. Daftar izin tindakan ditampilkan.

1. Pilih **Perluas semua** untuk memperluas daftar dan minimal pilih izin berikut:
   + **ListBucket**
   + **PutObject**
   + **DeleteObject**

   Pilih izin lain yang Anda butuhkan, lalu pilih **Kolaps semua** untuk menutup daftar.

1. Pilih **Sumber Daya** Untuk menentukan sumber daya yang ingin Anda akses. Minimal, pilih **Semua sumber daya** Untuk menyediakan akses sumber daya Amazon S3 secara umum.

1. Tambahkan kondisi atau izin lain apa pun yang Anda butuhkan, lalu pilih **Tinjau kebijakan**. Periksa hasil Anda di halaman **Tinjau kebijakan**.

1. Jika pengaturannya sudah sesuai kebutuhan Anda, masukkan nama untuk kebijakan (misalnya `DMS-S3-endpoint-access`), dan berikan deskripsi apa pun, lalu pilih **Buat kebijakan**. Halaman **Kebijakan** terbuka dengan pesan yang menunjukkan bahwa kebijakan Anda telah dibuat.

1. Cari dan pilih nama kebijakan di daftar **Kebijakan**. Halaman **Ringkasan** muncul dengan menampilkan JSON untuk kebijakan yang serupa dengan berikut ini.

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "VisualEditor0",
               "Effect": "Allow",
               "Action": [
                   "s3:PutObject",
                   "s3:ListBucket",
                   "s3:DeleteObject"
               ],
               "Resource": "*"
           }
       ]
   }
   ```

------

Anda sekarang telah membuat kebijakan baru untuk mengakses sumber daya Amazon S3 untuk enkripsi dengan nama tertentu, misalnya `DMS-S3-endpoint-access`.

**Membuat IAM role menggunakan kebijakan ini**

1. Di panel navigasi konsol IAM, pilih **Peran**. Halaman detail **Peran** terbuka.

1. Pilih **Buat peran**. Halaman **Buat peran** terbuka.

1. Dengan AWS layanan yang dipilih sebagai entitas tepercaya, pilih **DMS** sebagai layanan untuk menggunakan peran IAM.

1. Pilih **Berikutnya: Izin**. Tampilan **Lampirkan kebijakan izin** muncul di halaman **Buat peran**.

1. Temukan dan pilih kebijakan IAM untuk IAM role yang Anda buat di prosedur sebelumnya (`DMS-S3-endpoint-access`).

1. Pilih **Berikutnya: Penandaan**. Tampilan **Tambahkan penandaan** muncul di halaman **Buat peran**. Di sini, Anda dapat menambahkan tanda apa pun yang Anda inginkan.

1. Pilih **Berikutnya: Tinjauan**. Tampilan **Ulasan** muncul di halaman **Buat peran**. Di sini Anda dapat memverifikasi hasilnya.

1. Jika pengaturan sudah sesuai dengan kebutuhan Anda, masukkan nama untuk peran (wajib, misalnya, `DMS-S3-endpoint-access-role`), dan deskripsi tambahan apa pun, lalu pilih **Buat peran**. Halaman detail **Peran** terbuka dengan pesan yang menunjukkan bahwa peran Anda telah dibuat.

Anda sekarang telah membuat peran baru untuk mengakses sumber daya Amazon S3 untuk enkripsi dengan nama tertentu, misalnya, `DMS-S3-endpoint-access-role`.

**Untuk membuat kunci enkripsi kunci KMS dengan kebijakan kunci yang mereferensikan peran IAM Anda**
**catatan**  
Untuk informasi selengkapnya tentang cara AWS DMS kerja dengan kunci AWS KMS enkripsi, lihat[Menyetel kunci enkripsi dan menentukan izin AWS KMS](CHAP_Security.md#CHAP_Security.EncryptionKey).

1. Masuk ke Konsol Manajemen AWS dan buka konsol AWS Key Management Service (AWS KMS) di [https://console.aws.amazon.com/kms](https://console.aws.amazon.com/kms).

1. Untuk mengubah Wilayah AWS, gunakan pemilih Wilayah di sudut kanan atas halaman.

1. Di panel navigasi, pilih **Kunci yang dikelola pelanggan**.

1. Pilih **Buat kunci**. Halaman **Konfigurasi kunci** terbuka.

1. Untuk **Tipe Kunci**, pilih **Simetris**.
**catatan**  
Saat Anda membuat kunci ini, Anda hanya dapat membuat kunci simetris, karena semua AWS layanan, seperti Amazon S3, hanya berfungsi dengan kunci enkripsi simetris.

1. Pilih **Pilihan lanjutan**. Untuk **Asal material kunci**, pastikan bahwa **KMS** dipilih, lalu pilih **Selanjutnya**. Halaman **Tambahkan label** terbuka.

1. Untuk **Buat alias dan deskripsi**, masukkan alias untuk kunci (misalnya, `DMS-S3-endpoint-encryption-key`) dan keterangan tambahan apa pun.

1. Untuk **Penandaan**, tambahkan tanda apa pun yang Anda inginkan untuk membantu mengidentifikasi kunci dan melacak penggunaannya, lalu pilih **Selanjutnya**. Halaman **Tentukan izin administratif kunci** terbuka dan menampilkan daftar pengguna dan peran yang dapat Anda pilih.

1. Tambahkan pengguna dan peran yang Anda inginkan untuk mengelola kunci. Pastikan bahwa pengguna dan peran ini memiliki izin yang diperlukan untuk mengelola kunci. 

1. Untuk **Penghapusan kunci**, pilih apakah administrator kunci dapat menghapus kunci, lalu pilih **Selanjutnya**. Halaman **Tentukan izin penggunaan kunci** terbuka dengan menampilkan daftar pengguna dan peran tambahan yang dapat Anda pilih.

1. Untuk **Akun ini**, pilih pengguna yang tersedia Anda inginkan untuk melakukan operasi kriptografi pada target Amazon S3. Pilih juga peran yang sebelumnya Anda buat di **Peran** untuk mengaktifkan akses untuk mengenkripsi objek target Amazon S3, misalnya `DMS-S3-endpoint-access-role`).

1. Jika Anda ingin menambahkan akun lain yang tidak terdaftar untuk memiliki akses yang sama, untuk ** AWS Akun lain**, pilih **Tambah AWS akun lain**, lalu pilih **Berikutnya**. Halaman **Meninjau dan mengedit kebijakan kunci** terbuka dan menampilkan JSON untuk kebijakan kunci yang dapat Anda tinjau dan edit dengan mengetik ke JSON yang ada. Di sini, Anda dapat melihat tempat kebijakan kunci mereferensikan peran dan pengguna (misalnya, `Admin` dan `User1`) yang sudah Anda pilih pada langkah sebelumnya. Anda juga dapat melihat tindakan kunci berbeda yang diizinkan untuk principal yang berbeda (pengguna dan peran), seperti yang ditunjukkan pada contoh berikut.

------
#### [ JSON ]

****  

   ```
   {
       "Id": "key-consolepolicy-3",
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "Enable IAM User Permissions",
               "Effect": "Allow",
               "Principal": {
                   "AWS": [
                       "arn:aws:iam::111122223333:root"
                   ]
               },
               "Action": "kms:*",
               "Resource": "*"
           },
           {
               "Sid": "Allow access for Key Administrators",
               "Effect": "Allow",
               "Principal": {
                   "AWS": [
                       "arn:aws:iam::111122223333:role/Admin"
                   ]
               },
               "Action": [
                   "kms:Create*",
                   "kms:Describe*",
                   "kms:Enable*",
                   "kms:List*",
                   "kms:Put*",
                   "kms:Update*",
                   "kms:Revoke*",
                   "kms:Disable*",
                   "kms:Get*",
                   "kms:Delete*",
                   "kms:TagResource",
                   "kms:UntagResource",
                   "kms:ScheduleKeyDeletion",
                   "kms:CancelKeyDeletion"
               ],
               "Resource": "*"
           },
           {
               "Sid": "Allow use of the key",
               "Effect": "Allow",
               "Principal": {
                   "AWS": [
                       "arn:aws:iam::111122223333:role/DMS-S3-endpoint-access-role",
                       "arn:aws:iam::111122223333:role/Admin",
                       "arn:aws:iam::111122223333:role/User1"
                   ]
               },
               "Action": [
                   "kms:Encrypt",
                   "kms:Decrypt",
                   "kms:ReEncrypt*",
                   "kms:GenerateDataKey*",
                   "kms:DescribeKey"
               ],
               "Resource": "*"
           },
           {
               "Sid": "Allow attachment of persistent resources",
               "Effect": "Allow",
               "Principal": {
                   "AWS": [
                       "arn:aws:iam::111122223333:role/DMS-S3-endpoint-access-role",
                       "arn:aws:iam::111122223333:role/Admin",
                       "arn:aws:iam::111122223333:role/User1"
                   ]
               },
               "Action": [
                   "kms:CreateGrant",
                   "kms:ListGrants",
                   "kms:RevokeGrant"
               ],
               "Resource": "*",
               "Condition": {
                   "Bool": {
                       "kms:GrantIsForAWSResource": true
                   }
               }
           }
       ]
   }
   ```

------

1. Pilih **Selesai**. Halaman **kunci Enkripsi** terbuka dengan pesan yang menunjukkan bahwa kunci KMS Anda telah dibuat.

Anda sekarang telah membuat bukti kunci KMS baru dengan nama alias tertentu (misalnya `DMS-S3-endpoint-encryption-key`). Kunci ini memungkinkan AWS DMS untuk mengenkripsi objek target Amazon S3.

## Menggunakan partisi folder berdasarkan tanggal
<a name="CHAP_Target.S3.DatePartitioning"></a>

AWS DMS mendukung partisi folder S3 berdasarkan tanggal komit transaksi saat Anda menggunakan Amazon S3 sebagai titik akhir target Anda. Dengan menggunakan partisi folder berdasarkan tanggal, Anda dapat menulis data dari tabel sumber tunggal ke struktur folder dengan hirarki waktu dalam bucket S3. Dengan partisi folder saat membuat titik akhir target S3, Anda dapat melakukan hal berikut:
+ Mengelola objek S3 Anda dengan lebih baik
+ Membatasi ukuran setiap folder S3
+ Mengoptimalkan kueri danau data atau operasi lain setelahnya

Anda dapat mengaktifkan partisi folder berdasarkan tanggal ketika Anda membuat titik akhir S3. Anda dapat mengaktifkannya ketika memigrasikan data yang ada dan mereplikasi perubahan yang sedang berlangsung (beban penuh \$1 CDC), atau hanya mereplikasi perubahan data (CDC saja). Saat Anda memigrasikan data yang ada dan mereplikasi perubahan yang sedang berlangsung, hanya perubahan yang sedang berlangsung yang akan dipartisi. Gunakan pengaturan titik akhir target berikut:
+ `DatePartitionEnabled` – Menentukan partisi berdasarkan tanggal. Mengatur pilihan Boolean ini ke `true` untuk partisi folder bucket S3 berdasarkan tanggal melakukan transaksi. 

  Anda tidak dapat menggunakan pengaturan ini dengan `PreserveTransactions` atau`CdcPath`.

  Nilai default-nya adalah `false`. 
+ `DatePartitionSequence` – Mengidentifikasi urutan format tanggal yang digunakan selama partisi folder. Tetapkan pilihan ENUM ini ke `YYYYMMDD`, `YYYYMMDDHH`, `YYYYMM`, `MMYYYYDD`, atau `DDMMYYYY`. Nilai default-nya adalah `YYYYMMDD`. Gunakan pengaturan ini saat `DatePartitionEnabled` diatur ke `true.`
+ `DatePartitionDelimiter` – Menentukan pembatas pemisahan tanggal untuk digunakan selama partisi folder. Tetapkan pilihan ENUM ini ke `SLASH`, `DASH`, `UNDERSCORE`, atau `NONE`. Nilai default-nya adalah `SLASH`. Gunakan pengaturan ini saat `DatePartitionEnabled` diatur ke `true`.
+ `DatePartitionTimezone`— Saat membuat titik akhir target S3, atur `DatePartitionTimezone` untuk mengubah waktu UTC saat ini menjadi zona waktu tertentu. Konversi terjadi ketika folder partisi tanggal dibuat dan nama file CDC dihasilkan. Format zona waktu adalah Area/Lokasi. Gunakan parameter ini ketika `DatePartitionedEnabled` diatur ke`true`, seperti yang ditunjukkan pada contoh berikut:

  ```
  s3-settings='{"DatePartitionEnabled": true, "DatePartitionSequence": "YYYYMMDDHH", "DatePartitionDelimiter": "SLASH", "DatePartitionTimezone":"Asia/Seoul", "BucketName": "dms-nattarat-test"}'
  ```

Contoh berikut menunjukkan cara mengaktifkan partisi folder berdasarkan tanggal, dengan nilai default untuk urutan partisi data dan pembatas. Ini menggunakan `--s3-settings '{json-settings}'` opsi AWS CLI. `create-endpoint`perintah. 

```
   --s3-settings '{"DatePartitionEnabled": true,"DatePartitionSequence": "YYYYMMDD","DatePartitionDelimiter": "SLASH"}'
```

## Beban paralel sumber yang dipartisi saat menggunakan Amazon S3 sebagai target AWS DMS
<a name="CHAP_Target.S3.ParallelLoad"></a>

Anda dapat mengonfigurasi beban penuh paralel sumber data yang dipartisi ke target Amazon S3. Pendekatan ini meningkatkan waktu muat untuk memigrasikan data yang dipartisi dari mesin basis data sumber yang didukung ke target S3. Untuk meningkatkan waktu muat data sumber yang dipartisi, Anda membuat subfolder target S3 yang dipetakan ke partisi setiap tabel dalam database sumber. Subfolder terikat partisi ini memungkinkan untuk AWS DMS menjalankan proses paralel untuk mengisi setiap subfolder pada target.

Untuk mengonfigurasi beban penuh paralel dari target S3, S3 mendukung tiga tipe `parallel-load` aturan untuk `table-settings` aturan pemetaan tabel:
+ `partitions-auto`
+ `partitions-list`
+ `ranges`

Untuk informasi selengkapnya tentang jenis aturan beban paralel ini, lihat. [Tabel dan koleksi pengaturan aturan dan operasi](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Tablesettings.md)

Untuk tipe `partitions-auto` dan `partitions-list` aturan, AWS DMS gunakan setiap nama partisi dari titik akhir sumber untuk mengidentifikasi struktur subfolder target, sebagai berikut.

```
bucket_name/bucket_folder/database_schema_name/table_name/partition_name/LOADseq_num.csv
```

Di sini, jalur subfolder tempat data dimigrasikan dan disimpan pada target S3 menyertakan `partition_name` subfolder tambahan yang sesuai dengan partisi sumber dengan nama yang sama. `partition_name`Subfolder ini kemudian menyimpan satu atau lebih `LOADseq_num.csv` file yang berisi data yang dimigrasikan dari partisi sumber yang ditentukan. Di sini, `seq_num` adalah postfix nomor urut pada nama file.csv, seperti `00000001` di file.csv dengan nama,. `LOAD00000001.csv`

Namun, beberapa mesin database, seperti MongoDB dan DocumentDB, tidak memiliki konsep partisi. Untuk mesin database ini, AWS DMS tambahkan indeks segmen sumber berjalan sebagai awalan ke nama file.csv target, sebagai berikut.

```
.../database_schema_name/table_name/SEGMENT1_LOAD00000001.csv
.../database_schema_name/table_name/SEGMENT1_LOAD00000002.csv
...
.../database_schema_name/table_name/SEGMENT2_LOAD00000009.csv
.../database_schema_name/table_name/SEGMENT3_LOAD0000000A.csv
```

Di sini, file `SEGMENT1_LOAD00000001.csv` dan `SEGMENT1_LOAD00000002.csv` diberi nama dengan awalan indeks segmen sumber berjalan yang sama,`SEGMENT1`. Mereka dinamai demikian karena data sumber yang dimigrasi untuk dua file.csv ini dikaitkan dengan indeks segmen sumber berjalan yang sama. Di sisi lain, data migrasi yang disimpan di setiap target `SEGMENT2_LOAD00000009.csv` dan `SEGMENT3_LOAD0000000A.csv` file dikaitkan dengan indeks segmen sumber berjalan yang berbeda. Setiap file memiliki nama file yang diawali dengan nama indeks segmen yang sedang berjalan, `SEGMENT2` dan`SEGMENT3`.

Untuk jenis `ranges` beban paralel, Anda menentukan nama kolom dan nilai kolom menggunakan `columns` dan `boundaries` pengaturan aturan. `table-settings` Dengan aturan ini, Anda dapat menentukan partisi yang sesuai dengan nama segmen, sebagai berikut.

```
"parallel-load": {
    "type": "ranges",
    "columns": [
         "region",
         "sale"
    ],
    "boundaries": [
          [
               "NORTH",
               "1000"
          ],
          [
               "WEST",
               "3000"
          ]
    ],
    "segment-names": [
          "custom_segment1",
          "custom_segment2",
          "custom_segment3"
    ]
}
```

Di sini, `segment-names` pengaturan mendefinisikan nama untuk tiga partisi untuk memigrasikan data secara paralel pada target S3. Data yang dimigrasi dimuat secara paralel dan disimpan dalam file.csv di bawah subfolder partisi secara berurutan, sebagai berikut.

```
.../database_schema_name/table_name/custom_segment1/LOAD[00000001...].csv
.../database_schema_name/table_name/custom_segment2/LOAD[00000001...].csv
.../database_schema_name/table_name/custom_segment3/LOAD[00000001...].csv
```

Di sini, AWS DMS menyimpan serangkaian file.csv di masing-masing dari tiga subfolder partisi. Rangkaian file.csv di setiap subfolder partisi diberi nama secara bertahap mulai dari `LOAD00000001.csv` hingga semua data dimigrasikan.

Dalam beberapa kasus, Anda mungkin tidak secara eksplisit memberi nama subfolder partisi untuk jenis `ranges` beban paralel menggunakan pengaturan. `segment-names` Dalam hal ini, AWS DMS terapkan default untuk membuat setiap seri file.csv di bawah subfoldernya`table_name`. Di sini, AWS DMS awalan nama file dari setiap seri file.csv dengan nama indeks segmen sumber berjalan, sebagai berikut.

```
.../database_schema_name/table_name/SEGMENT1_LOAD[00000001...].csv
.../database_schema_name/table_name/SEGMENT2_LOAD[00000001...].csv
.../database_schema_name/table_name/SEGMENT3_LOAD[00000001...].csv
...
.../database_schema_name/table_name/SEGMENTZ_LOAD[00000001...].csv
```

## Pengaturan titik akhir saat menggunakan Amazon S3 sebagai target untuk AWS DMS
<a name="CHAP_Target.S3.Configuring"></a>

Anda dapat menggunakan pengaturan titik akhir untuk mengonfigurasi basis data target Amazon S3 mirip dengan menggunakan atribut koneksi tambahan. Anda menentukan pengaturan saat Anda membuat titik akhir target menggunakan AWS DMS konsol, atau dengan menggunakan `create-endpoint` perintah di [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html), dengan sintaks `--s3-settings '{"EndpointSetting": "value", ...}'` JSON.

**catatan**  
DMS menulis perubahan pada file Parket berdasarkan urutan komit dari database sumber, tetapi ketika memigrasi beberapa tabel, urutan transaksi asli tidak dipertahankan karena partisi tingkat tabel. Untuk mempertahankan informasi urutan transaksi, konfigurasikan pengaturan `TimestampColumnName` titik akhir untuk menyertakan stempel waktu komit sumber untuk setiap baris, yang kemudian dapat Anda gunakan dalam pemrosesan hilir untuk merekonstruksi urutan transaksi asli. Tidak seperti format CSV, yang menawarkan `PreserveTransactions` pengaturan, file Parket menangani transaksi secara berbeda karena struktur penyimpanan kolumnar mereka, tetapi pendekatan ini memungkinkan pelacakan akurat waktu komit sumber, mendukung rekonstruksi pesanan transaksi pasca-migrasi, dan memungkinkan pemrosesan data yang efisien sambil mempertahankan konsistensi data.

Tabel berikut menunjukkan pengaturan titik akhir yang dapat Anda gunakan dengan Amazon S3 sebagai target.


| **Opsi** | **Deskripsi** | 
| --- | --- | 
| CsvNullValue |  Parameter opsional yang menentukan bagaimana AWS DMS memperlakukan nilai-nilai null. Saat menangani nilai null, Anda dapat menggunakan parameter ini untuk meneruskan string yang ditetapkan pengguna sebagai null saat menulis ke target. Misalnya, ketika kolom target dapat dibatalkan, Anda dapat menggunakan opsi ini untuk membedakan antara nilai string kosong dan nilai null.  Nilai default: `""` Nilai valid: string apapun yang benar Contoh: `--s3-settings '{"CsvNullValue": "NULL"}'` Jika nilai kolom database sumber adalah nol, dalam file CSV S3, nilai kolom `NULL` bukan “” string.  | 
| AddColumnName |  Parameter opsional yang ketika diatur ke `true` atau `y`, dapat Anda gunakan untuk menambahkan informasi nama kolom ke file keluaran .csv. Anda tidak dapat menggunakan parameter ini dengan `PreserveTransactions` atau`CdcPath`. Nilai default: `false` Nilai valid: `true`, `false`, `y`, `n` Contoh: `--s3-settings '{"AddColumnName": true}'`  | 
| AddTrailingPaddingCharacter |  Gunakan pengaturan titik akhir target S3 `AddTrailingPaddingCharacter` untuk menambahkan padding pada data string. Nilai default-nya adalah `false`. Tipe: Boolean Contoh: `--s3-settings '{"AddTrailingPaddingCharacter": true}'`  | 
| BucketFolder |  Parameter opsional untuk menentukan nama folder dalam bucket S3. Jika tersedia, objek target dibuat sebagai file .csv atau .parquet di jalur `BucketFolder/schema_name/table_name/`. Jika parameter ini tidak ditentukan, maka jalur yang digunakan adalah `schema_name/table_name/`.  Contoh: `--s3-settings '{"BucketFolder": "testFolder"}'`  | 
| BucketName |  Nama bucket S3 di mana objek target S3 dibuat sebagai file .csv atau .parquet. Contoh: `--s3-settings '{"BucketName": "buckettest"}'`  | 
| CannedAclForObjects |  Nilai yang memungkinkan AWS DMS untuk menentukan daftar kontrol akses (kalengan) yang telah ditentukan sebelumnya untuk objek yang dibuat di bucket S3 sebagai file.csv atau .parquet. Untuk informasi selengkapnya tentang Amazon S3 kaleng ACLs, lihat [ACL Kalengan](https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#canned-acl) di Panduan Pengembang *Amazon* S3. Nilai default: NONE Nilai yang valid untuk atribut ini adalah: NONE; PRIVATE; PUBLIC\$1READ; PUBLIC\$1READ\$1WRITE; AUTHENTICATED\$1READ; \$1READ; BUCKET\$1OWNER\$1FULL\$1CONTROL. AWS\$1EXEC Contoh: `--s3-settings '{"CannedAclForObjects": "PUBLIC_READ"}'`  | 
| CdcInsertsOnly |  Parameter opsional selama beban pengambilan data perubahan (CDC) beban hanya bisa menulis operasi INSERT ke file output comma-separated value (.csv) atau penyimpanan berbentuk kolom (.parquet). Secara default (Pengaturan `false`), field pertama dalam catatan .csv atau .parquet berisi huruf I (INSERT), U (UPDATE), atau D (DELETE). Huruf ini menunjukkan apakah baris dimasukkan, diperbarui, atau dihapus pada basis data sumber untuk beban CDC ke target. Jika `cdcInsertsOnly` disetel ke `true` atau`y`, hanya INSERTs dari database sumber yang dimigrasikan ke file.csv atau .parquet. Untuk format .csv saja, cara pencatatan INSERT ini bergantung pada nilai `IncludeOpForFullLoad`. Jika `IncludeOpForFullLoad` diatur ke `true`, field pertama dari setiap catatan CDC diatur ke I untuk menunjukkan operasi INSERT pada sumber. Jika `IncludeOpForFullLoad` diatur ke `false`, setiap catatan CDC ditulis tanpa field pertama untuk menunjukkan operasi INSERT pada sumber. Untuk informasi lebih lanjut tentang cara parameter ini bekerja sama, lihat [Menunjukkan operasi sumber DB dalam data S3 bermigrasi](#CHAP_Target.S3.Configuring.InsertOps). Nilai default: `false` Nilai valid: `true`, `false`, `y`, `n` Contoh: `--s3-settings '{"CdcInsertsOnly": true}'`  | 
| CdcInsertsAndUpdates |  Mengaktifkan beban perubahan pengambilan data (CDC) untuk menulis operasi INSERT dan UPDATE untuk file keluaran .csv atau .parquet (penyimpanan berbentuk kolom). Pengaturan defaultnya adalah`false`, tetapi kapan `cdcInsertsAndUpdates` disetel ke `true` atau`y`, INSERTs dan UPDATEs dari database sumber dimigrasikan ke file.csv atau .parquet.  Untuk format file.csv saja, bagaimana ini INSERTs dan UPDATEs direkam tergantung pada nilai parameter. `includeOpForFullLoad` Jika `includeOpForFullLoad` diatur ke `true`, field pertama dari setiap catatan CDC diatur baik ke `I` maupun `U` untuk menunjukkan operasi INSERT dan UPDATE pada sumber. Tetapi jika `includeOpForFullLoad` diatur ke `false`, catatan CDC ditulis tanpa indikasi operasi INSERT atau UPDATE pada sumber.   Untuk informasi lebih lanjut tentang cara parameter ini bekerja sama, lihat [Menunjukkan operasi sumber DB dalam data S3 bermigrasi](#CHAP_Target.S3.Configuring.InsertOps).  `CdcInsertsOnly` dan `cdcInsertsAndUpdates` keduanya tidak dapat diatur ke true untuk titik akhir yang sama. Tetapkan salah satu antara `cdcInsertsOnly` atau `cdcInsertsAndUpdates` ke `true` untuk titik akhir yang sama, tapi tidak bisa keduanya.   Nilai default: `false` Nilai valid: `true`, `false`, `y`, `n` Contoh: `--s3-settings '{"CdcInsertsAndUpdates": true}'`  | 
|  `CdcPath`  |  Menentukan jalur folder file CDC. Untuk sumber S3, pengaturan ini diperlukan jika sebuah tugas menangkap perubahan data; jika tidak, itu opsional. Jika `CdcPath` diatur, DMS membaca file CDC dari jalur ini dan mereplikasi perubahan data ke titik akhir target. Untuk target S3, jika Anda menetapkan `PreserveTransactions` ke true, DMS memverifikasi bahwa Anda telah menetapkan parameter ini ke jalur folder pada target S3 Anda tempat DMS dapat menyimpan urutan transaksi untuk beban CDC. DMS membuat jalur folder CDC ini di direktori kerja target S3 Anda atau lokasi target S3 ditentukan oleh `BucketFolder` dan `BucketName`. Anda tidak dapat menggunakan parameter ini dengan `DatePartitionEnabled` atau`AddColumnName`. Tipe: String Misalnya, jika Anda menentukan `CdcPath` sebagai `MyChangedData`, dan Anda menetapkan `BucketName` sebagai `MyTargetBucket` tapi tidak menentukan `BucketFolder`, DMS akan menciptakan jalur folder CDC berikut: `MyTargetBucket/MyChangedData`.  Jika Anda menentukan `CdcPath` yang sama, dan Anda menetapkan `BucketName` sebagai `MyTargetBucket` dan `BucketFolder` sebagai `MyTargetData`, DMS membuat jalur folder CDC berikut: `MyTargetBucket/MyTargetData/MyChangedData`. Pengaturan ini didukung dalam AWS DMS versi 3.4.2 dan yang lebih tinggi. Saat menangkap perubahan data dalam urutan transaksi, DMS selalu menyimpan perubahan baris dalam file.csv terlepas dari nilai pengaturan DataFormat S3 pada target.   | 
|  `CdcMaxBatchInterval`  |  Kondisi panjang interval maksimum, didefinisikan dalam detik, untuk keluaran file ke Amazon S3. Nilai default: 60 detik Kapan `CdcMaxBatchInterval` ditentukan dan `CdcMinFileSize` ditentukan, penulisan file dipicu oleh kondisi parameter mana pun yang terpenuhi terlebih dahulu.  Dimulai dengan AWS DMS versi 3.5.3, saat menggunakan PostgreSQL atau Aurora PostgreSQL sebagai sumber dan Amazon S3 dengan Parket sebagai target, frekuensi pembaruan tergantung pada jumlah data titik akhir target dikonfigurasi untuk disimpan dalam memori`confirmed_flush_lsn`. AWS DMS mengirim `confirmed_flush_lsn` kembali ke sumber hanya setelah data dalam memori ditulis ke Amazon S3. Jika Anda mengonfigurasi `CdcMaxBatchInterval` parameter ke nilai yang lebih tinggi, Anda dapat mengamati peningkatan penggunaan slot replikasi pada database sumber.   | 
|  `CdcMinFileSize`  |  Kondisi ukuran file minimum seperti yang didefinisikan dalam kilobyte untuk menampilkan file ke Amazon S3. Nilai default: 32000 KB Kapan `CdcMinFileSize` ditentukan dan `CdcMaxBatchInterval` ditentukan, penulisan file dipicu oleh kondisi parameter mana pun yang terpenuhi terlebih dahulu.  | 
|  `PreserveTransactions`  |  Jika diatur ke `true`, DMS menyimpan urutan transaksi untuk perubahan pengambilan data (CDC) pada target Amazon S3 yang ditentukan oleh `CdcPath`. Anda tidak dapat menggunakan parameter ini dengan `DatePartitionEnabled` atau`AddColumnName`. Jenis: Boolean Saat menangkap perubahan data dalam urutan transaksi, DMS selalu menyimpan perubahan baris dalam file.csv terlepas dari nilai pengaturan DataFormat S3 pada target. Pengaturan ini didukung dalam AWS DMS versi 3.4.2 dan yang lebih tinggi.   | 
| IncludeOpForFullLoad |  Parameter opsional selama beban penuh untuk menulis operasi INSERT hanya pada file keluaran comma-seperated value (.csv). Untuk beban penuh, catatan hanya bisa dimasukkan. Secara default (pengaturan `false`), tidak ada informasi yang dicatat ke dalam file keluaran ini bagi beban penuh untuk menunjukkan bahwa baris dimasukkan pada basis data sumber. Jika `IncludeOpForFullLoad` diatur ke `true` atau `y`, INSERT dicatat sebagai penjelasan I di field pertama dari file .csv.  Parameter ini bekerja sama dengan `CdcInsertsOnly` atau `CdcInsertsAndUpdates` untuk keluaran ke file .csv saja. Untuk informasi lebih lanjut tentang cara parameter ini bekerja sama, lihat [Menunjukkan operasi sumber DB dalam data S3 bermigrasi](#CHAP_Target.S3.Configuring.InsertOps).  Nilai default: `false` Nilai valid: `true`, `false`, `y`, `n` Contoh: `--s3-settings '{"IncludeOpForFullLoad": true}'`  | 
| CompressionType |  Parameter opsional saat diatur untuk `GZIP` menggunakan GZIP untuk mengompres file target.csv. Ketika parameter ini diatur ke default, file tidak terkompresi. Nilai default: `NONE` Nilai yang valid: `GZIP` atau `NONE` Contoh: `--s3-settings '{"CompressionType": "GZIP"}'`  | 
| CsvDelimiter |  Pembatas yang digunakan untuk memisahkan kolom dalam file sumber .csv. Default adalah koma (,). Contoh: `--s3-settings '{"CsvDelimiter": ","}'`  | 
| CsvRowDelimiter |  Pembatas yang digunakan untuk memisahkan baris dalam file sumber .csv. Default adalah baris baru (\$1 n). Contoh: `--s3-settings '{"CsvRowDelimiter": "\n"}'`  | 
|   `MaxFileSize`   |  Nilai yang menentukan ukuran maksimum (dalam KB) dari file.csv apa pun yang akan dibuat saat bermigrasi ke target S3 selama pemuatan penuh. Nilai default: 1.048.576 KB (1 GB) Nilai valid: 1-1.048.576 Contoh: `--s3-settings '{"MaxFileSize": 512}'`  | 
| Rfc4180 |  Parameter opsional yang digunakan untuk mengatur perilaku agar sesuai dengan RFC untuk data yang dimigrasi ke Amazon S3 menggunakan format file .csv saja. Ketika nilai ini disetel ke `true` atau `y` menggunakan Amazon S3 sebagai target, jika data memiliki tanda kutip, koma, atau karakter baris baru di dalamnya, AWS DMS lampirkan seluruh kolom dengan pasangan tambahan tanda kutip ganda (“). Setiap tanda kutip dalam data diulang dua kali. Format ini sesuai dengan RFC 4180. Nilai default: `true` Nilai valid: `true`, `false`, `y`, `n` Contoh: `--s3-settings '{"Rfc4180": false}'`  | 
| EncryptionMode |  Mode enkripsi sisi server yang Anda inginkan untuk mengenkripsi file .csv atau .parquet objek disalin ke S3. Nilai valid adalah `SSE_S3` (enkripsi sisi server S3) atau `SSE_KMS` (enkripsi kunci KMS). Jika Anda memilih `SSE_KMS`, atur parameter `ServerSideEncryptionKmsKeyId` Untuk Amazon Resource Name (ARN) untuk kunci KMS yang akan digunakan untuk enkripsi.  Anda juga dapat menggunakan perintah CLI `modify-endpoint` untuk mengubah nilai atribut `EncryptionMode` untuk titik akhir yang sudah ada dari `SSE_KMS` ke `SSE_S3`. Tapi Anda tidak dapat mengubah nilai `EncryptionMode` dari `SSE_S3` ke `SSE_KMS`.  Nilai default: `SSE_S3` Nilai yang valid: `SSE_S3` atau `SSE_KMS` Contoh: `--s3-settings '{"EncryptionMode": SSE_S3}'`  | 
| ServerSideEncryptionKmsKeyId |  Jika Anda menyetel `EncryptionMode` ke`SSE_KMS`, setel parameter ini ke Amazon Resource Name (ARN) untuk kunci KMS. Anda dapat menemukan ARN ini dengan memilih alias kunci dalam daftar kunci yang dibuat untuk AWS KMS akun Anda. Saat membuat kunci, Anda harus mengaitkan kebijakan dan peran tertentu yang terkait dengan kunci KMS ini. Untuk informasi selengkapnya, lihat [Membuat AWS KMS kunci untuk mengenkripsi objek target Amazon S3](#CHAP_Target.S3.KMSKeys). Contoh: `--s3-settings '{"ServerSideEncryptionKmsKeyId":"arn:aws:kms:us-east-1:111122223333:key/11a1a1a1-aaaa-9999-abab-2bbbbbb222a2"}'`  | 
| DataFormat |  Format output untuk file yang AWS DMS digunakan untuk membuat objek S3. Untuk target Amazon S3, AWS DMS mendukung file.csv atau .parquet. File .parquet memiliki format penyimpanan kolom biner dengan pilihan kompresi yang efisien dan performa kueri yang lebih cepat. Untuk informasi lebih lanjut tentang file .parquet [https://parquet.apache.org/](https://parquet.apache.org/). Nilai default: `csv` Nilai yang valid: `csv` atau `parquet` Contoh: `--s3-settings '{"DataFormat": "parquet"}'`  | 
| EncodingType |  Jenis pengodean Parquet. Pilihan tipe pengodean mencakup hal berikut: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/dms/latest/userguide/CHAP_Target.S3.html) Nilai default: `rle-dictionary` Nilai valid: `rle-dictionary`, `plain`, atau `plain-dictionary` Contoh: `--s3-settings '{"EncodingType": "plain-dictionary"}'`  | 
| DictPageSizeLimit |  Ukuran maksimum yang diizinkan, dalam byte, untuk halaman kamus dalam file .parquet. Jika halaman kamus melebihi nilai ini, maka halaman menggunakan pengodean biasa. Nilai default: 1.024.000 (1 MB) Nilai valid: Setiap nilai integer yang valid Contoh: `--s3-settings '{"DictPageSizeLimit": 2,048,000}'`  | 
| RowGroupLength |  Jumlah baris dalam satu grup baris dari file .parquet. Nilai default: 10.024 (10 KB) Nilai yang valid: Setiap bilangan bulat yang valid Contoh: `--s3-settings '{"RowGroupLength": 20,048}'`  | 
| DataPageSize |  Ukuran maksimum yang diizinkan, dalam byte, untuk halaman data dalam file .parquet. Nilai default: 1.024.000 (1 MB) Nilai yang valid: Setiap bilangan bulat yang valid Contoh: `--s3-settings '{"DataPageSize": 2,048,000}'`  | 
| ParquetVersion |  Versi format file .parquet. Nilai default: `PARQUET_1_0` Nilai yang valid: `PARQUET_1_0` atau `PARQUET_2_0` Contoh: `--s3-settings '{"ParquetVersion": "PARQUET_2_0"}'`  | 
| EnableStatistics |  Atur ke `true` atau `y` untuk mengaktifkan statistik tentang halaman file .parquet dan grup barisan. Nilai default: `true` Nilai valid: `true`, `false`, `y`, `n` Contoh: `--s3-settings '{"EnableStatistics": false}'`  | 
| TimestampColumnName |  Parameter opsional untuk menyertakan kolom stempel waktu dalam data titik akhir target S3. AWS DMS menyertakan `STRING` kolom tambahan dalam file objek.csv atau .parquet dari data yang dimigrasi saat Anda menyetel `TimestampColumnName` ke nilai yang tidak kosong. Untuk beban penuh, setiap baris dari kolom stempel waktu ini berisi stempel waktu untuk ketika data ditransfer dari sumber ke target oleh DMS.  Untuk beban CDC, setiap baris kolom stempel waktu berisi stempel waktu untuk menjalankan baris tersebut dalam basis data sumber. Format string untuk nilai kolom stempel waktu ini adalah `yyyy-MM-dd HH:mm:ss.SSSSSS`. Secara default, presisi nilai ini dalam mikrodetik. Untuk beban CDC, pembulatan presisi tergantung pada stempel waktu melakukan didukung oleh DMS untuk basis data sumber. Ketika `AddColumnName` parameter diatur ke`true`, DMS juga menyertakan nama untuk kolom stempel waktu yang Anda tetapkan sebagai nilai tidak kosong. `TimestampColumnName` Contoh: `--s3-settings '{"TimestampColumnName": "TIMESTAMP"}'`  | 
| UseTaskStartTimeForFullLoadTimestamp |  Ketika diatur ke `true`, parameter ini menggunakan waktu mulai tugas sebagai nilai kolom stempel data alih-alih data waktu ditulis ke target. Untuk beban penuh, ketika `UseTaskStartTimeForFullLoadTimestamp` diatur ke `true`, setiap baris dari kolom stempel waktu berisi waktu mulai tugas. Untuk beban CDC, setiap baris kolom stempel waktu berisi waktu melakukan transaksi. Saat `UseTaskStartTimeForFullLoadTimestamp` diatur ke `false`, stempel waktu beban penuh di kolom stempel waktu bertambah dengan data waktu tiba di target. Nilai default: `false` Nilai valid: `true`, `false` Contoh: `--s3-settings '{"UseTaskStartTimeForFullLoadTimestamp": true}'` `UseTaskStartTimeForFullLoadTimestamp: true` membantu membuat target S3 `TimestampColumnName` untuk beban penuh dapat diurutkan dengan `TimestampColumnName` untuk beban CDC.  | 
| ParquetTimestampInMillisecond |  Parameter opsional yang menentukan ketepatan dari nilai kolom `TIMESTAMP` mana pun yang ditulis ke file objek S3 dalam format .parquet. Ketika atribut ini disetel ke `true` or`y`, AWS DMS tulis semua `TIMESTAMP` kolom dalam file berformat.parquet dengan presisi milidetik. Jika tidak, DMS menuliskan mereka dengan presisi mikro detik. Saat ini, Amazon Athena dan hanya AWS Glue dapat menangani presisi milidetik untuk `TIMESTAMP` nilai. Atur atribut ini ke true untuk file objek titik akhir S3 berformat .parquet hanya jika Anda berencana untuk membuat kueri atau memproses data dengan Athena atau AWS Glue.    AWS DMS menulis nilai `TIMESTAMP` kolom apa pun yang ditulis ke file S3 dalam format.csv dengan presisi mikrodetik.   Pengaturan atribut ini tidak berpengaruh pada format string dari nilai kolom stempel waktu yang dimasukkan dengan menetapkan atribut `TimestampColumnName`.    Nilai default: `false` Nilai valid: `true`, `false`, `y`, `n` Contoh: `--s3-settings '{"ParquetTimestampInMillisecond": true}'`  | 
| GlueCatalogGeneration |  Untuk menghasilkan AWS Glue Data Catalog, atur pengaturan titik akhir ini ke`true`. Nilai default: `false` Nilai yang valid:`true`,`false`, Contoh: `--s3-settings '{"GlueCatalogGeneration": true}'` **Catatan:** Jangan gunakan `GlueCatalogGeneration` dengan `PreserveTransactions` dan`CdcPath`.  | 

## Menggunakan AWS Glue Data Catalog dengan target Amazon S3 untuk AWS DMS
<a name="CHAP_Target.S3.GlueCatalog"></a>

AWS Glue adalah layanan yang menyediakan cara sederhana untuk mengkategorikan data, dan terdiri dari repositori metadata yang dikenal sebagai. AWS Glue Data Catalog Anda dapat berintegrasi AWS Glue Data Catalog dengan titik akhir target Amazon S3 dan kueri data Amazon S3 melalui layanan lain AWS seperti Amazon Athena. Amazon Redshift berfungsi dengan AWS Glue tetapi AWS DMS tidak mendukungnya sebagai opsi pra-bangun. 

Untuk menghasilkan katalog data, atur pengaturan `GlueCatalogGeneration` endpoint ke`true`, seperti yang ditunjukkan pada AWS CLI contoh berikut.

```
aws dms create-endpoint --endpoint-identifier s3-target-endpoint 
            --engine-name s3 --endpoint-type target--s3-settings '{"ServiceAccessRoleArn": 
            "your-service-access-ARN", "BucketFolder": "your-bucket-folder", "BucketName": 
            "your-bucket-name", "DataFormat": "parquet", "GlueCatalogGeneration": true}'
```

Untuk tugas replikasi beban penuh yang menyertakan data `csv` tipe, setel `IncludeOpForFullLoad` ke`true`.

Jangan gunakan `GlueCatalogGeneration` dengan `PreserveTransactions` dan`CdcPath`. AWS Glue Crawler tidak dapat merekonsiliasi skema berbeda dari file yang disimpan di bawah yang ditentukan. `CdcPath`

Agar Amazon Athena dapat mengindeks data Amazon S3 Anda, dan agar Anda dapat melakukan kueri data menggunakan kueri SQL standar melalui Amazon Athena, peran IAM yang dilampirkan ke titik akhir harus memiliki kebijakan berikut:

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	  
    "Statement": [ 
        {
            "Effect": "Allow", 
            "Action": [
                "s3:GetBucketLocation", 
                "s3:GetObject",
                "s3:ListBucket", 
                "s3:ListBucketMultipartUploads", 
                "s3:ListMultipartUploadParts", 
                "s3:AbortMultipartUpload" 
            ], 
            "Resource": [
                "arn:aws:s3:::bucket123", 
                "arn:aws:s3:::bucket123/*" 
            ]
        },
        {
            "Effect": "Allow", 
            "Action": [ 
                "glue:CreateDatabase", 
                "glue:GetDatabase", 
                "glue:CreateTable", 
                "glue:DeleteTable", 
                "glue:UpdateTable", 
                "glue:GetTable", 
                "glue:BatchCreatePartition", 
                "glue:CreatePartition", 
                "glue:UpdatePartition", 
                "glue:GetPartition", 
                "glue:GetPartitions", 
                "glue:BatchGetPartition"
            ], 
            "Resource": [
                "arn:aws:glue:*:111122223333:catalog", 
                "arn:aws:glue:*:111122223333:database/*", 
                "arn:aws:glue:*:111122223333:table/*" 
            ]
        }, 
        {
            "Effect": "Allow",
            "Action": [
                "athena:StartQueryExecution",
                "athena:GetQueryExecution", 
                "athena:CreateWorkGroup"
            ],
            "Resource": "arn:aws:athena:*:111122223333:workgroup/glue_catalog_generation_for_task_*"
        }
    ]
}
```

------

**Referensi**
+ Untuk informasi selengkapnya AWS Glue, lihat [Konsep](https://docs.aws.amazon.com//glue/latest/dg/components-key-concepts.html) di *Panduan AWS Glue Pengembang*.
+ Untuk informasi selengkapnya, AWS Glue Data Catalog lihat [Komponen](https://docs.aws.amazon.com/glue/latest/dg/components-overview.html) dalam *Panduan AWS Glue Pengembang*.

## Menggunakan enkripsi data, file parket, dan CDC pada target Amazon S3 Anda
<a name="CHAP_Target.S3.EndpointSettings"></a>

Anda dapat menggunakan pengaturan target titik akhir S3 pengaturan untuk mengonfigurasi hal berikut:
+ Kunci KMS khusus untuk mengenkripsi objek target S3 Anda.
+ Parquet file sebagai format penyimpanan untuk objek target S3.
+ Penangkapan perubahan data (CDC) termasuk transaksi order pada target S3.
+ Integrasikan AWS Glue Data Catalog dengan titik akhir target Amazon S3 Anda dan kueri data Amazon S3 melalui layanan lain seperti Amazon Athena.

### AWS KMS pengaturan kunci untuk enkripsi data
<a name="CHAP_Target.S3.EndpointSettings.KMSkeys"></a>

Contoh berikut menunjukkan konfigurasi kunci KMS kustom untuk mengenkripsi objek target S3 Anda. Untuk memulai, Anda dapat menjalankan perintah `create-endpoint` CLI berikut.

```
aws dms create-endpoint --endpoint-identifier s3-target-endpoint --engine-name s3 --endpoint-type target 
--s3-settings '{"ServiceAccessRoleArn": "your-service-access-ARN", "CsvRowDelimiter": "\n", 
"CsvDelimiter": ",", "BucketFolder": "your-bucket-folder", 
"BucketName": "your-bucket-name", 
"EncryptionMode": "SSE_KMS", 
"ServerSideEncryptionKmsKeyId": "arn:aws:kms:us-east-1:111122223333:key/72abb6fb-1e49-4ac1-9aed-c803dfcc0480"}'
```

Di sini, objek JSON ditentukan oleh pilihan `--s3-settings` yang mendefinisikan dua parameter. Satu berupa parameter `EncryptionMode` dengan nilai `SSE_KMS`. Yang lainnya berupa parameter `ServerSideEncryptionKmsKeyId` dengan nilai `arn:aws:kms:us-east-1:111122223333:key/72abb6fb-1e49-4ac1-9aed-c803dfcc0480`. Nilai ini adalah Amazon Resource Name (ARN) untuk kunci KMS kustom Anda. Untuk target S3, Anda juga menentukan pengaturan tambahan. Ini mengidentifikasi peran akses server, menyediakan pembatas untuk format penyimpanan objek CSV default, dan memberikan lokasi dan nama bucket untuk menyimpan objek target S3.

Secara default, enkripsi data S3 terjadi menggunakan enkripsi pada sisi server S3. Untuk target S3 di contoh sebelumnya, ini juga setara dengan menentukan pengaturan titik akhir seperti dalam contoh berikut.

```
aws dms create-endpoint --endpoint-identifier s3-target-endpoint --engine-name s3 --endpoint-type target
--s3-settings '{"ServiceAccessRoleArn": "your-service-access-ARN", "CsvRowDelimiter": "\n", 
"CsvDelimiter": ",", "BucketFolder": "your-bucket-folder", 
"BucketName": "your-bucket-name", 
"EncryptionMode": "SSE_S3"}'
```

Untuk informasi lebih lanjut tentang bekerja dengan enkripsi sisi server S3, lihat [Melindungi Data Menggunakan Enkripsi Sisi Server](https://docs.aws.amazon.com/AmazonS3/latest/dev/serv-side-encryption.html).

**catatan**  
Anda juga dapat menggunakan perintah CLI `modify-endpoint` untuk mengubah nilai parameter `EncryptionMode` untuk titik akhir yang sudah ada dari `SSE_KMS` ke `SSE_S3`. Tapi Anda tidak dapat mengubah nilai `EncryptionMode` dari `SSE_S3` ke `SSE_KMS`.

### Pengaturan dalam menggunakan file .parquet untuk menyimpan objek target S3
<a name="CHAP_Target.S3.EndpointSettings.Parquet"></a>

Format default untuk membuat objek target S3 adalah file .csv. Contoh berikut menunjukkan beberapa pengaturan titik akhir untuk menentukan file .parquet sebagai format untuk membuat objek target S3. Anda dapat menentukan format file .parquet dengan semua default, seperti dalam contoh berikut.

```
aws dms create-endpoint --endpoint-identifier s3-target-endpoint --engine-name s3 --endpoint-type target 
--s3-settings '{"ServiceAccessRoleArn": "your-service-access-ARN", "DataFormat": "parquet"}'
```

Di sini, parameter `DataFormat` diatur ke `parquet` untuk mengaktifkan format dengan semua default S3. Default ini juga termasuk pengodean kamus (`"EncodingType: "rle-dictionary"`) yang menggunakan kombinasi pengodean bit-packing dan run-length untuk lebih efisien menyimpan nilai-nilai berulang.

Anda dapat menambahkan pengaturan tambahan untuk pilihan selain default seperti dalam contoh berikut.

```
aws dms create-endpoint --endpoint-identifier s3-target-endpoint --engine-name s3 --endpoint-type target
--s3-settings '{"ServiceAccessRoleArn": "your-service-access-ARN", "BucketFolder": "your-bucket-folder",
"BucketName": "your-bucket-name", "DataFormat": "parquet", "EncodingType: "plain-dictionary", "DictPageSizeLimit": 3,072,000,
"EnableStatistics": false }'
```

Di sini, selain parameter untuk beberapa pilihan bucket S3 standar dan parameter `DataFormat`, parameter file .parquet tambahan berikut ditetapkan:
+ `EncodingType` – Atur ke pengodean kamus (`plain-dictionary`) yang menyimpan nilai-nilai yang ditemui di setiap kolom dalam potongan perkolom dari halaman kamus.
+ `DictPageSizeLimit` – Atur ke ukuran halaman kamus maksimum 3 MB.
+ `EnableStatistics` – Nonaktifkan default yang memungkinkan pengumpulan statistik tentang halaman file Parquet dan grup baris.

### Perubahan pengambilan data (CDC) termasuk transaksi order pada target S3
<a name="CHAP_Target.S3.EndpointSettings.CdcPath"></a>

Secara default saat AWS DMS menjalankan tugas CDC, ia menyimpan semua perubahan baris yang dicatat dalam database sumber Anda (atau database) dalam satu atau beberapa file untuk setiap tabel. Setiap set file yang berisi perubahan untuk tabel yang sama berada dalam satu direktori target yang terkait dengan tabel itu. AWS DMS membuat direktori target sebanyak tabel database yang dimigrasikan ke titik akhir target Amazon S3. File disimpan pada target S3 di direktori ini tanpa memperhatikan pesanan transaksi. Untuk informasi lebih lanjut tentang ketentuan penamaan file, konten data, dan format, lihat [Menggunakan Amazon S3 sebagai target untuk AWS Database Migration Service](#CHAP_Target.S3).

Untuk menangkap perubahan basis data sumber dengan cara yang juga menangkap urutan transaksi, Anda dapat menentukan pengaturan titik akhir S3 yang mengarahkan AWS DMS untuk menyimpan perubahan baris untuk *semua* tabel database dalam satu atau beberapa file.csv yang dibuat tergantung pada ukuran transaksi. *File transaksi* .csv ini berisi semua perubahan baris terdaftar secara berurutan dalam urutan transaksi untuk semua tabel yang terlibat dalam setiap transaksi. File-file transaksi ini diletakkan bersama dalam satu *Direktori transaksi* yang Anda juga tentukan pada target S3. Dalam setiap file transaksi, operasi transaksi dan identitas database dan tabel sumber untuk setiap perubahan baris disimpan sebagai bagian dari data baris sebagai berikut. 

```
operation,table_name,database_schema_name,field_value,...
```

Di sini, `operation` adalah operasi transaksi pada baris yang diubah, `table_name` adalah nama tabel basis data di mana baris diubah, `database_schema_name` adalah nama skema basis data tempat tabel berada, dan `field_value` adalah yang pertama dari satu atau lebih nilai field yang menentukan data untuk baris.

Contoh berikut dari file transaksi menunjukkan baris yang diubah untuk satu atau beberapa transaksi yang melibatkan dua tabel.

```
I,Names_03cdcad11a,rdsTempsdb,13,Daniel
U,Names_03cdcad11a,rdsTempsdb,23,Kathy
D,Names_03cdcad11a,rdsTempsdb,13,Cathy
I,Names_6d152ce62d,rdsTempsdb,15,Jane
I,Names_6d152ce62d,rdsTempsdb,24,Chris
I,Names_03cdcad11a,rdsTempsdb,16,Mike
```

Di sini, operasi transaksi pada setiap baris ditunjukkan oleh `I` (insert), `U`(update), atau `D` (delete) di kolom pertama. Nama tabel adalah nilai kolom kedua (misalnya, `Names_03cdcad11a`). Nama skema basis data adalah nilai kolom ketiga (misalnya, `rdsTempsdb`). Dan kolom yang tersisa diisi dengan data baris Anda sendiri (misalnya, `13,Daniel`).

Selain itu, AWS DMS beri nama file transaksi yang dibuatnya pada target Amazon S3 menggunakan stempel waktu sesuai dengan konvensi penamaan berikut.

```
CDC_TXN-timestamp.csv
```

Di sini, `timestamp` adalah waktu ketika file transaksi dibuat, seperti dalam contoh berikut. 

```
CDC_TXN-20201117153046033.csv
```

Stempel waktu dalam nama file ini memastikan bahwa file transaksi dibuat dan tercantum dalam urutan transaksi ketika Anda mencantumkannya di direktori transaksi mereka.

**catatan**  
Saat menangkap perubahan data dalam urutan transaksi, AWS DMS selalu simpan perubahan baris dalam file.csv terlepas dari nilai pengaturan `DataFormat` S3 pada target.

Untuk mengontrol frekuensi penulisan ke target Amazon S3 selama tugas replikasi data, Anda dapat mengonfigurasi dan pengaturan. `CdcMaxBatchInterval` `CdcMinFileSize` Hal ini dapat menghasilkan performa yang lebih baik ketika menganalisis data tanpa operasi overhead tambahan. Untuk informasi selengkapnya, lihat [Pengaturan titik akhir saat menggunakan Amazon S3 sebagai target untuk AWS DMS](#CHAP_Target.S3.Configuring) 

**Untuk memberitahu AWS DMS untuk menyimpan semua perubahan baris dalam urutan transaksi**

1. Setel pengaturan `PreserveTransactions` S3 pada target ke `true`.

1. Setel pengaturan `CdcPath` S3 pada target ke jalur folder relatif tempat Anda AWS DMS ingin menyimpan file transaksi.csv.

   AWS DMS membuat jalur ini baik di bawah bucket target S3 default dan direktori kerja atau di bawah folder bucket dan bucket yang Anda tentukan menggunakan pengaturan `BucketName` dan `BucketFolder` S3 pada target.

## Menunjukkan operasi sumber DB dalam data S3 bermigrasi
<a name="CHAP_Target.S3.Configuring.InsertOps"></a>

Saat AWS DMS memigrasikan catatan ke target S3, itu dapat membuat bidang tambahan di setiap rekaman yang dimigrasi. Field tambahan ini menunjukkan operasi diterapkan ke catatan pada basis data sumber. Cara AWS DMS membuat dan menetapkan bidang pertama ini tergantung pada jenis tugas migrasi dan pengaturan`includeOpForFullLoad`,`cdcInsertsOnly`, dan`cdcInsertsAndUpdates`.

Untuk beban penuh saat `includeOpForFullLoad` ada`true`, AWS DMS selalu buat bidang pertama tambahan di setiap catatan.csv. Field ini berisi huruf I (INSERT) untuk menunjukkan bahwa baris dimasukkan pada basis data sumber. Untuk beban CDC ketika `cdcInsertsOnly` `false` (default), AWS DMS juga selalu membuat bidang pertama tambahan di setiap catatan.csv atau .parquet. Field ini berisi huruf I (INSERT), U (UPDATE), atau D (DELETE) untuk menunjukkan apakah baris dimasukkan, diperbarui, atau dihapus pada sumber basis data.

Dalam tabel berikut, Anda dapat melihat bagaimana pengaturan `cdcInsertsOnly` atribut `includeOpForFullLoad` dan bekerja sama untuk memengaruhi pengaturan catatan yang dimigrasi.


| Dengan pengaturan parameter ini | DMS menetapkan catatan target sebagai berikut untuk keluaran.csv dan .parquet  | includeOpForFullLoad | cdcInsertsOnly | Untuk beban penuh | Untuk beban CDC | 
| --- | --- | --- | --- | --- | --- | 
| true | true | Menambahkan nilai field pertama yang ditetapkan ke I | Menambahkan nilai field pertama yang ditetapkan ke I | 
| false | false | Tidak ada field tambahan | Menambahkan nilai field pertama yang ditetapkan ke I, U, atau D | 
| false | true | Tidak ada field tambahan | Tidak ada field tambahan | 
| true | false | Menambahkan nilai field pertama yang ditetapkan ke I | Menambahkan nilai field pertama yang ditetapkan ke I, U, atau D | 

Saat `includeOpForFullLoad` dan `cdcInsertsOnly` ditetapkan ke nilai yang sama, catatan target diatur menurut atribut yang mengontrol pengaturan catatan untuk jenis migrasi saat ini. Atribut tersebut adalah `includeOpForFullLoad` untuk beban penuh dan `cdcInsertsOnly` untuk beban CDC.

Kapan `includeOpForFullLoad` dan `cdcInsertsOnly` diatur ke nilai yang berbeda, AWS DMS membuat pengaturan catatan target konsisten untuk CDC dan beban penuh. Hal ini dilakukan dengan membuat pengaturan catatan untuk beban CDC sesuai dengan pengaturan catatan untuk semua beban penuh sebelumnya yang ditentukan oleh `includeOpForFullLoad`. 

Dengan kata lain, anggaplah beban penuh diatur untuk menambahkan field pertama untuk menunjukkan catatan yang dimasukkan. Dalam kasus ini, beban CDC berikut diatur untuk menambahkan field pertama yang menunjukkan catatan yang dimasukkan, diperbarui, atau dihapus sesuai sumbernya. Sebaliknya, anggaplah beban penuh diatur untuk *tidak* menambahkan field pertama untuk menunjukkan catatan yang dimasukkan. Dalam kasus ini, beban CDC juga diatur untuk tidak menambahkan field pertama untuk setiap catatan, terlepas dari operasi catatan yang sesuai sumbernya.

Demikian juga dengan bagaimana DMS membuat dan menetapkan field pertama tambahan bergantung pada pengaturan `includeOpForFullLoad` dan `cdcInsertsAndUpdates`. Dalam tabel berikut, Anda dapat melihat bagaimana pengaturan atribut `includeOpForFullLoad` dan `cdcInsertsAndUpdates` bekerja sama untuk memengaruhi pengaturan catatan yang dimigrasikan dalam format ini. 


| Dengan pengaturan parameter ini | DMS menetapkan catatan target sebagai berikut untuk keluaran .csv  | includeOpForFullLoad | cdcInsertsAndPembaruan | Untuk beban penuh | Untuk beban CDC | 
| --- | --- | --- | --- | --- | --- | 
| true | true | Menambahkan nilai field pertama yang ditetapkan ke I | Menambahkan nilai field pertama yang ditetapkan ke I atau U | 
| false | false | Tidak ada field tambahan | Menambahkan nilai field pertama yang ditetapkan ke I, U, atau D | 
| false | true | Tidak ada field tambahan | Menambahkan nilai field pertama yang ditetapkan ke I atau U | 
| true | false | Menambahkan nilai field pertama yang ditetapkan ke I | Menambahkan nilai field pertama yang ditetapkan ke I, U, atau D | 

## Tipe data target untuk S3 Parquet
<a name="CHAP_Target.S3.DataTypes"></a>

Tabel berikut menunjukkan tipe data target Parket yang didukung saat menggunakan AWS DMS dan pemetaan default dari tipe AWS DMS data.

Untuk informasi tambahan tentang tipe AWS DMS data, lihat[Tipe data untuk AWS Database Migration Service](CHAP_Reference.DataTypes.md).


|  AWS DMS tipe data  |  Tipe data parquet S3   | 
| --- | --- | 
| BYTES | BINARY | 
| DATE | DATE32 | 
| TIME | TIME32 | 
| DATETIME | TIMESTAMP | 
| INT1 | INT8 | 
| INT2 | INT16 | 
| INT4 | INT32 | 
| INT8 | INT64 | 
| NUMERIC | DECIMAL | 
| REAL4 | FLOAT | 
| REAL8 | DOUBLE | 
| STRING | STRING | 
| UINT1 | UINT8 | 
| UINT2 | UINT16 | 
| UINT4 | UINT32 | 
| UINT8 | UINT64 | 
| WSTRING | STRING | 
| BLOB | BINARY | 
| NCLOB | STRING | 
| CLOB | STRING | 
| BOOLEAN | BOOL | 

# Menggunakan database Amazon DynamoDB sebagai target AWS Database Migration Service
<a name="CHAP_Target.DynamoDB"></a>

Anda dapat menggunakan AWS DMS untuk memigrasikan data ke tabel Amazon DynamoDB. Amazon DynamoDB adalah layanan database NoSQL yang dikelola sepenuhnya yang memberikan kinerja yang cepat dan dapat diprediksi dengan skalabilitas yang mulus. AWS DMS mendukung menggunakan database relasional atau MongoDB sebagai sumber.

Dalam DynamoDB, tabel, item, dan atribut adalah komponen inti yang Anda kerjakan. Sebuah *tabel * adalah kumpulan item, dan setiap *item * adalah kumpulan atribut. DynamoDB menggunakan kunci primer, yang disebut kunci partisi, untuk mengidentifikasi secara unik setiap item dalam sebuah tabel. Anda juga dapat menggunakan kunci dan indeks sekunder untuk memberikan lebih banyak fleksibilitas kueri.

Anda menggunakan pemetaan objek untuk memigrasi data Anda dari basis data sumber ke tabel DynamoDB target. Pemetaan objek mengizinkann Anda menentukan letak sumber data di target. 

Saat AWS DMS membuat tabel pada titik akhir target DynamoDB, itu menciptakan tabel sebanyak di titik akhir database sumber. AWS DMS juga menetapkan beberapa nilai parameter DynamoDB. Biaya pembuatan tabel tergantung pada jumlah data dan jumlah tabel yang akan dimigrasi.

**catatan**  
Opsi **Mode SSL** di AWS DMS konsol atau API tidak berlaku untuk beberapa streaming data dan layanan NoSQL seperti Kinesis dan DynamoDB. Mereka aman secara default, jadi AWS DMS menunjukkan pengaturan mode SSL sama dengan tidak ada (Mode **SSL** = Tidak Ada). Anda tidak perlu menyediakan konfigurasi tambahan untuk titik akhir Anda untuk menggunakan SSL. Misalnya, saat menggunakan DynamoDB sebagai titik akhir target, itu aman secara default. Semua panggilan API ke DynamoDB menggunakan SSL, jadi tidak perlu opsi SSL tambahan di titik akhir. AWS DMS Anda dapat menempatkan data dengan aman dan mengambil data melalui titik akhir SSL menggunakan protokol HTTPS, yang AWS DMS digunakan secara default saat menghubungkan ke database DynamoDB.

Untuk membantu meningkatkan kecepatan transfer, AWS DMS mendukung beban penuh multithreaded ke instance target DynamoDB. DMS mendukung multithreading ini dengan pengaturan tugas yang meliputi berikut ini:
+ `MaxFullLoadSubTasks` - Gunakan pilihan ini untuk menunjukkan jumlah maksimum tabel sumber yang dimuat secara paralel. DMS memuat setiap tabel ke dalam tabel target DynamoDB yang sesuai menggunakan subtugas khusus. Nilai default adalah 8. Nilai maksimumnya adalah 49.
+ `ParallelLoadThreads`— Gunakan opsi ini untuk menentukan jumlah thread yang AWS DMS digunakan untuk memuat setiap tabel ke dalam tabel target DynamoDB nya. Nilai default adalah 0 (single-threaded). Nilai maksimumnya adalah 200. Anda dapat meminta untuk meningkatkan batas maksimum ini.
**catatan**  
DMS menetapkan setiap segmen tabel ke thread-nya sendiri untuk memuat. Oleh karena itu, atur `ParallelLoadThreads` untuk jumlah maksimum segmen yang Anda tentukan untuk tabel di sumber.
+ `ParallelLoadBufferSize` - Gunakan pilihan ini untuk menentukan jumlah maksimum catatan yang disimpan dalam buffer yang menggunakan thread beban paralel untuk memuat data ke target DynamoDB. Nilai default adalah 50. Nilai maksimumnya adalah 1.000. Gunakan pengaturan ini dengan `ParallelLoadThreads`. `ParallelLoadBufferSize` hanya berlaku bila ada lebih dari satu thread.
+ Pengaturan pemetaan tabel untuk tabel individual – Gunakan aturan `table-settings` untuk mengidentifikasi tabel individual dari sumber yang ingin Anda muat secara paralel. Juga gunakan aturan-aturan ini untuk menentukan bagaimana segmen baris setiap tabel dalam pemuatan multithread. Untuk informasi selengkapnya, lihat [Tabel dan koleksi pengaturan aturan dan operasi](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Tablesettings.md).

**catatan**  
Saat AWS DMS menetapkan nilai parameter DynamoDB untuk tugas migrasi, nilai parameter Read Capacity Units (RCU) default disetel ke 200.  
Nilai parameter Write Capacity Unit (WCU) juga ditetapkan, tetapi nilainya bergantung pada beberapa hal lain:  
Nilai default untuk parameter WCU adalah 200.
Jika pengaturan tugas `ParallelLoadThreads` diatur lebih besar dari 1 (default adalah 0), maka parameter WCU diatur ke 200 dikali nilai `ParallelLoadThreads`.
Biaya AWS DMS penggunaan standar berlaku untuk sumber daya yang Anda gunakan.

## Migrasi dari basis data relasional ke tabel DynamoDB
<a name="CHAP_Target.DynamoDB.RDBMS2DynamoDB"></a>

AWS DMS mendukung migrasi data ke tipe data skalar DynamoDB. Saat bermigrasi dari basis data relasional seperti Oracle atau MySQL ke DynamoDB, Anda mungkin ingin merestrukturisasi cara Anda menyimpan data ini.

Saat ini AWS DMS mendukung tabel tunggal untuk restrukturisasi tabel tunggal ke atribut tipe skalar DynamoDB. Jika Anda memigrasikan data ke DynamoDB dari tabel basis data relasional, Anda mengambil data dari tabel dan melakukan format ulang menjadi atribut tipe data skalar DynamoDB. Atribut ini dapat menerima data dari beberapa kolom, dan Anda dapat memetakan kolom ke atribut secara langsung.

AWS DMS mendukung tipe data skalar DynamoDB berikut:
+ String
+ Number
+ Boolean

**catatan**  
data NULL dari sumber diabaikan pada target.

## Prasyarat untuk menggunakan DynamoDB sebagai target AWS Database Migration Service
<a name="CHAP_Target.DynamoDB.Prerequisites"></a>

Sebelum Anda mulai bekerja dengan database DynamoDB sebagai target AWS DMS, pastikan Anda membuat peran IAM. Peran IAM ini harus memungkinkan AWS DMS untuk mengasumsikan dan memberikan akses ke tabel DynamoDB yang sedang dimigrasikan ke. Kumpulan izin akses minimum ditampilkan dalam kebijakan IAM berikut.

------
#### [ JSON ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
      {
         "Sid": "",
         "Effect": "Allow",
         "Principal": {
            "Service": "dms.amazonaws.com"
         },
         "Action": "sts:AssumeRole"
      }
   ]
}
```

------

Peran yang Anda gunakan untuk migrasi ke DynamoDB harus memiliki izin berikut.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "dynamodb:PutItem",
                "dynamodb:CreateTable",
                "dynamodb:DescribeTable",
                "dynamodb:DeleteTable",
                "dynamodb:DeleteItem",
                "dynamodb:UpdateItem"
            ],
            "Resource": [
                "arn:aws:dynamodb:us-west-2:111122223333:table/name1",
                "arn:aws:dynamodb:us-west-2:111122223333:table/OtherName*",
                "arn:aws:dynamodb:us-west-2:111122223333:table/awsdms_apply_exceptions",
                "arn:aws:dynamodb:us-west-2:111122223333:table/awsdms_full_load_exceptions"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "dynamodb:ListTables"
            ],
            "Resource": "*"
        }
    ]
}
```

------

## Keterbatasan saat menggunakan DynamoDB sebagai target AWS Database Migration Service
<a name="CHAP_Target.DynamoDB.Limitations"></a>

Batasan berikut berlaku saat menggunakan DynamoDB sebagai target:
+ DynamoDB membatasi ketepatan tipe data Number untuk 38 tempat. Menyimpan semua jenis data dengan presisi yang lebih tinggi sebagai String. Anda perlu secara eksplisit menentukan ini menggunakan fitur pemetaan objek.
+ Karena DynamoDB tidak memiliki tipe data Date, data yang menggunakan tipe data Date dikonversi ke string.
+ DynamoDB tidak mengizinkan pembaruan untuk atribut kunci primer. Pembatasan ini penting ketika menggunakan replikasi berkelanjutan dengan perubahan pengambilan data (CDC) karena dapat mengakibatkan data yang tidak diinginkan dalam target. Tergantung pada bagaimana Anda memiliki pemetaan objek, operasi CDC yang memperbarui kunci primer dapat melakukan salah satu dari dua hal. Yaitu bisa gagal atau memasukkan item baru dengan kunci primer diperbarui dan data yang tidak lengkap.
+ AWS DMS hanya mendukung replikasi tabel dengan kunci primer nonkomposit. Pengecualiannya adalah jika Anda menentukan pemetaan objek untuk tabel target dengan tombol partisi kustom atau urutkan kunci, atau keduanya.
+ AWS DMS tidak mendukung data LOB kecuali itu adalah CLOB. AWS DMS mengubah data CLOB menjadi string DynamoDB saat memigrasi data.
+ Ketika Anda menggunakan DynamoDB sebagai target, hanya tabel kontrol Apply Exceptions (`dmslogs.awsdms_apply_exceptions`) yang didukung. Untuk informasi lebih lanjut tentang tabel kontrol, lihat [Mengontrol pengaturan tugas tabel](CHAP_Tasks.CustomizingTasks.TaskSettings.ControlTable.md).
+ AWS DMS tidak mendukung pengaturan tugas `TargetTablePrepMode=TRUNCATE_BEFORE_LOAD` untuk DynamoDB sebagai target. 
+ AWS DMS tidak mendukung pengaturan tugas `TaskRecoveryTableEnabled` untuk DynamoDB sebagai target. 
+ `BatchApply`tidak didukung untuk titik akhir DynamoDB.
+ AWS DMS tidak dapat memigrasikan atribut yang namanya cocok dengan kata cadangan di DynamoDB. Untuk informasi selengkapnya, lihat [Kata cadangan di DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ReservedWords.html) di Panduan Pengembang Amazon *DynamoDB*.

## Menggunakan pemetaan objek untuk migrasi data ke DynamoDB
<a name="CHAP_Target.DynamoDB.ObjectMapping"></a>

AWS DMS menggunakan aturan pemetaan tabel untuk memetakan data dari sumber ke tabel DynamoDB target. Untuk memetakan data ke target DynamoDB, Anda menggunakan jenis aturan pemetaan tabel yang disebut *Pemetaan objek*. Pemetaan objek memungkinkan Anda menentukan nama atribut dan data yang akan dimigrasi ke mereka. Anda harus memiliki aturan seleksi ketika menggunakan pemetaan objek.

DynamoDB tidak memiliki struktur preset selain memiliki kunci partisi dan kunci pengurutan opsional. Jika Anda memiliki kunci primer nonkomposit, AWS DMS gunakanlah. Jika Anda memiliki kunci primer komposit atau Anda ingin menggunakan urutan kunci, definisikan kunci-kunci tersebut dan atribut lainnya dalam tabel target DynamoDB Anda.

Untuk membuat aturan pemetaan objek, Anda menentukan `rule-type` sebagai *Pemetaan objek*. Aturan ini menentukan jenis pemetaan objek yang ingin Anda gunakan. 

Struktur aturannya adalah sebagai berikut:

```
{ "rules": [
    {
      "rule-type": "object-mapping",
      "rule-id": "<id>",
      "rule-name": "<name>",
      "rule-action": "<valid object-mapping rule action>",
      "object-locator": {
      "schema-name": "<case-sensitive schema name>",
      "table-name": ""
      },
      "target-table-name": "<table_name>"
    }
  ]
}
```

AWS DMS saat ini mendukung `map-record-to-record` dan `map-record-to-document` sebagai satu-satunya nilai yang valid untuk `rule-action` parameter. Nilai-nilai ini menentukan AWS DMS apa yang dilakukan secara default ke catatan yang tidak dikecualikan sebagai bagian dari daftar `exclude-columns` atribut. Nilai-nilai ini tidak mempengaruhi pemetaan atribut dengan cara apapun. 
+ Anda dapat menggunakan `map-record-to-record` saat migrasi dari basis data relasional ke DynamoDB. Menggunakan kunci primer dari basis data relasional sebagai kunci partisi di DynamoDB dan menciptakan atribut untuk setiap kolom dalam basis data sumber. Saat menggunakan`map-record-to-record`, untuk kolom apa pun di tabel sumber yang tidak tercantum dalam daftar `exclude-columns` atribut, AWS DMS membuat atribut yang sesuai pada instance DynamoDB target. Ia melakukannya terlepas dari apakah kolom sumber yang digunakan dalam pemetaan atribut. 
+ Anda menggunakan `map-record-to-document` untuk menempatkan kolom sumber ke dalam satu peta DynamoDB datar pada target menggunakan nama atribut “\$1doc.” Saat menggunakan`map-record-to-document`, AWS DMS tempatkan data ke dalam satu atribut peta DynamoDB datar pada sumbernya. Atribut ini disebut “\$1doc”. Penempatan ini berlaku untuk kolom mana pun di tabel sumber yang tidak tercantum dalam daftar atribut `exclude-columns`. 

Salah satu cara untuk memahami perbedaan antara `rule-action` Parameter `map-record-to-record` dan `map-record-to-document` adalah untuk melihat dua parameter yang beraksi. Untuk contoh ini, anggap bahwa Anda memulai dengan baris tabel basis data relasional dengan struktur dan data berikut:

![\[sampel basis data sebagai contoh\]](http://docs.aws.amazon.com/id_id/dms/latest/userguide/images/datarep-dynamodb1.png)


Untuk memigrasikan informasi ini ke DynamoDB, Anda membuat aturan untuk memetakan data ke item tabel DynamoDB. Perhatikan kolom yang tercantum untuk parameter `exclude-columns`. Kolom ini tidak langsung dipetakan ke target. Sebagai gantinya, pemetaan atribut digunakan untuk menggabungkan data menjadi item baru, seperti di mana *FirstName*dan *LastName*dikelompokkan bersama untuk menjadi *CustomerName*target DynamoDB. *NickName*dan *pendapatan* tidak dikecualikan.

```
{
    "rules": [
        {
            "rule-type": "selection",
            "rule-id": "1",
            "rule-name": "1",
            "object-locator": {
                "schema-name": "test",
                "table-name": "%"
            },
            "rule-action": "include"
        },
        {
            "rule-type": "object-mapping",
            "rule-id": "2",
            "rule-name": "TransformToDDB",
            "rule-action": "map-record-to-record",
            "object-locator": {
                "schema-name": "test",
                "table-name": "customer"
            },
            "target-table-name": "customer_t",
            "mapping-parameters": {
                "partition-key-name": "CustomerName",
                "exclude-columns": [
                    "FirstName",
                    "LastName",
                    "HomeAddress",
                    "HomePhone",
                    "WorkAddress",
                    "WorkPhone"
                ],
                "attribute-mappings": [
                    {
                        "target-attribute-name": "CustomerName",
                        "attribute-type": "scalar",
                        "attribute-sub-type": "string",
                        "value": "${FirstName},${LastName}"
                    },
                    {
                        "target-attribute-name": "ContactDetails",
                        "attribute-type": "document",
                        "attribute-sub-type": "dynamodb-map",
                        "value": {
                            "M": {
                                "Home": {
                                    "M": {
                                        "Address": {
                                            "S": "${HomeAddress}"
                                        },
                                        "Phone": {
                                            "S": "${HomePhone}"
                                        }
                                    }
                                },
                                "Work": {
                                    "M": {
                                        "Address": {
                                            "S": "${WorkAddress}"
                                        },
                                        "Phone": {
                                            "S": "${WorkPhone}"
                                        }
                                    }
                                }
                            }
                        }
                    }
                ]
            }
        }
    ]
}
```

Dengan menggunakan `rule-action` parameter *map-record-to-record*, data untuk *NickName*dan *pendapatan* dipetakan ke item dengan nama yang sama di target DynamoDB. 

![\[Memulai dengan AWS DMS\]](http://docs.aws.amazon.com/id_id/dms/latest/userguide/images/datarep-dynamodb2.png)


Namun, anggaplah Anda menggunakan aturan yang sama tetapi ubah `rule-action` parameternya menjadi *map-record-to-document*. Dalam hal ini, kolom yang tidak tercantum dalam `exclude-columns` parameter, *NickName*dan *pendapatan*, dipetakan ke item *\$1doc*.

![\[Memulai dengan AWS DMS\]](http://docs.aws.amazon.com/id_id/dms/latest/userguide/images/datarep-dynamodb3.png)


### Menggunakan ekspresi kondisi kustom dengan pemetaan objek
<a name="CHAP_Target.DynamoDB.ObjectMapping.ConditionExpression"></a>

Anda dapat menggunakan fitur DynamoDB yang disebut kondisi ekspresi untuk memanipulasi data yang sedang ditulis ke tabel DynamoDB. Untuk informasi lebih lanjut tentang kondisi ekspresi di DynamoDB, lihat [Kondisi ekspresi](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.ConditionExpressions.html).

Sebuah anggota kondisi ekspresi terdiri dari: 
+ sebuah ekspresi (diperlukan) 
+ nilai atribut ekspresi (wajib). Menentukan struktur DynamoDB json dari nilai atribut. Ini berguna untuk membandingkan atribut dengan nilai di DynamoDB yang mungkin tidak Anda ketahui sampai runtime. Anda dapat menentukan nilai atribut ekspresi sebagai placeholder untuk nilai aktual.
+ nama atribut ekspresi (wajib). Ini membantu menghindari potensi konflik dengan kata-kata yang dicadangkan DynamoDB, nama atribut yang berisi karakter khusus, dan sejenisnya.
+ pilihan untuk kapan menggunakan kondisi ekspresi (opsional). Defaultnya adalah apply-during-cdc = false dan apply-during-full-load = true

Struktur aturannya adalah sebagai berikut:

```
"target-table-name": "customer_t",
      "mapping-parameters": {
        "partition-key-name": "CustomerName",
        "condition-expression": {
          "expression":"<conditional expression>",
          "expression-attribute-values": [
              {
                "name":"<attribute name>",
                "value":<attribute value>
              }
          ],
          "apply-during-cdc":<optional Boolean value>,
          "apply-during-full-load": <optional Boolean value>
        }
```

Sampel berikut menyoroti bagian yang digunakan untuk kondisi ekspresi.

![\[Memulai dengan AWS DMS\]](http://docs.aws.amazon.com/id_id/dms/latest/userguide/images/datarep-Tasks-conditional1.png)


### Menggunakan pemetaan atribut dengan pemetaan objek
<a name="CHAP_Target.DynamoDB.ObjectMapping.AttributeMapping"></a>

Pemetaan atribut memungkinkan Anda menentukan string templat menggunakan nama kolom sumber untuk merestrikturisasi data pada target. Tidak ada pemformatan yang dilakukan selain yang ditentukan pengguna dalam templat.

Contoh berikut menunjukkan struktur basis data sumber dan struktur yang diinginkan dari target DynamoDB. Pertama ditunjukkan struktur sumbernya, dalam hal ini basis data Oracle, dan kemudian struktur data yang diinginkan di DynamoDB. Contoh diakhiri dengan JSON yang digunakan untuk membuat struktur target yang diinginkan.

Struktur data Oracle adalah sebagai berikut:


****  

| FirstName | LastName | StoreId | HomeAddress | HomePhone | WorkAddress | WorkPhone | DateOfBirth | 
| --- | --- | --- | --- | --- | --- | --- | --- | 
| Kunci Primer | N/A |  | 
| Randy | Marsh | 5 | 221B Baker Street  | 1234567890 | 31 Spooner Street, Quahog  | 9876543210  | 02/29/1988  | 

Struktur data DynamoDB adalah sebagai berikut:


****  

| CustomerName | StoreId | ContactDetails | DateOfBirth | 
| --- | --- | --- | --- | 
| Kunci partisi | Urutkan Kunci | N/A | 
| <pre>Randy,Marsh</pre> | <pre>5</pre> | <pre>{<br />    "Name": "Randy",<br />    "Home": {<br />        "Address": "221B Baker Street",<br />        "Phone": 1234567890<br />    },<br />    "Work": {<br />        "Address": "31 Spooner Street, Quahog",<br />        "Phone": 9876541230<br />    }<br />}</pre> | <pre>02/29/1988</pre> | 

JSON berikut menunjukkan pemetaan objek dan pemetaan kolom yang digunakan untuk mencapai struktur DynamoDB:

```
{
    "rules": [
        {
            "rule-type": "selection",
            "rule-id": "1",
            "rule-name": "1",
            "object-locator": {
                "schema-name": "test",
                "table-name": "%"
            },
            "rule-action": "include"
        },
        {
            "rule-type": "object-mapping",
            "rule-id": "2",
            "rule-name": "TransformToDDB",
            "rule-action": "map-record-to-record",
            "object-locator": {
                "schema-name": "test",
                "table-name": "customer"
            },
            "target-table-name": "customer_t",
            "mapping-parameters": {
                "partition-key-name": "CustomerName",
                "sort-key-name": "StoreId",
                "exclude-columns": [
                    "FirstName",
                    "LastName",
                    "HomeAddress",
                    "HomePhone",
                    "WorkAddress",
                    "WorkPhone"
                ],
                "attribute-mappings": [
                    {
                        "target-attribute-name": "CustomerName",
                        "attribute-type": "scalar",
                        "attribute-sub-type": "string",
                        "value": "${FirstName},${LastName}"
                    },
                    {
                        "target-attribute-name": "StoreId",
                        "attribute-type": "scalar",
                        "attribute-sub-type": "string",
                        "value": "${StoreId}"
                    },
                    {
                        "target-attribute-name": "ContactDetails",
                        "attribute-type": "scalar",
                        "attribute-sub-type": "string",
                        "value": "{\"Name\":\"${FirstName}\",\"Home\":{\"Address\":\"${HomeAddress}\",\"Phone\":\"${HomePhone}\"}, \"Work\":{\"Address\":\"${WorkAddress}\",\"Phone\":\"${WorkPhone}\"}}"
                    }
                ]
            }
        }
    ]
}
```

Cara lain menggunakan pemetaan kolom adalah dengan menggunakan format DynamoDB sebagai jenis dokumen Anda. Contoh kode berikut menggunakan *peta dinamodb* sebagai `attribute-sub-type` untuk pemetaan atribut. 

```
{
    "rules": [
        {
            "rule-type": "selection",
            "rule-id": "1",
            "rule-name": "1",
            "object-locator": {
                "schema-name": "test",
                "table-name": "%"
            },
            "rule-action": "include"
        },
        {
            "rule-type": "object-mapping",
            "rule-id": "2",
            "rule-name": "TransformToDDB",
            "rule-action": "map-record-to-record",
            "object-locator": {
                "schema-name": "test",
                "table-name": "customer"
            },
            "target-table-name": "customer_t",
            "mapping-parameters": {
                "partition-key-name": "CustomerName",
                "sort-key-name": "StoreId",
                "exclude-columns": [
                    "FirstName",
                    "LastName",
                    "HomeAddress",
                    "HomePhone",
                    "WorkAddress",
                    "WorkPhone"
                ],
                "attribute-mappings": [
                    {
                        "target-attribute-name": "CustomerName",
                        "attribute-type": "scalar",
                        "attribute-sub-type": "string",
                        "value": "${FirstName},${LastName}"
                    },
                    {
                        "target-attribute-name": "StoreId",
                        "attribute-type": "scalar",
                        "attribute-sub-type": "string",
                        "value": "${StoreId}"
                    },
                    {
                        "target-attribute-name": "ContactDetails",
                        "attribute-type": "document",
                        "attribute-sub-type": "dynamodb-map",
                        "value": {
                          "M": {
                            "Name": {
                              "S": "${FirstName}"
                            },
                            "Home": {
                                    "M": {
                                        "Address": {
                                            "S": "${HomeAddress}"
                                        },
                                        "Phone": {
                                            "S": "${HomePhone}"
                                        }
                                    }
                                },
                                "Work": {
                                    "M": {
                                        "Address": {
                                            "S": "${WorkAddress}"
                                        },
                                        "Phone": {
                                            "S": "${WorkPhone}"
                                        }
                                    }
                                }
                            }
                        }        
                    }
                ]
            }
        }
    ]
}
```

Sebagai alternatif untuk`dynamodb-map`, Anda dapat menggunakan `dynamodb-list` sebagai attribute-sub-type for pemetaan atribut, seperti yang ditunjukkan pada contoh berikut.

```
{
"target-attribute-name": "ContactDetailsList",
"attribute-type": "document",
"attribute-sub-type": "dynamodb-list",
"value": {
    "L": [
            {
                "N": "${FirstName}"
            },
            {   
                "N": "${HomeAddress}"
            },
            {   
                "N": "${HomePhone}"
            },
            {
                "N": "${WorkAddress}"
            },
            {
                "N": "${WorkPhone}"
            }
        ]   
    }
}
```

### Contoh 1: Menggunakan pemetaan atribut dengan pemetaan objek
<a name="CHAP_Target.DynamoDB.ColumnMappingExample1"></a>

Contoh berikut memigrasikan data dari dua tabel database MySQL, nfl\$1data *dan sport\$1team*,* ke dua tabel DynamoDB disebut dan*. *NFLTeams*SportTeams** Struktur tabel dan JSON yang digunakan untuk memetakan data dari tabel basis data MySQL ke tabel DynamoDB ditunjukkan sebagai berikut.

Struktur tabel basis data MySQL *nfl\$1data* ditunjukkan di bawah ini:

```
mysql> desc nfl_data;
+---------------+-------------+------+-----+---------+-------+
| Field         | Type        | Null | Key | Default | Extra |
+---------------+-------------+------+-----+---------+-------+
| Position      | varchar(5)  | YES  |     | NULL    |       |
| player_number | smallint(6) | YES  |     | NULL    |       |
| Name          | varchar(40) | YES  |     | NULL    |       |
| status        | varchar(10) | YES  |     | NULL    |       |
| stat1         | varchar(10) | YES  |     | NULL    |       |
| stat1_val     | varchar(10) | YES  |     | NULL    |       |
| stat2         | varchar(10) | YES  |     | NULL    |       |
| stat2_val     | varchar(10) | YES  |     | NULL    |       |
| stat3         | varchar(10) | YES  |     | NULL    |       |
| stat3_val     | varchar(10) | YES  |     | NULL    |       |
| stat4         | varchar(10) | YES  |     | NULL    |       |
| stat4_val     | varchar(10) | YES  |     | NULL    |       |
| team          | varchar(10) | YES  |     | NULL    |       |
+---------------+-------------+------+-----+---------+-------+
```

Struktur tabel basis data MySQL*sport\$1team* ditunjukkan di bawah ini:

```
mysql> desc sport_team;
+---------------------------+--------------+------+-----+---------+----------------+
| Field                     | Type         | Null | Key | Default | Extra          |
+---------------------------+--------------+------+-----+---------+----------------+
| id                        | mediumint(9) | NO   | PRI | NULL    | auto_increment |
| name                      | varchar(30)  | NO   |     | NULL    |                |
| abbreviated_name          | varchar(10)  | YES  |     | NULL    |                |
| home_field_id             | smallint(6)  | YES  | MUL | NULL    |                |
| sport_type_name           | varchar(15)  | NO   | MUL | NULL    |                |
| sport_league_short_name   | varchar(10)  | NO   |     | NULL    |                |
| sport_division_short_name | varchar(10)  | YES  |     | NULL    |                |
```

Aturan pemetaan tabel yang digunakan untuk memetakan dua tabel ke dua tabel DynamoDB adalah sebagai berikut:

```
{
  "rules":[
    {
      "rule-type": "selection",
      "rule-id": "1",
      "rule-name": "1",
      "object-locator": {
        "schema-name": "dms_sample",
        "table-name": "nfl_data"
      },
      "rule-action": "include"
    },
    {
      "rule-type": "selection",
      "rule-id": "2",
      "rule-name": "2",
      "object-locator": {
        "schema-name": "dms_sample",
        "table-name": "sport_team"
      },
      "rule-action": "include"
    },
    {
      "rule-type":"object-mapping",
      "rule-id":"3",
      "rule-name":"MapNFLData",
      "rule-action":"map-record-to-record",
      "object-locator":{
        "schema-name":"dms_sample",
        "table-name":"nfl_data"
      },
      "target-table-name":"NFLTeams",
      "mapping-parameters":{
        "partition-key-name":"Team",
        "sort-key-name":"PlayerName",
        "exclude-columns": [
          "player_number", "team", "name"
        ],
        "attribute-mappings":[
          {
            "target-attribute-name":"Team",
            "attribute-type":"scalar",
            "attribute-sub-type":"string",
            "value":"${team}"
          },
          {
            "target-attribute-name":"PlayerName",
            "attribute-type":"scalar",
            "attribute-sub-type":"string",
            "value":"${name}"
          },
          {
            "target-attribute-name":"PlayerInfo",
            "attribute-type":"scalar",
            "attribute-sub-type":"string",
            "value":"{\"Number\": \"${player_number}\",\"Position\": \"${Position}\",\"Status\": \"${status}\",\"Stats\": {\"Stat1\": \"${stat1}:${stat1_val}\",\"Stat2\": \"${stat2}:${stat2_val}\",\"Stat3\": \"${stat3}:${
stat3_val}\",\"Stat4\": \"${stat4}:${stat4_val}\"}"
          }
        ]
      }
    },
    {
      "rule-type":"object-mapping",
      "rule-id":"4",
      "rule-name":"MapSportTeam",
      "rule-action":"map-record-to-record",
      "object-locator":{
        "schema-name":"dms_sample",
        "table-name":"sport_team"
      },
      "target-table-name":"SportTeams",
      "mapping-parameters":{
        "partition-key-name":"TeamName",
        "exclude-columns": [
          "name", "id"
        ],
        "attribute-mappings":[
          {
            "target-attribute-name":"TeamName",
            "attribute-type":"scalar",
            "attribute-sub-type":"string",
            "value":"${name}"
          },
          {
            "target-attribute-name":"TeamInfo",
            "attribute-type":"scalar",
            "attribute-sub-type":"string",
            "value":"{\"League\": \"${sport_league_short_name}\",\"Division\": \"${sport_division_short_name}\"}"
          }
        ]
      }
    }
  ]
}
```

Output sampel untuk tabel *NFLTeams*DynamoDB ditunjukkan di bawah ini:

```
  "PlayerInfo": "{\"Number\": \"6\",\"Position\": \"P\",\"Status\": \"ACT\",\"Stats\": {\"Stat1\": \"PUNTS:73\",\"Stat2\": \"AVG:46\",\"Stat3\": \"LNG:67\",\"Stat4\": \"IN 20:31\"}",
  "PlayerName": "Allen, Ryan",
  "Position": "P",
  "stat1": "PUNTS",
  "stat1_val": "73",
  "stat2": "AVG",
  "stat2_val": "46",
  "stat3": "LNG",
  "stat3_val": "67",
  "stat4": "IN 20",
  "stat4_val": "31",
  "status": "ACT",
  "Team": "NE"
}
```

Output sampel untuk tabel SportsTeams *DynamoDB* ditunjukkan di bawah ini:

```
{
  "abbreviated_name": "IND",
  "home_field_id": 53,
  "sport_division_short_name": "AFC South",
  "sport_league_short_name": "NFL",
  "sport_type_name": "football",
  "TeamInfo": "{\"League\": \"NFL\",\"Division\": \"AFC South\"}",
  "TeamName": "Indianapolis Colts"
}
```

## Target tipe data untuk DynamoDB
<a name="CHAP_Target.DynamoDB.DataTypes"></a>

Titik akhir DynamoDB untuk AWS DMS mendukung sebagian besar tipe data DynamoDB. Tabel berikut menunjukkan tipe data AWS DMS target Amazon yang didukung saat menggunakan AWS DMS dan pemetaan default dari tipe AWS DMS data.

Untuk informasi tambahan tentang tipe AWS DMS data, lihat[Tipe data untuk AWS Database Migration Service](CHAP_Reference.DataTypes.md).

Saat AWS DMS memigrasikan data dari database heterogen, kami memetakan tipe data dari database sumber ke tipe data perantara yang disebut AWS DMS tipe data. Kami kemudian memetakan tipe data perantara untuk tipe data target. Tabel berikut menunjukkan setiap tipe AWS DMS data dan tipe data yang dipetakan di DynamoDB:


| AWS DMS tipe data | Tipe data DynamoDB | 
| --- | --- | 
|  String  |  String  | 
|  WString  |  String  | 
|  Boolean  |  Boolean  | 
|  Date  |  String  | 
|  DateTime  |  String  | 
|  INT1  |  Number  | 
|  INT2  |  Bilangan  | 
|  INT4  |  Bilangan  | 
|  INT8  |  Bilangan  | 
|  Numeric  |  Number  | 
|  Real4  |  Number  | 
|  Real8  |  Bilangan  | 
|  UINT1  |  Bilangan  | 
|  UINT2  |  Bilangan  | 
|  UINT4  |  Bilangan  | 
| UINT8 | Bilangan | 
| CLOB | String | 

# Menggunakan Amazon Kinesis Data Streams sebagai target AWS Database Migration Service
<a name="CHAP_Target.Kinesis"></a>

Anda dapat menggunakannya AWS DMS untuk memigrasikan data ke aliran data Amazon Kinesis. Amazon Kinesis data streams adalah bagian dari layanan Amazon Kinesis Data Streams. Anda dapat menggunakan Kinesis data stream untuk mengumpulkan dan memproses sejumlah besar catatan data secara langsung.

Kinesis data stream adalah serangkaian serpihan. *Serpihan* secara unik diidentifikasi urutan catatan data dalam stream. Untuk informasi lebih lanjut tentang serpihan di Amazon Kinesis Data Streams, lihat [Serpihan](https://docs.aws.amazon.com/streams/latest/dev/key-concepts.html#shard) di *Panduan Developer Amazon Kinesis Data Streams.*

AWS Database Migration Service menerbitkan catatan ke aliran data Kinesis menggunakan JSON. Selama konversi, AWS DMS membuat serial setiap catatan dari basis data sumber ke dalam pasangan atribut-nilai dalam format JSON atau format pesan JSON\$1UNFORMATTED. Format pesan JSON\$1UNFORMATTED adalah string JSON baris tunggal dengan pembatas baris baru. Ini memungkinkan Amazon Data Firehose untuk mengirimkan data Kinesis ke tujuan Amazon S3, dan kemudian menanyakannya menggunakan berbagai mesin kueri termasuk Amazon Athena.

Anda menggunakan pemetaan objek untuk memigrasi data Anda dari sumber data mana pun yang didukung ke aliran target. Dengan pemetaan objek, Anda menentukan bagaimana struktur catatan data dalam aliran. Anda juga menentukan kunci partisi untuk setiap tabel, yang digunakan Kinesis Data Streams untuk mengelompokkan data ke dalam serpihannya. 

AWS DMS juga menetapkan beberapa nilai parameter Kinesis Data Streams. Biaya pembuatan tabel tergantung pada jumlah data dan jumlah tabel yang akan dimigrasi.

**catatan**  
Opsi **Mode SSL** di AWS DMS konsol atau API tidak berlaku untuk beberapa streaming data dan layanan NoSQL seperti Kinesis dan DynamoDB. Mereka aman secara default, jadi AWS DMS menunjukkan pengaturan mode SSL sama dengan tidak ada (Mode **SSL** = Tidak Ada). Anda tidak perlu menyediakan konfigurasi tambahan untuk titik akhir Anda untuk menggunakan SSL. Misalnya, saat menggunakan Kinesis sebagai titik akhir target, Kinesis sudah aman secara default. Semua panggilan API ke Kinesis menggunakan SSL, jadi tidak perlu opsi SSL tambahan di titik akhir. AWS DMS Anda dapat menempatkan data dengan aman dan mengambil data melalui titik akhir SSL menggunakan protokol HTTPS, yang AWS DMS digunakan secara default saat menghubungkan ke Kinesis Data Stream.

**Pengaturan titik akhir Kinesis Data Streams**

Saat Anda menggunakan titik akhir target Kinesis Data Streams, Anda bisa mendapatkan detail transaksi dan kontrol `KinesisSettings` menggunakan opsi di API. AWS DMS 

Anda dapat mengatur pengaturan koneksi dengan cara berikut:
+ Di AWS DMS konsol, menggunakan pengaturan titik akhir.
+ Di CLI, menggunakan `kinesis-settings` opsi perintah. [CreateEndpoint](https://docs.aws.amazon.com/dms/latest/APIReference/API_CreateEndpoint.html)

Dalam CLI, gunakan parameter permintaan dari pilihan `kinesis-settings` berikut:
**catatan**  
Support untuk pengaturan titik akhir `IncludeNullAndEmpty` tersedia pada AWS DMS versi 3.4.1 dan setelahnya. Tetapi dukungan untuk pengaturan titik akhir berikut lainnya untuk target Kinesis Data Streams tersedia di. AWS DMS
+ `MessageFormat` - Format keluaran untuk catatan yang dibuat pada titik akhir. Format pesan adalah `JSON` (default) atau `JSON_UNFORMATTED` (satu baris tanpa tab).
+ `IncludeControlDetails` - Menampilkan informasi kontrol terperinci untuk definisi tabel, definisi kolom, serta perubahan tabel dan kolom pada pesan keluaran Kinesis. Nilai default-nya `false`.
+ `IncludeNullAndEmpty` - Sertakan NULL dan kolom kosong dalam target. Nilai default-nya `false`.
+ `IncludePartitionValue` - Menampilkan nilai partisi dalam pesan keluaran Kinesis, kecuali tipe partisi `schema-table-type`. Nilai default-nya `false`.
+ `IncludeTableAlterOperations` - Termasuk setiap operasi bahasa definisi data (DDL) yang mengubah tabel dalam data kontrol, seperti `rename-table`, `drop-table`, `add-column`, `drop-column`, dan `rename-column`. Nilai default-nya `false`.
+ `IncludeTransactionDetails` - Menyediakan informasi transaksi detail dari basis data sumber. Informasi ini mencakup stempel waktu melakukan, posisi log, dan nilai-nilai untuk `transaction_id`, `previous_transaction_id`, dan `transaction_record_id `(catatan offset dalam transaksi). Nilai default-nya `false`.
+ `PartitionIncludeSchemaTable` - Skema prefiks dan nama tabel untuk nilai partisi, ketika tipe partisi `primary-key-type`. Melakukan hal ini meningkatkan distribusi data di antara serpihan Kinesis. Sebagai contoh, anggaplah bahwa skema `SysBench` memiliki ribuan tabel dan setiap tabel hanya memiliki rentang terbatas untuk kunci primer. Dalam kasus ini, kunci primer yang sama dikirim dari ribuan tabel ke serpihan yang sama, yang menyebabkan throttling. Nilai default-nya `false`.
+ `UseLargeIntegerValue`— Gunakan hingga 18 digit int alih-alih casting int sebagai ganda, tersedia dari AWS DMS versi 3.5.4. Default-nya adalah salah.

Contoh berikut menunjukkan bahwa `kinesis-settings` digunakan dengan sebuah contoh perintah `create-endpoint` yang dikeluarkan menggunakan perintah AWS CLI.

```
aws dms \
  create-endpoint \
    --region <aws-region> \
    --endpoint-identifier <user-endpoint-identifier> \
    --endpoint-type target \
    --engine-name kinesis \
    --kinesis-settings ServiceAccessRoleArn=arn:aws:iam::<account-id>:role/<kinesis-role-name>,StreamArn=arn:aws:kinesis:<aws-region>:<account-id>:stream/<stream-name>,MessageFormat=json-unformatted,
IncludeControlDetails=true,IncludeTransactionDetails=true,IncludePartitionValue=true,PartitionIncludeSchemaTable=true,
IncludeTableAlterOperations=true
```

**Pengaturan tugas beban penuh multithread**

Untuk membantu meningkatkan kecepatan transfer, AWS DMS mendukung beban penuh multithreaded ke instance target Kinesis Data Streams. DMS mendukung multithreading ini dengan pengaturan tugas yang meliputi berikut ini:
+ `MaxFullLoadSubTasks` - Gunakan pilihan ini untuk menunjukkan jumlah maksimum tabel sumber yang dimuat secara paralel. DMS memuat setiap tabel ke dalam tabel target Kinesis yang sesuai menggunakan subtugas khusus. Default adalah 8; nilai maksimum adalah 49.
+ `ParallelLoadThreads`— Gunakan opsi ini untuk menentukan jumlah utas yang AWS DMS digunakan untuk memuat setiap tabel ke dalam tabel target Kinesis. Nilai maksimum untuk target Kinesis Data Streams adalah 32. Anda dapat meminta untuk meningkatkan batas maksimum ini.
+ `ParallelLoadBufferSize` - Gunakan pilihan ini untuk menentukan jumlah catatan maksimum yang disimpan di buffer yang digunakan oleh thread beban paralel untuk memuat data ke target Kinesis. Nilai default adalah 50. Nilai maksimumnya adalah 1.000. Gunakan pengaturan ini dengan `ParallelLoadThreads`. `ParallelLoadBufferSize` hanya berlaku bila ada lebih dari satu thread.
+ `ParallelLoadQueuesPerThread` - Gunakan pilihan ini untuk menentukan jumlah antrean yang diakses setiap thread secara bersamaan untuk mengambil catatan data dari antrean dan menghasilkan beban batch untuk target. Default adalah 1. Tetapi untuk target Kinesis dengan berbagai ukuran muatan, rentang yang valid adalah 5-512 antrean per thread.

**Pengaturan beban tugas CDC multithread**

Anda dapat meningkatkan performa perubahan pengambilan data (CDC) untuk titik akhir target streaming data secara langsung seperti Kinesis menggunakan pengaturan tugas untuk mengubah perilaku `PutRecords` Panggilan API. Untuk melakukan ini, Anda dapat menentukan jumlah thread yang terjadi bersamaan, antrean per thread, dan jumlah catatan yang disimpan dalam buffer menggunakan pengaturan tugas `ParallelApply*`. Misalnya, Anda ingin melakukan beban CDC dan menerapkan 128 thread secara paralel. Anda juga ingin mengakses 64 antrean per thread, dengan 50 catatan disimpan per buffer. 

Untuk mempromosikan kinerja CDC, AWS DMS mendukung pengaturan tugas ini:
+ `ParallelApplyThreads`— Menentukan jumlah thread bersamaan yang AWS DMS digunakan selama beban CDC untuk mendorong catatan data ke titik akhir target Kinesis. Nilai default adalah nol (0) dan nilai maksimum adalah 32.
+ `ParallelApplyBufferSize` - Menentukan jumlah maksimum catatan yang disimpan di setiap antrean buffer untuk thread serentak untuk mendorong ke titik akhir target Kinesis selama beban CDC. Nilai default adalah 100 dan nilai maksimum adalah 1.000. Gunakan pilihan ini saat `ParallelApplyThreads` menentukan lebih dari satu thread. 
+ `ParallelApplyQueuesPerThread` - Menentukan jumlah antrean yang diakses oleh setiap thread untuk mengambil catatan data dari antrean dan menghasilkan beban batch untuk titik akhir Kinesis selama CDC. Nilai default adalah 1 dan nilai maksimum adalah 512.

Saat menggunakan pengaturan tugas `ParallelApply*`, default `partition-key-type`-nya adalah `primary-key` dari tabel, bukan `schema-name.table-name`.

## Menggunakan citra sebelumnya untuk melihat nilai asli dari baris CDC untuk Kinesis data stream sebagai target
<a name="CHAP_Target.Kinesis.BeforeImage"></a>

Ketika menulis pembaruan CDC ke target data-streaming seperti Kinesis Anda dapat melihat nilai asli baris basis data sumber sebelum diubah oleh pembaruan. Untuk memungkinkan hal ini, AWS DMS mengisi *gambar sebelum* peristiwa pembaruan berdasarkan data yang disediakan oleh mesin database sumber. 

Mesin basis data sumber yang berbeda memberikan jumlah informasi yang berbeda untuk citra sebelum: 
+ Oracle menyediakan update untuk kolom hanya jika mereka berubah. 
+ PostgreSQL menyediakan data hanya untuk kolom yang merupakan bagian dari kunci primer (berubah atau tidak). Untuk menyediakan data untuk semua kolom (diubah atau tidak), Anda perlu mengatur `REPLICA_IDENTITY` ke `FULL` bukan`DEFAULT`. Perhatikan bahwa Anda harus memilih `REPLICA_IDENTITY` pengaturan dengan hati-hati untuk setiap tabel. Jika Anda menyetel `REPLICA_IDENTITY` ke`FULL`, semua nilai kolom ditulis ke write-ahead logging (WAL) secara terus menerus. Hal ini dapat menyebabkan masalah kinerja atau sumber daya dengan tabel yang sering diperbarui.
+ MySQL umumnya menyediakan data untuk semua kolom kecuali untuk tipe data BLOB dan CLOB (diubah atau tidak).

Untuk mengaktifkan pencitraan sebelumnya dengan tujuan menambahkan nilai asli dari basis data sumber untuk keluaran AWS DMS , gunakan pengaturan tugas `BeforeImageSettings` atau parameter `add-before-image-columns`. Parameter ini menerapkan aturan transformasi kolom. 

`BeforeImageSettings` menambahkan atribut JSON baru untuk setiap operasi pembaruan dengan nilai yang dikumpulkan dari sistem basis data sumber, seperti yang ditunjukkan berikut.

```
"BeforeImageSettings": {
    "EnableBeforeImage": boolean,
    "FieldName": string,  
    "ColumnFilter": pk-only (default) / non-lob / all (but only one)
}
```

**catatan**  
Hanya berlaku `BeforeImageSettings` untuk AWS DMS tugas yang berisi komponen CDC, seperti beban penuh ditambah tugas CDC (yang memigrasi data yang ada dan mereplikasi perubahan yang sedang berlangsung), atau ke tugas CDC saja (yang hanya mereplikasi perubahan data). Jangan terapkan `BeforeImageSettings` pada tugas-tugas yang beban penuh saja.

Untuk pilihan `BeforeImageSettings`, hal berikut berlaku:
+ Atur pilihan `EnableBeforeImage` ke `true` untuk mengaktifkan pencitraan sebelum. Nilai default-nya `false`. 
+ Gunakan pilihan `FieldName` untuk memberikan nama ke atribut JSON baru. Ketika `EnableBeforeImage` adalah `true`, `FieldName` diperlukan dan tidak dapat kosong.
+ Pilihan `ColumnFilter` menentukan kolom untuk menambahkan dengan menggunakan pencitraan sebelumnya. Untuk menambahkan kolom yang hanya merupakan bagian dari kunci primer tabel saja, gunakan nilai default, `pk-only`. Untuk menambahkan kolom apa pun yang memiliki nilai citra sebelum, gunakan `all`. Perhatikan bahwa gambar sebelum tidak berisi kolom dengan tipe data LOB, seperti CLOB atau BLOB.

  ```
  "BeforeImageSettings": {
      "EnableBeforeImage": true,
      "FieldName": "before-image",
      "ColumnFilter": "pk-only"
    }
  ```

**catatan**  
Target Amazon S3 tidak mendukung `BeforeImageSettings`. Untuk target S3, gunakan hanya aturan transformasi `add-before-image-columns` untuk melakukan pencitraan sebelumnya selama CDC.

### Menggunakan aturan transformasi citra sebelumnya
<a name="CHAP_Target.Kinesis.BeforeImage.Transform-Rule"></a>

Sebagai alternatif untuk pengaturan tugas, Anda dapat menggunakan parameter `add-before-image-columns`, yang menerapkan aturan transformasi kolom. Dengan parameter ini, Anda dapat mengaktifkan pencitraan sebelum selama CDC pada target data streaming seperti Kinesis. 

Dengan menggunakan `add-before-image-columns` dalam aturan transformasi, Anda dapat menerapkan kontrol yang lebih halus dari hasil citra sebelum. Aturan transformasi memungkinkan Anda untuk menggunakan pencari objek yang memberikan Anda kontrol atas tabel yang dipilih untuk aturan tersebut. Dan juga, Anda dapat merangkai aturan transformasi, yang memungkinkan aturan yang berbeda untuk diterapkan ke tabel yang berbeda. Anda kemudian dapat memanipulasi kolom yang dihasilkan dengan menggunakan aturan lain. 

**catatan**  
Jangan gunakan parameter `add-before-image-columns` bersamaan dengan pengaturan tugas `BeforeImageSettings` dalam tugas yang sama. Sebaliknya, gunakan salah satu saja, parameter atau pengaturan, tetapi tidak keduanya, untuk satu tugas.

Sebuah tipe peraturan `transformation` dengan parameter `add-before-image-columns` untuk kolom harus menyediakan `before-image-def` bagian. Berikut ini adalah sebuah contoh.

```
    {
      "rule-type": "transformation",
      …
      "rule-target": "column",
      "rule-action": "add-before-image-columns",
      "before-image-def":{
        "column-filter": one-of  (pk-only / non-lob / all),
        "column-prefix": string,
        "column-suffix": string,
      }
    }
```

Nilai dari `column-prefix` ditambahkan sebelum nama kolom, dan nilai default `column-prefix` adalah `BI_`. Nilai dari `column-suffix` ditambahkan sebelum nama kolom, dan default kosong. Jangan atur `column-prefix` dan `column-suffix` ke string kosong.

Pilih satu nilai untuk `column-filter`. Untuk menambahkan kolom yang merupakan bagian dari kunci primer tabel saja, pilih `pk-only`. Untuk menambahkan kolom yang bukan tipe LOB saja, gunakan `non-lob`. Atau pilih `all` untuk menambahkan kolom yang memiliki nilai citra-sebelum.

### Contoh untuk aturan transformasi citra sebelumnya
<a name="CHAP_Target.Kinesis.BeforeImage.Example"></a>

Aturan transformasi dalam contoh berikut menambahkan kolom baru yang disebut `BI_emp_no` pada target. Jadi pernyataan seperti `UPDATE employees SET emp_no = 3 WHERE emp_no = 1;` mengisi `BI_emp_no` field dengan 1. Ketika Anda menulis pembaruan CDC untuk target Amazon S3, kolom `BI_emp_no` memungkinkan untuk memberitahu baris asli yang diperbarui.

```
{
  "rules": [
    {
      "rule-type": "selection",
      "rule-id": "1",
      "rule-name": "1",
      "object-locator": {
        "schema-name": "%",
        "table-name": "%"
      },
      "rule-action": "include"
    },
    {
      "rule-type": "transformation",
      "rule-id": "2",
      "rule-name": "2",
      "rule-target": "column",
      "object-locator": {
        "schema-name": "%",
        "table-name": "employees"
      },
      "rule-action": "add-before-image-columns",
      "before-image-def": {
        "column-prefix": "BI_",
        "column-suffix": "",
        "column-filter": "pk-only"
      }
    }
  ]
}
```

Untuk informasi tentang penggunaan peraturan tindakan `add-before-image-columns`, lihat [Aturan dan tindakan transformasi](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Transformations.md).

## Prasyarat untuk menggunakan aliran data Kinesis sebagai target AWS Database Migration Service
<a name="CHAP_Target.Kinesis.Prerequisites"></a>

### Peran IAM untuk menggunakan aliran data Kinesis sebagai target AWS Database Migration Service
<a name="CHAP_Target.Kinesis.Prerequisites.IAM"></a>

Sebelum Anda mengatur aliran data Kinesis sebagai target AWS DMS, pastikan Anda membuat peran IAM. Peran ini harus memungkinkan AWS DMS untuk mengasumsikan dan memberikan akses ke aliran data Kinesis yang sedang dimigrasikan ke. Kumpulan izin akses minimum ditampilkan dalam kebijakan IAM berikut.

------
#### [ JSON ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
   {
     "Sid": "1",
     "Effect": "Allow",
     "Principal": {
        "Service": "dms.amazonaws.com"
     },
   "Action": "sts:AssumeRole"
   }
]
}
```

------

Peran yang Anda gunakan untuk migrasi ke Kinesis data stream harus memiliki izin berikut.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "kinesis:DescribeStream",
        "kinesis:PutRecord",
        "kinesis:PutRecords"
      ],
      "Resource": "*"
    }
  ]
}
```

------

### Mengakses aliran data Kinesis sebagai target AWS Database Migration Service
<a name="CHAP_Target.Kinesis.Prerequisites.Access"></a>

Di AWS DMS versi 3.4.7 dan yang lebih tinggi, untuk terhubung ke titik akhir Kinesis, Anda harus melakukan salah satu hal berikut:
+ Konfigurasikan DMS untuk menggunakan titik akhir VPC. Untuk informasi tentang mengonfigurasi DMS untuk menggunakan titik akhir VPC, lihat. [Mengkonfigurasi titik akhir VPC untuk AWS DMS](CHAP_VPC_Endpoints.md)
+ Konfigurasikan DMS untuk menggunakan rute publik, yaitu membuat instance replikasi Anda menjadi publik. Untuk informasi tentang contoh replikasi publik, lihat. [Instans replikasi publik dan privat](CHAP_ReplicationInstance.PublicPrivate.md)

## Keterbatasan saat menggunakan Kinesis Data Streams sebagai target AWS Database Migration Service
<a name="CHAP_Target.Kinesis.Limitations"></a>

Batasan berikut berlaku saat menggunakan Kinesis Data Streams sebagai target:
+ AWS DMS menerbitkan setiap pembaruan ke satu catatan dalam database sumber sebagai satu catatan data dalam aliran data Kinesis tertentu terlepas dari transaksi. Namun, Anda dapat menyertakan detail transaksi untuk setiap data catatan dengan menggunakan parameter yang relevan dari API `KinesisSettings`.
+ Mode LOB penuh tidak didukung.
+ Ukuran LOB maksimum yang didukung adalah 1 MB.
+ Kinesis Data Streams tidak mendukung deduplikasi. Aplikasi yang mengonsumsi data dari aliran perlu menangani duplikasi catatan. Untuk informasi lebih lanjut, lihat [Menangani catatan duplikat](https://docs.aws.amazon.com/streams/latest/dev/kinesis-record-processor-duplicates.html) di *Panduan Developer Amazon Kinesis Data Streams.*
+ AWS DMS mendukung empat bentuk berikut untuk kunci partisi:
  + `SchemaName.TableName`: Kombinasi skema dan nama tabel.
  + `${AttributeName}`: Nilai salah satu field di JSON, atau kunci primer dari tabel dalam basis data sumber.
  + `transaction-id`: ID transaksi CDC. Semua catatan dalam transaksi yang sama masuk ke partisi yang sama.
  + `constant`: Nilai literal tetap untuk setiap catatan terlepas dari tabel atau data. Semua catatan dikirim ke nilai kunci partisi yang sama “konstan”, memberikan urutan global yang ketat di semua tabel.

  ```
  {
      "rule-type": "object-mapping",
      "rule-id": "2",
      "rule-name": "PartitionKeyTypeExample",
      "rule-action": "map-record-to-document",
      "object-locator": {
          "schema-name": "onprem",
          "table-name": "it_system"
      },
      "mapping-parameters": {
          "partition-key-type": "transaction-id | constant | attribute-name | schema-table"
      }
  }
  ```
+ Untuk informasi tentang mengenkripsi data at rest Anda saat berada dalam Kinesis Data Streams, lihat [Perlindungan data dalam Kinesis Data Streams](https://docs.aws.amazon.com/streams/latest/dev/server-side-encryption.html.html) di *Panduan Developer AWS Key Management Service *. 
+ Pengaturan `IncludeTransactionDetails` endpoint hanya didukung ketika titik akhir sumber adalah Oracle, SQL Server, PostgreSQL, atau MySQL. Untuk jenis titik akhir sumber lainnya, detail transaksi tidak akan disertakan.
+ `BatchApply` tidak didukung untuk titik akhir Kinesis. Menggunakan Batch Apply (misalnya, pengaturan tugas metadata `BatchApplyEnabled` target) untuk target Kinesis menyebabkan kegagalan tugas dan kehilangan data. Jangan aktifkan `BatchApply` saat menggunakan Kinesis sebagai titik akhir target.
+ Target kinesis hanya didukung untuk aliran data Kinesis di AWS akun yang sama dan sama dengan instance replikasi Wilayah AWS .
+ Saat bermigrasi dari sumber MySQL, BeforeImage data tidak menyertakan tipe data CLOB dan BLOB. Untuk informasi selengkapnya, lihat [Menggunakan citra sebelumnya untuk melihat nilai asli dari baris CDC untuk Kinesis data stream sebagai target](#CHAP_Target.Kinesis.BeforeImage).
+ AWS DMS tidak mendukung migrasi nilai tipe `BigInt` data dengan lebih dari 16 digit. Untuk mengatasi batasan ini, Anda dapat menggunakan aturan transformasi berikut untuk mengonversi `BigInt` kolom menjadi string. Untuk informasi selengkapnya tentang aturan transformasi, lihat[Aturan dan tindakan transformasi](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Transformations.md).

  ```
  {
      "rule-type": "transformation",
      "rule-id": "id",
      "rule-name": "name",
      "rule-target": "column",
      "object-locator": {
          "schema-name": "valid object-mapping rule action",
          "table-name": "",
          "column-name": ""
      },
      "rule-action": "change-data-type",
      "data-type": {
          "type": "string",
          "length": 20
      }
  }
  ```
+ Ketika beberapa operasi DHTML dalam satu transaksi memodifikasi kolom Objek Besar (LOB) pada database sumber, database target hanya mempertahankan nilai LOB akhir dari operasi terakhir dalam transaksi itu. Nilai LOB menengah yang ditetapkan oleh operasi sebelumnya dalam transaksi yang sama ditimpa, yang dapat mengakibatkan potensi kehilangan data atau ketidakkonsistenan. Perilaku ini terjadi karena bagaimana data LOB diproses selama replikasi.
+ AWS DMS tidak mendukung data sumber yang berisi `'\0'` karakter yang disematkan saat menggunakan Kinesis sebagai titik akhir target. Data yang berisi `'\0'` karakter tertanam akan terpotong pada karakter pertama`'\0'`.

## Menggunakan pemetaan objek untuk memigrasi data ke Kinesis data stream
<a name="CHAP_Target.Kinesis.ObjectMapping"></a>

AWS DMS menggunakan aturan pemetaan tabel untuk memetakan data dari sumber ke aliran data Kinesis target. Untuk memetakan data ke aliran target, Anda menggunakan jenis aturan pemetaan tabel yang disebut pemetaan objek. Anda menggunakan pemetaan objek untuk menentukan cara pencatatan data di peta sumber ke pencatatan data yang dipublikasikan ke Kinesis data stream. 

Kinesis data stream tidak memiliki struktur preset selain memiliki kunci partisi. Dalam aturan pemetaan objek, nilai-nilai yang mungkin dari `partition-key-type` untuk catatan data adalah `schema-table`, `transaction-id`, `primary-key`, `constant`, dan `attribute-name`.

Untuk membuat aturan pemetaan objek, Anda tentukan `rule-type` sebagai `object-mapping`. Aturan ini menentukan jenis pemetaan objek yang ingin Anda gunakan. 

Struktur untuk aturan tersebut adalah sebagai berikut.

```
{
    "rules": [
        {
            "rule-type": "object-mapping",
            "rule-id": "id",
            "rule-name": "name",
            "rule-action": "valid object-mapping rule action",
            "object-locator": {
                "schema-name": "case-sensitive schema name",
                "table-name": ""
            }
        }
    ]
}
```

AWS DMS saat ini mendukung `map-record-to-record` dan `map-record-to-document` sebagai satu-satunya nilai yang valid untuk `rule-action` parameter. Pengaturan ini memengaruhi nilai yang tidak dikecualikan sebagai bagian dari daftar `exclude-columns` atribut. `map-record-to-document`Nilai `map-record-to-record` dan menentukan bagaimana AWS DMS menangani catatan ini secara default. Nilai-nilai ini tidak mempengaruhi pemetaan atribut dengan cara apapun. 

Gunakan `map-record-to-record` saat bermigrasi dari basis data relasional ke Kinesis data stream. Jenis aturan ini menggunakan nilai `taskResourceId.schemaName.tableName` dari basis data relasional sebagai kunci partisi dalam Kinesis data stream dan membuat atribut untuk setiap kolom dalam basis data sumber. 

Saat menggunakan`map-record-to-record`, perhatikan hal berikut:
+ Pengaturan ini hanya memengaruhi kolom yang dikecualikan oleh `exclude-columns` daftar.
+ Untuk setiap kolom tersebut, AWS DMS buat atribut yang sesuai dalam topik target.
+ AWS DMS menciptakan atribut yang sesuai ini terlepas dari apakah kolom sumber digunakan dalam pemetaan atribut. 

Gunakan `map-record-to-document` untuk menempatkan kolom sumber ke dalam satu, dokumen datar dalam aliran target yang sesuai menggunakan nama atribut “\$1doc”. AWS DMS menempatkan data ke dalam satu peta datar pada sumber yang disebut ”`_doc`“. Penempatan ini berlaku untuk kolom mana pun di tabel sumber yang tidak tercantum dalam daftar atribut `exclude-columns`.

Salah satu cara untuk memahami `map-record-to-record` adalah melihatnya beraksi. Untuk contoh ini, anggaplah bahwa Anda memulai dengan baris tabel basis data relasional dengan struktur dan data berikut.


| FirstName | LastName | StoreId | HomeAddress | HomePhone | WorkAddress | WorkPhone | DateofBirth | 
| --- | --- | --- | --- | --- | --- | --- | --- | 
| Randy | Marsh | 5 | 221B Baker Street | 1234567890 | 31 Spooner Street, Quahog  | 9876543210 | 02/29/1988 | 

Untuk memigrasi informasi ini dari skema bernama `Test` ke Kinesis data stream, Anda membuat aturan untuk memetakan data ke aliran target. Aturan berikut menggambarkan pemetaan. 

```
{
    "rules": [
        {
            "rule-type": "selection",
            "rule-id": "1",
            "rule-name": "1",
            "rule-action": "include",
            "object-locator": {
                "schema-name": "Test",
                "table-name": "%"
            }
        },
        {
            "rule-type": "object-mapping",
            "rule-id": "2",
            "rule-name": "DefaultMapToKinesis",
            "rule-action": "map-record-to-record",
            "object-locator": {
                "schema-name": "Test",
                "table-name": "Customers"
            }
        }
    ]
}
```

Berikut ini menggambarkan format catatan yang dihasilkan dalam Kinesis data stream: 
+ StreamName: XXX
+ PartitionKey: Test.Customers //schmaname.TableName
+ Data: //Pesan JSON berikut

  ```
    {
       "FirstName": "Randy",
       "LastName": "Marsh",
       "StoreId":  "5",
       "HomeAddress": "221B Baker Street",
       "HomePhone": "1234567890",
       "WorkAddress": "31 Spooner Street, Quahog",
       "WorkPhone": "9876543210",
       "DateOfBirth": "02/29/1988"
    }
  ```

Namun, anggaplah Anda menggunakan aturan yang sama tetapi mengubah parameter `rule-action` untuk `map-record-to-document` dan mengecualikan kolom tertentu. Aturan berikut menggambarkan pemetaan.

```
{
	"rules": [
	   {
			"rule-type": "selection",
			"rule-id": "1",
			"rule-name": "1",
			"rule-action": "include",
			"object-locator": {
				"schema-name": "Test",
				"table-name": "%"
			}
		},
		{
			"rule-type": "object-mapping",
			"rule-id": "2",
			"rule-name": "DefaultMapToKinesis",
			"rule-action": "map-record-to-document",
			"object-locator": {
				"schema-name": "Test",
				"table-name": "Customers"
			},
			"mapping-parameters": {
				"exclude-columns": [
					"homeaddress",
					"homephone",
					"workaddress",
					"workphone"
				]
			}
		}
	]
}
```

Dalam kasus ini, kolom tidak tercantum dalam parameter `exclude-columns`, `FirstName`, `LastName`, `StoreId` dan `DateOfBirth`, dipetakan ke `_doc`. Berikut ini menggambarkan format catatan yang dihasilkan. 

```
       {
            "data":{
                "_doc":{
                    "FirstName": "Randy",
                    "LastName": "Marsh",
                    "StoreId":  "5",
                    "DateOfBirth": "02/29/1988"
                }
            }
        }
```

### Restrukturisasi data dengan pemetaan atribut
<a name="CHAP_Target.Kinesis.AttributeMapping"></a>

Anda dapat merestrukturisasi data saat memigrasinya ke Kinesis data stream menggunakan peta atribut. Misalnya, Anda mungkin ingin menggabungkan beberapa field di sumber menjadi field tunggal dalam target. Peta atribut berikut menggambarkan bagaimana merestrukturisasi data.

```
{
    "rules": [
        {
            "rule-type": "selection",
            "rule-id": "1",
            "rule-name": "1",
            "rule-action": "include",
            "object-locator": {
                "schema-name": "Test",
                "table-name": "%"
            }
        },
        {
            "rule-type": "object-mapping",
            "rule-id": "2",
            "rule-name": "TransformToKinesis",
            "rule-action": "map-record-to-record",
            "target-table-name": "CustomerData",
            "object-locator": {
                "schema-name": "Test",
                "table-name": "Customers"
            },
            "mapping-parameters": {
                "partition-key-type": "attribute-name",
                "partition-key-name": "CustomerName",
                "exclude-columns": [
                    "firstname",
                    "lastname",
                    "homeaddress",
                    "homephone",
                    "workaddress",
                    "workphone"
                ],
                "attribute-mappings": [
                    {
                        "target-attribute-name": "CustomerName",
                        "attribute-type": "scalar",
                        "attribute-sub-type": "string",
                        "value": "${lastname}, ${firstname}"
                    },
                    {
                        "target-attribute-name": "ContactDetails",
                        "attribute-type": "document",
                        "attribute-sub-type": "json",
                        "value": {
                            "Home": {
                                "Address": "${homeaddress}",
                                "Phone": "${homephone}"
                            },
                            "Work": {
                                "Address": "${workaddress}",
                                "Phone": "${workphone}"
                            }
                        }
                    }
                ]
            }
        }
    ]
}
```

Untuk menetapkan nilai konstan untuk`partition-key`, tentukan`"partition-key-type: "constant"`, ini menetapkan nilai partisi ke`constant`. Misalnya, Anda mungkin melakukan ini untuk memaksa semua data untuk disimpan dalam serpihan tunggal. Pemetaan berikut menggambarkan pendekatan ini. 

```
{
    "rules": [
        {
            "rule-type": "selection",
            "rule-id": "1",
            "rule-name": "1",
            "object-locator": {
                "schema-name": "Test",
                "table-name": "%"
            },
            "rule-action": "include"
        },
        {
            "rule-type": "object-mapping",
            "rule-id": "2",
            "rule-name": "TransformToKinesis",
            "rule-action": "map-record-to-document",
            "object-locator": {
                "schema-name": "Test",
                "table-name": "Customer"
            },
            "mapping-parameters": {
                "partition-key-type": "constant",
                "exclude-columns": [
                    "FirstName",
                    "LastName",
                    "HomeAddress",
                    "HomePhone",
                    "WorkAddress",
                    "WorkPhone"
                ],
                "attribute-mappings": [
                    {
                        "target-attribute-name": "CustomerName",
                        "attribute-type": "scalar",
                        "attribute-sub-type": "string",
                        "value": "${FirstName},${LastName}"

                    },
                    {
                        "target-attribute-name": "ContactDetails",
                        "attribute-type": "scalar",
                        "attribute-sub-type": "string",
                        "value": {
                            "Home": {
                                "Address": "${HomeAddress}",
                                "Phone": "${HomePhone}"
                            },
                            "Work": {
                                "Address": "${WorkAddress}",
                                "Phone": "${WorkPhone}"
                            }
                        }
                    },
                    {
                        "target-attribute-name": "DateOfBirth",
                        "attribute-type": "scalar",
                        "attribute-sub-type": "string",
                        "value": "${DateOfBirth}"
                    }
                ]
            }
        }
    ]
}
```

**catatan**  
Nilai `partition-key` untuk catatan kontrol yang ditujukan khusus untuk tabel tertentu adalah `TaskId.SchemaName.TableName`. Nilai `partition-key` untuk catatan kontrol yang ditujukan untuk tugas tertentu adalah `TaskId` dari catatan tersebut. Menentukan nilai `partition-key` dalam pemetaan objek tidak berdampak pada `partition-key` untuk catatan kontrol.  
 Kapan `partition-key-type` diatur ke `attribute-name` dalam aturan pemetaan tabel, Anda harus menentukan`partition-key-name`, yang harus mereferensikan kolom dari tabel sumber atau kolom kustom yang ditentukan dalam pemetaan. Selain itu, `attribute-mappings` harus disediakan untuk menentukan bagaimana kolom sumber memetakan ke Aliran Kinesis target.

### Format pesan untuk Kinesis Data Streams
<a name="CHAP_Target.Kinesis.Messageformat"></a>

Keluaran JSON hanya berupa daftar pasangan nilai-kunci. Format pesan JSON\$1UNFORMATTED adalah string JSON baris tunggal dengan pembatas baris baru.

AWS DMS menyediakan bidang cadangan berikut untuk mempermudah penggunaan data dari Kinesis Data Streams: 

**RecordType**  
Jenis catatan dapat berupa data atau kontrol. *Catatan data* mewakili baris yang sebenarnya dalam sumber. *Kontrol catatan* adalah untuk peristiwa-peristiwa penting di aliran, misalnya restart tugas.

**Operasi**  
Untuk catatan data, operasinya dapat `load`, `insert`, `update`, atau `delete`.  
Untuk catatan kontrol, operasi dapat berupa`create-table`,`rename-table`,`drop-table`,`change-columns`,`add-column`,`drop-column`,`rename-column`, atau`column-type-change`.

**SchemaName**  
Skema sumber untuk catatan. Field ini bisa kosong untuk catatan kontrol.

**TableName**  
Tabel sumber untuk catatan. Field ini bisa kosong untuk catatan kontrol.

**Stempel waktu**  
Stempel waktu untuk saat pesan JSON dibuat. Field ini diformat dengan format ISO 8601.

# Menggunakan Apache Kafka sebagai target AWS Database Migration Service
<a name="CHAP_Target.Kafka"></a>

Anda dapat menggunakan AWS DMS untuk memigrasikan data ke cluster Apache Kafka. Apache Kafka adalah platform streaming terdistribusi. Anda dapat menggunakan Apache Kafka untuk menelan dan memproses data streaming secara langsung.

AWS juga menawarkan Amazon Managed Streaming for Apache Kafka (Amazon MSK) untuk digunakan sebagai target. AWS DMS Amazon MSK adalah layanan streaming Apache Kafka yang terkelola penuh yang menyederhanakan implementasi dan pengelolaan instans Apache Kafka. Ini bekerja dengan versi Apache Kafka open-source, dan Anda mengakses instans MSK Amazon sebagai AWS DMS target persis seperti instans Apache Kafka lainnya. Untuk informasi lebih lanjut, lihat [Apa itu Amazon MSK?](https://docs.aws.amazon.com/msk/latest/developerguide/what-is-msk.html) dalam *Panduan Developer: Amazon Managed Streaming for Apache Kafka*.

Sebuah klaster Kafka menyimpan aliran catatan dalam kategori yang disebut topik yang dibagi menjadi partisi. *Partisi* adalah urutan catatan data (pesan) yang diidentifikasi secara unik secara unik dalam suatu topik. Partisi dapat didistribusikan ke beberapa broker dalam sebuah klaster untuk mengaktifkan pemrosesan paralel catatan topik. Untuk informasi lebih lanjut tentang topik dan partisi dan distribusi mereka di Apache Kafka, lihat [Topik dan log](https://kafka.apache.org/documentation/#intro_topics) dan [Distribusi](https://kafka.apache.org/documentation/#intro_distribution).

Kluster Kafka Anda dapat berupa instans MSK Amazon, klaster yang berjalan di instans Amazon EC2, atau kluster lokal. Instans MSK Amazon atau cluster pada instans Amazon EC2 dapat berada di VPC yang sama atau yang berbeda. Jika klaster Anda lokal, Anda dapat menggunakan server nama lokal Anda sendiri untuk instance replikasi untuk menyelesaikan nama host klaster. Untuk informasi tentang menyiapkan server nama untuk instance replikasi Anda, lihat[Menggunakan server nama on-premise Anda sendiri](CHAP_BestPractices.md#CHAP_BestPractices.Rte53DNSResolver). Untuk informasi selengkapnya tentang pengaturan jaringan, lihat[Menyiapkan jaringan untuk instans replikasi](CHAP_ReplicationInstance.VPC.md).

Saat menggunakan kluster MSK Amazon, pastikan grup keamanannya mengizinkan akses dari instance replikasi Anda. Untuk informasi tentang mengubah grup keamanan untuk klaster MSK Amazon, lihat [Mengubah grup keamanan klaster MSK Amazon](https://docs.aws.amazon.com/msk/latest/developerguide/change-security-group.html).

AWS Database Migration Service menerbitkan catatan ke topik Kafka menggunakan JSON. Selama konversi, AWS DMS membuat serial setiap catatan dari basis data sumber ke dalam pasangan atribut-nilai dalam format JSON.

Untuk memigrasikan data Anda dari sumber data apa pun yang didukung ke klaster Kafka target, Anda menggunakan pemetaan objek. Dengan pemetaan objek, Anda menentukan bagaimana struktur catatan data dalam topik target. Anda juga menentukan kunci partisi untuk setiap tabel, yang digunakan Apache Kafka untuk mengelompokkan data ke dalam partisi. 

Saat ini, AWS DMS mendukung satu topik per tugas. Untuk satu tugas dengan beberapa tabel, semua pesan masuk ke satu topik. Setiap pesan menyertakan bagian metadata yang mengidentifikasi skema dan tabel target. AWS DMS versi 3.4.6 dan yang lebih tinggi mendukung replikasi multitopik menggunakan pemetaan objek. Untuk informasi selengkapnya, lihat [Replikasi multitopik menggunakan pemetaan objek](#CHAP_Target.Kafka.MultiTopic).

**Pengaturan titik akhir Apache Kafka**

Anda dapat menentukan detail koneksi melalui pengaturan titik akhir di AWS DMS konsol, atau `--kafka-settings` opsi di CLI. Persyaratan untuk setiap pengaturan:
+ `Broker` - Tentukan lokasi dari satu atau lebih broker di klaster Kafka Anda dalam bentuk daftar yang dipisahkan koma untuk masing-masing `broker-hostname:port`. Contohnya `"ec2-12-345-678-901.compute-1.amazonaws.com:2345,ec2-10-987-654-321.compute-1.amazonaws.com:9876"`. Pengaturan ini dapat menentukan lokasi dari salah satu atau semua broker dalam klaster. Semua Klaster broker berkomunikasi untuk menangani partisi catatan data yang dimigrasikan ke topik.
+ `Topic` - (Opsional) Tentukan nama topik dengan panjang maksimum 255 huruf dan simbol. Anda dapat menggunakan titik (.), garis bawah (\$1), dan minus (-). Nama topik dengan titik (.) atau garis bawah (\$1) dapat bertabrakan dalam struktur data internal. Gunakan salah satu, tetapi jangan kedua simbol ini sekaligus dalam nama topik. Jika Anda tidak menentukan nama topik, AWS DMS gunakan `"kafka-default-topic"` sebagai topik migrasi.
**catatan**  
Untuk AWS DMS membuat topik migrasi yang Anda tentukan atau topik default, tetapkan `auto.create.topics.enable = true` sebagai bagian dari konfigurasi cluster Kafka Anda. Untuk informasi selengkapnya, lihat [Keterbatasan saat menggunakan Apache Kafka sebagai target AWS Database Migration Service](#CHAP_Target.Kafka.Limitations)
+ `MessageFormat` - Format keluaran untuk catatan yang dibuat pada titik akhir. Format pesan adalah `JSON` (default) atau `JSON_UNFORMATTED` (satu baris tanpa tab).
+ `MessageMaxBytes` - Ukuran maksimum dalam byte untuk catatan yang dibuat pada titik akhir. Default adalah 1.000.000.
**catatan**  
Anda hanya dapat menggunakan AWS CLI/SDK untuk mengubah `MessageMaxBytes` ke nilai non-default. Misalnya, untuk memodifikasi titik akhir Kafka yang sudah ada dan mengubah `MessageMaxBytes`, gunakan perintah berikut.  

  ```
  aws dms modify-endpoint --endpoint-arn your-endpoint 
  --kafka-settings Broker="broker1-server:broker1-port,broker2-server:broker2-port,...",
  Topic=topic-name,MessageMaxBytes=integer-of-max-message-size-in-bytes
  ```
+ `IncludeTransactionDetails` - Menyediakan informasi transaksi detail dari basis data sumber. Informasi ini mencakup stempel waktu melakukan, posisi log, dan nilai-nilai untuk `transaction_id`, `previous_transaction_id`, dan `transaction_record_id` (catatan offset dalam transaksi). Nilai default-nya `false`.
+ `IncludePartitionValue` - Menampilkan nilai partisi dalam pesan keluaran Kafka, kecuali jika tipe partisi adalah `schema-table-type`. Nilai default-nya `false`.
+ `PartitionIncludeSchemaTable` - Skema prefiks dan nama tabel untuk nilai partisi, ketika tipe partisi `primary-key-type`. Melakukan hal ini meningkatkan distribusi data antara partisi Kafka. Sebagai contoh, anggaplah bahwa skema `SysBench` memiliki ribuan tabel dan setiap tabel hanya memiliki rentang terbatas untuk kunci primer. Dalam kasus ini, kunci primer yang sama dikirim dari ribuan tabel ke partisi yang sama, sehingga menyebabkan throttling. Nilai default-nya `false`.
+ `IncludeTableAlterOperations` - Termasuk setiap operasi bahasa definisi data (DDL) yang mengubah tabel dalam data kontrol, seperti `rename-table`, `drop-table`, `add-column`, `drop-column`, dan `rename-column`. Nilai default-nya `false`. 
+ `IncludeControlDetails` - Menunjukkan informasi kontrol detail untuk definisi tabel, definisi kolom, dan perubahan tabel dan kolom pada keluaran pesan Kafka. Nilai default-nya `false`.
+ `IncludeNullAndEmpty` - Sertakan NULL dan kolom kosong dalam target. Nilai default-nya `false`.
+ `SecurityProtocol` - Menyetel koneksi yang aman ke titik akhir target Kafka menggunakan Keamanan Lapisan Pengangkutan (TLS). Pilihan termasuk `ssl-authentication`, `ssl-encryption`, dan `sasl-ssl`. Menggunakan `sasl-ssl` membutuhkan `SaslUsername` dan `SaslPassword`.
+ `SslEndpointIdentificationAlgorithm`— Menetapkan verifikasi nama host untuk sertifikat. Pengaturan ini didukung di AWS DMS versi 3.5.1 dan yang lebih baru. Opsi mencakup hal berikut: 
  + `NONE`: Nonaktifkan verifikasi nama host broker dalam koneksi klien.
  + `HTTPS`: Aktifkan verifikasi nama host broker dalam koneksi klien.
+ `useLargeIntegerValue`— Gunakan hingga 18 digit int alih-alih casting int sebagai ganda, tersedia dari AWS DMS versi 3.5.4. Default-nya adalah salah.

Anda dapat menggunakan pengaturan untuk membantu meningkatkan kecepatan transfer Anda. Untuk melakukannya, AWS DMS mendukung beban penuh multithread klaster target Apache Kafka. AWS DMS mendukung multithreading dengan pengaturan tugas yang meliputi hal berikut ini:
+ `MaxFullLoadSubTasks`— Gunakan opsi ini untuk menunjukkan jumlah maksimum tabel sumber untuk dimuat secara paralel. AWS DMS memuat setiap tabel ke dalam tabel target Kafka yang sesuai menggunakan subtugas khusus. Default adalah 8; nilai maksimum adalah 49.
+ `ParallelLoadThreads`— Gunakan opsi ini untuk menentukan jumlah utas yang AWS DMS digunakan untuk memuat setiap tabel ke dalam tabel target Kafka. Nilai maksimum untuk target Apache Kafka adalah 32. Anda dapat meminta untuk meningkatkan batas maksimum ini.
+ `ParallelLoadBufferSize` - Gunakan pilihan ini untuk menentukan jumlah maksimum catatan untuk disimpan di buffer yang digunakan oleh thread beban paralel untuk memuat data ke target Kafka. Nilai default adalah 50. Nilai maksimumnya adalah 1.000. Gunakan pengaturan ini dengan `ParallelLoadThreads`. `ParallelLoadBufferSize` hanya berlaku bila ada lebih dari satu thread.
+ `ParallelLoadQueuesPerThread` - Gunakan pilihan ini untuk menentukan jumlah antrean yang diakses setiap thread secara bersamaan untuk mengambil catatan data dari antrean dan menghasilkan beban batch untuk target. Default adalah 1. Maksimum adalah 512.

Anda dapat meningkatkan kinerja pengambilan data perubahan (CDC) untuk titik akhir Kafka dengan menyetel pengaturan tugas untuk thread paralel dan operasi massal. Untuk melakukan ini, Anda dapat menentukan jumlah thread yang terjadi bersamaan, antrean per thread, dan jumlah catatan yang disimpan dalam buffer menggunakan pengaturan tugas `ParallelApply*`. Misalnya, Anda ingin melakukan beban CDC dan menerapkan 128 thread secara paralel. Anda juga ingin mengakses 64 antrean per thread, dengan 50 catatan disimpan per buffer. 

Untuk mempromosikan kinerja CDC, AWS DMS mendukung pengaturan tugas ini:
+ `ParallelApplyThreads`— Menentukan jumlah thread bersamaan yang AWS DMS digunakan selama beban CDC untuk mendorong catatan data ke titik akhir target Kafka. Nilai default adalah nol (0) dan nilai maksimum adalah 32.
+ `ParallelApplyBufferSize` - Menentukan jumlah maksimum catatan yang disimpan di setiap antrean buffer untuk thread serentak untuk mendorong ke titik akhir target Kinesis selama beban CDC. Nilai default adalah 100 dan nilai maksimum adalah 1.000. Gunakan pilihan ini saat `ParallelApplyThreads` menentukan lebih dari satu thread. 
+ `ParallelApplyQueuesPerThread` - Menentukan jumlah antrean yang diakses oleh setiap thread untuk mengambil catatan data dari antrean dan menghasilkan beban batch untuk titik akhir Kafka selama CDC. Default-nya adalah 1. Maksimum adalah 512.

Saat menggunakan pengaturan tugas `ParallelApply*`, default `partition-key-type`-nya adalah `primary-key` dari tabel, bukan `schema-name.table-name`.

## Menghubungkan ke Kafka menggunakan Keamanan Lapisan Pengangkutan (TLS)
<a name="CHAP_Target.Kafka.TLS"></a>

Sebuah klaster Kafka menerima koneksi aman menggunakan Keamanan Lapisan Pengangkutan (TLS). Dengan DMS, Anda dapat menggunakan salah satu dari tiga pilihan protokol keamanan berikut untuk mengamankan koneksi titik akhir Kafka.

**Enkripsi SSL (`server-encryption`)**  
Klien memvalidasi identitas server melalui sertifikat server. Kemudian koneksi terenkripsi dibuat antara server dan klien.

**Autentikasi SSL (`mutual-authentication`)**  
Server dan klien memvalidasi identitas dengan satu sama lain melalui sertifikat mereka sendiri. Kemudian koneksi terenkripsi dibuat antara server dan klien.

**SASL-SSL (`mutual-authentication`)**  
Metode The Simple Authentication and Security Layer (SASL) menggantikan sertifikat klien dengan nama pengguna dan kata sandi untuk memvalidasi identitas klien. Secara spesifik, Anda memberikan nama pengguna dan kata sandi yang telah didaftarkan ke server sehingga server dapat memvalidasi identitas klien. Kemudian koneksi terenkripsi dibuat antara server dan klien.

**penting**  
Apache Kafka dan Amazon MSK menerima sertifikat diselesaikan. Ini adalah keterbatasan yang sudah diketahui dari Kafka dan Amazon MSK yang harus ditangani. Untuk informasi lebih lanjut, lihat [Masalah Apache Kafka, KAFKA-3700](https://issues.apache.org/jira/browse/KAFKA-3700).  
Jika Anda menggunakan Amazon MSK, pertimbangkan untuk menggunakan daftar kontrol akses (ACLs) sebagai solusi untuk batasan yang diketahui ini. Untuk informasi selengkapnya tentang penggunaan ACLs, lihat ACLs bagian [Apache Kafka](https://docs.aws.amazon.com//msk/latest/developerguide/msk-acls.html) dari *Amazon Managed Streaming for Apache Kafka Developer* Guide.  
Jika Anda menggunakan klaster Kafka yang dikelola sendiri, lihat [Komentar tanggal 21/Oct/18](https://issues.apache.org/jira/browse/KAFKA-3700?focusedCommentId=16658376) untuk informasi tentang mengonfigurasi klaster Anda.

### Menggunakan enkripsi SSL dengan Amazon MSK atau klaster Kafka yang dikelola sendiri
<a name="CHAP_Target.Kafka.TLS.SSLencryption"></a>

Anda dapat menggunakan enkripsi SSL untuk mengamankan koneksi titik akhir ke Amazon MSK atau klaster Kafka yang dikelola sendiri. Saat Anda menggunakan metode autentikasi enkripsi SSL, klien memvalidasi identitas server melalui sertifikat server. Kemudian koneksi terenkripsi dibuat antara server dan klien.

**Menggunakan enkripsi SSL untuk terhubung ke Amazon MSK**
+ Tetapkan pengaturan titik akhir protokol keamanan (`SecurityProtocol`) menggunakan pilihan `ssl-encryption` ketika membuat titik akhir target Kafka Anda. 

  Contoh JSON berikut menetapkan protokol keamanan sebagai enkripsi SSL.

```
"KafkaSettings": {
    "SecurityProtocol": "ssl-encryption", 
}
```

**Untuk menggunakan enkripsi SSL sebagai klaster Kafka yang dikelola sendiri**

1. Jika Anda menggunakan Otoritas Sertifikasi (CA) pribadi di klaster Kafka on-premise Anda, unggahlah sertifikat CA pribadi dan dapatkan Amazon Resource Name (ARN). 

1. Tetapkan pengaturan titik akhir protokol keamanan (`SecurityProtocol`) menggunakan pilihan `ssl-encryption` ketika membuat titik akhir target Kafka Anda. Contoh JSON berikut menetapkan protokol keamanan sebagai `ssl-encryption`.

   ```
   "KafkaSettings": {
       "SecurityProtocol": "ssl-encryption", 
   }
   ```

1. Jika Anda menggunakan CA pribadi, atur `SslCaCertificateArn` di ARN yang Anda dapatkan di langkah pertama di atas.

### Menggunakan autentikasi SSL
<a name="CHAP_Target.Kafka.TLS.SSLauthentication"></a>

Anda dapat menggunakan autentikasi SSL untuk mengamankan koneksi titik akhir ke Amazon MSK atau klaster Kafka yang dikelola sendiri.

Untuk mengaktifkan autentikasi klien dan enkripsi menggunakan otentikasi SSL untuk menyambung ke Amazon MSK, lakukan hal berikut:
+ Siapkan kunci privat dan sertifikat publik untuk Kafka.
+ Unggah sertifikat ke DMS Certificate Manager .
+ Buat titik akhir target Kafka dengan sertifikat terkait yang ARNs ditentukan dalam pengaturan titik akhir Kafka.

**Untuk mempersiapkan kunci privat dan sertifikat publik untuk Amazon MSK**

1. Membuat instans EC2 dan atur klien untuk menggunakan autentikasi seperti yang dijelaskan dalam langkah 1 sampai 9 di [Autentikasi klien](https://docs.aws.amazon.com/msk/latest/developerguide/msk-authentication.html) Bagian dari *Panduan Developer Amazon Managed Streaming for Apache Kafka*.

   Setelah Anda menyelesaikan langkah-langkah tersebut, Anda memiliki sertifikat-ARN (sertifikat publik ARN disimpan di ACM), dan kunci privat yang terdapat dalam file `kafka.client.keystore.jks`.

1. Dapatkan sertifikat publik dan salin sertifikat ke file `signed-certificate-from-acm.pem`, menggunakan perintah berikut:

   ```
   aws acm-pca get-certificate --certificate-authority-arn Private_CA_ARN --certificate-arn Certificate_ARN
   ```

   Perintah itu mengembalikan informasi yang serupa dengan contoh berikut:

   ```
   {"Certificate": "123", "CertificateChain": "456"}
   ```

   Anda kemudian menyalin yang setara dengan `"123"` ke file `signed-certificate-from-acm.pem`.

1. Dapatkan kunci privat dengan mengimpor kunci `msk-rsa` dari `kafka.client.keystore.jks to keystore.p12`, seperti yang ditunjukkan dalam contoh berikut.

   ```
   keytool -importkeystore \
   -srckeystore kafka.client.keystore.jks \
   -destkeystore keystore.p12 \
   -deststoretype PKCS12 \
   -srcalias msk-rsa-client \
   -deststorepass test1234 \
   -destkeypass test1234
   ```

1. Gunakan perintah berikut untuk mengekspor `keystore.p12` ke format `.pem`. 

   ```
   Openssl pkcs12 -in keystore.p12 -out encrypted-private-client-key.pem –nocerts
   ```

   Pesan **Masukkan frase PEM pass** muncul dan mengidentifikasi kunci yang diterapkan untuk mengenkripsi sertifikat.

1. Hapus atribut tas dan atribut kunci dari file `.pem` untuk memastikan bahwa baris pertama dimulai dengan string berikut.

   ```
                                   ---BEGIN ENCRYPTED PRIVATE KEY---
   ```

**Untuk mengunggah sertifikat publik dan kunci privat ke DMS certificate manager dan menguji sambungan ke Amazon MSK**

1. Unggah ke DMS Certificate Manager menggunakan perintah berikut.

   ```
   aws dms import-certificate --certificate-identifier signed-cert --certificate-pem file://path to signed cert
   aws dms import-certificate --certificate-identifier private-key —certificate-pem file://path to private key
   ```

1. Buat titik akhit target Amazon MSK dan uji koneksi untuk memastikan bahwa autentikasi TLS berfungsi.

   ```
   aws dms create-endpoint --endpoint-identifier $endpoint-identifier --engine-name kafka --endpoint-type target --kafka-settings 
   '{"Broker": "b-0.kafka260.aaaaa1.a99.kafka.us-east-1.amazonaws.com:0000", "SecurityProtocol":"ssl-authentication", 
   "SslClientCertificateArn": "arn:aws:dms:us-east-1:012346789012:cert:",
   "SslClientKeyArn": "arn:aws:dms:us-east-1:0123456789012:cert:","SslClientKeyPassword":"test1234"}'
   aws dms test-connection -replication-instance-arn=$rep_inst_arn —endpoint-arn=$kafka_tar_arn_msk
   ```

**penting**  
Anda dapat menggunakan autentikasi SSL untuk mengamankan koneksi ke klaster Kafka yang dikelola sendiri. Dalam beberapa kasus, Anda mungkin menggunakan Otoritas Sertifikasi (CA) pribadi di kluster Kafka on-premise Anda. Jika demikian, unggah rantai CA Anda, sertifikat publik, dan kunci privat ke DMS certificate manager. Kemudian, gunakan Amazon Resource Name (ARN) yang sesuai dalam pengaturan titik akhir Anda ketika Anda membuat titik akhir target Kafka on-premise.

**Untuk mempersiapkan kunci privat dan sertifikat yang sudah ditandatangani untuk klaster Kafka yang dikelola sendiri**

1. Buat pasangan kunci seperti yang ditunjukkan pada contoh berikut.

   ```
   keytool -genkey -keystore kafka.server.keystore.jks -validity 300 -storepass your-keystore-password 
   -keypass your-key-passphrase -dname "CN=your-cn-name" 
   -alias alias-of-key-pair -storetype pkcs12 -keyalg RSA
   ```

1. Buat sertifikat tanda permintaan (CSR). 

   ```
   keytool -keystore kafka.server.keystore.jks -certreq -file server-cert-sign-request-rsa -alias on-premise-rsa -storepass your-key-store-password 
   -keypass your-key-password
   ```

1. Gunakan CA di trusstore klaster Anda untuk menandatangani CSR. Jika Anda tidak memiliki CA, Anda dapat membuat CA pribadi Anda sendiri.

   ```
   openssl req -new -x509 -keyout ca-key -out ca-cert -days validate-days                            
   ```

1. Impor `ca-cert` ke dalam server truststore dan keystore. Jika Anda tidak memiliki truststore, gunakan perintah berikut untuk membuat truststore dan impor `ca-cert ` ke dalamnya. 

   ```
   keytool -keystore kafka.server.truststore.jks -alias CARoot -import -file ca-cert
   keytool -keystore kafka.server.keystore.jks -alias CARoot -import -file ca-cert
   ```

1. Tanda tangani sertifikat.

   ```
   openssl x509 -req -CA ca-cert -CAkey ca-key -in server-cert-sign-request-rsa -out signed-server-certificate.pem 
   -days validate-days -CAcreateserial -passin pass:ca-password
   ```

1. Impor sertifikat yang sudah ditandatangani ke keystore.

   ```
   keytool -keystore kafka.server.keystore.jks -import -file signed-certificate.pem -alias on-premise-rsa -storepass your-keystore-password 
   -keypass your-key-password
   ```

1. Gunakan perintah berikut untuk mengimpor `on-premise-rsa` kunci dari `kafka.server.keystore.jks` ke `keystore.p12`.

   ```
   keytool -importkeystore \
   -srckeystore kafka.server.keystore.jks \
   -destkeystore keystore.p12 \
   -deststoretype PKCS12 \
   -srcalias on-premise-rsa \
   -deststorepass your-truststore-password \
   -destkeypass your-key-password
   ```

1. Gunakan perintah berikut untuk mengekspor `keystore.p12` ke format `.pem`.

   ```
   Openssl pkcs12 -in keystore.p12 -out encrypted-private-server-key.pem –nocerts
   ```

1. Unggah `encrypted-private-server-key.pem`, `signed-certificate.pem`, dan `ca-cert` untuk DMS certificate manager.

1. Buat titik akhir dengan menggunakan yang dikembalikan ARNs.

   ```
   aws dms create-endpoint --endpoint-identifier $endpoint-identifier --engine-name kafka --endpoint-type target --kafka-settings 
   '{"Broker": "b-0.kafka260.aaaaa1.a99.kafka.us-east-1.amazonaws.com:9092", "SecurityProtocol":"ssl-authentication", 
   "SslClientCertificateArn": "your-client-cert-arn","SslClientKeyArn": "your-client-key-arn","SslClientKeyPassword":"your-client-key-password", 
   "SslCaCertificateArn": "your-ca-certificate-arn"}'
                               
   aws dms test-connection -replication-instance-arn=$rep_inst_arn —endpoint-arn=$kafka_tar_arn_msk
   ```

### Menggunakan autentikasi SASL-SSL untuk terhubung ke Amazon MSK
<a name="CHAP_Target.Kafka.TLS.SSL-SASL"></a>

Metode The Simple Authentication and Security Layer (SASL) menggunakan nama pengguna dan kata sandi untuk memvalidasi identitas klien, dan membuat koneksi terenkripsi antara server dan klien.

Untuk menggunakan SASL, pertama-tama buat nama pengguna dan kata sandi yang aman ketika mengatur Amazon MSK klaster Anda. Untuk deskripsi cara mengatur nama pengguna dan kata sandi yang aman untuk klaster MSK Amazon, lihat [Menyiapkan SASL/SCRAM otentikasi untuk klaster MSK Amazon di Panduan Pengembang Amazon](https://docs.aws.amazon.com/msk/latest/developerguide/msk-password.html#msk-password-tutorial) *Managed Streaming for* Apache Kafka.

Kemudian, ketika Anda membuat titik akhir target Kafka, setel pengaturan titik akhir protokol keamanan (`SecurityProtocol`) menggunakan pilihan `sasl-ssl`. Anda juga mengatur pilihan `SaslUsername` dan `SaslPassword`. Pastikan semua ini konsisten dengan nama pengguna dan kata sandi aman yang Anda buat ketika pertama kali menyiapkan klaster Amazon MSK Anda, seperti yang ditunjukkan dalam contoh JSON berikut.

```
                   
"KafkaSettings": {
    "SecurityProtocol": "sasl-ssl",
    "SaslUsername":"Amazon MSK cluster secure user name",
    "SaslPassword":"Amazon MSK cluster secure password"                    
}
```

**catatan**  
Saat ini, hanya AWS DMS mendukung SASL-SSL yang didukung CA publik. DMS tidak mendukung SASL-SSL untuk digunakan dengan Kafka yang dikelola sendiri yang didukung oleh CA pribadi.
Untuk otentikasi SASL-SSL, AWS DMS mendukung mekanisme SCRAM-SHA-512 secara default. AWS DMS versi 3.5.0 dan yang lebih tinggi juga mendukung mekanisme Plain. Untuk mendukung mekanisme Plain, atur `SaslMechanism` parameter tipe data `KafkaSettings` API ke`PLAIN`. Jenis data didukung oleh Kafka, tetapi `PLAIN` tidak didukung oleh Amazon Kafka (MSK).

## Menggunakan citra sebelumnya untuk melihat nilai-nilai asli dari baris CDC untuk Apache Kafka sebagai target
<a name="CHAP_Target.Kafka.BeforeImage"></a>

Ketika menulis pembaruan CDC ke target data-streaming seperti Kafka Anda dapat melihat nilai asli baris basis data sumber sebelum diubah oleh pembaruan.. Untuk memungkinkan hal ini, AWS DMS mengisi *gambar sebelum* peristiwa pembaruan berdasarkan data yang disediakan oleh mesin database sumber. 

Mesin basis data sumber yang berbeda memberikan jumlah informasi yang berbeda untuk citra sebelum: 
+ Oracle menyediakan update untuk kolom hanya jika mereka berubah. 
+ PostgreSQL menyediakan data hanya untuk kolom yang merupakan bagian dari kunci primer (berubah atau tidak). Jika replikasi logis sedang digunakan dan REPLICA IDENTITY FULL diatur untuk tabel sumber, Anda bisa mendapatkan seluruh informasi sebelum dan sesudah pada baris yang ditulis ke WALs dan tersedia di sini.
+ MySQL umumnya menyediakan data untuk semua kolom (berubah atau tidak).

Untuk mengaktifkan pencitraan sebelumnya dengan tujuan menambahkan nilai asli dari basis data sumber untuk keluaran AWS DMS , gunakan pengaturan tugas `BeforeImageSettings` atau parameter `add-before-image-columns`. Parameter ini menerapkan aturan transformasi kolom. 

`BeforeImageSettings` menambahkan atribut JSON baru untuk setiap operasi pembaruan dengan nilai yang dikumpulkan dari sistem basis data sumber, seperti yang ditunjukkan berikut.

```
"BeforeImageSettings": {
    "EnableBeforeImage": boolean,
    "FieldName": string,  
    "ColumnFilter": pk-only (default) / non-lob / all (but only one)
}
```

**catatan**  
Terapkan `BeforeImageSettings` pada beban penuh ditambah tugas CDC (yang memigrasikan data yang ada dan mereplikasi perubahan yang sedang berlangsung), atau ke tugas CDC saja (yang hanya mereplikasi perubahan data). Jangan terapkan `BeforeImageSettings` pada tugas-tugas yang beban penuh saja.

Untuk pilihan `BeforeImageSettings`, hal berikut berlaku:
+ Atur pilihan `EnableBeforeImage` ke `true` untuk mengaktifkan pencitraan sebelum. Nilai default-nya `false`. 
+ Gunakan pilihan `FieldName` untuk memberikan nama ke atribut JSON baru. Ketika `EnableBeforeImage` adalah `true`, `FieldName` diperlukan dan tidak dapat kosong.
+ Pilihan `ColumnFilter` menentukan kolom untuk menambahkan dengan menggunakan pencitraan sebelumnya. Untuk menambahkan kolom yang hanya merupakan bagian dari kunci primer tabel saja, gunakan nilai default, `pk-only`. Untuk menambahkan hanya kolom yang bukan tipe LOB, gunakan `non-lob`. Untuk menambahkan kolom apa pun yang memiliki nilai citra sebelum, gunakan `all`. 

  ```
  "BeforeImageSettings": {
      "EnableBeforeImage": true,
      "FieldName": "before-image",
      "ColumnFilter": "pk-only"
    }
  ```

### Menggunakan aturan transformasi citra sebelumnya
<a name="CHAP_Target.Kafka.BeforeImage.Transform-Rule"></a>

Sebagai alternatif untuk pengaturan tugas, Anda dapat menggunakan parameter `add-before-image-columns`, yang menerapkan aturan transformasi kolom. Dengan parameter ini, Anda dapat mengaktifkan pencitraan sebelumnya selama CDC, pada target data streaming seperti Kinesis.

Dengan menggunakan `add-before-image-columns` dalam aturan transformasi, Anda dapat menerapkan kontrol yang lebih halus dari hasil citra sebelumnya. Aturan transformasi memungkinkan Anda untuk menggunakan pencari objek yang memberikan Anda kontrol atas tabel yang dipilih untuk aturan tersebut. Dan juga, Anda dapat merangkai aturan transformasi, yang memungkinkan aturan yang berbeda untuk diterapkan ke tabel yang berbeda. Anda kemudian dapat memanipulasi kolom yang dihasilkan dengan menggunakan aturan lain. 

**catatan**  
Jangan gunakan parameter `add-before-image-columns` bersamaan dengan pengaturan tugas `BeforeImageSettings` dalam tugas yang sama. Sebaliknya, gunakan salah satu saja, parameter atau pengaturan, tetapi tidak keduanya, untuk satu tugas.

Sebuah tipe peraturan `transformation` dengan parameter `add-before-image-columns` untuk kolom harus menyediakan `before-image-def` bagian. Berikut ini adalah sebuah contoh.

```
    {
      "rule-type": "transformation",
      …
      "rule-target": "column",
      "rule-action": "add-before-image-columns",
      "before-image-def":{
        "column-filter": one-of  (pk-only / non-lob / all),
        "column-prefix": string,
        "column-suffix": string,
      }
    }
```

Nilai dari `column-prefix` ditambahkan sebelum nama kolom, dan nilai default `column-prefix` adalah `BI_`. Nilai dari `column-suffix` ditambahkan sebelum nama kolom, dan default kosong. Jangan atur `column-prefix` dan `column-suffix` ke string kosong.

Pilih satu nilai untuk `column-filter`. Untuk menambahkan kolom yang merupakan bagian dari kunci primer tabel saja, pilih `pk-only`. Untuk menambahkan kolom yang bukan tipe LOB saja, gunakan `non-lob`. Atau pilih `all` untuk menambahkan kolom yang memiliki nilai citra-sebelum.

### Contoh untuk aturan transformasi citra sebelumnya
<a name="CHAP_Target.Kafka.BeforeImage.Example"></a>

Aturan transformasi dalam contoh berikut menambahkan kolom baru yang disebut `BI_emp_no` pada target. Jadi pernyataan seperti `UPDATE employees SET emp_no = 3 WHERE emp_no = 1;` mengisi `BI_emp_no` field dengan 1. Ketika Anda menulis pembaruan CDC untuk target Amazon S3, kolom `BI_emp_no` memungkinkan untuk memberitahu baris asli yang diperbarui.

```
{
  "rules": [
    {
      "rule-type": "selection",
      "rule-id": "1",
      "rule-name": "1",
      "object-locator": {
        "schema-name": "%",
        "table-name": "%"
      },
      "rule-action": "include"
    },
    {
      "rule-type": "transformation",
      "rule-id": "2",
      "rule-name": "2",
      "rule-target": "column",
      "object-locator": {
        "schema-name": "%",
        "table-name": "employees"
      },
      "rule-action": "add-before-image-columns",
      "before-image-def": {
        "column-prefix": "BI_",
        "column-suffix": "",
        "column-filter": "pk-only"
      }
    }
  ]
}
```

Untuk informasi tentang penggunaan peraturan tindakan `add-before-image-columns`, lihat [Aturan dan tindakan transformasi](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Transformations.md).

## Keterbatasan saat menggunakan Apache Kafka sebagai target AWS Database Migration Service
<a name="CHAP_Target.Kafka.Limitations"></a>

Batasan berikut berlaku saat menggunakan Apache Kafka sebagai target:
+ AWS DMS Titik akhir target Kafka tidak mendukung kontrol akses IAM untuk Amazon Managed Streaming for Apache Kafka (Amazon MSK).
+ Mode LOB penuh tidak didukung.
+ Tentukan file konfigurasi Kafka untuk klaster Anda dengan properti yang memungkinkan AWS DMS untuk membuat topik baru secara otomatis. Sertakan pengaturan, `auto.create.topics.enable = true`. Jika menggunakan Amazon MSK, Anda dapat menentukan konfigurasi default ketika membuat klaster Kafka Anda, kemudian mengubah pengaturan `auto.create.topics.enable` ke `true`. Untuk informasi lebih lanjut tentang pengaturan konfigurasi default, lihat [Konfigurasi Amazon MSK default](https://docs.aws.amazon.com/msk/latest/developerguide/msk-default-configuration.html) di *Panduan Developer Amazon Managed Streaming for Apache Kafka*. Jika Anda perlu memodifikasi cluster Kafka yang ada yang dibuat menggunakan Amazon MSK, jalankan AWS CLI perintah `aws kafka create-configuration` untuk memperbarui konfigurasi Kafka Anda, seperti pada contoh berikut:

  ```
  14:38:41 $ aws kafka create-configuration --name "kafka-configuration" --kafka-versions "2.2.1" --server-properties file://~/kafka_configuration
  {
      "LatestRevision": {
          "Revision": 1,
          "CreationTime": "2019-09-06T14:39:37.708Z"
      },
      "CreationTime": "2019-09-06T14:39:37.708Z",
      "Name": "kafka-configuration",
      "Arn": "arn:aws:kafka:us-east-1:111122223333:configuration/kafka-configuration/7e008070-6a08-445f-9fe5-36ccf630ecfd-3"
  }
  ```

  Di sini, `//~/kafka_configuration` adalah file konfigurasi yang telah Anda buat dengan pengaturan properti yang diperlukan.

  Jika Anda menggunakan instans Kafka Anda sendiri yang diinstal di Amazon EC2, ubah konfigurasi cluster Kafka dengan `auto.create.topics.enable = true` pengaturan untuk AWS DMS memungkinkan Anda membuat topik baru secara otomatis, menggunakan opsi yang disediakan bersama instans Anda.
+ AWS DMS menerbitkan setiap pembaruan ke satu catatan dalam database sumber sebagai satu catatan data (pesan) dalam topik Kafka tertentu terlepas dari transaksi.
+ AWS DMS mendukung empat bentuk berikut untuk kunci partisi:
  + `SchemaName.TableName`: Kombinasi skema dan nama tabel.
  + `${AttributeName}`: Nilai salah satu field di JSON, atau kunci primer dari tabel dalam basis data sumber.
  + `transaction-id`: ID transaksi CDC. Semua catatan dalam transaksi yang sama masuk ke partisi yang sama.
  + `constant`: Nilai literal tetap untuk setiap catatan terlepas dari tabel atau data. Semua catatan dikirim ke nilai kunci partisi yang sama “konstan”, memberikan urutan global yang ketat di semua tabel.

  ```
  {
      "rule-type": "object-mapping",
      "rule-id": "2",
      "rule-name": "TransactionIdPartitionKey",
      "rule-action": "map-record-to-document",
      "object-locator": {
          "schema-name": "onprem",
          "table-name": "it_system"
      },
      "mapping-parameters": {
          "partition-key-type": "transaction-id | constant | attribute-name | schema-table"
      }
  }
  ```
+ Pengaturan `IncludeTransactionDetails` endpoint hanya didukung ketika titik akhir sumber adalah Oracle, SQL Server, PostgreSQL, atau MySQL. Untuk jenis titik akhir sumber lainnya, detail transaksi tidak akan disertakan.
+ `BatchApply` Tidak didukung untuk titik akhir Kafka. Menggunakan penerapan Batch (misalnya, pengaturan tugas metadata target `BatchApplyEnabled`) untuk target Kafka dapat mengakibatkan hilangnya data.
+ AWS DMS tidak mendukung migrasi nilai tipe `BigInt` data dengan lebih dari 16 digit. Untuk mengatasi batasan ini, Anda dapat menggunakan aturan transformasi berikut untuk mengonversi `BigInt` kolom menjadi string. Untuk informasi selengkapnya tentang aturan transformasi, lihat[Aturan dan tindakan transformasi](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Transformations.md).

  ```
  {
      "rule-type": "transformation",
      "rule-id": "id",
      "rule-name": "name",
      "rule-target": "column",
      "object-locator": {
          "schema-name": "valid object-mapping rule action",
          "table-name": "",
          "column-name": ""
      },
      "rule-action": "change-data-type",
      "data-type": {
          "type": "string",
          "length": 20
      }
  }
  ```
+ AWS DMS Titik akhir target Kafka tidak mendukung Amazon MSK tanpa servless.
+ Saat mendefinisikan aturan pemetaan, memiliki keduanya, aturan pemetaan objek dan aturan transformasi tidak didukung. Anda harus menetapkan hanya satu aturan. 
+ AWS DMS mendukung Otentikasi SASL untuk versi Apache Kafka hingga 3.8. Jika Anda menggunakan Kafka 4.0 atau lebih tinggi, Anda hanya dapat terhubung tanpa otentikasi SASL.
+ AWS DMS tidak mendukung data sumber yang berisi `'\0'` karakter yang disematkan saat menggunakan Kafka sebagai titik akhir target. Data yang berisi `'\0'` karakter tertanam akan terpotong pada karakter pertama`'\0'`.

## Menggunakan pemetaan objek untuk bermigrasi data ke topik Kafka
<a name="CHAP_Target.Kafka.ObjectMapping"></a>

AWS DMS menggunakan aturan pemetaan tabel untuk memetakan data dari sumber ke topik Kafka target. Untuk memetakan data ke topik target, Anda menggunakan jenis aturan pemetaan tabel yang disebut pemetaan objek. Anda menggunakan pemetaan objek untuk menentukan cara pencatatan data di peta sumber ke catatan data yang dipublikasikan ke topik Kafka. 

topik Kafka tidak memiliki struktur preset selain memiliki kunci partisi.

**catatan**  
Anda tidak perlu menggunakan pemetaan objek. Anda dapat menggunakan pemetaan tabel biasa untuk berbagai transformasi. Namun, jenis kunci partisi akan mengikuti perilaku default ini:   
Primary Key digunakan sebagai kunci partisi untuk Full Load.
Jika tidak ada pengaturan tugas penerapan paralel yang digunakan, `schema.table` digunakan sebagai kunci partisi untuk CDC.
Jika pengaturan tugas penerapan paralel digunakan, kunci utama digunakan sebagai kunci partisi untuk CDC.

Untuk membuat aturan pemetaan objek, tetapkan `rule-type` sebagai `object-mapping`. Aturan ini menentukan jenis pemetaan objek yang ingin Anda gunakan. 

Struktur untuk aturan tersebut adalah sebagai berikut.

```
{
    "rules": [
        {
            "rule-type": "object-mapping",
            "rule-id": "id",
            "rule-name": "name",
            "rule-action": "valid object-mapping rule action",
            "object-locator": {
                "schema-name": "case-sensitive schema name",
                "table-name": ""
            }
        }
    ]
}
```

AWS DMS saat ini mendukung `map-record-to-record` dan `map-record-to-document` sebagai satu-satunya nilai yang valid untuk `rule-action` parameter. Pengaturan ini memengaruhi nilai yang tidak dikecualikan sebagai bagian dari daftar `exclude-columns` atribut. `map-record-to-document`Nilai `map-record-to-record` dan menentukan bagaimana AWS DMS menangani catatan ini secara default. Nilai-nilai ini tidak mempengaruhi pemetaan atribut dengan cara apapun. 

Gunakan `map-record-to-record` ketika bermigrasi dari basis data relasional ke sebuah topik Kafka. Jenis aturan ini menggunakan nilai `taskResourceId.schemaName.tableName` dari basis data relasional sebagai kunci partisi dalam topik Kafka dan membuat atribut untuk masing-masing kolom dalam basis data sumber. 

Saat menggunakan`map-record-to-record`, perhatikan hal berikut:
+ Pengaturan ini hanya memengaruhi kolom yang dikecualikan oleh `exclude-columns` daftar.
+ Untuk setiap kolom tersebut, AWS DMS buat atribut yang sesuai dalam topik target.
+ AWS DMS menciptakan atribut yang sesuai ini terlepas dari apakah kolom sumber digunakan dalam pemetaan atribut. 

Salah satu cara untuk memahami `map-record-to-record` adalah melihatnya beraksi. Untuk contoh ini, anggaplah bahwa Anda memulai dengan baris tabel basis data relasional dengan struktur dan data berikut.


| FirstName | LastName | StoreId | HomeAddress | HomePhone | WorkAddress | WorkPhone | DateofBirth | 
| --- | --- | --- | --- | --- | --- | --- | --- | 
| Randy | Marsh | 5 | 221B Baker Street | 1234567890 | 31 Spooner Street, Quahog  | 9876543210 | 02/29/1988 | 

Untuk memigrasi informasi ini dari skema bernama `Test` ke topik Kafka, buatlah aturan untuk memetakan data ke topik target. Aturan berikut menggambarkan pemetaan. 

```
{
    "rules": [
        {
            "rule-type": "selection",
            "rule-id": "1",
            "rule-name": "1",
            "rule-action": "include",
            "object-locator": {
                "schema-name": "Test",
                "table-name": "%"
            }
        },
        {
            "rule-type": "object-mapping",
            "rule-id": "2",
            "rule-name": "DefaultMapToKafka",
            "rule-action": "map-record-to-record",
            "object-locator": {
                "schema-name": "Test",
                "table-name": "Customers"
            }
        }
    ]
}
```

Mengingat topik Kafka dan kunci partisi (dalam hal ini, `taskResourceId.schemaName.tableName`), berikut ini menggambarkan format catatan yang dihasilkan menggunakan data sampel kami di topik target Kafka: 

```
  {
     "FirstName": "Randy",
     "LastName": "Marsh",
     "StoreId":  "5",
     "HomeAddress": "221B Baker Street",
     "HomePhone": "1234567890",
     "WorkAddress": "31 Spooner Street, Quahog",
     "WorkPhone": "9876543210",
     "DateOfBirth": "02/29/1988"
  }
```

**Topics**
+ [Restrukturisasi data dengan pemetaan atribut](#CHAP_Target.Kafka.AttributeMapping)
+ [Replikasi multitopik menggunakan pemetaan objek](#CHAP_Target.Kafka.MultiTopic)
+ [Format pesan untuk Apache Kafka](#CHAP_Target.Kafka.Messageformat)

### Restrukturisasi data dengan pemetaan atribut
<a name="CHAP_Target.Kafka.AttributeMapping"></a>

Anda dapat merestrukturisasi data saat migrasi ke topik kafka berlangsung menggunakan peta atribut. Misalnya, Anda mungkin ingin menggabungkan beberapa field di sumber menjadi field tunggal dalam target. Peta atribut berikut menggambarkan bagaimana merestrukturisasi data.

```
{
    "rules": [
        {
            "rule-type": "selection",
            "rule-id": "1",
            "rule-name": "1",
            "rule-action": "include",
            "object-locator": {
                "schema-name": "Test",
                "table-name": "%"
            }
        },
        {
            "rule-type": "object-mapping",
            "rule-id": "2",
            "rule-name": "TransformToKafka",
            "rule-action": "map-record-to-record",
            "target-table-name": "CustomerData",
            "object-locator": {
                "schema-name": "Test",
                "table-name": "Customers"
            },
            "mapping-parameters": {
                "partition-key-type": "attribute-name",
                "partition-key-name": "CustomerName",
                "exclude-columns": [
                    "firstname",
                    "lastname",
                    "homeaddress",
                    "homephone",
                    "workaddress",
                    "workphone"
                ],
                "attribute-mappings": [
                    {
                        "target-attribute-name": "CustomerName",
                        "attribute-type": "scalar",
                        "attribute-sub-type": "string",
                        "value": "${lastname}, ${firstname}"
                    },
                    {
                        "target-attribute-name": "ContactDetails",
                        "attribute-type": "document",
                        "attribute-sub-type": "json",
                        "value": {
                            "Home": {
                                "Address": "${homeaddress}",
                                "Phone": "${homephone}"
                            },
                            "Work": {
                                "Address": "${workaddress}",
                                "Phone": "${workphone}"
                            }
                        }
                    }
                ]
            }
        }
    ]
}
```

Untuk menetapkan nilai konstan untuk`partition-key`, tentukan`"partition-key-type: "constant"`, ini menetapkan nilai partisi ke`constant`. Sebagai contoh, Anda mungkin melakukan ini untuk memaksa semua data untuk disimpan dalam partisi tunggal. Pemetaan berikut menggambarkan pendekatan ini. 

```
{
    "rules": [
        {
            "rule-type": "selection",
            "rule-id": "1",
            "rule-name": "1",
            "object-locator": {
                "schema-name": "Test",
                "table-name": "%"
            },
            "rule-action": "include"
        },
        {
            "rule-type": "object-mapping",
            "rule-id": "1",
            "rule-name": "TransformToKafka",
            "rule-action": "map-record-to-document",
            "object-locator": {
                "schema-name": "Test",
                "table-name": "Customer"
            },
            "mapping-parameters": {
                "partition-key-type": "constant",
                "exclude-columns": [
                    "FirstName",
                    "LastName",
                    "HomeAddress",
                    "HomePhone",
                    "WorkAddress",
                    "WorkPhone"
                ],
                "attribute-mappings": [
                    {
                        "attribute-name": "CustomerName",
                        "value": "${FirstName},${LastName}"
                    },
                    {
                        "attribute-name": "ContactDetails",
                        "value": {
                            "Home": {
                                "Address": "${HomeAddress}",
                                "Phone": "${HomePhone}"
                            },
                            "Work": {
                                "Address": "${WorkAddress}",
                                "Phone": "${WorkPhone}"
                            }
                        }
                    },
                    {
                        "attribute-name": "DateOfBirth",
                        "value": "${DateOfBirth}"
                    }
                ]
            }
        }
    ]
}
```

**catatan**  
Nilai `partition-key` untuk catatan kontrol yang ditujukan khusus untuk tabel tertentu adalah `TaskId.SchemaName.TableName`. Nilai `partition-key` untuk catatan kontrol yang ditujukan untuk tugas tertentu adalah `TaskId` dari catatan tersebut. Menentukan nilai `partition-key` dalam pemetaan objek tidak berdampak pada `partition-key` untuk catatan kontrol.  
 Kapan `partition-key-type` diatur ke `attribute-name` dalam aturan pemetaan tabel, Anda harus menentukan`partition-key-name`, yang harus mereferensikan kolom dari tabel sumber atau kolom kustom yang ditentukan dalam pemetaan. Selain itu, `attribute-mappings` harus disediakan untuk menentukan bagaimana kolom sumber memetakan ke topik target Kafka.

### Replikasi multitopik menggunakan pemetaan objek
<a name="CHAP_Target.Kafka.MultiTopic"></a>

Secara default, AWS DMS tugas memigrasikan semua data sumber ke salah satu topik Kafka berikut:
+ Seperti yang ditentukan dalam bidang **Topik** dari titik akhir AWS DMS target.
+ Seperti yang ditentukan oleh `kafka-default-topic` jika bidang **Topik** dari titik akhir target tidak diisi dan `auto.create.topics.enable` pengaturan Kafka diatur ke. `true`

Dengan versi AWS DMS engine 3.4.6 dan yang lebih tinggi, Anda dapat menggunakan `kafka-target-topic` atribut untuk memetakan setiap tabel sumber yang dimigrasi ke topik terpisah. Misalnya, aturan pemetaan objek berikut memigrasikan tabel sumber `Customer` dan `Address` ke topik Kafka `customer_topic` dan`address_topic`, masing-masing. Pada saat yang sama, AWS DMS memigrasikan semua tabel sumber lainnya, termasuk `Bills` tabel dalam `Test` skema, ke topik yang ditentukan di titik akhir target.

```
{
    "rules": [
        {
            "rule-type": "selection",
            "rule-id": "1",
            "rule-name": "1",
            "rule-action": "include",
            "object-locator": {
                "schema-name": "Test",
                "table-name": "%"
            }
        },
        {
            "rule-type": "object-mapping",
            "rule-id": "2",
            "rule-name": "MapToKafka1",
            "rule-action": "map-record-to-record",
            "kafka-target-topic": "customer_topic",
            "object-locator": {
                "schema-name": "Test",
                "table-name": "Customer" 
            },
            "partition-key-type": "constant"
        },
        {
            "rule-type": "object-mapping",
            "rule-id": "3",
            "rule-name": "MapToKafka2",
            "rule-action": "map-record-to-record",
            "kafka-target-topic": "address_topic",
            "object-locator": {
                "schema-name": "Test",
                "table-name": "Address"
            },
            "partition-key-type": "constant"
        },
        {
            "rule-type": "object-mapping",
            "rule-id": "4",
            "rule-name": "DefaultMapToKafka",
            "rule-action": "map-record-to-record",
            "object-locator": {
                "schema-name": "Test",
                "table-name": "Bills"
            }
        }
    ]
}
```

Dengan menggunakan replikasi multitopik Kafka, Anda dapat mengelompokkan dan memigrasikan tabel sumber untuk memisahkan topik Kafka menggunakan satu tugas replikasi.

### Format pesan untuk Apache Kafka
<a name="CHAP_Target.Kafka.Messageformat"></a>

Keluaran JSON hanya berupa daftar pasangan nilai-kunci. 

**RecordType**  
Jenis catatan dapat berupa data atau kontrol. *Catatan data* mewakili baris yang sebenarnya dalam sumber. *Kontrol catatan* adalah untuk peristiwa-peristiwa penting di aliran, misalnya restart tugas.

**Operasi**  
Untuk catatan data, operasinya dapat `load`, `insert`, `update`, atau `delete`.  
Untuk catatan kontrol, operasi dapat berupa`create-table`,`rename-table`,`drop-table`,`change-columns`,`add-column`,`drop-column`,`rename-column`, atau`column-type-change`.

**SchemaName**  
Skema sumber untuk catatan. Field ini bisa kosong untuk catatan kontrol.

**TableName**  
Tabel sumber untuk catatan. Field ini bisa kosong untuk catatan kontrol.

**Stempel waktu**  
Stempel waktu untuk saat pesan JSON dibuat. Field ini diformat dengan format ISO 8601.

Contoh pesan JSON berikut menggambarkan pesan tipe data dengan semua metadata tambahan.

```
{ 
   "data":{ 
      "id":100000161,
      "fname":"val61s",
      "lname":"val61s",
      "REGION":"val61s"
   },
   "metadata":{ 
      "timestamp":"2019-10-31T22:53:59.721201Z",
      "record-type":"data",
      "operation":"insert",
      "partition-key-type":"primary-key",
      "partition-key-value":"sbtest.sbtest_x.100000161",
      "schema-name":"sbtest",
      "table-name":"sbtest_x",
      "transaction-id":9324410911751,
      "transaction-record-id":1,
      "prev-transaction-id":9324410910341,
      "prev-transaction-record-id":10,
      "commit-timestamp":"2019-10-31T22:53:55.000000Z",
      "stream-position":"mysql-bin-changelog.002171:36912271:0:36912333:9324410911751:mysql-bin-changelog.002171:36912209"
   }
}
```

Contoh pesan JSON berikut menggambarkan pesan tipe kontrol.

```
{ 
   "control":{ 
      "table-def":{ 
         "columns":{ 
            "id":{ 
               "type":"WSTRING",
               "length":512,
               "nullable":false
            },
            "fname":{ 
               "type":"WSTRING",
               "length":255,
               "nullable":true
            },
            "lname":{ 
               "type":"WSTRING",
               "length":255,
               "nullable":true
            },
            "REGION":{ 
               "type":"WSTRING",
               "length":1000,
               "nullable":true
            }
         },
         "primary-key":[ 
            "id"
         ],
         "collation-name":"latin1_swedish_ci"
      }
   },
   "metadata":{ 
      "timestamp":"2019-11-21T19:14:22.223792Z",
      "record-type":"control",
      "operation":"create-table",
      "partition-key-type":"task-id",
      "schema-name":"sbtest",
      "table-name":"sbtest_t1"
   }
}
```

# Menggunakan kluster OpenSearch Layanan Amazon sebagai target AWS Database Migration Service
<a name="CHAP_Target.Elasticsearch"></a>

Anda dapat menggunakan AWS DMS untuk memigrasikan data ke Amazon OpenSearch Service (OpenSearch Layanan). OpenSearch Layanan adalah layanan terkelola yang memudahkan penerapan, pengoperasian, dan skala kluster OpenSearch Layanan. 

Di OpenSearch Layanan, Anda bekerja dengan indeks dan dokumen. *Indeks* adalah kumpulan dokumen, dan *dokumen* adalah objek JSON yang berisi nilai skalar, array, dan objek lainnya. OpenSearch menyediakan bahasa query berbasis JSON, sehingga Anda dapat query data dalam indeks dan mengambil dokumen yang sesuai.

Saat AWS DMS membuat indeks untuk titik akhir target untuk OpenSearch Service, itu membuat satu indeks untuk setiap tabel dari titik akhir sumber. Biaya untuk membuat indeks OpenSearch Layanan tergantung pada beberapa faktor. Ini adalah jumlah indeks yang dibuat, jumlah total data dalam indeks ini, dan sejumlah kecil metadata yang OpenSearch disimpan untuk setiap dokumen.

Konfigurasikan kluster OpenSearch Layanan Anda dengan sumber daya komputasi dan penyimpanan yang sesuai untuk cakupan migrasi Anda. Kami menyarankan agar Anda mempertimbangkan faktor-faktor berikut, tergantung pada tugas replikasi yang ingin Anda gunakan:
+ Untuk beban data penuh, pertimbangkan jumlah total data yang ingin Anda migrasikan, dan juga kecepatan transfer.
+ Untuk mereplikasi perubahan yang sedang berlangsung, pertimbangkan frekuensi pembaruan, dan persyaratan end-to-end latensi Anda.

Juga, konfigurasikan pengaturan indeks pada OpenSearch cluster Anda, perhatikan jumlah dokumen.

**Pengaturan tugas beban penuh multithread**

Untuk membantu meningkatkan kecepatan transfer, AWS DMS mendukung beban penuh multithreaded ke kluster target OpenSearch Service. AWS DMS mendukung multithreading ini dengan pengaturan tugas yang mencakup yang berikut:
+ `MaxFullLoadSubTasks` - Gunakan pilihan ini untuk menunjukkan jumlah maksimum tabel sumber yang dimuat secara paralel. DMS memuat setiap tabel ke indeks target OpenSearch Layanan yang sesuai menggunakan subtugas khusus. Default adalah 8; nilai maksimum adalah 49.
+ `ParallelLoadThreads`— Gunakan opsi ini untuk menentukan jumlah utas yang AWS DMS digunakan untuk memuat setiap tabel ke indeks target OpenSearch Layanannya. Nilai maksimum untuk target OpenSearch Layanan adalah 32. Anda dapat meminta untuk meningkatkan batas maksimum ini.
**catatan**  
Jika Anda tidak mengubah `ParallelLoadThreads` dari default (0), AWS DMS mentransfer satu catatan pada satu waktu. Pendekatan ini menempatkan beban yang tidak semestinya pada kluster OpenSearch Service Anda. Pastikan bahwa Anda menetapkan pilihan ini ke 1 atau lebih.
+ `ParallelLoadBufferSize`— Gunakan opsi ini untuk menentukan jumlah maksimum catatan yang akan disimpan dalam buffer yang digunakan thread beban paralel untuk memuat data ke target OpenSearch Layanan. Nilai default adalah 50. Nilai maksimumnya adalah 1.000. Gunakan pengaturan ini dengan `ParallelLoadThreads`. `ParallelLoadBufferSize` hanya berlaku bila ada lebih dari satu thread.

Untuk informasi selengkapnya tentang cara DMS memuat kluster OpenSearch Layanan menggunakan multithreading, lihat AWS posting blog Menskalakan [ OpenSearch Layanan Amazon](https://aws.amazon.com/blogs/database/scale-amazon-elasticsearch-service-for-aws-database-migration-service-migrations/) untuk migrasi. AWS Database Migration Service 

**Pengaturan beban tugas CDC multithread**

Anda dapat meningkatkan performa change data capture (CDC) untuk kluster target OpenSearch Service menggunakan pengaturan tugas untuk mengubah perilaku panggilan `PutRecords` API. Untuk melakukan ini, Anda dapat menentukan jumlah thread yang terjadi bersamaan, antrean per thread, dan jumlah catatan yang disimpan dalam buffer menggunakan pengaturan tugas `ParallelApply*`. Misalnya, Anda ingin melakukan beban CDC dan menerapkan 32 thread secara paralel. Anda juga ingin mengakses 64 antrean per thread, dengan 50 catatan disimpan per buffer. 
**catatan**  
Support untuk penggunaan pengaturan `ParallelApply*` tugas selama titik akhir target CDC ke Amazon OpenSearch Service tersedia di AWS DMS versi 3.4.0 dan yang lebih tinggi.

Untuk mempromosikan kinerja CDC, AWS DMS mendukung pengaturan tugas ini:
+ `ParallelApplyThreads`— Menentukan jumlah thread bersamaan yang AWS DMS digunakan selama beban CDC untuk mendorong catatan data ke titik akhir target OpenSearch Service. Nilai default adalah nol (0) dan nilai maksimum adalah 32.
+ `ParallelApplyBufferSize`— Menentukan jumlah maksimum catatan yang akan disimpan di setiap antrian buffer untuk thread bersamaan untuk mendorong ke titik akhir target OpenSearch Service selama pemuatan CDC. Nilai default adalah 100 dan nilai maksimum adalah 1.000. Gunakan pilihan ini saat `ParallelApplyThreads` menentukan lebih dari satu thread. 
+ `ParallelApplyQueuesPerThread`— Menentukan jumlah antrian yang diakses setiap thread untuk mengeluarkan catatan data dari antrian dan menghasilkan beban batch untuk titik akhir Service selama CDC. OpenSearch 

Saat menggunakan pengaturan tugas `ParallelApply*`, default `partition-key-type`-nya adalah `primary-key` dari tabel, bukan `schema-name.table-name`.

## Migrasi dari tabel database relasional ke indeks Layanan OpenSearch
<a name="CHAP_Target.Elasticsearch.RDBMS2Elasticsearch"></a>

AWS DMS mendukung migrasi data ke tipe data skalar OpenSearch Layanan. Saat bermigrasi dari database relasional seperti Oracle atau MySQL ke OpenSearch Service, Anda mungkin ingin merestrukturisasi cara menyimpan data ini.

AWS DMS mendukung tipe data skalar OpenSearch Layanan berikut: 
+ Boolean 
+ Date
+ Float
+ Int
+ String

AWS DMS mengubah data tipe Tanggal menjadi tipe String. Anda dapat menentukan pemetaan kustom untuk menafsirkan tanggal ini.

AWS DMS tidak mendukung migrasi tipe data LOB.

## Prasyarat untuk menggunakan OpenSearch Layanan Amazon sebagai target untuk AWS Database Migration Service
<a name="CHAP_Target.Elasticsearch.Prerequisites"></a>

Sebelum Anda mulai bekerja dengan database OpenSearch Layanan sebagai target AWS DMS, pastikan Anda membuat peran AWS Identity and Access Management (IAM). Peran ini harus memungkinkan AWS DMS akses indeks OpenSearch Layanan di titik akhir target. Kumpulan izin akses minimum ditampilkan dalam kebijakan IAM berikut.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "1",
            "Effect": "Allow",
            "Principal": {
                "Service": "dms.amazonaws.com"
        },
        "Action": "sts:AssumeRole"
        }
    ]
}
```

------

Peran yang Anda gunakan untuk migrasi ke OpenSearch Layanan harus memiliki izin berikut.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "es:ESHttpDelete",
        "es:ESHttpGet",
        "es:ESHttpHead",
        "es:ESHttpPost",
        "es:ESHttpPut"
      ],
      "Resource": "*"
    }
  ]
}
```

------

Pada contoh sebelumnya, ganti `region` dengan pengenal AWS Wilayah, *`account-id`* dengan ID AWS akun Anda, dan `domain-name` dengan nama domain Layanan Amazon OpenSearch Anda. Contohnya `arn:aws:es:us-west-2:123456789012:domain/my-es-domain`

## Pengaturan titik akhir saat menggunakan OpenSearch Layanan sebagai target untuk AWS DMS
<a name="CHAP_Target.Elasticsearch.Configuration"></a>

Anda dapat menggunakan pengaturan titik akhir untuk mengonfigurasi basis data target OpenSearch Layanan mirip dengan menggunakan atribut koneksi tambahan. Anda menentukan pengaturan saat Anda membuat titik akhir target menggunakan AWS DMS konsol, atau dengan menggunakan `create-endpoint` perintah di [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html), dengan sintaks `--elasticsearch-settings '{"EndpointSetting": "value", ...}'` JSON.

Tabel berikut menunjukkan pengaturan endpoint yang dapat Anda gunakan dengan OpenSearch Service sebagai target.


| Nama atribut | Nilai valid | Nilai dan deskripsi default | 
| --- | --- | --- | 
|  `FullLoadErrorPercentage`   |  Sebuah integer positif lebih besar dari 0 tetapi tidak lebih besar dari 100.  |  10 - Untuk tugas beban penuh, atribut ini menentukan ambang batas kesalahan yang diizinkan sebelum tugas gagal. Sebagai contoh, ada 1.500 baris di titik akhir sumber dan parameter ini diatur ke 10. Kemudian tugas gagal jika AWS DMS menemukan lebih dari 150 kesalahan (10 persen dari jumlah baris) saat menulis ke titik akhir target.  | 
|   `ErrorRetryDuration`   |  Sebuah integer positif lebih besar dari 0.  |  300 - Jika terjadi kesalahan pada titik akhir target, AWS DMS coba lagi selama beberapa detik ini. Jika tidak, tugas gagal.  | 
|  `UseNewMappingType`  | true atau false |  `false`, tetapi untuk bekerja menggunakan opensearch v2.x itu harus disetel ke. `true`  | 

## Keterbatasan saat menggunakan OpenSearch Layanan Amazon sebagai target AWS Database Migration Service
<a name="CHAP_Target.Elasticsearch.Limitations"></a>

Batasan berikut berlaku saat menggunakan OpenSearch Layanan Amazon sebagai target:
+ OpenSearch Layanan menggunakan pemetaan dinamis (tebakan otomatis) untuk menentukan tipe data yang akan digunakan untuk data yang dimigrasi.
+ OpenSearch Layanan menyimpan setiap dokumen dengan ID unik. Berikut adalah contoh ID. 

  ```
  "_id": "D359F8B537F1888BC71FE20B3D79EAE6674BE7ACA9B645B0279C7015F6FF19FD"
  ```

  Setiap ID dokumen adalah panjangnya 64 byte, jadi antisipasi ini sebagai syarat penyimpanan. Misalnya, jika Anda memigrasikan 100.000 baris dari AWS DMS sumber, indeks OpenSearch Layanan yang dihasilkan memerlukan penyimpanan untuk 6.400.000 byte tambahan.
+ Dengan OpenSearch Layanan, Anda tidak dapat melakukan pembaruan pada atribut kunci utama. Pembatasan ini penting ketika menggunakan replikasi berkelanjutan dengan perubahan pengambilan data (CDC) karena dapat mengakibatkan data yang tidak diinginkan dalam target. Dalam mode CDC, kunci primer dipetakan ke SHA256 nilai, yang panjangnya 32 byte. Ini dikonversi ke string 64-byte yang dapat dibaca manusia, dan digunakan sebagai dokumen Layanan. OpenSearch IDs
+ Jika AWS DMS menemukan item apa pun yang tidak dapat dimigrasikan, ia akan menulis pesan kesalahan ke Amazon CloudWatch Logs. Perilaku ini berbeda dari titik akhir AWS DMS target lainnya, yang menulis kesalahan ke tabel pengecualian.
+ AWS DMS tidak mendukung koneksi ke klaster Amazon ES yang mengaktifkan Kontrol Akses berbutir halus dengan pengguna utama dan kata sandi.
+ AWS DMS tidak mendukung OpenSearch Layanan tanpa server.
+ OpenSearch Layanan tidak mendukung penulisan data ke indeks yang sudah ada sebelumnya.
+ Pengaturan tugas replikasi, tidak `TargetTablePrepMode:TRUNCATE_BEFORE_LOAD` didukung untuk digunakan dengan titik akhir OpenSearch target.
+ Saat memigrasikan data ke Amazon Elasticsearch menggunakan AWS DMS, data sumber harus memiliki kunci utama atau kolom pengenal unik. Jika data sumber tidak memiliki kunci primer atau pengidentifikasi unik, Anda perlu mendefinisikannya menggunakan aturan define-primary-key transformasi.

## Jenis data target untuk Amazon OpenSearch Service
<a name="CHAP_Target.Elasticsearch.DataTypes"></a>

Saat AWS DMS memigrasikan data dari database heterogen, layanan memetakan tipe data dari database sumber ke tipe data perantara yang disebut AWS DMS tipe data. Layanan kemudian memetakan tipe data perantara ke tipe data target. Tabel berikut menunjukkan setiap tipe AWS DMS data dan tipe data yang dipetakan dalam OpenSearch Layanan.


| AWS DMS tipe data | OpenSearch Jenis data layanan | 
| --- | --- | 
|  Boolean  |  boolean  | 
|  Date  |  string  | 
|  Time  |  date  | 
|  Timestamp  |  date  | 
|  INT4  |  integer  | 
|  Real4  |  float  | 
|  UINT4  |  integer  | 

Untuk informasi tambahan tentang tipe AWS DMS data, lihat[Tipe data untuk AWS Database Migration Service](CHAP_Reference.DataTypes.md).

# Menggunakan Amazon DocumentDB sebagai target AWS untuk Database Migration Service
<a name="CHAP_Target.DocumentDB"></a>

 Untuk informasi tentang versi Amazon DocumentDB (dengan kompatibilitas MongoDB) yang mendukung, lihat. AWS DMS [Target untuk AWS DMS](CHAP_Introduction.Targets.md) Anda dapat menggunakan AWS DMS untuk memigrasikan data ke Amazon DocumentDB (dengan kompatibilitas MongoDB) dari salah satu mesin data sumber yang didukung AWS DMS . Mesin sumber dapat berada di layanan AWS terkelola seperti Amazon RDS, Aurora, atau Amazon S3. Atau mesin dapat berada di basis data terkelola mandiri, seperti MongoDB yang berjalan di Amazon EC2 atau on-premise.

Anda dapat menggunakan AWS DMS untuk mereplikasi data sumber ke database, koleksi, atau dokumen Amazon DocumentDB. 

**catatan**  
Jika titik akhir sumber adalah MongoDB atau Amazon DocumentDB, jalankan migrasi dalam **Mode dokumen**.

MongoDB menyimpan data dalam format JSON biner (BSON). AWS DMS mendukung semua tipe data BSON yang didukung oleh Amazon DocumentDB. Untuk daftar tipe data ini, lihat [ APIsMongoDB, operasi, dan tipe data yang didukung di Panduan Pengembang](https://docs.aws.amazon.com/documentdb/latest/developerguide/mongo-apis.html) *Amazon DocumentDB*.

Jika titik akhir sumber adalah database relasional, AWS DMS memetakan objek database ke Amazon DocumentDB sebagai berikut:
+ Sebuah basis data relasional, atau skema basis data, dipetakan ke Amazon DocumentDB *basis data*. 
+ Tabel di dalam peta basis data relasional dipetakan ke *Koleksi* di Amazon DocumentDB.
+ Catatan dalam peta tabel relasional dipetakan ke *Dokumen* di Amazon DocumentDB. Setiap dokumen disusun dari data dalam catatan sumber.

Jika titik akhir sumber adalah Amazon S3, maka objek Amazon DocumentDB yang dihasilkan sesuai dengan AWS DMS aturan pemetaan untuk Amazon S3. Contohnya, perhatikan URI berikut ini.

```
s3://amzn-s3-demo-bucket/hr/employee
```

Dalam hal ini, AWS DMS memetakan objek `amzn-s3-demo-bucket` ke Amazon DocumentDB sebagai berikut:
+ Bagian URI tingkat atas (`hr`) dipetakan ke basis data Amazon DocumentDB. 
+ Bagian URI berikutnya (`employee`) dipetakan ke koleksi Amazon DocumentDB.
+ Setiap objek dalam `employee` dipetakan ke dokumen di Amazon DocumentDB.

Untuk informasi lebih lanjut tentang aturan pemetaan untuk Amazon S3, lihat [Menggunakan Amazon S3 sebagai sumber AWS DMS](CHAP_Source.S3.md).

**Pengaturan titik akhir Amazon DocumentDB**

Di AWS DMS versi 3.5.0 dan yang lebih tinggi, Anda dapat meningkatkan kinerja change data capture (CDC) untuk endpoint Amazon DocumentDB dengan menyetel pengaturan tugas untuk thread paralel dan operasi massal. Untuk melakukan ini, Anda dapat menentukan jumlah thread yang terjadi bersamaan, antrean per thread, dan jumlah catatan yang disimpan dalam buffer menggunakan pengaturan tugas `ParallelApply*`. Misalnya, Anda ingin melakukan beban CDC dan menerapkan 128 thread secara paralel. Anda juga ingin mengakses 64 antrean per thread, dengan 50 catatan disimpan per buffer. 

Untuk mempromosikan kinerja CDC, AWS DMS mendukung pengaturan tugas ini:
+ `ParallelApplyThreads`— Menentukan jumlah thread bersamaan yang AWS DMS digunakan selama pemuatan CDC untuk mendorong catatan data ke titik akhir target Amazon DocumentDB. Nilai default adalah nol (0) dan nilai maksimum adalah 32.
+ `ParallelApplyBufferSize`— Menentukan jumlah maksimum catatan yang akan disimpan di setiap antrian buffer untuk thread bersamaan untuk mendorong ke titik akhir target Amazon DocumentDB selama pemuatan CDC. Nilai default adalah 100 dan nilai maksimum adalah 1.000. Gunakan pilihan ini saat `ParallelApplyThreads` menentukan lebih dari satu thread. 
+ `ParallelApplyQueuesPerThread`— Menentukan jumlah antrian yang diakses setiap thread untuk mengeluarkan catatan data dari antrian dan menghasilkan pemuatan batch untuk titik akhir Amazon DocumentDB selama CDC. Default-nya adalah 1. Maksimum adalah 512.

**catatan**  
 Untuk target Amazon DocumentDB, penerapan CDC paralel dapat menyebabkan kesalahan kunci duplikat atau penerapan CDC yang macet untuk beban kerja yang menggunakan indeks unik sekunder atau memerlukan urutan perubahan yang ketat. Gunakan konfigurasi penerapan CDC single-threaded default untuk beban kerja ini. 

Untuk detail tambahan tentang bekerja dengan Amazon DocumentDB sebagai target, lihat AWS DMS bagian berikut:

**Topics**
+ [Pemetaan data dari sumber ke target Amazon DocumentDB](#CHAP_Target.DocumentDB.data-mapping)
+ [Menghubungkan ke Amazon DocumentDB Elastic Clusters sebagai target](#CHAP_Target.DocumentDB.data-mapping.elastic-cluster-connect)
+ [Replikasi berkelanjutan dengan Amazon DocumentDB sebagai target](#CHAP_Target.DocumentDB.data-mapping.ongoing-replication)
+ [Keterbatasan penggunaan Amazon DocumentDB sebagai target](#CHAP_Target.DocumentDB.limitations)
+ [Menggunakan pengaturan titik akhir dengan Amazon DocumentDB sebagai target](#CHAP_Target.DocumentDB.ECAs)
+ [Target tipe data untuk Amazon DocumentDB](#CHAP_Target.DocumentDB.datatypes)

**catatan**  
Untuk step-by-step panduan proses migrasi, lihat [Memigrasi dari MongoDB ke Amazon DocumentDB](https://docs.aws.amazon.com/dms/latest/sbs/CHAP_MongoDB2DocumentDB.html) di Panduan Migrasi. AWS Database Migration Service Step-by-Step 

## Pemetaan data dari sumber ke target Amazon DocumentDB
<a name="CHAP_Target.DocumentDB.data-mapping"></a>

AWS DMS membaca catatan dari titik akhir sumber, dan membangun dokumen JSON berdasarkan data yang dibacanya. Untuk setiap dokumen JSON, AWS DMS harus menentukan `_id` bidang untuk bertindak sebagai pengidentifikasi unik. Kemudian menulis dokumen JSON ke koleksi Amazon DocumentDB, menggunakan `_id` sebagai kunci primer.

### Sumber data yang berupa kolom tunggal
<a name="CHAP_Target.DocumentDB.data-mapping.single-column"></a>

Jika sumber data terdiri dari satu kolom, data harus bertipe string. (Tergantung pada mesin sumber, tipe data sebenarnya mungkin VARCHAR, NVARCHAR, TEXT, LOB, CLOB, atau serupa.) AWS DMS mengasumsikan bahwa data adalah dokumen JSON yang valid, dan mereplikasi data ke Amazon DocumentDB apa adanya.

Jika dokumen JSON yang dihasilkan berisi field bernama `_id`, maka field tersebut digunakan sebagai unik `_id` di Amazon DocumentDB.

Jika JSON tidak berisi field `_id`, maka Amazon DocumentDB menghasilkan nilai `_id` secara otomatis.

### Sumber data yang terdiri dari beberapa kolom
<a name="CHAP_Target.DocumentDB.data-mapping.multiple-columns"></a>

Jika data sumber terdiri dari beberapa kolom, kemudian AWS DMS membangun dokumen JSON dari semua kolom ini. Untuk menentukan `_id` bidang dokumen, lakukan AWS DMS sebagai berikut:
+ Jika salah satu kolom bernama `_id`, maka data dalam kolom tersebut yang digunakan sebagai target `_id`.
+ Jika tidak ada `_id` kolom, tetapi data sumber memiliki kunci primer atau indeks unik, maka AWS DMS gunakan kunci atau nilai indeks itu sebagai `_id` nilainya. Data dari kunci primer atau indeks unik juga muncul sebagai field eksplisit dalam dokumen JSON.
+ Jika tidak ada kolom `_id`, dan tidak ada kunci primer atau indeks unik, maka Amazon DocumentDB menghasilkan nilai `_id` secara otomatis.

### Memaksakan tipe data pada titik akhir target
<a name="CHAP_Target.DocumentDB.coercing-datatype"></a>

AWS DMS dapat memodifikasi struktur data saat menulis ke titik akhir target Amazon DocumentDB. Anda dapat meminta perubahan ini dengan mengubah nama kolom dan tabel di titik akhir sumber, atau dengan menyediakan aturan transformasi yang diterapkan ketika tugas berjalan.

#### Menggunakan dokumen JSON nested (json\$1prefix)
<a name="CHAP_Target.DocumentDB.coercing-datatype.json"></a>

Untuk memaksakan tipe data, Anda dapat mengawali nama kolom sumber dengan `json_` (yaitu, `json_columnName`) baik secara manual atau menggunakan transformasi. Dalam kasus ini, kolom dibuat sebagai dokumen JSON nested dalam dokumen target, bukan sebagai field string.

Misalnya, anggaplah Anda ingin memigrasikan dokumen berikut dari titik akhir sumber MongoDB.

```
{
    "_id": "1", 
    "FirstName": "John", 
    "LastName": "Doe",
    "ContactDetails": "{"Home": {"Address": "Boston","Phone": "1111111"},"Work": { "Address": "Boston", "Phone": "2222222222"}}"
}
```

Jika Anda tidak memaksa salah satu tipe sumber data, dokumen `ContactDetails` yang tertanam akan dimigrasi sebagai string.

```
{
    "_id": "1", 
    "FirstName": "John", 
    "LastName": "Doe",
    "ContactDetails": "{\"Home\": {\"Address\": \"Boston\",\"Phone\": \"1111111\"},\"Work\": { \"Address\": \"Boston\", \"Phone\": \"2222222222\"}}"
}
```

Namun, Anda dapat menambahkan aturan transformasi untuk memaksa `ContactDetails`menjadi objek JSON. Misalnya, anggaplah bahwa nama kolom sumber asli adalah `ContactDetails`. Untuk memaksa tipe data sebagai Nested JSON, kolom di titik akhir sumber perlu diganti namanya menjadi json\$1ContactDetails” baik dengan menambahkan awalan “\$1json\$1\$1” pada sumber secara manual atau melalui aturan transformasi. Misalnya, Anda dapat menggunakan aturan transformasi di bawah ini:

```
{
    "rules": [
    {
    "rule-type": "transformation",
    "rule-id": "1",
    "rule-name": "1",
    "rule-target": "column",
    "object-locator": {
    "schema-name": "%",
    "table-name": "%",
    "column-name": "ContactDetails"
     },
    "rule-action": "rename",
    "value": "json_ContactDetails",
    "old-value": null
    }
    ]
}
```

AWS DMS mereplikasi ContactDetails bidang sebagai JSON bersarang, sebagai berikut. 

```
{
    "_id": "1",
    "FirstName": "John",
    "LastName": "Doe",
    "ContactDetails": {
        "Home": {
            "Address": "Boston",
            "Phone": "1111111111"
        },
        "Work": {
            "Address": "Boston",
            "Phone": "2222222222"
        }
    }
}
```

#### Menggunakan array JSON (array\$1prefix)
<a name="CHAP_Target.DocumentDB.coercing-datatype.array"></a>

Untuk memaksakan tipe data, Anda dapat mengawali nama kolom dengan `array_` (yaitu, `array_columnName`), baik secara manual maupun menggunakan transformasi. Dalam hal ini, AWS DMS pertimbangkan kolom sebagai array JSON, dan membuatnya seperti itu dalam dokumen target.

Misalnya Anda ingin memigrasikan dokumen berikut dari titik akhir sumber MongoDB.

```
{
    "_id" : "1",
    "FirstName": "John",
    "LastName": "Doe", 
    "ContactAddresses": ["Boston", "New York"],             
    "ContactPhoneNumbers": ["1111111111", "2222222222"]
}
```

Jika Anda tidak memaksakan salah satu tipe sumber data, dokumen `ContactDetails` yang tertanam akan dimigrasi sebagai string.

```
{
    "_id": "1",
    "FirstName": "John",
    "LastName": "Doe", 
    "ContactAddresses": "[\"Boston\", \"New York\"]",             
    "ContactPhoneNumbers": "[\"1111111111\", \"2222222222\"]" 
}
```

 Namun, Anda dapat menambahkan aturan transformasi untuk memaksa `ContactAddress` dan `ContactPhoneNumbers` ke array JSON, seperti yang ditunjukkan pada tabel berikut.


****  

| Nama kolom sumber asli | Kolom sumber berganti nama | 
| --- | --- | 
| ContactAddress | array\$1ContactAddress | 
| ContactPhoneNumbers | array\$1ContactPhoneNumbers | 

AWS DMS mereplikasi `ContactAddress` dan `ContactPhoneNumbers` sebagai berikut.

```
{
    "_id": "1",
    "FirstName": "John",
    "LastName": "Doe",
    "ContactAddresses": [
        "Boston",
        "New York"
    ],
    "ContactPhoneNumbers": [
        "1111111111",
        "2222222222"
    ]
}
```

### Menghubungkan ke Amazon DocumentDB menggunakan TLS
<a name="CHAP_Target.DocumentDB.tls"></a>

Secara default, klaster Amazon DocumentDB yang baru dibuat hanya menerima sambungan aman menggunakan Keamanan Lapisan Pengangkutan (TLS). Ketika TLS diaktifkan, setiap sambungan ke Amazon DocumentDB memerlukan kunci publik.

Anda dapat mengambil kunci publik untuk Amazon DocumentDB dengan mengunduh `rds-combined-ca-bundle.pem` file,, dari bucket Amazon S3 yang AWS dihosting. Untuk informasi lebih lanjut tentang mengunduh file ini, lihat [Mengenkripsi sambungan menggunakan TLS](https://docs.aws.amazon.com/documentdb/latest/developerguide/security.encryption.ssl.html) dalam *Panduan Developer Amazon DocumentDB*

Setelah mengunduh file.pem ini, Anda dapat mengimpor kunci publik yang dikandungnya AWS DMS seperti yang dijelaskan berikut.

#### Konsol Manajemen AWS
<a name="CHAP_Target.DocumentDB.tls.con"></a>

**Untuk mengimpor file kunci publik (.pem)**

1. Buka AWS DMS konsol di [https://console.aws.amazon.com/dms](https://console.aws.amazon.com/dms).

1. Pilih **Sertifikat** di panel navigasi.

1. Pilih **Impor Sertifikat** dan lakukan hal berikut:
   + Untuk **Pengenal sertifikat**, masukkan nama unik untuk sertifikat tersebut, contohnya `docdb-cert`.
   + Untuk **Impor file**, arahkan ke lokasi tempat Anda menyimpan file .pem.

   Jika pengaturan sudah sesuai keinginan Anda, pilih **Tambahkan Sertifikat CA baru**.

#### AWS CLI
<a name="CHAP_Target.DocumentDB.tls.cli"></a>

Gunakan perintah `aws dms import-certificate` seperti pada contoh berikut.

```
aws dms import-certificate \
    --certificate-identifier docdb-cert \
    --certificate-pem file://./rds-combined-ca-bundle.pem
```

Saat Anda membuat titik akhir AWS DMS target, berikan pengenal sertifikat (misalnya,`docdb-cert`). Juga, tetapkan parameter mode SSL ke `verify-full`.

## Menghubungkan ke Amazon DocumentDB Elastic Clusters sebagai target
<a name="CHAP_Target.DocumentDB.data-mapping.elastic-cluster-connect"></a>

Di AWS DMS versi 3.4.7 dan yang lebih tinggi, Anda dapat membuat titik akhir target Amazon DocumentDB sebagai Elastic Cluster. Jika Anda membuat titik akhir target sebagai Elastic Cluster, Anda harus melampirkan sertifikat SSL baru ke titik akhir Amazon DocumentDB Elastic Cluster karena sertifikat SSL yang ada tidak akan berfungsi.

**Untuk melampirkan sertifikat SSL baru ke titik akhir Amazon DocumentDB Elastic Cluster Anda**

1. Di browser, buka [ https://www.amazontrust.com/repository/SFSRootCAG2.pem](https://www.amazontrust.com/repository/SFSRootCAG2.pem) dan simpan konten ke `.pem` file dengan nama file unik, misalnya. `SFSRootCAG2.pem` Ini adalah file sertifikat yang perlu Anda impor pada langkah selanjutnya.

1. Buat titik akhir Elastic Cluster dan atur opsi berikut:

   1. Di bawah **Konfigurasi Titik Akhir**, pilih **Tambahkan sertifikat CA baru**.

   1. Untuk **pengenal Sertifikat**, masukkan**SFSRootCAG2.pem**.

   1. Untuk **Impor file sertifikat**, **pilih Pilih file**, lalu navigasikan ke `SFSRootCAG2.pem` file yang sebelumnya Anda unduh.

   1. Pilih dan buka `SFSRootCAG2.pem` file yang diunduh.

   1. Pilih **Impor sertifikat**.

   1. Dari drop-down **Pilih sertifikat**, pilih **SFSRootCAG2.pem.**

Sertifikat SSL baru dari `SFSRootCAG2.pem` file yang diunduh sekarang dilampirkan ke titik akhir Amazon DocumentDB Elastic Cluster Anda.

## Replikasi berkelanjutan dengan Amazon DocumentDB sebagai target
<a name="CHAP_Target.DocumentDB.data-mapping.ongoing-replication"></a>

Jika replikasi yang sedang berlangsung (ubah pengambilan data, CDC) diaktifkan untuk Amazon DocumentDB sebagai target AWS DMS , versi 3.5.0 dan yang lebih tinggi memberikan peningkatan kinerja yang dua puluh kali lebih besar daripada rilis sebelumnya. Dalam rilis sebelumnya di mana AWS DMS menangani hingga 250 catatan per detik, AWS DMS sekarang secara efisien memproses lebih dari 5000 catatan per detik. AWS DMS juga memastikan bahwa dokumen di Amazon DocumentDB tetap sinkron dengan sumbernya. Ketika rekaman sumber dibuat atau diperbarui, pertama-tama AWS DMS harus menentukan data Amazon DocumentDB mana yang terpengaruh dengan melakukan hal berikut:
+ Jika catatan sumber memiliki kolom bernama `_id`, nilai kolom tersebut menentukan `_id` yang sesuai dalam koleksi Amazon DocumentDB.
+ Jika tidak ada `_id` kolom, tetapi data sumber memiliki kunci primer atau indeks unik, maka AWS DMS gunakan kunci atau nilai indeks tersebut `_id` sebagai koleksi Amazon DocumentDB.
+ Jika rekaman sumber tidak memiliki `_id` kolom, kunci utama, atau indeks unik, maka AWS DMS cocokkan semua kolom sumber dengan bidang yang sesuai dalam koleksi Amazon DocumentDB.

Saat catatan sumber baru dibuat, AWS DMS tulis dokumen yang sesuai ke Amazon DocumentDB. Jika catatan sumber yang ada diperbarui, AWS DMS perbarui bidang terkait dalam dokumen target di Amazon DocumentDB. Setiap field yang ada di dokumen target tetapi tidak ada di catatan sumber tetap tak tersentuh.

Ketika catatan sumber dihapus, AWS DMS menghapus dokumen yang sesuai dari Amazon DocumentDB.

### Perubahan struktural (DDL) pada sumbernya
<a name="CHAP_Target.DocumentDB.data-mapping.ongoing-replication.ddl"></a>

Dengan replikasi berkelanjutan, setiap perubahan pad struktur data sumber (seperti tabel, kolom, dan sebagainya) disebarkan ke rekan-rekan mereka di Amazon DocumentDB. Dalam basis data relasional, perubahan ini dimulai dengan menggunakan pernyataan bahasa definisi data (DDL). Anda dapat melihat bagaimana AWS DMS menyebarkan perubahan ini ke Amazon DocumentDB di tabel berikut.


****  

| DDL di sumber | Efek pada target Amazon DocumentDB | 
| --- | --- | 
| CREATE TABLE | Membuat koleksi kosong. | 
| Pernyataan yang mengganti nama tabel (RENAME TABLE, ALTER TABLE...RENAME, dan sejenisnya) | Mengganti nama koleksi. | 
| TRUNCATE TABLE | Menghapus semua dokumen dari koleksi, tetapi hanya jika HandleSourceTableTruncated adalah true. Untuk informasi lebih lanjut, lihat [Pengaturan tugas untuk perubahan pengolahan DDL penanganan](CHAP_Tasks.CustomizingTasks.TaskSettings.DDLHandling.md). | 
| DROP TABLE | Menghapus koleksi, tetapi hanya jika HandleSourceTableDropped adalah true. Untuk informasi lebih lanjut, lihat [Pengaturan tugas untuk perubahan pengolahan DDL penanganan](CHAP_Tasks.CustomizingTasks.TaskSettings.DDLHandling.md). | 
| Pernyataan yang menambahkan kolom ke tabel (ALTER TABLE...ADD dan sejenisnya) | Pernyataan DDL diabaikan, dan peringatan dikeluarkan. Ketika INSERT pertama kali dilakukan pada sumber, field baru ditambahkan ke dokumen target. | 
| ALTER TABLE...RENAME COLUMN | Pernyataan DDL diabaikan, dan peringatan dikeluarkan. Ketika INSERT pertama kali dilakukan pada sumber, field baru ditambahkan ke dokumen target. | 
| ALTER TABLE...DROP COLUMN | Pernyataan DDL diabaikan, dan peringatan dikeluarkan. | 
| Pernyataan yang mengubah tipe data kolom (ALTER COLUMN...MODIFY dan sejenisnya) | Pernyataan DDL diabaikan, dan peringatan dikeluarkan. Ketika INSERT pertama kali dilakukan pada sumber dengan tipe data baru, dokumen target dibuat dengan field tipe data baru tersebut. | 

## Keterbatasan penggunaan Amazon DocumentDB sebagai target
<a name="CHAP_Target.DocumentDB.limitations"></a>

Batasan berikut berlaku saat menggunakan Amazon DocumentDB sebagai target untuk: AWS DMS
+ Di Amazon DocumentDB, nama koleksi tidak dapat berisi simbol dolar (\$1). Selain itu, nama basis data tidak dapat berisi karakter Unicode.
+ AWS DMS tidak mendukung penggabungan beberapa tabel sumber menjadi satu koleksi Amazon DocumentDB.
+ Ketika AWS DMS proses berubah dari tabel sumber yang tidak memiliki kunci primer, kolom LOB apa pun dalam tabel tersebut akan diabaikan.
+ Jika piliha **Ubah tabel** diaktifkan dan AWS DMS menemukan kolom sumber bernama ”*\$1id*“, maka kolom tersebut muncul sebagai ”*\$1\$1id*“ (dua garis bawah) di tabel perubahan.
+ Jika Anda memilih Oracle sebagai titik akhir sumber, maka sumber Oracle harus memiliki pencatatan tambahan penuh diaktifkan. Jika tidak, ketika ada kolom pada sumber yang tidak berubah, maka data dimuat ke Amazon DocumentDB sebagai nilai null.
+ Pengaturan tugas replikasi, `TargetTablePrepMode:TRUNCATE_BEFORE_LOAD` tidak didukung untuk digunakan dengan titik akhir target DocumentDB. 
+ Koleksi terbatas MongoDB tidak didukung di Amazon DocumentDB. Namun, AWS DMS secara otomatis memigrasikan objek seperti koleksi yang tidak dibatasi pada DocumentDB target.
+ CDC paralel yang diterapkan ke target Amazon DocumentDB dapat menyebabkan kesalahan kunci duplikat atau penerapan CDC yang macet untuk beban kerja yang menggunakan indeks unik sekunder atau memerlukan urutan perubahan yang ketat. Untuk beban kerja seperti itu, gunakan konfigurasi penerapan CDC single-threaded default.

## Menggunakan pengaturan titik akhir dengan Amazon DocumentDB sebagai target
<a name="CHAP_Target.DocumentDB.ECAs"></a>

Anda dapat menggunakan pengaturan titik akhir untuk mengonfigurasi basis data target Amazon DocumentDB mirip dengan menggunakan atribut koneksi tambahan. Anda menentukan pengaturan saat Anda membuat titik akhir target menggunakan AWS DMS konsol, atau dengan menggunakan `create-endpoint` perintah di [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html), dengan sintaks `--doc-db-settings '{"EndpointSetting": "value", ...}'` JSON.

Tabel berikut menunjukkan pengaturan titik akhir yang dapat Anda gunakan dengan Amazon DocumentDB sebagai target.


| Nama atribut | Nilai valid | Nilai dan deskripsi default | 
| --- | --- | --- | 
|   `replicateShardCollections`   |  boolean `true` `false`  |  Kapan`true`, pengaturan titik akhir ini memiliki efek berikut dan memberlakukan batasan berikut: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/dms/latest/userguide/CHAP_Target.DocumentDB.html)  | 

## Target tipe data untuk Amazon DocumentDB
<a name="CHAP_Target.DocumentDB.datatypes"></a>

Dalam tabel berikut, Anda dapat menemukan tipe data target Amazon DocumentDB yang didukung saat AWS menggunakan DMS, dan pemetaan AWS default dari tipe data DMS. Untuk informasi selengkapnya tentang tipe data AWS DMS, lihat[Tipe data untuk AWS Database Migration Service](CHAP_Reference.DataTypes.md).


|  AWS Tipe data DMS  |  Tipe data Amazon DocumentDB  | 
| --- | --- | 
|  BOOLEAN  |  Boolean  | 
|  BYTES  |  Binary data  | 
|  DATE  | Date | 
|  TIME  | Tali (UTF8) | 
|  DATETIME  | Date | 
|  INT1  | 32-bit integer | 
|  INT2  |  32-bit integer  | 
|  INT4  | 32-bit integer | 
|  INT8  |  64-bit integer  | 
|  NUMERIC  | Tali (UTF8) | 
|  REAL4  |  Ganda  | 
|  REAL8  | Dua Kali | 
|  STRING  |  Jika data dikenali sebagai JSON, maka AWS DMS migrasikan ke Amazon DocumentDB sebagai dokumen. Jika tidak, data dipetakan ke String (UTF8).  | 
|  UINT1  | 32-bit integer | 
|  UINT2  | 32-bit integer | 
|  UINT4  | 64-bit integer | 
|  UINT8  |  Tali (UTF8)  | 
|  WSTRING  | Jika data dikenali sebagai JSON, maka AWS DMS migrasikan ke Amazon DocumentDB sebagai dokumen. Jika tidak, data dipetakan ke String (UTF8). | 
|  BLOB  | Binary | 
|  CLOB  | Jika data dikenali sebagai JSON, maka AWS DMS migrasikan ke Amazon DocumentDB sebagai dokumen. Jika tidak, data dipetakan ke String (UTF8). | 
|  NCLOB  | Jika data dikenali sebagai JSON, maka AWS DMS migrasikan ke Amazon DocumentDB sebagai dokumen. Jika tidak, data dipetakan ke String (UTF8). | 

# Menggunakan Amazon Neptunus sebagai target AWS Database Migration Service
<a name="CHAP_Target.Neptune"></a>

Amazon Neptune adalah layanan basis data grafik yang cepat, andal, terkelola penuh yang memudahkan membangun dan menjalankan aplikasi yang bekerja dengan set data yang sangat terhubung. Inti dari Neptune adalah mesin basis data grafik berperforma tinggi yang dibuat khusus. Mesin ini dioptimalkan untuk menyimpan miliaran hubungan dan membuat kueri grafik dengan latensi milidetik. Neptunus mendukung bahasa kueri grafik populer TinkerPop Apache Gremlin dan SPARQL W3C. Untuk informasi lebih lanjut tentang Amazon Neptune, lihat [Apa itu Amazon Neptune?](https://docs.aws.amazon.com/neptune/latest/userguide/intro.html) di *Panduan Pengguna Amazon Neptune*. 

Tanpa basis data grafik seperti Neptune, Anda mungkin memodelkan data yang sangat terhubung dalam basis data relasional. Karena data memiliki koneksi dengan berpotensi dinamis, aplikasi yang menggunakan sumber data tersebut harus memodelkan kueri data terhubung di SQL. Pendekatan ini mengharuskan Anda menulis sebuah lapisan tambahan untuk mengonversi kueri grafik ke SQL. Dan juga, basis data relasional tersedia dengan skema kekakuan. Setiap perubahan dalam skema untuk memodelkan koneksi yang berubah memerlukan downtime dan pemeliharaan tambahan dari konversi kueri untuk mendukung skema baru. Performa kueri juga merupakan hambatan besar lain yang harus dipertimbangkan saat merancang aplikasi Anda.

Basis data grafik dapat menyederhanakan situasi seperti itu secara signifikan. Tidak terikat skema, lapisan kueri yang kaya akan grafik (Gremlin atau SPARQL) dan indeks yang dioptimalkan untuk kueri grafik akan meningkatkan fleksibilitas dan performa. Basis data grafik Amazon Neptune juga memiliki fitur untuk korporasi seperti encryption at rest, lapisan otorisasi aman, backup default, dukungan Multi-AZ, support replika baca, dan lain-lain.

Dengan menggunakan AWS DMS, Anda dapat memigrasikan data relasional yang memodelkan grafik yang sangat terhubung ke titik akhir target Neptunus dari titik akhir sumber DMS untuk database SQL yang didukung.

Untuk detailnya, lihat berikut ini.

**Topics**
+ [Gambaran umum tentang migrasi ke Amazon Neptune sebagai target](#CHAP_Target.Neptune.MigrationOverview)
+ [Menentukan pengaturan titik akhir untuk Amazon Neptune sebagai target](#CHAP_Target.Neptune.EndpointSettings)
+ [Membuat peran layanan IAM untuk mengakses Amazon Neptune sebagai target](#CHAP_Target.Neptune.ServiceRole)
+ [Menentukan aturan pemetaan grafik menggunakan Gremlin dan R2RLL untuk Amazon Neptune sebagai target](#CHAP_Target.Neptune.GraphMapping)
+ [Tipe data untuk migrasi Gremlin dan R2RLL ke Amazon Neptune sebagai target](#CHAP_Target.Neptune.DataTypes)
+ [Keterbatasan menggunakan Amazon Neptune sebagai target](#CHAP_Target.Neptune.Limitations)

## Gambaran umum tentang migrasi ke Amazon Neptune sebagai target
<a name="CHAP_Target.Neptune.MigrationOverview"></a>

Sebelum memulai migrasi ke target Neptunus, buat sumber daya berikut di akun Anda: AWS 
+ Sebuah klaster Neptune untuk titik akhir target. 
+ Database relasional SQL didukung oleh AWS DMS untuk titik akhir sumber. 
+ Bucket Amazon S3 untuk titik akhir target. Buat bucket S3 ini di AWS Wilayah yang sama dengan cluster Neptunus Anda. AWS DMS menggunakan bucket S3 ini sebagai penyimpanan file perantara untuk data target yang dimuat secara massal ke database Neptunus. Untuk informasi selengkapnya tentang membuat bucket S3, lihat [Membuat bucket](https://docs.aws.amazon.com/AmazonS3/latest/gsg/CreatingABucket.html) di *Panduan Pengguna Layanan Penyimpanan Sederhana Amazon*.
+ titik akhir virtual private cloud (VPC) untuk S3 di VPC yang sama seperti klaster Neptune. 
+ Peran AWS Identity and Access Management (IAM) yang mencakup kebijakan IAM. Kebijakan ini harus menentukan izin `GetObject`, `PutObject`, `DeleteObject` dan `ListObject` ke bucket S3 untuk titik akhir target Anda. Peran ini diasumsikan oleh keduanya AWS DMS dan Neptunus dengan akses IAM ke bucket S3 target dan database Neptunus. Untuk informasi selengkapnya, lihat [Membuat peran layanan IAM untuk mengakses Amazon Neptune sebagai target](#CHAP_Target.Neptune.ServiceRole).

Setelah Anda memiliki sumber daya ini, menyiapkan dan memulai migrasi ke target Neptune intinya sama dengan semua migrasi beban penuh menggunakan konsol atau API DMS. Namun, migrasi ke target Neptune memerlukan beberapa langkah unik.

**Untuk memigrasikan database AWS DMS relasional ke Neptunus**

1. Buat instans replikasi seperti yang dijelaskan dalam [Membuat instans replikasi](CHAP_ReplicationInstance.Creating.md).

1. Buat dan uji database relasional SQL yang didukung oleh AWS DMS untuk titik akhir sumber.

1. Buat dan uji titik akhir target untuk basis data Neptune Anda. 

   Untuk menghubungkan titik akhir target ke basis data Neptune, tentukan nama server untuk titik akhir klaster Neptune atau titik akhir instans penulis Neptune. Juga, tentukan folder bucket S3 untuk menyimpan file perantara AWS DMS untuk pemuatan massal ke database Neptunus. 

   Selama migrasi, AWS DMS menyimpan semua data target yang dimigrasi di folder bucket S3 ini hingga ukuran file maksimum yang Anda tentukan. Ketika penyimpanan file ini mencapai ukuran maksimum ini, AWS DMS massal memuat data S3 yang disimpan ke dalam database target. Ia membersihkan folder untuk mengaktifkan penyimpanan data target tambahan apa pun untuk pemuatan berikutnya ke basis data target. Untuk informasi lebih lanjut tentang menentukan pengaturan ini, lihat [Menentukan pengaturan titik akhir untuk Amazon Neptune sebagai target](#CHAP_Target.Neptune.EndpointSettings).

1. Buat tugas replikasi beban penuh dengan sumber daya yang dibuat dalam langkah 1-3 dan lakukan hal berikut: 

   1. Gunakan pemetaan tabel tugas seperti biasa untuk mengidentifikasi skema sumber tertentu, tabel, dan views untuk bermigrasi dari basis data relasional Anda menggunakan pilihan yang tepat dan aturan transformasi. Untuk informasi lebih lanjut, lihat [Menggunakan pemetaan tabel untuk menentukan pengaturan tugas](CHAP_Tasks.CustomizingTasks.TableMapping.md). 

   1. Tentukan pemetaan target dengan memilih salah satu dari berikut ini untuk menentukan aturan pemetaan dari tabel sumber dan tampilan ke grafik basis data target Neptune Anda:
      + Gremlin JSON - Untuk informasi tentang penggunaan Gremlin JSON untuk memuat basis data Neptune, lihat [Format memuat data Gremlin](https://docs.aws.amazon.com/neptune/latest/userguide/bulk-load-tutorial-format-gremlin.html) di *Panduan Pengguna Amazon Neptune*.
      + SPARQL RDB to Resource Description Framework Mapping Language (R2RLL) - Untuk informasi tentang menggunakan SPARQL R2RLL, lihat spesifikasi W3C [R2RLL: RDB ke bahasa pemetaan RDF](https://www.w3.org/TR/r2rml/).

   1. Lakukan salah satu tindakan berikut:
      + Menggunakan AWS DMS konsol, tentukan opsi pemetaan grafik menggunakan **Aturan pemetaan grafik** di halaman tugas **Buat migrasi database**. 
      + Menggunakan AWS DMS API, tentukan opsi ini menggunakan parameter `TaskData` permintaan panggilan `CreateReplicationTask` API. 

      Untuk informasi lebih lanjut dan contoh penggunaanGremlin JSON dan SPARQL R2RLL dalam menentukan aturan pemetaan grafik, lihat [Menentukan aturan pemetaan grafik menggunakan Gremlin dan R2RLL untuk Amazon Neptune sebagai target](#CHAP_Target.Neptune.GraphMapping).

1. Mulai replikasi untuk tugas migrasi Anda.

## Menentukan pengaturan titik akhir untuk Amazon Neptune sebagai target
<a name="CHAP_Target.Neptune.EndpointSettings"></a>

Untuk membuat atau mengubah titik akhir target, Anda dapat menggunakan konsol atau `CreateEndpoint` atau Operasi API `ModifyEndpoint`. 

**Untuk target Neptunus di AWS DMS konsol, **tentukan pengaturan khusus titik akhir pada halaman Buat titik akhir** **atau Ubah konsol titik akhir**.** Untuk `CreateEndpoint` dan `ModifyEndpoint`, tentukan parameter permintaan untuk pilihan `NeptuneSettings`. Contoh berikut menunjukkan cara melakukannya dengan menggunakan CLI. 

```
dms create-endpoint --endpoint-identifier my-neptune-target-endpoint
--endpoint-type target --engine-name neptune 
--server-name my-neptune-db.cluster-cspckvklbvgf.us-east-1.neptune.amazonaws.com 
--port 8192
--neptune-settings 
     '{"ServiceAccessRoleArn":"arn:aws:iam::123456789012:role/myNeptuneRole",
       "S3BucketName":"amzn-s3-demo-bucket",
       "S3BucketFolder":"amzn-s3-demo-bucket-folder",
       "ErrorRetryDuration":57,
       "MaxFileSize":100, 
       "MaxRetryCount": 10, 
       "IAMAuthEnabled":false}‘
```

Di sini, pilihan CLI `--server-name` menentukan nama server untuk titik akhir penulis klaster Neptune. Atau Anda dapat menentukan nama server untuk instans titik akhir penulis Neptune. 

Berikut adalah parameter permintaan pilihan `--neptune-settings`:
+ `ServiceAccessRoleArn` - (Wajib) Amazon Resource Name (ARN) dari peran layanan yang Anda buat untuk titik akhir target Neptune. Untuk informasi lebih lanjut, lihat [Membuat peran layanan IAM untuk mengakses Amazon Neptune sebagai target](#CHAP_Target.Neptune.ServiceRole).
+ `S3BucketName` - (Wajib) Nama bucket S3 tempat DMS dapat menyimpan sementara data grafik yang dimigrasikan dalam file .csv sebelum memuatnya secara massal ke basis data target Neptune. DMS memetakan data sumber SQL data grafik sebelum menyimpannya dalam file .csv.
+ `S3BucketFolder` - (Wajib) Jalur folder tempat Anda menginginkan DMS untuk menyimpan data grafik yang dimigrasikan di bucket S3 yang ditentukan oleh `S3BucketName`.
+ `ErrorRetryDuration` - (Opsional) Jumlah milidetik waktu tunggu DMS untuk mencoba kembali muatan massal data grafik yang dimigrasikan ke basis data target Neptune sebelum dinyatakan error. Default adalah 250.
+ `MaxFileSize` - (Opsional) Ukuran maksimum dalam KB dari data grafik yang dimigrasikan lalu disimpan ke dalam file .csv sebelum DMS memuat data secara massal ke basis data target Neptune. Default adalah 1.048.576 KB (1 GB). Jika berhasil, DMS akan membersihkan bucket, siap untuk menyimpan batch berikutnya dari data grafik yang dimigrasi.
+ `MaxRetryCount` - (Opsional) Frekuensi DMS mencoba kembali muatan massal data grafik yang dimigrasikan ke basis data target Neptune sebelum memunculkan error. Default adalah 5.
+ `IAMAuthEnabled` - (Opsional) Jika Anda ingin mengaktifkan otorisasi IAM untuk titik akhir ini, atur parameter ini ke `true` dan lampirkan dokumen kebijakan IAM yang tepat ke peran layanan Anda yang ditentukan oleh `ServiceAccessRoleArn`. Nilai default-nya `false`.

## Membuat peran layanan IAM untuk mengakses Amazon Neptune sebagai target
<a name="CHAP_Target.Neptune.ServiceRole"></a>

Untuk mengakses Neptune sebagai target, buat peran layanan menggunakan IAM. Tergantung pada konfigurasi titik akhir Neptune Anda, lampirkan peran ini pada beberapa atau semua dokumen kepercayaan dan kebijakan IAM berikut. Ketika Anda membuat titik akhir Neptune, peran layanan ini diberikan pada ARN. Melakukannya memungkinkan AWS DMS dan Amazon Neptunus untuk menerima izin untuk mengakses Neptunus dan bucket Amazon S3 terkait.

Jika Anda mengatur parameter `IAMAuthEnabled` dalam `NeptuneSettings` ke `true` di konfigurasi titik akhir Neptune Anda, lampirkan kebijakan IAM seperti berikut ke peran layanan Anda. Jika Anda mengatur `IAMAuthEnabled` ke `false`, Anda dapat mengabaikan kebijakan ini.

```
// Policy to access Neptune

    {
        "Version": "2012-10-17",		 	 	 
        "Statement": [
            {
                "Sid": "VisualEditor0",
                "Effect": "Allow",
                "Action": "neptune-db:*",
                "Resource": "arn:aws:neptune-db:us-east-1:123456789012:cluster-CLG7H7FHK54AZGHEH6MNS55JKM/*"
            }
        ]
    }
```

Kebijakan IAM sebelumnya memungkinkan akses penuh ke klaster target Neptune yang ditentukan oleh `Resource`.

Lampirkan kebijakan IAM seperti berikut ke peran layanan Anda. Kebijakan ini memungkinkan DMS untuk secara sementara menyimpan data grafik yang dimigrasi di bucket S3 yang Anda buat untuk pemuatan massal ke basis data target Neptune.

```
//Policy to access S3 bucket

{
	"Version": "2012-10-17",		 	 	 
	"Statement": [{
			"Sid": "ListObjectsInBucket0",
			"Effect": "Allow",
			"Action": "s3:ListBucket",
			"Resource": [
				"arn:aws:s3:::amzn-s3-demo-bucket"
			]
		},
		{
			"Sid": "AllObjectActions",
			"Effect": "Allow",
			"Action": ["s3:GetObject",
				"s3:PutObject",
				"s3:DeleteObject"
			],

			"Resource": [
				"arn:aws:s3:::amzn-s3-demo-bucket/"
			]
		},
		{
			"Sid": "ListObjectsInBucket1",
			"Effect": "Allow",
			"Action": "s3:ListBucket",
			"Resource": [
				"arn:aws:s3:::amzn-s3-demo-bucket",
				"arn:aws:s3:::amzn-s3-demo-bucket/"
			]
		}
	]
}
```

Kebijakan IAM sebelumnya memungkinkan akun Anda untuk meminta isi bucket S3 (`arn:aws:s3:::amzn-s3-demo-bucket`) yang dibuat untuk target Neptune Anda. Hal ini juga memungkinkan akun Anda untuk beroperasi sepenuhnya pada isi semua file bucket dan folder (`arn:aws:s3:::amzn-s3-demo-bucket/`).

Edit hubungan kepercayaan dan lampirkan peran IAM berikut ke peran layanan Anda untuk memungkinkan keduanya AWS DMS dan layanan database Amazon Neptunus mengambil peran tersebut.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "Service": "dms.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    },
    {
      "Sid": "neptune",
      "Effect": "Allow",
      "Principal": {
        "Service": "rds.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
```

------

Untuk informasi tentang penentuan peran layanan ini pada titik akhir target Neptune, lihat [Menentukan pengaturan titik akhir untuk Amazon Neptune sebagai target](#CHAP_Target.Neptune.EndpointSettings).

## Menentukan aturan pemetaan grafik menggunakan Gremlin dan R2RLL untuk Amazon Neptune sebagai target
<a name="CHAP_Target.Neptune.GraphMapping"></a>

Aturan pemetaan grafik yang Anda buat menentukan bagaimana data yang diekstrak dari sumber basis data relasional SQL kemudian dimuat ke target klaster basis data Neptune. Format aturan pemetaan ini berbeda tergantung pada apakah aturannya untuk memuat data grafik properti menggunakan data Apache TinkerPop Gremlin atau Resource Description Framework (RDF) menggunakan R2RML.4. Setelah itu, Anda dapat menemukan informasi tentang format ini dan tempat untuk mempelajari selengkapnya.

Anda dapat menentukan aturan pemetaan ini ketika membuat tugas migrasi menggunakan konsol atau API DMS. 

Menggunakan konsol, tentukan aturan pemetaan ini dengan menggunakan **Aturan pemetaan grafik** pada halaman **Buat tugas migrasi basisdata**. Di **Aturan pemetaan grafik**, Anda dapat memasukkan dan mengedit aturan pemetaan secara langsung menggunakan editor yang disediakan. Atau Anda dapat menelusuri file yang berisi aturan pemetaan dalam format pemetaan grafik yang sesuai. 

Menggunakan API, tentukan pilihan ini berdasarkan permintaan parameter `TaskData` dari Panggilan API `CreateReplicationTask`. Atur `TaskData` ke jalur file yang berisi aturan pemetaan dalam format pemetaan grafik yang sesuai.

### Aturan pemetaan grafik untuk menghasilkan data property-graph menggunakan Gremlin
<a name="CHAP_Target.Neptune.GraphMapping.Gremlin"></a>

Menggunakan Gremlin untuk menghasilkan data property-graph, menentukan objek JSON dengan aturan pemetaan untuk setiap entitas grafik yang akan dihasilkan dari data sumber. Format JSON ini ditetapkan secara khusus untuk pemuatan massal Amazon Neptune. Templat berikut menunjukkan nampak seperti apa setiap aturan dalam objek ini.

```
{
    "rules": [
        {
            "rule_id": "(an identifier for this rule)",
            "rule_name": "(a name for this rule)",
            "table_name": "(the name of the table or view being loaded)",
            "vertex_definitions": [
                {
                    "vertex_id_template": "{col1}",
                    "vertex_label": "(the vertex to create)",
                    "vertex_definition_id": "(an identifier for this vertex)",
                    "vertex_properties": [
                        {
                            "property_name": "(name of the property)",
                            "property_value_template": "{col2} or text",
                            "property_value_type": "(data type of the property)"
                        }
                    ]
                }
            ]
        },
        {
            "rule_id": "(an identifier for this rule)",
            "rule_name": "(a name for this rule)",
            "table_name": "(the name of the table or view being loaded)",
            "edge_definitions": [
                {
                    "from_vertex": {
                        "vertex_id_template": "{col1}",
                        "vertex_definition_id": "(an identifier for the vertex referenced above)"
                    },
                    "to_vertex": {
                        "vertex_id_template": "{col3}",
                        "vertex_definition_id": "(an identifier for the vertex referenced above)"
                    },
                    "edge_id_template": {
                        "label": "(the edge label to add)",
                        "template": "{col1}_{col3}"
                    },
                    "edge_properties":[
                        {
                            "property_name": "(the property to add)",
                            "property_value_template": "{col4} or text",
                            "property_value_type": "(data type like String, int, double)"
                        }
                    ]
                }
            ]
        }
    ]
}
```

Kehadiran label vertex menyiratkan bahwa pembuatan vertex sedang terjadi di sini. Ketiadaannya menyiratkan bahwa vertex dibuat oleh sumber yang berbeda, dan definisi ini hanya menambahkan sifat vertex. Tentukan sebanyak mungkin definisi vertex dan edge yang diperlukan untuk menentukan pemetaan untuk seluruh sumber basis data relasional Anda.

Contoh aturan untuk tabel `employee` berikut.

```
{
    "rules": [
        {
            "rule_id": "1",
            "rule_name": "vertex_mapping_rule_from_nodes",
            "table_name": "nodes",
            "vertex_definitions": [
                {
                    "vertex_id_template": "{emp_id}",
                    "vertex_label": "employee",
                    "vertex_definition_id": "1",
                    "vertex_properties": [
                        {
                            "property_name": "name",
                            "property_value_template": "{emp_name}",
                            "property_value_type": "String"
                        }
                    ]
                }
            ]
        },
        {
            "rule_id": "2",
            "rule_name": "edge_mapping_rule_from_emp",
            "table_name": "nodes",
            "edge_definitions": [
                {
                    "from_vertex": {
                        "vertex_id_template": "{emp_id}",
                        "vertex_definition_id": "1"
                    },
                    "to_vertex": {
                        "vertex_id_template": "{mgr_id}",
                        "vertex_definition_id": "1"
                    },
                    "edge_id_template": {
                        "label": "reportsTo",
                        "template": "{emp_id}_{mgr_id}"
                    },
                    "edge_properties":[
                        {
                            "property_name": "team",
                            "property_value_template": "{team}",
                            "property_value_type": "String"
                        }
                    ]
                }
            ]
        }
    ]
}
```

Di sini, definisi vertex dan edge memetakan hubungan pelaporan dari node `employee` dengan ID karyawan (`EmpID`) dan node `employee` dengan ID manajer (`managerId`).

Untuk informasi lebih lanjut tentang cara membuat aturan pemetaan grafik menggunakan Gremlin JSON, lihat [Format memuat data Gremlin](https://docs.aws.amazon.com/neptune/latest/userguide/bulk-load-tutorial-format-gremlin.html) di *Panduan Pengguna Amazon Neptune*.

### Aturan pemetaan grafik untuk menghasilkan data RDF/SPARQL
<a name="CHAP_Target.Neptune.GraphMapping.R2RML"></a>

Jika Anda memuat data RDF untuk dikueri menggunakan SPARQL, tuliskan aturan pemetaan grafik di R2RLL. R2RLL adalah bahasa W3C standar untuk pemetaan data relasional untuk RDF. Dalam satu file R2RMM, sebuah *Peta tiga kali lipat* (misalnya, pada `<#TriplesMap1>` berikut) menentukan aturan untuk menerjemahkan setiap baris dari tabel logis ke nol atau lebih tiga kali lipat RDF. Sebuah *Peta subjek* (misalnya, apa pun dari `rr:subjectMap` berikut) menentukan aturan untuk menghasilkan subyek dari tiga kali lipat RDF yang dihasilkan oleh peta tiga kali lipat. Sebuah *peta predikat-objek* (misalnya, apa pun dari `rr:predicateObjectMap` berikut) adalah fungsi yang menciptakan satu atau lebih pasangan predikat-objek untuk setiap baris tabel logis dari tabel logis.

Contoh sederhana untuk tabel `nodes` berikut.

```
@prefix rr: <http://www.w3.org/ns/r2rml#>.
@prefix ex: <http://example.com/ns#>.

<#TriplesMap1>
    rr:logicalTable [ rr:tableName "nodes" ];
    rr:subjectMap [
        rr:template "http://data.example.com/employee/{id}";
        rr:class ex:Employee;
    ];
    rr:predicateObjectMap [
        rr:predicate ex:name;
        rr:objectMap [ rr:column "label" ];
    ]
```

Pada contoh sebelumnya, pemetaan mendefinisikan node grafik terpetakan dari tabel karyawan.

Contoh sederhana lain untuk tabel `Student` berikut.

```
@prefix rr: <http://www.w3.org/ns/r2rml#>.
@prefix ex: <http://example.com/#>.
@prefix foaf: <http://xmlns.com/foaf/0.1/>.
@prefix xsd: <http://www.w3.org/2001/XMLSchema#>.

<#TriplesMap2>
    rr:logicalTable [ rr:tableName "Student" ];
    rr:subjectMap   [ rr:template "http://example.com/{ID}{Name}";
                      rr:class foaf:Person ];
    rr:predicateObjectMap [
        rr:predicate ex:id ;
        rr:objectMap  [ rr:column "ID";
                        rr:datatype xsd:integer ]
    ];
    rr:predicateObjectMap [
        rr:predicate foaf:name ;
        rr:objectMap  [ rr:column "Name" ]
    ].
```

Dalam contoh sebelumnya, pemetaan mendefinisikan node grafik pemetaan friend-of-a-friend hubungan antara orang-orang dalam sebuah tabel. `Student`

Untuk informasi lebih lanjut tentang membuat aturan pemetaan grafik menggunakan SPARQL R2RLL, lihat spesifikasi W3C [R2RLL: RDB ke bahasa pemetaan RDF](https://www.w3.org/TR/r2rml/).

## Tipe data untuk migrasi Gremlin dan R2RLL ke Amazon Neptune sebagai target
<a name="CHAP_Target.Neptune.DataTypes"></a>

AWS DMS melakukan pemetaan tipe data dari titik akhir sumber SQL Anda ke target Neptunus Anda dengan salah satu dari dua cara. Cara yang digunakan tergantung pada format pemetaan grafik yang Anda gunakan untuk memuat basis data Neptune: 
+ Apache TinkerPop Gremlin, menggunakan representasi JSON dari data migrasi.
+ SPARQL W3C menggunakan representasi R2RLL dari data migrasi. 

Untuk informasi lebih lanjut tentang dua format pemetaan grafik ini, lihat [Menentukan aturan pemetaan grafik menggunakan Gremlin dan R2RLL untuk Amazon Neptune sebagai target](#CHAP_Target.Neptune.GraphMapping).

Selanjutnya, Anda dapat menemukan deskripsi dari pemetaan tipe data untuk setiap format.

### Sumber SQL untuk pemetaan ke tipe data target Gremlin
<a name="CHAP_Target.Neptune.DataTypes.Gremlin"></a>

Tabel berikut menunjukkan pemetaan tipe data dari sumber SQL ke target yang sudah diformat GREMLIN. 

AWS DMS memetakan semua tipe data sumber SQL yang tidak terdaftar ke Gremlin. `String`



[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/dms/latest/userguide/CHAP_Target.Neptune.html)

Untuk informasi lebih lanjut tentang tipe data Gremlin untuk memuat Neptune, lihat [Jenis data Gremlin](https://docs.aws.amazon.com//neptune/latest/userguide/bulk-load-tutorial-format-gremlin.html#bulk-load-tutorial-format-gremlin-datatypes) di *Panduan Pengguna Neptune.*

### Sumber SQL untuk pemetaan ke tipe data target R2RML (RDF)
<a name="CHAP_Target.Neptune.DataTypes.R2RML"></a>

Tabel berikut menunjukkan pemetaan tipe data dari sumber SQL ke target yang diformat R2RML.

Semua tipe data RDF yang terdaftar peka huruf besar/kecil, kecuali RDF literal. AWS DMS memetakan semua tipe data sumber SQL yang tidak terdaftar ke literal RDF. 

Sebuah *RDF literal* adalah salah satu dari berbagai bentuk leksikal literal dan tipe data. Untuk informasi lebih lanjut, lihat [literal RDF](https://www.w3.org/TR/2004/REC-rdf-concepts-20040210/#section-Graph-Literal) dalam spesifikasi W3C *Resource Description Framework (RDF): Konsep dan Abstrak*.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/dms/latest/userguide/CHAP_Target.Neptune.html)

Untuk informasi lebih lanjut tentang tipe data RDF yang digunakan memuat Neptune dan pemetaan mereka ke tipe data sumber SQL, lihat [Konversi datatype](https://www.w3.org/TR/r2rml/#datatype-conversions) dalam spesifikasi W3C *R2RLL: RDB ke Pemetaan Bahasa RDF*.

## Keterbatasan menggunakan Amazon Neptune sebagai target
<a name="CHAP_Target.Neptune.Limitations"></a>

Batasan berikut berlaku saat menggunakan Amazon Neptune sebagai target:
+ AWS DMS saat ini mendukung tugas pemuatan penuh hanya untuk migrasi ke target Neptunus. Migrasi Perubahan pengambilan data (CDC) ke target Neptune tidak didukung.
+ Pastikan basis data Neptune target Anda dihapus secara manual dari semua data sebelum memulai tugas migrasi, seperti pada contoh berikut.

  Untuk drop semua data (vertex dan edge) dalam grafik, jalankan perintah Gremlin berikut.

  ```
  gremlin> g.V().drop().iterate()
  ```

  Untuk drop vertex yang memiliki label `'customer'`, jalankan perintah Gremlin berikut.

  ```
  gremlin> g.V().hasLabel('customer').drop()
  ```
**catatan**  
Dibutuhkan beberapa waktu untuk menjatuhkan set data besar. Anda mungkin ingin mengulangi `drop()` dengan batas, misalnya, `limit(1000)`.

  Untuk drop edge yang memiliki label `'rated'`, jalankan perintah Gremlin berikut.

  ```
  gremlin> g.E().hasLabel('rated').drop()
  ```
**catatan**  
Dibutuhkan beberapa waktu untuk menjatuhkan set data besar. Anda mungkin ingin mengulangi `drop()` dengan batas, misalnya `limit(1000)`.
+ Operasi API DMS `DescribeTableStatistics` dapat mengembalikan hasil yang tidak akurat tentang tabel yang diberikan karena sifat struktur data grafik Neptune.

  Selama migrasi, AWS DMS memindai setiap tabel sumber dan menggunakan pemetaan grafik untuk mengubah data sumber menjadi grafik Neptunus. Data yang dikonversi pertama kali disimpan dalam folder bucket S3 yang ditentukan untuk titik akhir target. Jika sumbernya dipindai dan data S3 perantara ini berhasil dibuat, `DescribeTableStatistics` mengasumsikan bahwa data berhasil dimuat ke dalam basis data target Neptune. Tapi ini tidak selalu benar. Untuk memverifikasi bahwa data dimuat dengan benar untuk tabel tertentu, bandingkan nilai kembalian `count()` di kedua ujung migrasi untuk tabel tersebut. 

  Dalam contoh berikut, AWS DMS telah memuat `customer` tabel dari database sumber, yang diberi label `'customer'` dalam grafik database Neptunus target. Anda dapat memastikan bahwa label ini ditulis ke basis data target. Untuk melakukannya bandingkan jumlah `customer` baris yang tersedia dari basis data sumber dengan jumlah `'customer'` baris berlabel yang dimuat dalam basis data target Neptune setelah tugas selesai.

  Untuk mendapatkan jumlah baris pelanggan yang tersedia dari basis data sumber menggunakan SQL, jalankan perintah berikut.

  ```
  select count(*) from customer;
  ```

  Untuk mendapatkan jumlah `'customer'` baris berlabel yang dimuat ke dalam grafik basis data target menggunakan Gremlin, jalankan yang berikut ini.

  ```
  gremlin> g.V().hasLabel('customer').count()
  ```
+ Saat ini, jika ada satu tabel tunggal yang gagal memuat, maka seluruh tugas gagal. Tidak seperti dalam target basis data relasional, data di Neptune sangat terhubung, yang dalam banyak kasus membuatnya tidak mungkin untuk melanjutkan tugas. Jika tugas tidak dapat dilanjutkan dengan sukses karena tipe kegagalan memuat data seperti ini, maka buatlah tugas baru untuk memuat tabel yang gagal dimuat. Sebelum menjalankan tugas baru ini, secara manual kosongkan tabel sebagian dimuat dari target Neptune.
**catatan**  
Anda dapat melanjutkan tugas yang gagal migrasi ke target Neptune jika kegagalan masih dapat dipulihkan (misalnya, kesalahan transit jaringan).
+ AWS DMS mendukung sebagian besar standar untuk R2RML. Namun, AWS DMS tidak mendukung standar R2RML tertentu, termasuk ekspresi terbalik, gabungan, dan tampilan. Sebuah solusi untuk view R2RLL adalah dengan membuat view SQL kustom yang sesuai dalam basis data sumber. Dalam tugas migrasi, gunakan pemetaan tabel untuk memilih view sebagai masukan. Kemudian petakantampilan ke tabel yang kemudian dikonsumsi oleh R2RLM untuk menghasilkan data grafik.
+ Ketika Anda memigrasi data sumber dengan tipe data SQL yang tidak didukung, data target yang dihasilkan dapat kehilangan ketepatan. Untuk informasi selengkapnya, lihat [Tipe data untuk migrasi Gremlin dan R2RLL ke Amazon Neptune sebagai target](#CHAP_Target.Neptune.DataTypes).
+ AWS DMS tidak mendukung migrasi data LOB ke target Neptunus.

# Menggunakan Redis OSS sebagai target AWS Database Migration Service
<a name="CHAP_Target.Redis"></a>

Redis OSS adalah penyimpanan struktur data dalam memori sumber terbuka yang digunakan sebagai database, cache, dan broker pesan. Mengelola data dalam memori dapat menghasilkan operasi baca atau tulis yang memakan waktu kurang dari satu milidetik, dan ratusan juta operasi dilakukan setiap detik. Sebagai penyimpanan data dalam memori, Redis OSS memberi daya pada aplikasi yang paling menuntut yang membutuhkan waktu respons sub-milidetik.

Dengan menggunakan AWS DMS, Anda dapat memigrasikan data dari database sumber apa pun yang didukung ke penyimpanan data Redis OSS target dengan waktu henti minimal. Untuk informasi tambahan tentang Redis OSS lihat, [Redis](https://redis.io/documentation) OSS Dokumentasi.

Selain Redis OSS lokal, AWS Database Migration Service mendukung hal berikut:
+ [Amazon ElastiCache (Redis OSS)](https://aws.amazon.com/elasticache/redis/) sebagai penyimpanan data target. ElastiCache (Redis OSS) bekerja dengan klien Redis OSS Anda dan menggunakan format data Redis OSS terbuka untuk menyimpan data Anda.
+ [Amazon MemoryDB](https://aws.amazon.com/memorydb/) sebagai penyimpanan data target. MemoryDB kompatibel dengan Redis OSS dan memungkinkan Anda untuk membangun aplikasi menggunakan semua struktur data Redis OSS, APIs, dan perintah yang digunakan saat ini.

Untuk informasi tambahan tentang bekerja dengan Redis OSS sebagai target AWS DMS, lihat bagian berikut: 

**Topics**
+ [Prasyarat untuk menggunakan cluster Redis OSS sebagai target AWS DMS](#CHAP_Target.Redis.Prerequisites)
+ [Keterbatasan saat menggunakan Redis sebagai target AWS Database Migration Service](#CHAP_Target.Redis.Limitations)
+ [Migrasi data dari database relasional atau non-relasional ke target Redis OSS](#CHAP_Target.Redis.Migrating)
+ [Menentukan pengaturan titik akhir untuk Redis OSS sebagai target](#CHAP_Target.Redis.EndpointSettings)

## Prasyarat untuk menggunakan cluster Redis OSS sebagai target AWS DMS
<a name="CHAP_Target.Redis.Prerequisites"></a>

*DMS mendukung target Redis OSS lokal dalam konfigurasi mandiri, atau sebagai kluster Redis OSS di mana data secara otomatis di-sharded di beberapa node.* Sharding adalah proses memisahkan data menjadi potongan-potongan kecil yang disebut pecahan yang tersebar di beberapa server atau node. Akibatnya, pecahan adalah partisi data yang berisi subset dari total kumpulan data, dan melayani sepotong beban kerja keseluruhan.

**Karena Redis OSS adalah penyimpanan data NoSQL nilai-kunci, konvensi penamaan kunci Redis OSS untuk digunakan ketika sumber Anda adalah database relasional, adalah schema-name.table-name.primary-key.** Dalam Redis OSS, kunci dan nilai tidak boleh mengandung karakter khusus%. Jika tidak, DMS melewatkan catatan. 

**catatan**  
Jika Anda menggunakan ElastiCache (Redis OSS) sebagai target, DMS hanya mendukung konfigurasi yang *diaktifkan mode cluster*. Untuk informasi selengkapnya tentang penggunaan ElastiCache (Redis OSS) versi 6.x atau yang lebih tinggi untuk membuat penyimpanan data target yang diaktifkan mode cluster, lihat [Memulai di Panduan](https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/GettingStarted.html) Pengguna *Amazon ElastiCache (Redis OSS*). 

Sebelum Anda memulai migrasi database, luncurkan cluster Redis OSS Anda dengan kriteria berikut.
+ Cluster Anda memiliki satu atau lebih pecahan.
+ Jika Anda menggunakan target ElastiCache (Redis OSS), pastikan klaster Anda tidak menggunakan kontrol akses berbasis peran IAM. Sebagai gantinya, gunakan Redis OSS Auth untuk mengautentikasi pengguna.
+ Aktifkan Multi-AZ (Availability Zones).
+ Pastikan klaster memiliki memori yang cukup yang tersedia agar sesuai dengan data yang akan dimigrasi dari database Anda. 
+ Pastikan bahwa kluster Redis OSS target Anda bersih dari semua data sebelum memulai tugas migrasi awal.

Anda harus menentukan persyaratan keamanan untuk migrasi data sebelum membuat konfigurasi klaster. DMS mendukung migrasi untuk menargetkan grup replikasi terlepas dari konfigurasi enkripsi mereka. Tetapi Anda dapat mengaktifkan atau menonaktifkan enkripsi hanya ketika Anda membuat konfigurasi cluster Anda.

## Keterbatasan saat menggunakan Redis sebagai target AWS Database Migration Service
<a name="CHAP_Target.Redis.Limitations"></a>

Keterbatasan berikut berlaku saat menggunakan Redis OSS sebagai target:
+ Karena Redis OSS adalah penyimpanan data no-sql nilai-kunci, konvensi penamaan kunci Redis OSS untuk digunakan ketika sumber Anda adalah database relasional, adalah. `schema-name.table-name.primary-key` 
+ Di Redis OSS, nilai kunci tidak dapat berisi karakter khusus. `%` Jika tidak, DMS melewatkan catatan.
+ DMS tidak akan memigrasikan baris yang berisi karakter. `%`
+ DMS tidak akan memigrasikan bidang yang berisi `%` karakter dalam nama bidang.
+ Mode LOB penuh tidak didukung.
+  Private Certificate Authority (CA) tidak didukung saat menggunakan ElastiCache (Redis OSS) sebagai target.
+ AWS DMS tidak mendukung data sumber yang berisi `'\0'` karakter yang disematkan saat menggunakan Redis sebagai titik akhir target. Data yang berisi `'\0'` karakter tertanam akan terpotong pada karakter pertama`'\0'`.

## Migrasi data dari database relasional atau non-relasional ke target Redis OSS
<a name="CHAP_Target.Redis.Migrating"></a>

Anda dapat memigrasikan data dari sumber SQL atau penyimpanan data NoSQL langsung ke target Redis OSS. Menyiapkan dan memulai migrasi ke target Redis OSS mirip dengan pemuatan penuh dan mengubah migrasi pengambilan data menggunakan konsol DMS atau API. Untuk melakukan migrasi database ke target Redis OSS, Anda melakukan hal berikut.
+ Membuat instans replikasi untuk melakukan semua proses untuk migrasi. Untuk informasi selengkapnya, lihat [Membuat instans replikasi](CHAP_ReplicationInstance.Creating.md).
+ Tentukan titik akhir sumber. Untuk informasi selengkapnya, lihat [Membuat titik akhir sumber dan target](CHAP_Endpoints.Creating.md).
+ Temukan nama DNS dan nomor port cluster Anda.
+ Unduh bundel sertifikat yang dapat Anda gunakan untuk memverifikasi koneksi SSL.
+ Tentukan titik akhir target, seperti yang dijelaskan di bawah ini.
+ Buat tugas atau serangkaian tugas untuk menentukan tabel dan proses replikasi apa yang ingin Anda gunakan. Untuk informasi selengkapnya, lihat [Membuat tugas](CHAP_Tasks.Creating.md).
+ Migrasikan data dari database sumber Anda ke kluster target Anda.

Anda memulai migrasi database dengan salah satu dari dua cara:

1. Anda dapat memilih AWS DMS konsol dan melakukan setiap langkah di sana.

1. Anda dapat menggunakan AWS Command Line Interface (AWS CLI). [Untuk informasi lebih lanjut tentang menggunakan CLI dengan AWS DMS, lihat AWS CLI untuk. AWS DMS](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html)

**Untuk menemukan nama DNS dan nomor port cluster Anda**
+ Gunakan AWS CLI perintah berikut untuk memberikan nama grup replikasi Anda. `replication-group-id`

  ```
  aws elasticache describe-replication-groups --replication-group-id myreplgroup
  ```

  Di sini, output menunjukkan nama DNS dalam `Address` atribut dan nomor port dalam `Port` atribut node utama di cluster. 

  ```
   ...
  "ReadEndpoint": {
  "Port": 6379,
  "Address": "myreplgroup-
  111.1abc1d.1111.uuu1.cache.example.com"
  }
  ...
  ```

  Jika Anda menggunakan MemoryDB sebagai target Anda, gunakan AWS CLI perintah berikut untuk memberikan alamat endpoint ke cluster Redis OSS Anda. 

  ```
  aws memorydb describe-clusters --clusterid clusterid
  ```

**Unduh bundel sertifikat untuk digunakan untuk memverifikasi koneksi SSL**
+ Masukkan `wget` perintah berikut di baris perintah. Wget adalah alat utilitas baris perintah GNU gratis yang digunakan untuk mengunduh file dari internet.

  ```
  wget https://s3.aws-api-domain/rds-downloads/rds-combined-ca-bundle.pem
  ```

  Di sini, `aws-api-domain` lengkapi domain Amazon S3 di Wilayah AWS Anda yang diperlukan untuk mengakses bucket S3 tertentu dan rds-combined-ca-bundle file.pem yang disediakannya.

**Untuk membuat titik akhir target menggunakan konsol AWS DMS**

Titik akhir ini untuk target Redis OSS Anda yang sudah berjalan. 
+ Pada konsol tersebut, memilih **Titik Akhir** dari panel navigasi dan kemudian memilih **Membuat Titik Akhir**. Tabel berikut menjelaskan pengaturan.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/dms/latest/userguide/CHAP_Target.Redis.html)

Setelah Anda selesai memberikan semua informasi untuk titik akhir Anda, AWS DMS buat titik akhir target Redis OSS Anda untuk digunakan selama migrasi database.

Untuk informasi tentang membuat tugas migrasi dan memulai migrasi database, lihat[Membuat tugas](CHAP_Tasks.Creating.md).

## Menentukan pengaturan titik akhir untuk Redis OSS sebagai target
<a name="CHAP_Target.Redis.EndpointSettings"></a>

Untuk membuat atau mengubah titik akhir target, Anda dapat menggunakan konsol atau `CreateEndpoint` atau Operasi API `ModifyEndpoint`. 

**Untuk target Redis OSS di AWS DMS konsol, tentukan **pengaturan khusus titik akhir pada halaman Buat titik akhir** **atau Ubah konsol titik akhir**.**

Saat menggunakan `CreateEndpoint` dan operasi `ModifyEndpoint` API, tentukan parameter permintaan untuk `RedisSettings` opsi tersebut. Contoh berikut menunjukkan bagaimana melakukan ini menggunakan AWS CLI.

```
aws dms create-endpoint --endpoint-identifier my-redis-target
--endpoint-type target --engine-name redis --redis-settings 
'{"ServerName":"sample-test-sample.zz012zz.cluster.eee1.cache.bbbxxx.com","Port":6379,"AuthType":"auth-token", 
 "SslSecurityProtocol":"ssl-encryption", "AuthPassword":"notanactualpassword"}'

{
    "Endpoint": {
        "EndpointIdentifier": "my-redis-target",
        "EndpointType": "TARGET",
        "EngineName": "redis",
        "EngineDisplayName": "Redis",
        "TransferFiles": false,
        "ReceiveTransferredFiles": false,
        "Status": "active",
        "KmsKeyId": "arn:aws:kms:us-east-1:999999999999:key/x-b188188x",
        "EndpointArn": "arn:aws:dms:us-east-1:555555555555:endpoint:ABCDEFGHIJKLMONOPQRSTUVWXYZ",
        "SslMode": "none",
        "RedisSettings": {
            "ServerName": "sample-test-sample.zz012zz.cluster.eee1.cache.bbbxxx.com",
            "Port": 6379,
            "SslSecurityProtocol": "ssl-encryption",
            "AuthType": "auth-token"
        }
    }
}
```

`--redis-settings`Parameternya mengikuti:
+ `ServerName`— (Wajib) Jenis`string`, menentukan cluster Redis OSS tempat data akan dimigrasi, dan berada di VPC Anda yang sama.
+ `Port`— (Wajib) Dari jenis`number`, nilai port yang digunakan untuk mengakses titik akhir.
+ `SslSecurityProtocol`— (Opsional) Nilai yang valid termasuk `plaintext` dan`ssl-encryption`. Nilai default-nya `ssl-encryption`. 

  `plaintext`Opsi ini tidak menyediakan enkripsi Transport Layer Security (TLS) untuk lalu lintas antara endpoint dan database. 

  Gunakan `ssl-encryption` untuk membuat koneksi terenkripsi. `ssl-encryption`tidak memerlukan SSL Certificate Authority (CA) ARN untuk memverifikasi sertifikat server, tetapi dapat diidentifikasi secara opsional menggunakan pengaturan. `SslCaCertificateArn` Jika ARN otoritas sertifikat tidak diberikan, DMS menggunakan root CA Amazon.

  Saat menggunakan target Redis OSS lokal, Anda dapat menggunakan `SslCaCertificateArn` untuk mengimpor Otoritas Sertifikat (CA) publik atau pribadi ke dalam DMS, dan menyediakan ARN tersebut untuk otentikasi server. CA pribadi tidak didukung saat menggunakan ElastiCache (Redis OSS) sebagai target.
+ `AuthType`— (Wajib) Menunjukkan jenis otentikasi yang harus dilakukan saat menghubungkan ke Redis OSS. Nilai yang valid termasuk `none`, `auth-token`, dan `auth-role`.

  `auth-token`Opsi ini membutuhkan "*AuthPassword*" disediakan, sedangkan `auth-role` opsi membutuhkan "*AuthUserName*" dan "*AuthPassword*" disediakan.

# Menggunakan Babelfish sebagai target AWS Database Migration Service
<a name="CHAP_Target.Babelfish"></a>

Anda dapat memigrasikan data dari database sumber Microsoft SQL Server ke target Babelfish menggunakan. AWS Database Migration Service

Babelfish for Aurora PostgreSQL memperluas basis data Edisi yang Kompatibel dengan Amazon Aurora PostgreSQL Anda dengan kemampuan menerima koneksi basis data dari klien Server SQL Microsoft. Melakukan hal ini memungkinkan aplikasi awalnya dibangun untuk SQL Server untuk bekerja secara langsung dengan Aurora PostgreSQL dengan beberapa perubahan kode dibandingkan dengan migrasi tradisional, dan tanpa mengubah driver database. 

Untuk informasi tentang versi Babelfish yang AWS DMS mendukung sebagai target, lihat. [Target untuk AWS DMS](CHAP_Introduction.Targets.md) Versi Babelfish sebelumnya di Aurora PostgreSQL memerlukan peningkatan sebelum menggunakan titik akhir Babelfish.

**catatan**  
Titik akhir target PostgreSQL Aurora adalah cara yang lebih disukai untuk memigrasikan data ke Babelfish. Untuk informasi selengkapnya, lihat [Menggunakan Babelfish untuk Aurora PostgreSQL sebagai target](CHAP_Target.PostgreSQL.md#CHAP_Target.PostgreSQL.Babelfish). 

*Untuk informasi tentang menggunakan Babelfish sebagai titik akhir database, lihat [Babelfish for Aurora PostgreSQL di Panduan Pengguna Amazon Aurora](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html) untuk Aurora* 

## Prasyarat untuk menggunakan Babelfish sebagai target AWS DMS
<a name="CHAP_Target.Babelfish.Prerequisites"></a>

Anda harus membuat tabel sebelum memigrasi data untuk memastikannya AWS DMS menggunakan tipe data dan metadata tabel yang benar. Jika Anda tidak membuat tabel pada target sebelum menjalankan migrasi, AWS DMS dapat membuat tabel dengan tipe data dan izin yang salah. Misalnya, AWS DMS membuat kolom stempel waktu sebagai biner (8) sebagai gantinya, dan tidak menyediakan fungsionalitas yang diharapkan timestamp/rowversion .

**Untuk mempersiapkan dan membuat tabel Anda sebelum migrasi**

1. Jalankan pernyataan DDL tabel buat Anda yang menyertakan batasan unik, kunci utama, atau batasan default. 

   Jangan menyertakan batasan kunci asing, atau pernyataan DDL apa pun untuk objek seperti tampilan, prosedur tersimpan, fungsi, atau pemicu. Anda dapat menerapkannya setelah memigrasi basis data sumber Anda.

1. Identifikasi kolom identitas, kolom yang dihitung, atau kolom yang berisi tipe data versi baris atau stempel waktu untuk tabel Anda. Kemudian, buat aturan transformasi yang diperlukan untuk menangani masalah yang diketahui saat menjalankan tugas migrasi. Untuk informasi selengkapnya, lihat [Aturan dan tindakan transformasi](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Transformations.md).

1. Identifikasi kolom dengan tipe data yang tidak didukung Babelfish. Kemudian, ubah kolom yang terpengaruh dalam tabel target untuk menggunakan tipe data yang didukung, atau buat aturan transformasi yang menghapusnya selama tugas migrasi. Untuk informasi selengkapnya, lihat [Aturan dan tindakan transformasi](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Transformations.md).

   Tabel berikut mencantumkan tipe data sumber yang tidak didukung oleh Babelfish, dan jenis data target yang direkomendasikan untuk digunakan.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/dms/latest/userguide/CHAP_Target.Babelfish.html)

**Untuk mengatur tingkat unit kapasitas Aurora (ACUs) untuk basis data sumber Aurora PostgreSQL Serverless V2 Anda**

Anda dapat meningkatkan kinerja tugas AWS DMS migrasi Anda sebelum menjalankannya dengan menetapkan nilai ACU minimum.
+ Dari jendela **pengaturan kapasitas Severless v2**, atur **Minimum ACUs** ke**2**, atau level yang wajar untuk cluster Aurora DB Anda.

  *Untuk informasi tambahan tentang pengaturan unit kapasitas Aurora, lihat [Memilih rentang kapasitas v2 Tanpa Server Aurora untuk klaster Aurora di Panduan Pengguna Amazon Aurora](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/aurora-serverless-v2.setting-capacity.html)* 

Setelah menjalankan tugas AWS DMS migrasi, Anda dapat mengatur ulang nilai minimum Anda ke tingkat yang wajar ACUs untuk basis data sumber Aurora PostgreSQL Serverless V2 Anda.

## Persyaratan keamanan saat menggunakan Babelfish sebagai target AWS Database Migration Service
<a name="CHAP_Target.Babelfish.Security"></a>

Berikut ini menjelaskan persyaratan keamanan untuk menggunakan AWS DMS dengan target Babelfish:
+ Nama pengguna administrator (pengguna Admin) digunakan untuk membuat database.
+ Login PSQL dan pengguna dengan izin SELECT, INSERT, UPDATE, DELETE, dan REFERENCES yang memadai.

## Izin pengguna untuk menggunakan Babelfish sebagai target AWS DMS
<a name="CHAP_Target.Babelfish.Permissions"></a>

**penting**  
Untuk tujuan keamanan, akun pengguna yang digunakan untuk migrasi data harus merupakan pengguna terdaftar dalam database Babelfish yang Anda gunakan sebagai target.

Titik akhir target Babelfish Anda memerlukan izin pengguna minimum untuk menjalankan migrasi. AWS DMS 

**Untuk membuat login dan pengguna Transact-SQL (T-SQL) dengan hak istimewa rendah**

1. Buat login dan kata sandi untuk digunakan saat menghubungkan ke server.

   ```
   CREATE LOGIN dms_user WITH PASSWORD = 'password';
   GO
   ```

1. Buat database virtual untuk cluster Babelfish Anda.

   ```
   CREATE DATABASE my_database;
   GO
   ```

1. Buat pengguna T-SQL untuk database target Anda.

   ```
   USE my_database
   GO
   CREATE USER dms_user FOR LOGIN dms_user;
   GO
   ```

1. Untuk setiap tabel dalam database Babelfish Anda, BERIKAN izin ke tabel.

   ```
   GRANT SELECT, DELETE, INSERT, REFERENCES, UPDATE ON [dbo].[Categories] TO dms_user;  
   ```

## Keterbatasan penggunaan Babelfish sebagai target AWS Database Migration Service
<a name="CHAP_Target.Babelfish.Limitations"></a>

Batasan berikut berlaku saat menggunakan database Babelfish sebagai target untuk: AWS DMS
+ Hanya mode persiapan meja “**Do Nothing** “yang didukung.
+ Tipe data ROWVERSION memerlukan aturan pemetaan tabel yang menghapus nama kolom dari tabel selama tugas migrasi.
+ Jenis data sql\$1variant tidak didukung.
+ Mode LOB penuh didukung. Menggunakan SQL Server sebagai titik akhir sumber memerlukan pengaturan Atribut Koneksi Titik Akhir SQL Server `ForceFullLob=True` untuk disetel agar dapat dimigrasi LOBs ke titik akhir target.
+ Pengaturan tugas replikasi memiliki batasan berikut:

  ```
  {
     "FullLoadSettings": {
        "TargetTablePrepMode": "DO_NOTHING",
        "CreatePkAfterFullLoad": false,
        }.
      
  }
  ```
+ Tipe data TIME (7), DATETIME2 (7), dan DATETIMEOFFSET (7) di Babelfish membatasi nilai presisi untuk porsi detik waktu menjadi 6 digit. Pertimbangkan untuk menggunakan nilai presisi 6 untuk tabel target Anda saat menggunakan tipe data ini. Untuk Babelfish versi 2.2.0 dan lebih tinggi, saat menggunakan TIME (7) dan DATETIME2 (7), digit presisi ketujuh selalu nol.
+ Dalam mode DO\$1NOTHING, DMS memeriksa untuk melihat apakah tabel sudah ada. Jika tabel tidak ada dalam skema target, DMS membuat tabel berdasarkan definisi tabel sumber, dan memetakan setiap tipe data yang ditentukan pengguna ke tipe data dasarnya.
+ Tugas AWS DMS migrasi ke target Babelfish tidak mendukung tabel yang memiliki kolom menggunakan tipe data ROWVERSION atau TIMESTAMP. Anda dapat menggunakan aturan pemetaan tabel yang menghapus nama kolom dari tabel selama proses transfer. Dalam contoh aturan transformasi berikut, tabel bernama `Actor` di sumber Anda diubah untuk menghapus semua kolom yang dimulai dengan karakter `col` dari `Actor` tabel di target Anda.

  ```
  {
   	"rules": [{
  		"rule-type": "selection",is 
  		"rule-id": "1",
  		"rule-name": "1",
  		"object-locator": {
  			"schema-name": "test",
  			"table-name": "%"
  		},
  		"rule-action": "include"
  	}, {
  		"rule-type": "transformation",
  		"rule-id": "2",
  		"rule-name": "2",
  		"rule-action": "remove-column",
  		"rule-target": "column",
  		"object-locator": {
  			"schema-name": "test",
  			"table-name": "Actor",
  			"column-name": "col%"
  		}
  	}]
   }
  ```
+ Untuk tabel dengan identitas atau kolom terhitung, di mana tabel target menggunakan nama kasus campuran seperti Kategori, Anda harus membuat tindakan aturan transformasi yang mengubah nama tabel menjadi huruf kecil untuk tugas DMS Anda. Contoh berikut menunjukkan cara membuat tindakan aturan transformasi, **Buat huruf kecil** menggunakan konsol. AWS DMS Untuk informasi selengkapnya, lihat [Aturan dan tindakan transformasi](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Transformations.md).  
![\[Aturan transformasi babelfish\]](http://docs.aws.amazon.com/id_id/dms/latest/userguide/images/datarep-babelfish-transform-1.png)
+ Sebelum Babelfish versi 2.2.0, DMS membatasi jumlah kolom yang dapat Anda replikasi ke titik akhir target Babelfish menjadi dua puluh (20) kolom. Dengan Babelfish 2.2.0 batasnya meningkat menjadi 100 kolom. Tetapi dengan Babelfish versi 2.4.0 dan lebih tinggi, jumlah kolom yang dapat Anda tiru meningkat lagi. Anda dapat menjalankan contoh kode berikut terhadap database SQL Server Anda untuk menentukan tabel mana yang terlalu panjang.

  ```
  USE myDB;
  GO
  DECLARE @Babelfish_version_string_limit INT = 8000; -- Use 380 for Babelfish versions before 2.2.0
  WITH bfendpoint
  AS (
  SELECT 
  	[TABLE_SCHEMA]
        ,[TABLE_NAME]
  	  , COUNT( [COLUMN_NAME] ) AS NumberColumns
  	  , ( SUM( LEN( [COLUMN_NAME] ) + 3)  
  		+ SUM( LEN( FORMAT(ORDINAL_POSITION, 'N0') ) + 3 )  
  	    + LEN( TABLE_SCHEMA ) + 3
  		+ 12 -- INSERT INTO string
  		+ 12)  AS InsertIntoCommandLength -- values string
        , CASE WHEN ( SUM( LEN( [COLUMN_NAME] ) + 3)  
  		+ SUM( LEN( FORMAT(ORDINAL_POSITION, 'N0') ) + 3 )  
  	    + LEN( TABLE_SCHEMA ) + 3
  		+ 12 -- INSERT INTO string
  		+ 12)  -- values string
  			>= @Babelfish_version_string_limit
  			THEN 1
  			ELSE 0
  		END AS IsTooLong
  FROM [INFORMATION_SCHEMA].[COLUMNS]
  GROUP BY [TABLE_SCHEMA], [TABLE_NAME]
  )
  SELECT * 
  FROM bfendpoint
  WHERE IsTooLong = 1
  ORDER BY TABLE_SCHEMA, InsertIntoCommandLength DESC, TABLE_NAME
  ;
  ```

## Tipe data target untuk Babelfish
<a name="CHAP_Target.Babelfish.DataTypes"></a>

Tabel berikut menunjukkan tipe data target Babelfish yang didukung saat menggunakan AWS DMS dan pemetaan default dari AWS DMS tipe data.

Untuk informasi tambahan tentang tipe AWS DMS data, lihat[Tipe data untuk AWS Database Migration Service](CHAP_Reference.DataTypes.md). 


|  AWS DMS tipe data  |  Tipe data Babelfish   | 
| --- | --- | 
|  BOOLEAN  |  TINYINT  | 
|  BYTES  |  VARBINARY(length)  | 
|  DATE  |  DATE  | 
|  TIME  |  TIME  | 
|  INT1  |  SMALLINT  | 
|  INT2  |  SMALLINT  | 
|  INT4  |  INT  | 
|  INT8  |  BIGINT  | 
|  NUMERIC   |  NUMERIK (p, s)  | 
|  REAL4  |  REAL  | 
|  REAL8  |  FLOAT  | 
|  STRING  |  Jika kolom berupa kolom tanggal atau waktu, lakukan hal berikut:  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/dms/latest/userguide/CHAP_Target.Babelfish.html) Jika kolom bukan berupa kolom tanggal atau waktu, gunakan VARCHAR (length).  | 
|  UINT1  |  TINYINT  | 
|  UINT2  |  SMALLINT  | 
|  UINT4  |  INT  | 
|  UINT8  |  BIGINT  | 
|  WSTRING  |  NVARCHAR (panjang)  | 
|  BLOB  |  VARBINARY(max) Untuk menggunakan tipe data ini dengan DMS, Anda harus mengaktifkan penggunaan BLOBs untuk tugas tertentu. DMS mendukung tipe data BLOB hanya dalam tabel yang menyertakan kunci primer.  | 
|  CLOB  |  VARCHAR(max) Untuk menggunakan tipe data ini dengan DMS, Anda harus mengaktifkan penggunaan CLOBs untuk tugas tertentu.  | 
|  NCLOB  |  NVARCHAR(max) Untuk menggunakan tipe data ini dengan DMS, Anda harus mengaktifkan penggunaan NCLOBs untuk tugas tertentu. Selama CDC, DMS mendukung tipe data NCLOB hanya dalam tabel yang menyertakan kunci utama.  | 

# Menggunakan Amazon Timestream sebagai target untuk AWS Database Migration Service
<a name="CHAP_Target.Timestream"></a>

Anda dapat menggunakan AWS Database Migration Service untuk memigrasikan data dari database sumber ke titik akhir target Amazon Timestream, dengan dukungan untuk migrasi data Beban Penuh dan CDC.

Amazon Timestream adalah layanan database deret waktu yang cepat, terukur, dan tanpa server yang dibuat untuk konsumsi data volume tinggi. Data deret waktu adalah urutan titik data yang dikumpulkan selama interval waktu, dan digunakan untuk mengukur peristiwa yang berubah seiring waktu. Ini digunakan untuk mengumpulkan, menyimpan, dan menganalisis metrik dari aplikasi IoT DevOps , aplikasi, dan aplikasi analitik. Setelah Anda memiliki data di Timestream, Anda dapat memvisualisasikan dan mengidentifikasi tren dan pola dalam data Anda dalam waktu dekat. Untuk informasi tentang Amazon Timestream, lihat [Apa itu Amazon Timestream?](https://docs.aws.amazon.com/timestream/latest/developerguide/what-is-timestream.html) di Panduan *Pengembang Amazon Timestream*.

**Topics**
+ [Prasyarat untuk menggunakan Amazon Timestream sebagai target untuk AWS Database Migration Service](#CHAP_Target.Timestream.Prerequisites)
+ [Pengaturan tugas beban penuh multithread](#CHAP_Target.Timestream.FLTaskSettings)
+ [Pengaturan beban tugas CDC multithread](#CHAP_Target.Timestream.CDCTaskSettings)
+ [Pengaturan titik akhir saat menggunakan Timestream sebagai target untuk AWS DMS](#CHAP_Target.Timestream.ConnectionAttrib)
+ [Membuat dan memodifikasi titik akhir target Amazon Timestream](#CHAP_Target.Timestream.CreateModifyEndpoint)
+ [Menggunakan pemetaan objek untuk memigrasikan data ke topik Timestream](#CHAP_Target.Timestream.ObjectMapping)
+ [Batasan saat menggunakan Amazon Timestream sebagai target AWS Database Migration Service](#CHAP_Target.Timestream.Limitations)

## Prasyarat untuk menggunakan Amazon Timestream sebagai target untuk AWS Database Migration Service
<a name="CHAP_Target.Timestream.Prerequisites"></a>

Sebelum Anda mengatur Amazon Timestream sebagai target AWS DMS, pastikan Anda membuat peran IAM. Peran ini harus memungkinkan AWS DMS untuk mendapatkan akses ke data yang sedang dimigrasikan ke Amazon Timestream. Set minimum izin akses untuk peran yang Anda gunakan untuk bermigrasi ke Timestream ditampilkan dalam kebijakan IAM berikut.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "AllowDescribeEndpoints",
      "Effect": "Allow",
      "Action": [
        "timestream:DescribeEndpoints"
      ],
      "Resource": "*"
    },
    {
      "Sid": "VisualEditor0",
      "Effect": "Allow",
      "Action": [
        "timestream:ListTables",
        "timestream:DescribeDatabase"
      ],
      "Resource": "arn:aws:timestream:us-east-1:123456789012:database/DATABASE_NAME"
    },
    {
      "Sid": "VisualEditor1",
      "Effect": "Allow",
      "Action": [
        "timestream:DeleteTable",
        "timestream:WriteRecords",
        "timestream:UpdateTable",
        "timestream:CreateTable"
      ],
      "Resource": "arn:aws:timestream:us-east-1:123456789012:database/DATABASE_NAME/table/TABLE_NAME"
    }
  ]
}
```

------

Jika Anda berniat untuk memigrasikan semua tabel, gunakan `*` for *TABLE\$1NAME* dalam contoh di atas.

Perhatikan hal berikut tentang penggunaan Timestream sebagai target:
+ Jika Anda bermaksud untuk menelan data historis dengan stempel waktu melebihi 1 tahun, sebaiknya gunakan untuk menulis data AWS DMS ke Amazon S3 dalam format nilai dipisahkan koma (csv). Kemudian, gunakan pemuatan batch Timestream untuk menyerap data ke Timestream. Untuk informasi selengkapnya, lihat [Menggunakan pemuatan batch di Timestream](https://docs.aws.amazon.com/timestream/latest/developerguide/batch-load.html) dalam panduan pengembang [Amazon Timestream](https://docs.aws.amazon.com/timestream/latest/developerguide/what-is-timestream.html).
+ Untuk migrasi data beban penuh data yang berusia kurang dari 1 tahun, sebaiknya setel periode penyimpanan penyimpanan memori tabel Timestream lebih besar dari atau sama dengan stempel waktu tertua. Kemudian, setelah migrasi selesai, edit penyimpanan penyimpanan memori tabel ke nilai yang diinginkan. Misalnya, untuk memigrasikan data dengan stempel waktu tertua berusia 2 bulan, lakukan hal berikut:
  + Setel retensi penyimpanan memori tabel target Timestream menjadi 2 bulan.
  + Mulai migrasi data menggunakan AWS DMS.
  + Setelah migrasi data selesai, ubah periode retensi tabel Timestream target ke nilai yang Anda inginkan. 

   Kami merekomendasikan untuk memperkirakan biaya penyimpanan memori sebelum migrasi, menggunakan informasi pada halaman berikut:
  + [Harga Amazon Timestream](https://aws.amazon.com/timestream/pricing)
  + [AWS kalkulator harga](https://calculator.aws/#/addService) 
+ Untuk migrasi data CDC, sebaiknya atur periode retensi penyimpanan memori dari tabel target sehingga data yang tertelan berada dalam batas retensi penyimpanan memori. Untuk informasi selengkapnya, lihat [Menulis Praktik Terbaik](https://docs.aws.amazon.com/timestream/latest/developerguide/data-ingest.html) di panduan [pengembang Amazon Timestream](https://docs.aws.amazon.com/timestream/latest/developerguide/what-is-timestream.html).

## Pengaturan tugas beban penuh multithread
<a name="CHAP_Target.Timestream.FLTaskSettings"></a>

Untuk membantu meningkatkan kecepatan transfer data, AWS DMS mendukung tugas migrasi beban penuh multithreaded ke titik akhir target Timestream dengan pengaturan tugas ini:
+ `MaxFullLoadSubTasks` - Gunakan pilihan ini untuk menunjukkan jumlah maksimum tabel sumber yang dimuat secara paralel. DMS memuat setiap tabel ke dalam tabel target Amazon Timestream yang sesuai menggunakan subtugas khusus. Default adalah 8; nilai maksimum adalah 49.
+ `ParallelLoadThreads`— Gunakan opsi ini untuk menentukan jumlah utas yang AWS DMS digunakan untuk memuat setiap tabel ke dalam tabel target Amazon Timestream. Nilai maksimum untuk target Timestream adalah 32. Anda dapat meminta untuk meningkatkan batas maksimum ini.
+ `ParallelLoadBufferSize`— Gunakan opsi ini untuk menentukan jumlah maksimum catatan yang akan disimpan dalam buffer yang digunakan thread beban paralel untuk memuat data ke target Amazon Timestream. Nilai default adalah 50. Nilai maksimumnya adalah 1.000. Gunakan pengaturan ini dengan `ParallelLoadThreads`. `ParallelLoadBufferSize` hanya berlaku bila ada lebih dari satu thread.
+ `ParallelLoadQueuesPerThread` - Gunakan pilihan ini untuk menentukan jumlah antrean yang diakses setiap thread secara bersamaan untuk mengambil catatan data dari antrean dan menghasilkan beban batch untuk target. Default adalah 1. Namun, untuk target Amazon Timestream dengan berbagai ukuran muatan, rentang yang valid adalah 5—512 antrian per utas.

## Pengaturan beban tugas CDC multithread
<a name="CHAP_Target.Timestream.CDCTaskSettings"></a>

Untuk mempromosikan kinerja CDC, AWS DMS mendukung pengaturan tugas ini:
+ `ParallelApplyThreads`— Menentukan jumlah thread bersamaan yang AWS DMS digunakan selama beban CDC untuk mendorong catatan data ke titik akhir target Timestream. Nilai default adalah 0 dan nilai maksimum adalah 32.
+ `ParallelApplyBufferSize`— Menentukan jumlah maksimum catatan untuk disimpan di setiap antrian buffer untuk thread bersamaan untuk mendorong ke titik akhir target Timestream selama beban CDC. Nilai default adalah 100 dan nilai maksimum adalah 1.000. Gunakan pilihan ini saat `ParallelApplyThreads` menentukan lebih dari satu thread. 
+ `ParallelApplyQueuesPerThread`— Menentukan jumlah antrian yang diakses setiap thread untuk mengeluarkan catatan data dari antrian dan menghasilkan beban batch untuk titik akhir Timestream selama CDC. Nilai default adalah 1 dan nilai maksimum adalah 512.

## Pengaturan titik akhir saat menggunakan Timestream sebagai target untuk AWS DMS
<a name="CHAP_Target.Timestream.ConnectionAttrib"></a>

Anda dapat menggunakan pengaturan titik akhir untuk mengonfigurasi database target Timestream Anda mirip dengan menggunakan atribut koneksi tambahan. Anda menentukan pengaturan saat Anda membuat titik akhir target menggunakan AWS DMS konsol, atau dengan menggunakan `create-endpoint` perintah di [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html), dengan sintaks `--timestream-settings '{"EndpointSetting": "value", ...}'` JSON.

Tabel berikut menunjukkan pengaturan endpoint yang dapat Anda gunakan dengan Timestream sebagai target.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/dms/latest/userguide/CHAP_Target.Timestream.html)

## Membuat dan memodifikasi titik akhir target Amazon Timestream
<a name="CHAP_Target.Timestream.CreateModifyEndpoint"></a>

Setelah Anda membuat peran IAM dan menetapkan set minimum izin akses, Anda dapat membuat titik akhir target Amazon Timestream menggunakan konsol, atau dengan menggunakan AWS DMS perintah di, dengan `create-endpoint` sintaks [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html)JSON. `--timestream-settings '{"EndpointSetting": "value", ...}'`

Contoh berikut menunjukkan cara membuat dan memodifikasi titik akhir target Timestream menggunakan. AWS CLI

**Buat perintah titik akhir target Timestream**

```
aws dms create-endpoint —endpoint-identifier timestream-target-demo
--endpoint-type target —engine-name timestream
--service-access-role-arn arn:aws:iam::123456789012:role/my-role
--timestream-settings
{
    "MemoryDuration": 20,
    "DatabaseName":"db_name",
    "MagneticDuration": 3,
    "CdcInsertsAndUpdates": true,
    "EnableMagneticStoreWrites": true,
}
```

**Ubah perintah titik akhir target Timestream**

```
aws dms modify-endpoint —endpoint-identifier timestream-target-demo
--endpoint-type target —engine-name timestream
--service-access-role-arn arn:aws:iam::123456789012:role/my-role
--timestream-settings
{
    "MemoryDuration": 20,
    "MagneticDuration": 3,
}
```

## Menggunakan pemetaan objek untuk memigrasikan data ke topik Timestream
<a name="CHAP_Target.Timestream.ObjectMapping"></a>

AWS DMS menggunakan aturan pemetaan tabel untuk memetakan data dari sumber ke topik Timestream target. Untuk memetakan data ke topik target, Anda menggunakan jenis aturan pemetaan tabel yang disebut pemetaan objek. Anda menggunakan pemetaan objek untuk menentukan bagaimana catatan data dalam peta sumber ke catatan data yang dipublikasikan ke topik Timestream. 

Topik Timestream tidak memiliki struktur preset selain memiliki kunci partisi.

**catatan**  
Anda tidak perlu menggunakan pemetaan objek. Anda dapat menggunakan pemetaan tabel biasa untuk berbagai transformasi. Namun, jenis kunci partisi akan mengikuti perilaku default ini:   
Primary Key digunakan sebagai kunci partisi untuk Full Load.
Jika tidak ada pengaturan tugas penerapan paralel yang digunakan, `schema.table` digunakan sebagai kunci partisi untuk CDC.
Jika pengaturan tugas penerapan paralel digunakan, kunci utama digunakan sebagai kunci partisi untuk CDC.

Untuk membuat aturan pemetaan objek, tetapkan `rule-type` sebagai `object-mapping`. Aturan ini menentukan jenis pemetaan objek yang ingin Anda gunakan. Struktur untuk aturan tersebut adalah sebagai berikut.

```
{
    "rules": [
        {
            "rule-type": "object-mapping",
            "rule-id": "id",
            "rule-name": "name",
            "rule-action": "valid object-mapping rule action",
            "object-locator": {
                "schema-name": "case-sensitive schema name",
                "table-name": ""
            }
        }
    ]
}
```



```
{
    "rules": [
        {
            "rule-type": "object-mapping",
            "rule-id": "1",
            "rule-name": "timestream-map",
            "rule-action": "map-record-to-record",
            "target-table-name": "tablename",
            "object-locator": {
                "schema-name": "",
                "table-name": ""
            },
            "mapping-parameters": {
                "timestream-dimensions": [
                    "column_name1",
                     "column_name2"
                ],
                "timestream-timestamp-name": "time_column_name",
                "timestream-multi-measure-name": "column_name1or2",
                "timestream-hash-measure-name":  true or false,
                "timestream-memory-duration": x,
                "timestream-magnetic-duration": y
            }
        }
    ]
}
```

AWS DMS saat ini mendukung `map-record-to-record` dan `map-record-to-document` sebagai satu-satunya nilai yang valid untuk `rule-action` parameter. `map-record-to-document`Nilai `map-record-to-record` dan menentukan AWS DMS apa yang dilakukan secara default ke catatan yang tidak dikecualikan sebagai bagian dari daftar `exclude-columns` atribut. Nilai-nilai ini tidak mempengaruhi pemetaan atribut dengan cara apapun. 

Gunakan `map-record-to-record` saat bermigrasi dari database relasional ke topik Timestream. Jenis aturan ini menggunakan `taskResourceId.schemaName.tableName` nilai dari database relasional sebagai kunci partisi dalam topik Timestream dan menciptakan atribut untuk setiap kolom dalam database sumber. Saat menggunakan`map-record-to-record`, untuk kolom apa pun di tabel sumber yang tidak tercantum dalam daftar `exclude-columns` atribut, AWS DMS buat atribut yang sesuai dalam topik target. Atribut yang sesuai ini dibuat terlepas dari apakah kolom sumber tersebut digunakan dalam pemetaan atribut. 

Salah satu cara untuk memahami `map-record-to-record` adalah melihatnya beraksi. Untuk contoh ini, anggaplah bahwa Anda memulai dengan baris tabel basis data relasional dengan struktur dan data berikut.


| FirstName | LastName | StoreId | HomeAddress | HomePhone | WorkAddress | WorkPhone | DateofBirth | 
| --- | --- | --- | --- | --- | --- | --- | --- | 
| Randy | Marsh | 5 | 221B Baker Street | 1234567890 | 31 Spooner Street, Quahog  | 9876543210 | 02/29/1988 | 

Untuk memigrasikan informasi ini dari skema bernama `Test` ke topik Timestream, Anda membuat aturan untuk memetakan data ke topik target. Aturan berikut menggambarkan pemetaan. 

```
{
    "rules": [
        {
            "rule-type": "selection",
            "rule-id": "1",
            "rule-name": "1",
            "rule-action": "include",
            "object-locator": {
                "schema-name": "Test",
                "table-name": "%"
            }
        },
        {
            "rule-type": "object-mapping",
            "rule-id": "2",
            "rule-name": "DefaultMapToTimestream",
            "rule-action": "map-record-to-record",
            "object-locator": {
                "schema-name": "Test",
                "table-name": "Customers"
            }
        }
    ]
}
```

Diberikan topik Timestream dan kunci partisi (dalam hal ini,`taskResourceId.schemaName.tableName`), berikut ini menggambarkan format rekaman yang dihasilkan menggunakan data sampel kami dalam topik target Timestream: 

```
  {
     "FirstName": "Randy",
     "LastName": "Marsh",
     "StoreId":  "5",
     "HomeAddress": "221B Baker Street",
     "HomePhone": "1234567890",
     "WorkAddress": "31 Spooner Street, Quahog",
     "WorkPhone": "9876543210",
     "DateOfBirth": "02/29/1988"
  }
```

## Batasan saat menggunakan Amazon Timestream sebagai target AWS Database Migration Service
<a name="CHAP_Target.Timestream.Limitations"></a>

Batasan berikut berlaku saat menggunakan Amazon Timestream sebagai target:
+ **Dimensi dan Stempel Waktu:** Timestream menggunakan dimensi dan stempel waktu dalam data sumber seperti kunci primer komposit, dan juga tidak memungkinkan Anda untuk meningkatkan nilai-nilai ini. Ini berarti bahwa jika Anda mengubah stempel waktu atau dimensi untuk catatan dalam database sumber, database Timestream akan mencoba membuat catatan baru. Dengan demikian mungkin bahwa jika Anda mengubah dimensi atau stempel waktu rekaman sedemikian rupa sehingga cocok dengan catatan lain yang ada, maka AWS DMS perbarui nilai catatan lain alih-alih membuat catatan baru atau memperbarui catatan terkait sebelumnya.
+ **Perintah DDL:** Rilis saat ini AWS DMS hanya mendukung `CREATE TABLE` dan perintah `DROP TABLE` DDL.
+ **Batasan Rekam:** Timestream memiliki batasan untuk catatan seperti ukuran rekaman dan ukuran ukuran. Untuk informasi selengkapnya, lihat [Kuota](https://docs.aws.amazon.com/timestream/latest/developerguide/what-is-timestream.html) di [Panduan Developer Amazon Timestream](https://docs.aws.amazon.com/).
+ **Menghapus Catatan dan Nilai Null:** Timestream tidak mendukung penghapusan catatan. Untuk mendukung migrasi catatan yang dihapus dari sumber, AWS DMS menghapus bidang terkait dalam catatan dalam database target Timestream. AWS DMS mengubah nilai di bidang catatan target yang sesuai dengan **0** untuk bidang numerik, **null** untuk bidang teks, dan **false** untuk bidang boolean.
+ Timestream sebagai target tidak mendukung sumber yang bukan database relasional (RDBMS).
+ AWS DMS hanya mendukung Timestream sebagai target di wilayah berikut:
  + Timur AS (N. Virginia)
  + AS Timur (Ohio)
  + AS Barat (Oregon)
  + Europe (Ireland)
  + Europe (Frankfurt)
  + Asia Pasifik (Sydney)
  + Asia Pasifik (Tokyo)
+ Timestream sebagai target tidak mendukung pengaturan `TargetTablePrepMode` ke`TRUNCATE_BEFORE_LOAD`. Kami merekomendasikan penggunaan `DROP_AND_CREATE` untuk pengaturan ini.

# Menggunakan Amazon RDS untuk Db2 dan IBM Db2 LUW sebagai target AWS DMS
<a name="CHAP_Target.DB2"></a>

Anda dapat memigrasikan data ke Amazon RDS untuk Db2 atau database Db2 lokal dari database Db2 LUW menggunakan (). AWS Database Migration Service AWS DMS

Untuk informasi tentang versi Db2 LUW yang AWS DMS mendukung sebagai target, lihat. [Target untuk AWS DMS](CHAP_Introduction.Targets.md)

Anda dapat menggunakan Lapisan Soket Aman (SSL) untuk mengenkripsi sambungan antara titik akhir Db2 LUW dan instans replikasi. Untuk informasi selengkapnya tentang penggunaan SSL dengan titik akhir Db2 LUW, lihat. [Menggunakan SSL dengan AWS Database Migration Service](CHAP_Security.SSL.md)

## Keterbatasan saat menggunakan Db2 LUW sebagai target AWS DMS
<a name="CHAP_Target.DB2.Limitations"></a>

Keterbatasan berikut berlaku saat menggunakan database Db2 LUW sebagai target untuk. AWS DMS Untuk batasan penggunaan Db2 LUW sebagai sumber, lihat. [Keterbatasan saat menggunakan Db2 LUW sebagai sumber untuk AWS DMS](CHAP_Source.DB2.md#CHAP_Source.DB2.Limitations)
+ AWS DMS hanya mendukung Db2 LUW sebagai target ketika sumbernya adalah Db2 LUW atau Db2 untuk z/OS.
+ Menggunakan Db2 LUW sebagai target tidak mendukung replikasi dengan mode LOB penuh.
+ Menggunakan Db2 LUW sebagai target tidak mendukung tipe data XMLdalam fase beban penuh. Ini adalah batasan utilitas IBM dbload. Untuk informasi selengkapnya, lihat [Utilitas dbload dalam dokumentasi](https://www.ibm.com/docs/en/informix-servers/14.10?topic=utilities-dbload-utility) *IBM Informix* Servers.
+ AWS DMS memotong bidang BLOB dengan nilai yang sesuai dengan karakter kutipan ganda (“). Ini adalah batasan utilitas IBM dbload. 
+ AWS DMS tidak mendukung opsi beban penuh paralel saat bermigrasi ke target Db2 LUW di DMS versi 3.5.3. Opsi ini tersedia dari DMS versi 3.5.4 atau yang lebih baru.

## Pengaturan titik akhir saat menggunakan Db2 LUW sebagai target AWS DMS
<a name="CHAP_Target.DB2.ConnectionAttrib"></a>

Anda dapat menggunakan pengaturan titik akhir untuk mengonfigurasi basis data target Db2 LUW Anda mirip dengan menggunakan atribut koneksi tambahan. Anda menentukan pengaturan saat Anda membuat titik akhir target menggunakan AWS DMS konsol, atau dengan menggunakan `create-endpoint` perintah di [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html), dengan sintaks `--ibm-db2-settings '{"EndpointSetting": "value", ...}'` JSON.

Tabel berikut menunjukkan pengaturan endpoint yang dapat Anda gunakan dengan Db2 LUW sebagai target.


| Nama | Deskripsi | 
| --- | --- | 
|  `KeepCsvFiles`  |  Jika benar, AWS DMS menyimpan file.csv apa pun ke target Db2 LUW yang digunakan untuk mereplikasi data. DMS menggunakan file-file ini untuk analisis dan pemecahan masalah..  | 
|  `LoadTimeout`  |  Jumlah waktu (dalam milidetik) sebelum AWS DMS waktu habis operasi yang dilakukan oleh DMS pada target Db2. Nilai defaultnya adalah 1200 (20 menit).  | 
|  `MaxFileSize`  |  Menentukan ukuran maksimum (dalam KB) dari file.csv yang digunakan untuk mentransfer data ke Db2 LUW.  | 
|  `WriteBufferSize`  |  Ukuran (dalam KB) buffer tulis file dalam memori yang digunakan saat membuat file.csv pada disk lokal pada instance replikasi DMS. Nilai defaultnya adalah 1024 (1 MB).  | 