

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

# Menambahkan instans Amazon RDS DB ke lingkungan Java Elastic Beanstalk
<a name="java-rds"></a>

Topik ini memberikan instruksi untuk membuat Amazon RDS menggunakan konsol Elastic Beanstalk. 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 di daftar Wilayah, pilih konsol Elastic](https://console.aws.amazon.com/elasticbeanstalk) Beanstalk.** Wilayah AWS

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

1. Pada panel navigasi, pilih **Konfigurasi**.

1. Di kategori konfigurasi **Basis data**, pilih **Edit**.

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

1. 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 instans 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](using-features.managing.db.md). Untuk petunjuk tentang konfigurasi basis data eksternal untuk digunakan dengan Elastic Beanstalk, lihat [Menggunakan Elastic Beanstalk dengan Amazon RDS](AWSHowTo.RDS.md).

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.

**Topics**
+ [Mengunduh driver JDBC](#java-rds-drivers)
+ [Menghubungkan ke basis data (platform Java SE)](#java-rds-javase)
+ [Menghubungkan ke basis data (platform Tomcat)](#java-rds-tomcat)
+ [Pemecahan masalah koneksi basis data](#create_deploy_Java.rds.troubleshooting)

## Mengunduh driver JDBC
<a name="java-rds-drivers"></a>

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:
+ **MySQL** – [MySQL Connector/J](https://dev.mysql.com/downloads/connector/j/)
+ **Oracle SE-1** – [Oracle JDBC Driver](http://www.oracle.com/technetwork/database/features/jdbc/index-091264.html)
+ **Postgres** – [PostgreSQL JDBC Driver](https://jdbc.postgresql.org/)
+ **SQL Server** – [Microsoft JDBC Driver](https://msdn.microsoft.com/en-us/sqlserver/aa937724.aspx)

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)
<a name="java-rds-javase"></a>

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)
<a name="java-rds-tomcat"></a>

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
<a name="create_deploy_Java.rds.troubleshooting"></a>

**Coba Amazon Q Developer CLI untuk pemecahan masalah yang dibantu AI**  
 Amazon Q Developer CLI dapat membantu Anda memecahkan masalah lingkungan dengan cepat. Q CLI memberikan solusi dengan memeriksa status lingkungan, meninjau peristiwa, menganalisis log, dan mengajukan pertanyaan klarifikasi. Untuk informasi selengkapnya dan penelusuran terperinci, lihat [Memecahkan Masalah Lingkungan Elastic Beanstalk dengan CLI](https://aws.amazon.com/blogs/devops/troubleshooting-elastic-beanstalk-environments-with-amazon-q-developer-cli/) Pengembang Amazon Q di blog. AWS 

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

### Meninjau log
<a name="create_deploy_Java.rds.troubleshooting.logs"></a>

Anda dapat melihat semua log dari lingkungan Elastic Beanstalk Anda dari dalam Eclipse. Jika Anda tidak membuka tampilan AWS Explorer, pilih panah di sebelah AWS ikon oranye di bilah alat, lalu 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
<a name="create_deploy_Java.rds.troubleshooting.connecting"></a>

 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 di daftar Wilayah, pilih konsol Elastic](https://console.aws.amazon.com/elasticbeanstalk) Beanstalk.** Wilayah AWS

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

1. Pada panel navigasi, pilih **Konfigurasi**.

1. Di kategori konfigurasi **Basis data**, pilih **Edit**.

1. Di samping **Titik akhir**, pilih tautan konsol Amazon RDS.

1. 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](https://docs.aws.amazon.com/vpc/latest/userguide/) (Amazon VPC) default.

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

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

1. 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)
```