Topik ini menjelaskan cara menggunakan ekstensi Foreign Data Wrapper (FDW) untuk PostgreSQL guna mengakses database eksternal melalui Internet dari instans ApsaraDB RDS for PostgreSQL.
Informasi latar belakang
Instans ApsaraDB RDS for PostgreSQL dapat mengakses berbagai jenis database eksternal—seperti MySQL, SQL Server, PostgreSQL, dan Redis—menggunakan fitur FDW. Karena instans RDS for PostgreSQL berada di dalam Virtual Private Cloud (VPC), Anda harus mengonfigurasi Internet NAT Gateway dan mengaitkan Elastic IP Address (EIP) agar instans tersebut dapat mengakses layanan database melalui Internet.
Topik ini menjelaskan cara mengaktifkan akses Internet untuk instans RDS for PostgreSQL dengan mengonfigurasi Internet NAT Gateway dan EIP. Anda dapat membuat entri Source Network Address Translation (SNAT) untuk mengizinkan instans RDS for PostgreSQL mengakses Internet. Pendekatan ini juga menjamin keamanan jaringan instans tersebut, karena jaringan eksternal tidak dapat mengakses instans melalui NAT Gateway.
Untuk informasi selengkapnya tentang NAT Gateway dan SNAT, lihat Menggunakan fitur SNAT pada Internet NAT Gateway untuk mengakses Internet.
Prasyarat
Database target tersedia dan dapat diakses melalui Internet, misalnya database MySQL, SQL Server, PostgreSQL, atau Redis yang memiliki alamat IP publik.
Instans RDS for PostgreSQL telah dibuat. Untuk informasi selengkapnya, lihat Membuat instans RDS for PostgreSQL dengan cepat.
PentingInstans RDS for PostgreSQL memerlukan ekstensi tertentu untuk mengakses database target melalui Internet. Pastikan instans Anda mendukung ekstensi yang diperlukan. Untuk informasi selengkapnya mengenai ekstensi yang didukung oleh berbagai versi RDS for PostgreSQL, lihat Daftar ekstensi yang didukung oleh RDS for PostgreSQL.
MySQL: mysql_fdw
SQL Server: tds_fdw
PostgreSQL: postgres_fdw
Redis: redis_fdw
Akun telah dibuat baik untuk database target maupun instans RDS for PostgreSQL.
Untuk membuat akun pada database target, lihat dokumentasi resmi mesin database tersebut.
Untuk membuat akun pada instans RDS for PostgreSQL, lihat Membuat akun.
Database yang berisi data telah dibuat di database target.
Prosedur
Konfigurasikan Gateway NAT Internet
Buat NAT Gateway.
Masuk ke Konsol Gateway NAT.
Di halaman Internet NAT Gateway, klik Create Internet NAT Gateway.
(Opsional) Jika Anda menggunakan NAT Gateway untuk pertama kalinya, pada halaman Internet NAT Gateway, di bagian Service-linked Role Creation, klik Create Service-linked Role. Setelah role dibuat, Anda dapat membuat NAT Gateway.
Pada halaman Create Internet NAT Gateway, atur parameter berikut dan klik Buy Now.
CatatanTabel berikut hanya mencantumkan parameter utama. Untuk informasi selengkapnya mengenai semua parameter, lihat Menggunakan fitur SNAT pada Internet NAT Gateway untuk mengakses Internet.
Konfigurasi
Deskripsi
Region
Pilih wilayah tempat Anda ingin membuat Internet NAT gateway. Wilayah tersebut harus sama dengan wilayah instans RDS for PostgreSQL.
Network And Zone
Pilih VPC dan vSwitch untuk instans Internet NAT gateway. Keduanya harus sama dengan VPC dan vSwitch instans RDS for PostgreSQL.
Anda dapat membuka halaman Database Connection di Konsol RDS untuk melihat VPC instans RDS for PostgreSQL target.
Network Type
Pada topik ini, dipilih Internet NAT Gateway.
EIP
Pada topik ini, dipilih Configure Later.
Pada halaman Confirm, konfirmasi konfigurasi Internet NAT Gateway dan klik Activate Now.
Setelah instans dibuat, Anda dapat melihatnya di halaman Internet NAT Gateway.

Asosiasikan EIP dengan Gateway NAT Internet.
Di Konsol NAT Gateway, temukan instans Internet NAT Gateway yang telah Anda buat dan klik ID instansnya untuk membuka halaman Basic Information.
Pada tab Associated EIP, klik EIP.
Pada kotak dialog Associate EIP, pilih Purchase and Associate EIP.

Klik OK.
Setelah EIP dikaitkan, EIP tersebut akan ditampilkan di bagian Associated EIP.

Buat entri SNAT.
Di Konsol NAT Gateway, temukan instans Internet NAT Gateway yang telah Anda buat dan klik ID instansnya untuk membuka halaman Basic Information.
Pada tab SNAT, klik Create SNAT Entry.
Di halaman Create SNAT Entry, konfigurasikan parameter yang diperlukan dan klik OK.
Konfigurasi
Deskripsi
SNAT Entry
Pilih granularitas untuk entri SNAT. Topik ini menggunakan contoh VSwitch Granularity. Ini berarti instans RDS for PostgreSQL dalam vSwitch tersebut menggunakan alamat IP publik yang dikonfigurasi untuk mengakses Internet.
Select vSwitch
Dari daftar drop-down, pilih vSwitch instans RDS for PostgreSQL.
Select EIP
Pilih alamat IP publik yang menyediakan akses Internet. Topik ini menggunakan contoh alamat IP tunggal. Dari daftar drop-down, pilih EIP yang telah dikaitkan.
Setelah entri dibuat, Anda dapat melihatnya di SNAT Entry List.

Konfigurasi database target
Tambahkan EIP yang dikaitkan dengan Internet NAT Gateway ke daftar putih database target.
MySQL: Lihat Privileges Provided by MySQL
PostgreSQL: Lihat The pg_hba.conf File
SQL Server: Lihat Configure the Windows Firewall to Allow SQL Server Access
Redis: Gunakan firewall untuk membatasi akses IP ke port tertentu. Misalnya, jika Anda menggunakan iptables pada CentOS, jalankan perintah berikut:
iptables -A INPUT -s <EIP_associated_with_the_Internet_NAT_gateway> -p tcp --dport <Redis_port_number> -j ACCEPT
Konfigurasi instans RDS for PostgreSQL
Hubungkan ke instans RDS for PostgreSQL. Untuk informasi selengkapnya, lihat Menghubungkan ke instans PostgreSQL.
Buat ekstensi.
CatatanTopik ini menggunakan contoh database MySQL yang dapat diakses melalui Internet. Pada contoh ini, ekstensi mysql_fdw dibuat.
CREATE EXTENSION mysql_fdw;Buat definisi server untuk database target.
CREATE SERVER <server_name> FOREIGN DATA WRAPPER mysql_fdw OPTIONS ( host '<public_IP_of_the_target_database>', port '<port_of_the_target_database>' );Berikut adalah contoh perintah untuk layanan MySQL yang dapat diakses melalui Internet:
CREATE SERVER mysql_server80 FOREIGN DATA WRAPPER mysql_fdw OPTIONS ( host 'XX.XX.XX.XX', port '3306' );Buat pemetaan pengguna. Ini memetakan definisi server MySQL ke pengguna di instans RDS for PostgreSQL sehingga pengguna tersebut dapat mengakses data di database MySQL target.
CREATE USER MAPPING FOR <RDS_for_PostgreSQL_username> SERVER <created_server_name> OPTIONS ( username '<username_for_the_target_database>', password '<password_for_the_target_database>' );Berikut adalah contoh perintah:
CREATE USER MAPPING FOR pg_client SERVER mysql_server80 OPTIONS ( username 'testuser', password 'U123456!' );Buat tabel asing.
CREATE FOREIGN TABLE <foreign_table_name> ( id int, name varchar(10) ) SERVER <created_server_name> OPTIONS ( dbname '<database_name_of_the_target_database>', table_name '<table_name_of_the_target_database>' );Berikut adalah contoh perintah:
CREATE FOREIGN TABLE mysql_fdw_test ( id int, name varchar(10) ) SERVER mysql_server80 OPTIONS ( dbname 'testdb', table_name 'test' );Uji koneksi.
Setelah konfigurasi selesai, Anda dapat mengakses tabel di database eksternal dari instans RDS for PostgreSQL Anda.
Sebagai contoh, jika Anda membuat tabel eksternal bernama
mysql_fdw_test, Anda dapat langsung melakukan kueri terhadap tabel eksternal tersebut di instans RDS for PostgreSQL untuk mengambil data dari database target.SELECT * FROM mysql_fdw_test;