Menambahkan instans DB Amazon RDS ke lingkungan aplikasi Java Anda - AWS Elastic Beanstalk

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

Menambahkan instans DB Amazon RDS ke lingkungan aplikasi Java Anda

Anda dapat menggunakan instans DB Amazon Relational Database Service (Amazon RDS) untuk menyimpan data yang dikumpulkan dan dimodifikasi oleh aplikasi Anda. Basis data dapat dilampirkan ke lingkungan Anda dan dikelola oleh Elastic Beanstalk, atau dibuat dan dikelola secara eksternal.

Jika Anda menggunakan Amazon RDS untuk pertama kalinya, tambahkan instans DB ke lingkungan uji dengan menggunakan konsol Elastic Beanstalk dan verifikasi apakah aplikasi Anda dapat terhubung ke sana.

Untuk menambahkan instans DB ke lingkungan Anda
  1. Buka konsol Elastic Beanstalk, dan dalam daftar Regions, pilih Anda. Wilayah AWS

  2. Di panel navigasi, pilih Lingkungan, dan kemudian pilih nama lingkungan Anda dari daftar.

    catatan

    Jika Anda memiliki banyak lingkungan, gunakan bilah pencarian untuk memfilter daftar lingkungan.

  3. Di panel navigasi, pilih Konfigurasi.

  4. Di kategori konfigurasi Basis data, pilih Edit.

  5. Pilih mesin DB, dan masukkan nama pengguna dan kata sandi.

  6. Untuk menyimpan perubahan pilih Terapkan di bagian bawah halaman.

Menambahkan instans DB memakan waktu sekitar 10 menit. Ketika pembaruan lingkungan selesai, nama host instans DB dan informasi koneksi lainnya tersedia untuk aplikasi Anda melalui properti lingkungan berikut:

Nama properti Deskripsi Nilai properti

RDS_HOSTNAME

Nama host instans DB.

Di tab Konektivitas & keamanan di konsol Amazon RDS: Titik akhir.

RDS_PORT

Port tempat instance DB menerima koneksi. Nilai default bervariasi di antara mesin DB.

Di tab Konektivitas & keamanan di konsol Amazon RDS: Port.

RDS_DB_NAME

Nama basis data, ebdb.

Di tab Konfigurasi di konsol Amazon RDS: Nama DB.

RDS_USERNAME

Nama pengguna yang Anda konfigurasi untuk basis data Anda.

Di tab Konfigurasi di konsol Amazon RDS: Nama pengguna utama.

RDS_PASSWORD

Kata sandi yang Anda konfigurasi untuk basis data Anda.

Tidak tersedia untuk referensi di konsol Amazon RDS.

Untuk informasi selengkapnya tentang mengonfigurasi instans DB internal, lihat Menambahkan basis data ke lingkungan Elastic Beanstalk Anda. Untuk petunjuk tentang konfigurasi basis data eksternal untuk digunakan dengan Elastic Beanstalk, lihat Menggunakan Elastic Beanstalk dengan Amazon RDS.

Untuk terhubung ke basis data, tambahkan driver file JAR yang sesuai ke aplikasi Anda, muat kelas driver di kode Anda, dan buat objek koneksi dengan properti lingkungan yang disediakan oleh Elastic Beanstalk.

Mengunduh driver JDBC

Anda akan membutuhkan file JAR driver JDBC untuk mesin DB yang Anda pilih. Simpan file JAR di kode sumber Anda dan sertakan ke dalam classpath Anda ketika Anda mengompilasi kelas yang membuat koneksi ke basis data.

Anda dapat menemukan driver terbaru untuk mesin DB Anda di lokasi-lokasi berikut:

Untuk menggunakan driver JDBC, panggil Class.forName() untuk memuatnya sebelum membuat koneksi dengan DriverManager.getConnection() di kode Anda.

JDBC menggunakan string koneksi dengan format berikut:

jdbc:driver://hostname:port/dbName?user=userName&password=password

Anda dapat mengambil hostname, port, nama basis data, nama pengguna, dan kata sandi dari variabel lingkungan yang disediakan Elastic Beanstalk untuk aplikasi Anda. Nama driver khusus untuk tipe basis data dan versi driver Anda. Berikut ini adalah contoh nama driver:

  • mysql untuk MySQL

  • postgresql untuk PostgreSQL

  • oracle:thin untuk Oracle Thin

  • oracle:oci untuk Oracle OCI

  • oracle:oci8 untuk Oracle OCI 8

  • oracle:kprb untuk Oracle KPRB

  • sqlserver untuk SQL Server

Menghubungkan ke basis data (platform Java SE)

Di lingkungan Java SE, gunakan System.getenv() untuk membaca variabel koneksi dari lingkungan. Contoh kode berikut menunjukkan kelas yang membuat koneksi ke basis data PostgreSQL.

private static Connection getRemoteConnection() { if (System.getenv("RDS_HOSTNAME") != null) { try { Class.forName("org.postgresql.Driver"); String dbName = System.getenv("RDS_DB_NAME"); String userName = System.getenv("RDS_USERNAME"); String password = System.getenv("RDS_PASSWORD"); String hostname = System.getenv("RDS_HOSTNAME"); String port = System.getenv("RDS_PORT"); String jdbcUrl = "jdbc:postgresql://" + hostname + ":" + port + "/" + dbName + "?user=" + userName + "&password=" + password; logger.trace("Getting remote connection with connection string from environment variables."); Connection con = DriverManager.getConnection(jdbcUrl); logger.info("Remote connection successful."); return con; } catch (ClassNotFoundException e) { logger.warn(e.toString());} catch (SQLException e) { logger.warn(e.toString());} } return null; }

Menghubungkan ke basis data (platform Tomcat)

Di lingkungan Tomcat, properti lingkungan disediakan sebagai properti sistem yang dapat diakses dengan System.getProperty().

Contoh kode berikut menunjukkan kelas yang membuat koneksi ke basis data PostgreSQL.

private static Connection getRemoteConnection() { if (System.getProperty("RDS_HOSTNAME") != null) { try { Class.forName("org.postgresql.Driver"); String dbName = System.getProperty("RDS_DB_NAME"); String userName = System.getProperty("RDS_USERNAME"); String password = System.getProperty("RDS_PASSWORD"); String hostname = System.getProperty("RDS_HOSTNAME"); String port = System.getProperty("RDS_PORT"); String jdbcUrl = "jdbc:postgresql://" + hostname + ":" + port + "/" + dbName + "?user=" + userName + "&password=" + password; logger.trace("Getting remote connection with connection string from environment variables."); Connection con = DriverManager.getConnection(jdbcUrl); logger.info("Remote connection successful."); return con; } catch (ClassNotFoundException e) { logger.warn(e.toString());} catch (SQLException e) { logger.warn(e.toString());} } return null; }

Jika Anda mengalami kesulitan mendapatkan koneksi atau menjalankan pernyataan SQL, cobalah menempatkan kode berikut di file JSP. Kode ini menghubungkan ke instans DB, membuat tabel, dan menuliskannya.

<%@ page import="java.sql.*" %> <% // Read RDS connection information from the environment String dbName = System.getProperty("RDS_DB_NAME"); String userName = System.getProperty("RDS_USERNAME"); String password = System.getProperty("RDS_PASSWORD"); String hostname = System.getProperty("RDS_HOSTNAME"); String port = System.getProperty("RDS_PORT"); String jdbcUrl = "jdbc:mysql://" + hostname + ":" + port + "/" + dbName + "?user=" + userName + "&password=" + password; // Load the JDBC driver try { System.out.println("Loading driver..."); Class.forName("com.mysql.jdbc.Driver"); System.out.println("Driver loaded!"); } catch (ClassNotFoundException e) { throw new RuntimeException("Cannot find the driver in the classpath!", e); } Connection conn = null; Statement setupStatement = null; Statement readStatement = null; ResultSet resultSet = null; String results = ""; int numresults = 0; String statement = null; try { // Create connection to RDS DB instance conn = DriverManager.getConnection(jdbcUrl); // Create a table and write two rows setupStatement = conn.createStatement(); String createTable = "CREATE TABLE Beanstalk (Resource char(50));"; String insertRow1 = "INSERT INTO Beanstalk (Resource) VALUES ('EC2 Instance');"; String insertRow2 = "INSERT INTO Beanstalk (Resource) VALUES ('RDS Instance');"; setupStatement.addBatch(createTable); setupStatement.addBatch(insertRow1); setupStatement.addBatch(insertRow2); setupStatement.executeBatch(); setupStatement.close(); } catch (SQLException ex) { // Handle any errors System.out.println("SQLException: " + ex.getMessage()); System.out.println("SQLState: " + ex.getSQLState()); System.out.println("VendorError: " + ex.getErrorCode()); } finally { System.out.println("Closing the connection."); if (conn != null) try { conn.close(); } catch (SQLException ignore) {} } try { conn = DriverManager.getConnection(jdbcUrl); readStatement = conn.createStatement(); resultSet = readStatement.executeQuery("SELECT Resource FROM Beanstalk;"); resultSet.first(); results = resultSet.getString("Resource"); resultSet.next(); results += ", " + resultSet.getString("Resource"); resultSet.close(); readStatement.close(); conn.close(); } catch (SQLException ex) { // Handle any errors System.out.println("SQLException: " + ex.getMessage()); System.out.println("SQLState: " + ex.getSQLState()); System.out.println("VendorError: " + ex.getErrorCode()); } finally { System.out.println("Closing the connection."); if (conn != null) try { conn.close(); } catch (SQLException ignore) {} } %>

Untuk menampilkan hasil, tempatkan kode berikut di bodi bagian HTML dari file JSP.

<p>Established connection to RDS. Read first two rows: <%= results %></p>

Pemecahan masalah koneksi basis data

Jika Anda mengalami masalah menghubungkan ke basis data dari dalam aplikasi Anda, tinjau log kontainer web dan basis data.

Meninjau log

Anda dapat melihat semua log dari lingkungan Elastic Beanstalk Anda dari dalam Eclipse. Jika Anda tidak membuka tampilan AWS Explorer, pilih panah di sebelah ikon AWS oranye di toolbar, dan kemudian pilih Tampilkan Tampilan AWS Explorer. Perluas AWS Elastic Beanstalk dan nama lingkungan Anda, dan kemudian buka menu konteks (klik kanan) untuk server. Pilih Buka di WTP Editor Server.

Pilih tab Log tampilan Server untuk melihat log agregat dari lingkungan Anda. Untuk membuka log terbaru, pilih tombol Segarkan di sudut kanan atas halaman.

Gulir ke bawah untuk menemukan log Tomcat di /var/log/tomcat7/catalina.out. Jika Anda memuat halaman web dari contoh kami sebelumnya beberapa kali, Anda mungkin melihat berikut ini.

------------------------------------- /var/log/tomcat7/catalina.out ------------------------------------- INFO: Server startup in 9285 ms Loading driver... Driver loaded! SQLException: Table 'Beanstalk' already exists SQLState: 42S01 VendorError: 1050 Closing the connection. Closing the connection.

Semua informasi yang aplikasi web kirim ke output standar muncul di log kontainer web. Di contoh sebelumnya, aplikasi mencoba untuk membuat tabel setiap kali halaman dimuat. Hal ini menyebabkan penangkapan pengecualian SQL di setiap memuat halaman setelah yang pertama.

Sebagai contoh, sebelumnya dapat diterima. Tetapi, di aplikasi yang sebenarnya, jaga definisi basis data Anda di objek skema, lakukan transaksi dari dalam kelas model, dan koordinasikan permintaan dengan pengendali servlet.

Menghubungkan ke instans DB RDS

Anda dapat terhubung langsung ke instans DB RDS di lingkungan Elastic Beanstalk Anda dengan menggunakan aplikasi klien MySQL.

Pertama, buka grup keamanan untuk instans DB RDS Anda untuk mengizinkan lalu lintas dari komputer Anda.

  1. Buka konsol Elastic Beanstalk, dan dalam daftar Regions, pilih Anda. Wilayah AWS

  2. Di panel navigasi, pilih Lingkungan, dan kemudian pilih nama lingkungan Anda dari daftar.

    catatan

    Jika Anda memiliki banyak lingkungan, gunakan bilah pencarian untuk memfilter daftar lingkungan.

  3. Di panel navigasi, pilih Konfigurasi.

  4. Di kategori konfigurasi Basis data, pilih Edit.

  5. Di samping Titik akhir, pilih tautan konsol Amazon RDS.

  6. Di halaman detail instans Dasbor RDS, di bawah Keamanan dan Jaringan, pilih grup keamanan yang dimulai dengan RDS di samping Grup Keamanan.

    catatan

    Basis data mungkin memiliki beberapa entri berlabel Grup Keamanan. Gunakan yang pertama, yang dimulai dengan awseb, hanya jika Anda memiliki akun lama yang tidak memiliki Amazon Virtual Private Cloud (Amazon VPC) default.

  7. Di Detail grup keamanan, pilih tab Masuk, dan kemudian pilih Edit.

  8. Tambahkan aturan untuk MySQL (port 3306) yang mengizinkan lalu lintas dari alamat IP Anda, ditentukan dalam format CIDR.

  9. Pilih Simpan. Perubahan segera berlaku.

Kembali ke detail konfigurasi Elastic Beanstalk untuk lingkungan Anda dan perhatikan titik akhir. Anda akan menggunakan nama domain untuk terhubung ke instans DB RDS.

Instal klien MySQL dan mulai koneksi ke basis data di port 3306. Di Windows, instal MySQL Workbench dari beranda MySQL dan ikuti petunjuknya.

Di Linux, instal klien MySQL menggunakan manajer paket untuk distribusi Anda. Contoh berikut bekerja di Ubuntu dan turunan Debian lainnya.

// Install MySQL client $ sudo apt-get install mysql-client-5.5 ... // Connect to database $ mysql -h aas839jo2vwhwb.cnubrrfwfka8.us-west-2.rds.amazonaws.com -u username -ppassword ebdb Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 117 Server version: 5.5.40-log Source distribution ...

Setelah Anda terhubung, Anda dapat menjalankan perintah SQL untuk melihat status basis data, apakah tabel dan baris Anda sudah dibuat, dan informasi lainnya.

mysql> SELECT Resource from Beanstalk; +--------------+ | Resource | +--------------+ | EC2 Instance | | RDS Instance | +--------------+ 2 rows in set (0.01 sec)