Untuk menentukan sistem penyimpanan maka diperlukan pertimbangan seperti skalabilitas, persyaratan penyimpanan, tipe dan ukuran objek, serta durability (tingkat ketahanan). Amazon saat ini memberikan dua tipe layanan database, yaitu database relasional dan database non-relasional. Biasanya database yang bersifat relasional digunakan untuk proses transaksi online atau OLTP dan data warehouse atau gudang.
Data relasional akan dihubungkan dengan kunci yang akan memiliki kesamaan nilai antara satu data dan data lain. Dengan adanya kesamaan nilai tersebut maka dapat dilakukan kueri atau pengambilan data melalui kunci. Untuk melakukan hal tersebut dibutuhkan bahasa pemrograman yang disebut SQL atau Structured Query Language. Tipe database relasional memiliki kemampuan skalabilitas secara vertikal.
Jika data relasional berformat tetap, yaitu kumpulan informasi disajikan dalam bentuk baris maka data non-relasional tidak berformat tetap, informasi dapat disajikan dalam bentuk baris maupun kolom. Hal itu karena yang menjadi fokus data non-relasional adalah bagaimana menampilkan data sehingga lebih mudah untuk dibaca secara visual. Data non-relasional biasanya disebut noSQL. Tipe database non-relasional memiliki kemampuan skalabilitas secara horizontal.
Database di AWS menurut performanya terbagi menjadi dua yaitu terkelola atau managed dan tidak terkelola atau unmanaged. Di layanan tidak terkelola sekitar 50% aktivitas database dilakukan oleh AWS dan sisanya oleh user, sedangkan di layanan terkelola hampir 90% aktivitas database dilakukan oleh AWS sehingga user hanya melakukan aktivitas yang memberikan nilai tambah saja. Di antara kegiatan database adalah:
- App optimization
- Scaling
- High availability
- Database backups
- DB s/w patches
- DB s/w installs
- OS patches
- OS installations
- Server maintenance
- Rack and stack
- Power, HVAC, net
Nama fitur dari database relational di AWS adalah Amazon RDS, Amazon Redshift, dan Amazon Aurora, sedangkan database non-relational adalah Amazon DynamoDB, Amazon ElastiCache, Amazon Neptune, dan Amazon DocumentDB. Agar fitur-fitur tersebut dapat diakses tentu database harus diletakkan di cloud, jika saat ini database telah ada dalam bentuk on-premise maka diperlukan migrasi data melalui layanan Amazon DMS atau database migration service. Migrasi database dapat dibagi menjadi dua, yaitu homogen dan heterogen. Untuk database yang berasal dan pergi ke engine yang sama maka cukup menggunakan layanan Amazon DMS, sedangkan untuk yang bersifat heterogen atau database sumber dan tujuan memiliki engine yang berbeda maka diperlukan Amazon SCT atau Schema Conversion Tool baru kemudian menggunakan Amazon DMS.
Langkah membuat arsitektur sederhana:
- EC2
- Buka Amazon EC2 melalui AWS Management Console
- Pilih dan pastikan region telah sesuai rencana
- Cari di panel navigasi Elastic IPs dan pilih
- Klik tombol Allocate Elastic IP Address
- Pilih Amazon's Pool of IPv4 addresses dan klik Allocate
- Elastic IP Address telah berhasil dibuat
- VPC
- Buka Amazon VPC melalui AWS Management Console
- Pastikan telah berada di VPC Dashboard dan klik tombol Launch VPC Wizard
- Pilih VPC with Public and Private Subnet dan klik tombol Select, ikuti konfigurasi:
- IPv4 CIDR block : 10.0.0.0/16
- IPv6 CIDR block : No IPv6 CIDR Block
- VPC name : app-tutorial-vpc
- Public subnet's IPv4 CIDR : 10.0.0.0/24
- Availability Zone : ap-southeast-1a
- Public subnet name : App Tutorial Public
- Private subnet's IPv4 CIDR : 10.0.1.0/24
- Availability Zone : ap-southeast-1a
- Private subnet name : App Tutorial Private 1
- Elastic IP Allocation ID : Elastic IP address yang telah Anda buat sebelumnya untuk diasosiasikan dengan NAT gateway. Klik di dalam box dan pilih IP address yang ditampilkan.
- Service endpoints : Lewati bagian ini
- Enable DNS hostnames : Yes
- Hardware tenancy : Default
- Klik tombol Create VPC dan tunggu hingga selesai lalu klik tombol Ok
- Elastic IP Address dan VPC dengan Subnet publik dan privat telah berhasil dibuat
- Pada panel navigasi pilih Subnets dan klik tombol Create Subnet, ikuti konfigurasi:
- VPC ID : vpc-identifier (app-tutorial-VPC)
- Subnet name : App Tutorial Private 2
- Availability Zone : ap-southeast-1b
- IPv4 CIDR block : 10.0.2.0/24
- Lalu pilih tombol Create Subnet, dan cek di menu Subnet bahwa ada dua private subnet sekarang
- Pada panel navigasi pilih Security Group dan klik tombol Create security group, ikuti konfigurasi:
- Security group name : app-tutorial-securitygroup
- Description : App Tutorial Security Group
- VPC : vpc-identifier (app-tutorial-VPC)
- Dibagian inbound rules, klik Add rule dan ikuti konfigurasi:
- Type : SSH
- Source : 0.0.0.0/0 (semua IP address)
- Klik kembali Add rule di bagian inbound rules dan ikuti konfigurasi:
- Type : HTTP
- Source : 0.0.0.0/0 (semua IP address)
- Lalu klik tombol Create security group di bagian bawah
- Security group untuk web server telah berhasil dibuat
- Untuk membuat DB instance tetap private maka ulangi pembuatan Security Group dengan konfigurasi:
- Security group name : app-tutorial-db-securitygroup
- Description : App Tutorial DB Instance Security Group
- VPC : vpc-identifier (app-tutorial-VPC)
- Dan konfigurasi di inbound rules dengan add rule:
- Type : MySQL/Aurora
- Source : app-tutorial-securitygroup
- Kemudian klik tombol Create security group
- Security group untuk DB instance telah berhasil dibuat
- RDS
- Buka Amazon RDS melalui AWS Management Console
- Perhatikan panel navigasi dan pilih menu Subnet groups lalu klik tombol Create DB Subnet Group
- Di bagian Subnet group details gunakan konfigurasi:
- Name : app-tutorial-db-subnet-group
- Description : Tutorial DB Subnet Group
- VPC : app-tutorial-VPC (vpc-identifier)
- Di bagian Add subnets gunakan konfigurasi:
- Availability Zones : ap-southeast-1a, ap-southeast-1b
- Subnets : 10.0.0.0/24, 10.0.1.0/24, dan 10.0.2.0/24
- Lalu klik tombol Create dan DB Subnet group berhasil dibuat
- Perhatikan panel navigasi dan pilih menu Databases kemudian klik Create databases, ikuti konfigurasi:
- Choose a database creation method : Standard create
- Engine options : MySQL
- Version : MySQL 5.7.16
- Pada bagian Templates pastikan terpilih Free tier, lalu pada bagian setting ikuti konfigurasi:
- DB instance identifier : app-tutorial-db-instance
- Master username : app_user
- Auto generate a password : Matikan opsi ini
- Master password : Isikan password sesuai keinginan Anda
- Confirm password : Ketik ulang password
- Pada bagian DB instance size dan storage biarkan sesuai konfigurasi default
- Lalu pada bagian Connectivity, gunakan konfigurasi:
- Virtual private cloud (VPC) : app-tutorial-VPC (vpc-identifier)
- Subnet group : app-tutorial-db-subnet-group
- Public access : No
- VPC security group : Choose existing
- Existing VPC security groups : app-tutorial-db-securitygroup (Catat! Hapuslah security group yang lain, semisal default dengan klik tombol X)
- Availability Zone : ap-southeast-1b
- Database port : 3306
- Pada bagian Additional configuration isikan Sample di kolom Initial database name
- Scroll hingga bagian bawah dan klik tombol Create database
- DB instance akan terdaftar di halaman database dengan status Creating, tunggu beberapa menit hingga status berubah menjadi Available
- Jika status sudah Available maka klik DB instance tersebut kemudian catat Endpoint dibagian Connectivity & security, karena itu akan digunakan untuk proses lebih lanjut
- EC2
- Masuk kembali ke Amazon EC2 melalui AWS Management Console
- Pastikan telah berada di EC2 Dashboard kemudian klik tombol Launch Instance
- Pilih Amazon Linux 2 AMI lalu klik tombol Select
- Pilih tipe instance t2.micro lalu klik tombol Next: Configure Instance Details dan gunakan konfigurasi:
- Network : vpc-identifier | app-tutorial-VPC
- Subnet : subnet-identifier | App Tutorial Public
- Auto-assign Public IP : Enable
- Klik tombol Next: Add Storage, biarkan konfigurasi secara default lalu klik tombol Next: Add Tags, lalu klik tombol Add another tag dan gunakan konfigurasi:
- Key : Name
- Value : app-tutorial-web-server
- Klik tombol Next: Configure Security Group, pilih Select an existing security group, dan pilih Security Group yang telah dibuat sebelumnya untuk web server dan pastikan security group tersebut memiliki inbound rules untuk akses SSH dan HTTP
- Klik tombol Review and Launch
- Tinjau kembali EC2 Instance yang telah dibuat, jika telah sesuai maka klik tombol Launch
- Setelah itu klik tombol Create a new key pair dan pada kolom Key pair name ketik app-tutorial-key-pair
- Klik tombol Download Key Pair dan simpan di folder yang mudah diingat kemudian klik tombol Launch Instances
- Klik tombol View Instances, tunggu status instance menjadi running, dan EC2 Instance telah berhasil dibuat
- Sekarang akan diinstal Apache Web Server dengan PHP pada Instance tersebut dengan cara pilih instance yang telah dibuat kemudian klik tombol Connect, lalu salin sintaks ssh (biasanya di bagian depannya ssh -i)
- Kemudian buka Command Prompt atau terminal pada komputer, arahkan terminal tersebut ke folder dimana Key Pair sebelumnya telah di download
- Lalu tempelkan salinan sintaks ssh sebelumnya dan tekan tombol Enter
- Jika berhasil akan muncul pertanyaan Are you sure you want to continue connecting (yes/no)?, maka ketik Yes dan tekan tombol enter maka otomatis akan terhubung dengan EC2 Instance
- Sintaks yang dapat digunakan di dalam Command Prompt:
- Perbaikan bug dan pembaruan keamanan: sudo yum update -y
- Instal PHP, packages, dan dependencies: sudo amazon-linux-extras install -y lamp-mariadb10.2-php7.2 php7.2
- Instal Apache web server: sudo yum install -y httpd
- Memulai web server: sudo systemctl start httpd
- Web server sekarang telah terinstal dan berjalan
- Untuk mengecek apakah web server telah berjalan maka dapat kembali ke bagian instances dan cari Public IPv4 DNS kemudian copy-paste di browser, jika server telah berjalan maka akan muncul halaman Apache
- Sintaks tambahan untuk pengaturan melalui Command Prompt:
- Web server tetap berjalan setiap system boot: sudo systemctl enable httpd
- Untuk mengijinkan ec2-user mengelola file di direktori root default untuk Apache web server maka perlu dimodifikasi ownership dan permission terhadap direktori /var/www dengan perintah:
- sudo groupadd www
- sudo usermod -a -G www ec2-user
- exit
- Login kembali melalui Command Prompt atau terminal dengan mengarahkan ke folder download key pair kemudian salin sintaks ssh
- Jika telah berhasil login maka periksa kembali apakah group www telah tersedia atau belum dengan sintaks: groups
- Jika telah tersedia maka outputnya adalah : [ec2-user@ip-10-0-0-129 ~]$ groups ec2-user adm wheel systemd-journal www
- Ubah group ownership pada direktori /var/www dan konten di dalamnya ke gurp www dengan sintaks: sudo chgrp -R www /var/www
- Ubah permission dan sub direktorinya untuk menambahkan write permission pada grup sekaligus menyetel ID group pada subdirektori yang dibuat di masa mendatang, kemudian ubah permission secara berulang untuk file yang ada di /var/www dan subdirektorinya guna menambahkan write permission pada grup dengan sintaks:
- sudo chmod 2775 /var/www
- find /var/www -type d -exec sudo chmod 2775 {} +
- find /var/www -type f -exec sudo chmod 0664 {} +
- Permission untuk Apache web server telah selesai
- Hubungkan Apache web server ke DB instance
- Pertama kembali ke direktori /var/www dan buat folder inc dengan sintaks:
- cd /var/www
- mkdir inc
- Masuk ke folder inc kemudian buat file dbinfo.inc dan edit file tersebut dengan sintaks:
- cd inc
- >dbinfo.inc
- nano dbinfo.inc
- Copy-paste kode di bawah dan ubah db_instance_endpoint dan master password sesuai yang telah dimiliki, untuk keluar dari editing tekan tombol CTRL+X lalu tekan Y, kemudian enter,
- <?php
- define('DB_SERVER', 'db_instance_endpoint');
- define('DB_USERNAME', 'app_user');
- define('DB_PASSWORD', 'master password');
- define('DB_DATABASE', 'sample');
- ?>
- Masuk ke direktori /var/www/html kemudian buat file baru dengan nama SamplePage.php dengan sintaks:
- cd /var/www/html
- >SamplePage.php
- nano SamplePage.php
- Copy-paste kode di bawah setelahnya untuk menyimpan tekan CTRL + X dan untuk keluar tekan Y lalu enter,
- <?php include "../inc/dbinfo.inc"; ?>
- <html>
- <body>
- <h1>Sample page</h1>
- <?php
- /* Connect to MySQL and select the database. */
- $connection = mysqli_connect(DB_SERVER, DB_USERNAME, DB_PASSWORD);
- if (mysqli_connect_errno()) echo "Failed to connect to MySQL: " . mysqli_connect_error();
- $database = mysqli_select_db($connection, DB_DATABASE);
- /* Ensure that the EMPLOYEES table exists. */
- VerifyEmployeesTable($connection, DB_DATABASE);
- /* If input fields are populated, add a row to the EMPLOYEES table. */
- $employee_name = htmlentities($_POST['NAME']);
- $employee_address = htmlentities($_POST['ADDRESS']);
- if (strlen($employee_name) || strlen($employee_address)) {
- AddEmployee($connection, $employee_name, $employee_address);
- }
- ?>
- <!-- Input form -->
- <form action="<?PHP echo $_SERVER['SCRIPT_NAME'] ?>" method="POST">
- <table border="0">
- <tr>
- <td>NAME</td>
- <td>ADDRESS</td>
- </tr>
- <tr>
- <td>
- <input type="text" name="NAME" maxlength="45" size="30" />
- </td>
- <td>
- <input type="text" name="ADDRESS" maxlength="90" size="60" />
- </td>
- <td>
- <input type="submit" value="Add Data" />
- </td>
- </tr>
- </table>
- </form>
- <!-- Display table data. -->
- <table border="1" cellpadding="2" cellspacing="2">
- <tr>
- <td>ID</td>
- <td>NAME</td>
- <td>ADDRESS</td>
- </tr>
- <?php
- $result = mysqli_query($connection, "SELECT * FROM EMPLOYEES");
- while($query_data = mysqli_fetch_row($result)) {
- echo "<tr>";
- echo "<td>",$query_data[0], "</td>",
- "<td>",$query_data[1], "</td>",
- "<td>",$query_data[2], "</td>";
- echo "</tr>";
- }
- ?>
- </table>
- <!-- Clean up. -->
- <?php
- mysqli_free_result($result);
- mysqli_close($connection);
- ?>
- </body>
- </html>
- <?php
- /* Add an employee to the table. */
- function AddEmployee($connection, $name, $address) {
- $n = mysqli_real_escape_string($connection, $name);
- $a = mysqli_real_escape_string($connection, $address);
- $query = "INSERT INTO EMPLOYEES (NAME, ADDRESS) VALUES ('$n', '$a');";
- if(!mysqli_query($connection, $query)) echo("<p>Error adding employee data.</p>");
- }
- /* Check whether the table exists and, if not, create it. */
- function VerifyEmployeesTable($connection, $dbName) {
- if(!TableExists("EMPLOYEES", $connection, $dbName))
- {
- $query = "CREATE TABLE EMPLOYEES (
- ID int(11) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
- NAME VARCHAR(45),
- ADDRESS VARCHAR(90)
- )";
- if(!mysqli_query($connection, $query)) echo("<p>Error creating table.</p>");
- }
- }
- /* Check for the existence of a table. */
- function TableExists($tableName, $connection, $dbName) {
- $t = mysqli_real_escape_string($connection, $tableName);
- $d = mysqli_real_escape_string($connection, $dbName);
- $checktable = mysqli_query($connection,
- "SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_NAME = '$t' AND TABLE_SCHEMA = '$d'");
- if(mysqli_num_rows($checktable) > 0) return true;
- return false;
- }
- ?>
- Untuk melakukan pengujian buka kembali Public IPv4 Address dari EC2 Instance di browser namun dengan tambahan /SamplePage.php
- Jika pengujian telah berhasil maka arsitektur sederhana telah terbuat di cloud
Arsitektur sederhana tersebut dibuat di luar jangkauan AWS Free Tier sehingga untuk menghindari biaya yang berlebihan setelah berhasil membuatnya diperlukan clean up dengan urutan:
- Delete RDS database instance.
- Delete RDS database subnet groups (pastikan database instance telah terhapus).
- Terminate EC2 instance.
- Delete NAT gateway.
- Release Elastic IP addresses.
- Delete VPC.
Sampai di tahap ini telah dicoba fitur dari AWS yaitu Elastic Cloud Compute, Virtual Private Cloud, dan Rerational Database Service.
ref:

Komentar