-->
I'm joko purnomo./Cybersecurity Specialist/

I'm joko purnomo./Cybersecurity Specialist/

Hi! My name is Joko Purnomo. I am a Cybersecurity Specialist. I work to design, improve, and install for integrated system (people, material, information, equipment, and energy). Skilled in Cybereason, Group IB, IBM QRadar, and Wazuh to specify, predict, and evaluate optimal system build.

Kunjungi profil

ABOUT ME

Resume

Personal info

Personal info

2

years of experience

3

completed projects

4

Happy customers

1

awards won


My Skills

88%
html
90%
JavaScript
98%
CSS3
68%
React
71%
Java
80%
EDR
75%
SIEM
71%
Ethical Hacking

Certification & Education

  • EC-Council Certified Incident Handler
    2025 - 2028
    EC-Council Certified Incident Handler

    Plan, Record, Triage, Notify, and Contain.

  • Digital Forensics Essentials (DFE) v1
    2023 - 2026
    Digital Forensics Essentials (DFE) v1

    Essential Practices, Principles, and Methodologies.

  • AWS Solution Architect - Associate
    2023 - 2026
    AWS Solution Architect - Associate

    Operational Excellence, Security, Reliability, Performance Efficiency, Cost Optimization, Sustainability.

  • Enigma Camp
    2024
    Enigma Camp

    Java Programming

  • Purwadhika Digital Technology School
    2021
    Purwadhika Digital Technology School

    Fullstack Web Development

  • Institut Teknologi Indonesia
    2013 - 2017
    Institut Teknologi Indonesia

    Industrial Engineering

my portfolio

Works

get in touch

Contact

Contact Details

Feel free to get in touch with us. we always open to discussing new projects, creative ideas or opportunities to be part of your visions.

my products

Product

Cari Blog Ini

Amazon Web Service

Amazon Web Service atau AWS adalah sebuah layanan server. Server tersebut adalah Amazon Elastic Compute Cloud (EC2), untuk mempersingkat dapat kita sebut sebagai instance. Konsep utama di dalam AWS adalah pay for what you use atau bayar untuk apa yang kamu gunakan. Jadi seluruh data akan terpusat di instance tersebut. Dengan kata lain instance adalah sebuah server virtual. Instance akan di jalankan di mesin host, namun akan ada beberapa instance yang menggunakan mesin host. Beberapa instance yang berbagi mesin host disebut virtual machine. Yang bertanggung jawab terhadap pembagian mesin host untuk instance adalah hypervisor. Hypervisor juga bertanggung jawab untuk mengisolasi setiap instance sehingga sebuah instance tidak mengetahui instance lain meskipun berada dalam satu mesin host. Dengan demikian hypervisor memungkinkan satu perangkat keras server terbagi menjadi banyak server dan tidak perlu lagi menyiapkan server baru selama masih tersedia.

Sumber: https://pixabay.com/id/photos/lapangan-tanah-awan-langit-horison-533541/

Setiap perusahaan dengan manajemen baik pasti memiliki data center. Di sana terdapat berbagai data penting bagi perusahaan misalnya data karyawan dan data produk. Namun tujuan dari AWS bukan untuk menyimpan data yang bersifat internal. Instance ditujukan untuk menyimpan data bahwa perusahaan dapat memberikan supply. Prinsipnya menjadi pay for what yout need atau bayar untuk apa yang kamu butuhkan. Cloud computing memungkinkan untuk implementasi dari scalability, elasticity, availability (ketersediaan untuk digunakan), high availability (membuat failover), resilience (kemampuan mengani kegagalan serta memitigasinya), reliability (berjalan secara konsisten dan benar), fault tolerance (membuat arsitektur loosely coupled), backup-restore, dan snapshot. Yang dimaksud scalability adalah kemampuan aplikasi untuk mengakomodasi pertumbuhan tanpa merubah desain sedangkan elasticity adalah sumber daya yang mudah untuk ditambah atau dikurangi dengan biaya sesuai pemakaian. Perlu dibedakan juga antara backup dan snapshot. Backup adalah kegiatan menyalin seluruh data sehingga jika datanya 2 Gb maka file backup juga bernilai 2Gb, sedangkan snapshot lebih bersifat versioning yaitu menangani terjadinya perubahan terakhir yang tidak dinginkan. Snapshot mampu bekerja pada tingkat blok, sedangkan backup biasanya hanya mampu bekerja pada tingkat objek.

Cloud Computing

Penggunaan istilah cloud yang berarti awan merepresentasikan bahwa seluruh data kita itu tersedia dimana saja, mengambang, dan tersedia setiap saat. Sebelum adanya komputasi cloud, perusahaan akan membuat data center sendiri. Penerapannya ada tiga, yaitu:

  1. Cloud-based Deployment {cloud}
  2. On-premises Deployment {data center}
  3. Hybrid Deployment {data center berhubungan dengan cloud}

Empat keuntungan utama dalam menggunakan komputasi cloud adalah: merubah face cost menjadi variable cost, mengurangi variable cost, mendunia, dan hemat waktu sehingga dapat dialokasikan ke kegiatan lain.

Konsep dalam membangun infrastruktur di AWS adalah high availability dan fault tolerance. Makna dari high availability adalah kepastian sistem dapat selalu bekerja dan diakses dengan waktu henti yang minimal, sedangkan makna dari fault tolerance adalah sistem tetap dapat berjalan walaupun beberapa komponen mengalami kegagalan. Dengan 2 konsep itu dibangunlah AWS Regions. Infrastruktur di AWS terbagi atas region, availability zones, edge locations, dan regional edge caches. Region adalah kumpulan dari minimal 2 availability zone yang merupakan data center secara fisik. Edge location juga merupakan data center namun bukan digunakan untuk menempatkan aplikasi melainkan digunakan oleh beberapa layanan AWS seperti Amazon CloudFront. Sedangkan infrastruktur regional edge caches terletak di antara server asal data dan edge locations.

Regions dibangun di seluruh dunia. Jika basis pelanggan berada di kota A misalnya maka tentu untuk mendapatkan kecepatan yang baik harus memilih lokasi region yang terdekat. Namun tidak menutup kemungkinan pemilihan region di lokasi yang lebih jauh dengan alasan biaya. Sehingga sedikitnya ada empat faktor bisnis yang menentukan pemilihan suatu region, yaitu:

  • Compliance (kepatuhan), ini terkait regulasi di tempat tertentu
  • Proximity (kedekatan), tentu saja alasannya adalak kecepatan
  • Feature Availability (ketersediaan fitur), adakalanya sebuah region tidak memiliki fitur AWS tertentu
  • Pricing (harga), biasanya terkait pajak di suatu region

Infrastruktur antar-regions dibangun berjarak puluhan mil, hal tersebut bertujuan jika terjadi bencana skala besar maka data tetap tersedia dan proses bisnis tetap dapat berjalan. Jarak yang jauh tersebut juga mempertimbangkan latensi atau waktu proses pengambilan atau pengiriman data. Dengan demikian saran terbaik adalah mengambil dua regions.

AWS Cloud Adoption Framework

Teknologi cloud tidak murah sehingga cara mengadopsi penting dipertimbangkan. Ada 6 perspektif untuk mempertimbangkannya. Dari keenam perspektif tersebut terbagi menjadi 2, yaitu sisi bisnis dan sisi teknis. Pada sisi bisnis ada bisnis itu sendiri, orang yang mengerjakan, dan pemerintah dimana bisnis tersebut akan dijalankan. Sedangkan pada sisi teknis ada platform, keamanan, dan operasi. Semua perspektif tersebut perlu dipertimbangkan secara matang agar tidak keliru dalam mengadopsi teknologi awan atau cloud technology.

AWS Well Architected Framework

Berbeda dengan CAF yang memiliki 6 perspektif di WAF ada 5 pillar yang dipertimbangkan, yaitu operational excellence (mengirim nilai dari bisnis ke pelanggan), security (memantau dan melindungi sistem), reliability (kemampuan memperbaiki kegagalan dan memitigasi terjadinya bencana), performance efficiency (menggunakan sumber daya sesuai kebutuhan), dan cost optimization (mengeliminasi sumber daya yang sebetulnya tidak dibutuhkan).

AWS Identity and Access Management

Layanan yang memungkinkan pengaturan autentikasi tersentralisasi dan akses ke sumber daya aws. IAM bisa membuat users, group, dan roles. Kebijakan atau policies dapat di terapkan ke users tersebut. Akses sumber daya dapat dilakukan melalui AWS Command Line Interface dan AWS Managemen Console. Ada 2 hal dalam permission, yaitu credentials dan IAM. Tingkat paling tinggi adalah credentials, artinya jika IAM permission tidak memperbolehkan sesuatu padahal credentials-nya memperbolehkan otomatis yang digunakan adalah permission dari credentials. Di AWS ada 5 tipe credentials, yaitu email address-password, IAM username-password, access keys, multi-factor authentication, dan key pairs. Perhatikan contoh pembuatan policies dan permission dengan JSON:

  • {
  •        "version": "2012-10-17",
  •        "Statement": [
  •               {
  •                         "sid": "MFA-Access",
  •                         "Effect": "Allow",
  •                         "Action": "ec2:*",
  •                         "Resource": "*",
  •                         "Condition":  {
  •                                  "BoolIfExists": {
  •                                          "aws:MultiFactorAuthPresent": "true"
  •                                  },
  •                                  "IpAddress": {
  •                                          "aws:SourceIp": "1.2.3.4/32"
  •                                  }
  •                         }
  •               }
  •        ]
  • }
Permission di dalam IAM dapat ditinjau dari 2 dasar, yaitu berdasarkan user dan berdasarkan resource. Praktek terbaik dalam menggunakan IAM adalah hindari user root untuk adminstrasi harian, gunakan prinsip least privillege, gunakan IAM roles untuk akses cross account, dan gunakan MFA.

AWS Command Line Interface

Ada 3 jalan untuk mengakses sumber daya AWS, yaitu melalui AWS Management Console, AWS Command Line Interface, dan Software Development Kits. Jika menggunakan AWS Management Console maka user akan menggunakan GUI atau graphical user interface. Sayangnya menggunakan AWS Management Console memungkinkan lupa pada tahap tertentu, namun kelebihannya lebih user friendly. Berbeda dengan CLI yang cara berkomunikasinya menggunakan command, tentu saja tidak setiap orang nyaman menggunakannya. Praktek terbaik dalam menggunakan sumber daya AWS adalah CLI. Caranya masuk terlebih dahulu ke EC2 instance kemudian instal di dalam EC2 instance tersebut. Gunakan command:

  • $ pip3 install awscli --upgrade --user
  • $ aws --version
  • $ aws-cli/1.16.137 Python/3.7.3 Linux/4.14.77-81.59-amzn2.x86_64 botocore/1.12.127
  • $ aws configure
  • AWS Access Key ID [None]: masukkan kunci akses
  • AWS Secret Access Key [None]: masukkan kunci akses rahasia
  • Default region name [None]: contohnya us-west-2
  • Default output format [None]: json atau yaml
Cara menginstall AWS CLI mungkin bisa berubah, bisa langsung di periksa pada dokumentasinya.

AWS Systems Manager

AWS Systems Manager adalah layanan manajemen yang membantu untuk mengoleksi software inventory, memasukkan patches sistem operasi, membuat system image, dan konfigurasi sistem operasi windows maupun linux.

Simple Storage Service (S3)

Data disimpan dalam bentuk objek di dalam bucket yang merupakan tempat penyimpanan yang hampir tanpa batas. Melalui internet data yang ada di S3 dapat diakses dimanapun dan kapanpun dengan syarat nama bucketnya harus unik. Ada 6 tipe S3 dengan peruntukkannya masing-masing, yaitu:

  • Amazon S3 Standard : low latency
  • Amazon S3 Intelligent-Tiering : automatically moving data to the most cost effective
  • Amazon S3 Standard-Infrequent Access (Standard-IA) : less frequently but requires rapid access when needed
  • Amazon S3 One Zone-Infrequent Access (One Zone-IA) : less frequently but requires rapid access when needed
  • Amazon S3 Glacier : low cost for data archiving
  • Amazon S3 Glacier Deep Archive : lowest-cost storage
Amazon S3 melakukan pembayaran secara GB per bulan yang disimpan. Transfer ke region lain juga berbayar. Selain itu request seperti PUT, COPY, POST, LIST, dan GET juga berbayar. Nah, yang tidak berbayar di Amazon S3 adalah saat ada data yang masuk dan data yang keluar namun ke Amazon CloudFront atau Amazon EC2 di dalam region yang sama.

EC2 Instance

Elastic Compute Cloud instance merupakan kode program yang berjalan sebagai mesin virtual di atas komputer host yang berloksi di dalam AWS availability zone. Setiap mesin virtual berjalan dengan sistem operasi seperti linux dan windows. Beberapa EC2 instance menggunakan instance store yang dikenal sebagai ephemeral storage. Data tersimpan di dalam EC2 instance sepanjang waktu running-nya, saat reboot maka data di dalam instance disimpan secara persists, sedangkan ketika instance stops atau terminates maka data yang ada di dalam instance hilang dan tidak bisa dipulihkan. Banyak EC2 instance menggunakan Amazon Elastic Block Store untuk booting. Jadi Amazon EBS menjadi tempat penyimpanan yang persists untuk menghindari data yang hilang ketika EC2 instance stopped. Ada 5 tipe jenis instance, yaitu:

  • General purpose (AT, M)
    • Untuk mendapatkan keseimbangan antara sumber daya compute, memory, dan jaringan.
  • Compute optimized (C, H)
    • Untuk yang membutuhkan performa yang tinggi dari prosesor seperti scientific modeling, gaming server, dan machine learning.
  • Memory optimized (R, X, H, Z)
    • Untuk yang membutuhkan performa yang cepat untuk memproses data set yang besar.
  • Accelerated computing (P, D, T, I, G, F, V)
    • Untuk yang membutuhkan akselerasi yang halus seperti memproses grafik atau data pattern matching.
  • Storage optimized (I, D, H)
    • Untuk yang membutuhkan performa yang cepat untuk memproses data set yang sangat besar.
Untuk dapat meluncurkan sebuah EC2 instance diperlukan AMI atau Amazon Machine Image. AMI mengandung informasi volume instance, permission, hingga block device mappings. Instance di simpan di dalam subnet. Subnet ada 2 jenis, yaitu public subnet dan private subnet. Untuk dapat mengakses private subnet maka diperlukan NAT Gateway, namun untuk menjalankan NAT Gateway diperlukan Elastic IP atau IP static. Nah, agar subnet dapat mengakses internet maka diperlukan internet gateway atau IGW. Subnet berada di dalam availability zone dan availability zone ada di dalam VPC, kemudian VPC berada di dalam region. Dari banyak region ini terbentuk global AWS.

Untuk menjaga EC2 instance dari akses pihak-pihak yang tidak bertanggung jawab maka diperlukan firewall pada level instance yaitu security group. SG bersifat statefull artinya secara default tidak akan ada yang bisa mengakses EC2 instance selama tidak diijinkan oleh SG. Di dalam SG ada outbound dan inbound rules. Seperti namanya, outbound rule artinya aturan data EC2 instance dapat diakses oleh pihak luar, sedangkan inbound rule artinya aturan data EC2 instance yang mengijinkan data masuk ke dalam EC2 instance. Praktek terbaik dalam menerapkan instance adalah jangan pernah menyimpan permanen access keys di dalam EC2 instances karena kredensial mungkin bisa dikompromikan. Di akhir sebelum meluncurkan instance ada yang disebut user data yang merupakan script yang berjalan ketika instance di luncurkan. User data berupa linux script atau powershell script. Perhatikan user data di bawah:

  • Linux Shell script : untuk menjalankan file index.html di direktori /var/www/html menggunakan apache server httpd
    • #!/bin/bash
    • yum update -y
    • yum ugrade -y

    • yum install httpd -y
    • systemctl start httpd
    • systemctl enable httpd
    • chown ec2-user
    • /var/www/html
  • Batch file
    • <script>
    • winrm quickconfig -q

    • winrm set winrm/config/winrs
    • @{MaxMemoryPerShellMB="300"}

    • winrm set winrm/config
    • @{MaxTimeoutms="1800000"}
    • </script>

Perlu diingat bahwa EC2 instance memiliki metadata. Setiap instance menyediakan metadata dengan IP address 169.254.129.254. Untuk dapat mengakses EC2 instance secara remode bisa melalui SSH untuk linux atau RDP untuk windows. Perlu diketahui sebelum mengaksesnya diperlukan key pair. EC2 instance di launce melalui AWS Management Console, namun dapat juga menggunakan AWS CLI, perhatikan command untuk launch EC2 instance di bawah:

  • aws ec2 run-instances
  • --image-id ami-0123456789012345
  • --instance-type t2.micro
  • --key-name mykeypair
  • --security-group-ids sg-0123456789012345
  • --subnet-id subnet-0123456789012345
  • --iam-instance-profile Name=EC2Admin
  • --user-data file://UserData.txt
  • --tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=WebServer}]'

AWS Elastic Beanstalk

Layanan yang memudahkan untuk deploying dan scaling aplikasi web. Cukup dengan mengupload kode dan AWS Elastic Beanstalk akan menangani deployment termasuk provisioning, load balancing, automatic scaling, dan pemantauan kesehatan aplikasi. AWS Elastic Beanstalk termasuk dalam kategori platform as a service atau PaaS. Walaupun ditangani oleh AWS Elastic Beanstalk namun dalam pengendalian sumber daya tetap menjadi kontrol dari pengguna, seperti instance type, database, EC2 auto scaling, update apps, server log files, dan load balancer.

Elastic Load Balancing

Secara otomatis mendistribusikan incoming application traffic ke berbagai target seperti Amazon elastic compute cloud instance, containers, dan IP address. Sebuah load balancer bekerja seperti direktur lalu lintas yang duduk di depan server dan melakukan routing terhadap request dari client. Fitur utama dari ELB adalah high availability, health checks, security, transport layer security (TLS) termination, layer4 or layer 7 load balancing, dan operational monitoring. Sedangkan menurut tipenya da 3 tipe dari ELB, yaitu application load balancer (HTTP/HTTPS), network load balancer (TCP), dan classic load balancer. 

Amazon EC2 Autoscaling

Secara otomatis melakukan launching atau terminating Amazon Elastic Compute Cloud berdasarkan status kesehatan, kebijakan yang diatur user dalam Amazon CloudWatch, penjadwalan, atau dengan pemrograman tertentu. Amazon EC2 Autoscaling melakukan scale out untuk menangani demand dan melakukan scale in untuk mengurangi biaya. Kebijakan termination di Amazon EC2 Autoscaling ada 4, yaitu:

  • Oldestinstance : memilih instance yang telah berjalan paling lama
  • Newesrinstance : memilih instance yang telah berjalan paling singkat
  • OldestLaunchConfiguration : melakukan terminates pada instance dengan konfigurasi terlama
  • ClosestToNestInstanceHour : melakukan terminates pada instance yang keluar dari billing hour
Salah satu fitur penting di Amazon EC2 Autoscaling adalah steady-state group yang memungkinkan pengaturan sebuah Amazon EC2 Autoscaling group dengan minimum atau maksimum atau nilai yang diinginkan. Instance otomatis dibuat kembali saat ada ketidaksehatan atau kegagalan dalam AZ, namun tetap berpotensi terjadi downtime ketika instance mengalami daur ulang. Cara membuat steady-state group untuk sebuah instance, yaitu pertama buat konfigurasi yang membuat instance, kedua buat sebuah Amazon EC2 Auto Scaling group dengan minimum, maximum, dan nilai ukuran 1, dan Amazon EC2 Auto Scaling akan terminate instance saat ini dan membuat sebuah instance baru dari group konfigurasi.

Jika hendak melakukan konfigurasi auto scaling group dengan dasar sebuah pnejadwalan maka pertama buat sebuah scheduled action yang menceritakan Amazon EC2 Auto Scaling melakukan performansi aksi scaling (out or in) pada waktu yang spesifik, kemudian atur minimum, maximum, dan ukuran untuk aksi scaling. Skala otomatis bisa dikonfigurasi menjadi dinamik. Tentu saja jika ada penskalaan dengan cara penjadwalan maka ada juga penskalaan dengan cara prediktif. Maksudnya adalah adanya forecasting traffic di masa yang akan datang dengan dasar data sebelumnya.

Amazon Route 53

Amazon Route 53 adalah domain name system yang terskalakan. Selain itu Amazon Route 53 memungkinkan untuk mengatur traffic secara global melalui variasi tipe routing. Amazon Route 53 mendukung 7 kebijakan routing, yaitu

  1. Simple routing policy : sumber daya tersendiri yang melakukan performansi dengan fungsi untuk domain
  2. Weighted routing policy : menggunakan rute traffic untuk sumber daya banyak di dalam proporsi yang yang dispesifikasikan
  3. Latency routing policy : digunakan ketika memiliki banyak sumber daya di dalam banyak region AWS dan ingin merute traffic ke region yang menyediakan latensi terendah
  4. Failover routing policy : digunakan ketika ingin mengkonfigurasi kegagalan aktif dan pasif
  5. Geolocation routing policy (DNS query location) : digunakan ketika ingin merute traffic berdasarkan lokasi dari pengguna
  6. Geproximity routing policy (traffic flow to AWS region or latitude and longitude) : digunakan ketika ingin merute traffic berdasarkan sumber daya
  7. Multivalue answer routing policy : digunakan ketika ingin route 53 merespon kueri DNS
Amazon Route 53 bekerja di Elastic Load Balancer. Untuk mengurangi atau mereduksi risiko dari site atau aplikasi yang menjadi tidak tersedia karena menjalankan 2 lingkungan produksi yang sama maka digunakan blue/green deployment.

Amazon CloudFront

Content Delivery Network atau CDN memungkinkan diterapkan dengan Amazon CloudFront. CDN merupakan layanan penjamin keamanan pengiriman data, video, aplikasi, dan APIs untuk dilihat dengan latensi yang rendah dan kecepatan transfer yang tinggi. Untuk mengirim konten ke pengguna, Amazon CloudFront menggunakan jaringan global dari edge location. Dengan menggunakan CloudFront bisa digunakan banyak lokasi di seluruh dunia. CDN memungkinkan pengguna berinteraksi ke aplikasi dengan latensi yang lebih rendah. Amazon CloudFront memberikan nilai latensi yang lebih rendah, kecepatan transfer data yang tinggi, serta memungkinkan bekerja dengan sumber daya AWS lain. Dalam menggunakan Amazon CloudFront untuk membuat cost menjadi lebih efektif perlu diperhatikan hal seperti distribusi traffic yaitu dimana lokasi edge, tipe request HTTP atau HTTPS, dan jumlah transfer data keluar. Lokasi untuk menyimpan salinan data agar lebih cepat diakses pelanggan dilakukan oleh Amazon CloudFront di Edge Locations. Edge Locations tersebut terpisah dari regions. Selain berfungsi sebagai tempat untuk menyimpan data, Edge Locations juga berfungsi sebagai layanan domain name system (DNS).

AWS Lambda

Perlu dibedakan antara tradisional deployment dan serverless deployment. Pada tradisional deployment setidaknya perlu dilakukan penyediaan instance, update OS, install platform aplikasi, bangun dan deploy aplikasi, konfigurasi automatic scaling-load balancer, melakukan patch-secure-monitor, dan memantau aplikasi.Sedangkan pada serverless deployment cukup melakukan bangun-deploy aplikasi dan memonitor-merawat aplikasi. Nah, layanan serverless disediakan oleh AWS Lambda. Fungsi Lambda dapat dibuat hampir untuk setiap tipe aplikasi atau backend. Secara ringkas upload kode ke AWS Lambda, kemudian atur kode di Lambda Function untuk mendapatkan trigger dari layanan AWS lain seperti HTTP endpoints atau aktivitas di dalam aplikasi, dengan sederhana AWS Lambda akan menjalankan kode ketiga ada trigger, dan bayar sesuai waktu compute yang digunakan.

sumber: aws.amazon.com

Contohnya adalah saat pengguna menangkap gambar, kemudian gambar di simpan di dalam S3 bucket, kemudian lambda function mendapat trigger dan memanggil Amazon Rekognition, dan Amazon Rekognition mengambil gambar dari Amazon S3 untuk mengembalikan label yang akan digunakan pada properti terdeteksi. 

Amazon API Gateway

API membuat perangkat lunak komputer mungkin diakses oleh developer melalui kode sehingga bisa dibangun program perangkat lunak. API bekerja sebagai perantara yang memungkinkan aplikasi saling berkomunikasi. Panggilan API adalah pesan yang dikirim ke server lain sebagai request dan kemudian mengembalikan sebuah respon ke requester. Nah, beberapa API mengikuti prinsip  Representational State Transfer (REST), kemudian REST ini berkomunikasi melalui HTTP. Web dengan basis API mengikuti rancangan prinsip REST dan biasanya disebut RESTful dan memiliki standar SOAP atau Simple Object Access Protocol. Ada 6 prinsip dalam RESTful, yaitu:

  1. A uniform interface : client menggunakan interface yang sederhana dan seragam untuk mengakses server
  2. Stateless : server tidak melacak koneksi request apa dari client yang membuat over time
  3. Client-server architecture : client tidak mengetahui state dari server dan server tidak mengetahui state dari client
  4. Cacheable : REST client sebaiknya bisa melakukan cache response yang diterima dari REST server
  5. Layered system : RESTful mendukung sistem layer dimana client membutuhkan komunikasi ke server perantara
  6. Code on demand : server bisa melewati kode yang mungkin berjalan ke client seperti JavaScript
Komponen dari REST requests adalah endpoint (URL), method (GET, POST, PUT, DELETE), header, dan data (body). Client URL atau cURL adalah command yang populer digunakan untuk mendapatkan atau mengirim file melalui HTTP(S). Ada 5 kode status dari HTTP, yaitu 100 (informational response), 200 (success), 300 (redirection), 400 (client errors), dan 500 (server errors).

Amazon API Gateway merupakan sebuah layanan AWS yang memungkinkan developer untuk membuat, mempublikasikan, merawat, memantau, dan mengamankan application programming interfaces (APIs) di setiap skala. Amazon API Gateway bisa menjalankan APIs tanpa server sehingga sangat memungkinkan bekerjasama dengan AWS Lambda. Biasanya Amazon API Gateway dikombinasikan dengan Amazon DynamoDB, Amazon EC2, dan Amazon VPC.

Container on AWS

Masalah seperti kebutuhan meng-update operating system dan environment yang dibutuhkan untuk menjalankan perangkat lunak adalah menjadi masalah yang umum dan berulang terjadi. Container merupakan sebuah method dari sistem operasi yang tervirtualisasi. Aplikasi dan dependencies bisa berjalan di dalam sumber daya proses yang terisolasi. Keuntungan menggunakan container adalah kendali versi, produktivitas developer, efisiensi operasi, dan konsistensi environment. Aplikasi yang digunakan untuk membuat, mengatur, dan menjalankan container adalah Docker. Pada container, kode berjalan di atas Docker sedangkan Docker berada di atas sistem operasi. Karena Docker berjalan di atas sistem operasi, sedangkan sistem operasi di cloud berada di EC2 instance maka dengan kata lain Docker berjalan di atas EC2 instance.

Docker di AWS ada 2, yaitu Amazon Elastic Container Registry (Amazon ECR) dan Amazon Elastic Container Service (Amazon ECS). Amazon ECR adalah fully managed Docker container registry. Dengan menggunakan Amazon ECR dimudahkan bagi developer untuk menyimpan, mengatur, dan menyebarkan Docker container images. Amazon ECR terintegrasi dengan Amazon ECS. Amazon ECR yang mendukung Docker Registry HTTP API versi 2 ini menyimpan container image di Amazon S3 sehingga memiliki high availability dan durability. Amazon ECS adalah manajemen container dengan skalabilitas dan performansi tinggi. Amazon ECS diluncurkan di virtual private cloud atau VPC sehingga memungkinkan digunakan security group dan network access control list atau ACLs.

Kubernetes adalah perangkat lunak sumber terbuka untuk manajemen dan orkestrasi container. Kubernetes digunakan untuk mengatur cluster dari EC2 instance dan menjalankan container yang ada di atas instance. Kubernetes bekerja dengan mengatur sebuah cluster dari instance. Kubernetes berjalan berdasarkan ketersediaan sumber daya. Cara kerjanya dengan menjalankan logika grouping yang disebut pods. Dengan pods dimungkinkan menjalankan dan menskalakan banyak container secara bersama-sama. Pods ini yang secara otomatis dijalankan oleh kubernetes di dalam cluster berdasarkan sumber daya yang dibutuhkan.

Amazon Elastic Kubernetes Service atau Amazon EKS memberikan pengelolaan terhadap Kubernetes yang berkaitan infrastruktur dengan banyak AZ. Sayangnya Amazon EKS masih menjalankan Kubernetes dengan menggunakan server. Namun, tenang ada Amazon Fargate yang memungkinkan menjalankan container tanpa mengatur servers. Amazon Fargate adalah teknologi untu Amazon ECS agar container bekerja secara serverless. Dengan Amazon Fargate secara otomatis Amazon ECS dapat diskalakan, ada load balancer, dan diatur penjadwalan untuk ketersediaan container. Dalam hal ini yang diatur oleh Amazon Fargate adalah penempatan engine, pengaturan cluster, Amazon ECS agent, Docker agent, dan Amazon ECS AMI. Dengan demikian Amazon ECS ada 2 model, yaitu diluncurkan dengan EC2 instance dan diluncurkan melalui AWS Fargate.

AWS Step Functions

AWS Step Functions memungkinkan koordinasi layanan AWS ke alur kerja serverless. Contohnya antara AWS Lambda dan Amazon ECS untuk membuat fitur aplikasi yang kaya. Dengan AWS Step Functions akan didapatkan nilai produktivitas lebih baik, agility atau kemampuan mendiagnosa masalah lebih cepat, dan sistem yang lebih tangguh karena mendukung otomatis penanganan error. Di dalam step function ada yang disebut states dan state transitions. Biasanya state machine sederhana dibuat dengan command sederhana di JavaScript Object Notation atau JSON. 

Amazon Redshift

Amazon Redshift adalah pengaturan penuh untuk data berskala petabyte sebagai warehouse data atau gudang data di cloud. Kesetaraannya adalah 1 petabyte sama dengan 1000 terabyte (TB), sedangkan 1 terabyte sama dengan 1000 gigabyte (GB). Yang dimaksud gudang data adalah repositori terpusat dari informasi yang bisa dianalisis untuk membuat keputusan. Dalam bisnis ada 3 kombinasi data yang disimpan dan dianalisis, yaitu database, data lake, dan data warehouse. Database ada 2 tipe yaitu SQL dan not only SQL, sedangkan data lake adalah setiap data baik yang terstruktur maupun yang tidak terstruktur di setiap skala.

Analisis merupakan hal penting bagi bisnis, tetapi untuk membangun sebuah gudang data sangat kompleks dan mahal. Banyak gudang data yang membutuhkan waktu bulanan untuk mengaturnya serta membutuhkan perangkat lunak dan perangkat keras yang mahal. Solusi dari gudang data adalah Amazon Redshift. Ada 3 fitur utama dari Amazon Redshift, yaitu tidak perlu repot mengatur gudang data, mendukung enkripsi, dan memiliki kompatibilitas yang cukup. Metode yang digunakan Amazon Redshift adalah parallel processing dimana 2 atau lebih mikroprosesor secara simultan mengambil program dan menjalankannya. Yang dimaksud mikroprosesor adalah central processing unit atau otak dari komputer. Cara kerja dari Amazon Redshift melalui leader nodes yang mengatur komunikasi dengan client programs dan semua komunikasi melalui compute nodes. Isi dari compute nodes adalah virtual core, ram, dan local disk.

Amazon Aurora

Amazon Aurora adalah pengaturan penuh atas engine dari relational database yang kompatibel dengan MySQL dan PostgreSQL. Amazon Aurora merupakan bagian dari Amazon Relational Database Service atau Amazon RDS. Amazon Aurora memiliki kecepatan lebih dari 5 kali kecepatan standar MySQL database. Ketika Amazon Aurora instance dibuat maka secara otomatis database (DB) cluster juga terbuat. Ada 2 tipe DB instance di Amazon Aurora, yaitu primary DB instance dan Aurora instance. Primary DB instance mendukung operasi read dan write, sedangkan aurora replica hanya mendukung operasi read. Dalam sebuah primary instance bisa terdapat lebih dari 15 Aurora replica. Banyaknya replica untuk mendistribusikan beban kerja read. Tidak seperti database yang lain, jika database mengalami crash maka Amazon Aurora tidak butuh melakukan redo log dari database checkpoint terakhir. Teknik ini mengurangi waktu restart setelah database mengalami crash kurang dari 60 detik dikebanyakan kasus.

AWS Database Migration Service (DMS)

Migrasi databases ke Amazon Web Service dengan cepat dan aman dapat dilakukan melalui AWS DMS. Layanan ini mendukung migrasi homogen dan heterogen. Contohnya migrasi dari Amazon S3 sebagai noSQL bisa ke Amazon RDS sebagai SQL.

Amazon VPC

Biasanya dalam membangun sumber daya computing diperlukan private IP address. Di Amazon Web Service, sebuah virtual private cloud menyediakan jaringan private yang memungkinkan definisi jariang virtual di dalam area terisolasi. Amazon VPC dapat dianalogikan sebagai data center yang didalamnya ada server hingga databases. Sebuah VPC menjangkau lebih dari satu AZ, dan memiliki komponen kunci yaitu subnet, security group, primary network interface, router, internet gateway, virtual private gateway, dan customer gateway. Jadi ketika membuat sebuah VPC maka harus didefinisikan rintang IP address, subnets, dan route tables.

Praktek terbaik dalam menentukan IP address adalah menggunakan non-overlapping rintang IP address serta batasi VPCs dengan RFC1918 untuk meminimalisir issues di routing. Format yang digunakan untuk menspesifikasikan IP address adalah CIDR atau Classless Inter-Domain Routing yang berbentuk x.x.x.x/n dimana x.x.x.x adalah sebuah IP address dengan tipe IPv4 32 bit, sedangkan /n menspesifikasikan panjang dalam bit dari prefix network. Nilai n bisa antara 0 - 32. Di dalam VPC nilai n dibatasi antara 16 atau 28. Rentang yang lebih besar ada pada nilai n terkecil yaitu 16. Di AWS sendiri ada 5 IP address yang disimpan dan tidak bisa digunakan oleh user, yaitu 10.0.0.0, 10.0.0.1, 10.0.0.2, 10.0.0.3, dan 10.0.0.255. Perhatikan karakteristik dari VPC:

  • VPC bisa menjangkau banyak AZ di sebuah AWS Region
  • VPC memiliki router implisit yang melakukan routing semua traffic
  • VPC memiliki default route table yang menspesifikasikan route yang diijinkan keluar VPC
Subnet digunakan untuk segmen yang lebih jauh dari VPC, yaitu rentang address dan group logika untuk sumber daya. Di VPC dapat dibuat lebih dari 200 subnets per VPC. Perhatikan karakteristik subnet:
  • Subnet hanya ada di dalam 1 availability zone
  • Rentang address mengikuti CIDR block
  • Subnet CIDR block dalam satu VPC tidak boleh tumpang tindih
  • Lalu lintas antarsubnet mengalir melalui router implisit
Setelah subnet terbuat maka cuaca dapat dispesifikasikan dalam sebuah EC2 instance baru yang secara otomatis mendapatkan public IP address. Setiap VPC datang dengan router implisit yang secara langsung mengatur lalu lintas antarsumber daya di dalam setiap subnet dan di luar subnet. Sebuah route table adalah mekanisme yang digunakan untuk merouting lalu lintas dari sebuah subnet terasosiasi di dalam sebuah VPC. Ketika VPC terbuat maka secara default route table juga terbuat. Di dalam route table terdapat aturan melakukan routing untuk lalu lintas lokl dengan rentang IP address tertentu dari VPC. Ketika subnet dibuat maka secara otomatis akan terasosiasi dengan default route table dari VPC. Namun, jika default route table tidak ingin digunakan maka bisa dibuat custom route table dan mengasosiasikan dengan subnet.

Setiap VPC mungkin juga memiliki sebuah internet gateway yang ditempelkan sehingga memungkinkan lalu lintas ke internet. Ketika sebuah internet gateway ditempelkan ke sebuah VPC mungkin route table dari public subnet digunakan untuk meneruskan lalu lintas ke internet.

Sebuah elastic network interface atau NIC adalah sebuah virtual network interface yang menempel pada EC2 instance. Dengan NIC akan memberikan kemungkinan untuk EC2 instance berkomunikasi dengan jaringan. Setiap NIC memiliki 1 primer IP address, di tambah secondary IP address. Itu juga termasuk mecia access control atau MAC address dan security group. Perlu dicatat bahwa NIC yang tertempel di sebuah EC2 instance tidak bisa dilepas. Namun, bisa dibuat dan ditempelkan tambah NIC ke sebuah instance. Jumlah NIC yang bisa ditambahkan bergantung tipe dari instance. Penggunaan banyak NIC biasanya untuk keperluan penggunaan jaringan dan keamanan di VPC serta membuat sebuah manajemen hanya network interface.

Ketika AWS account dibuat maka AWS secara otomatis akan membuat default VPC dengan CIDR block dengan 172.31.0.0/16. VPC tersebut menyediakan lebih dari 65.536 alamat private dengan rentang 172.31.0.0 - 172.31.255.255. Selain itu AWS juga secara otomatis membuat komponen di dalam default VPC, yaitu sebuah internet gateway, route table, dan public subnet di setiap AZ.

Amazon EBS

Penyimpanan atau storage di AWS ada 3 kategori, yaitu instance store (ephemeral storage), Amazon EBS, dan Amazon Simple Storage Service (Amazon S3). Sedangkan level storage ada 2, yaitu block (cukup blok yang ingin dibuah tanpa mengubah keseluruhan) dan object (jka ingin mengganti satu blok maka harus mengupdate seluruh block). Nah, seperti namanya Amazon EBS memiliki level block. Setiap EBS secara otomatis melakukan replikasi di AZ-nya. Manfaat EBS adalah bisa digunakan sebagai back up dari instance ke dalam Amazon Machine Image yang kemudian disimpan dalam Amazon S3.

Sistem pembayaran Amazon EBS ada 3, yaitu general purpose (SSD), mangetic, dan provisioned IOPS (SSD). Jika general purpose digunakan maka sistem pembayaran yang dilakukan dalam GB setiap bulan, sedangkan magnetik membayar sesuai banyaknya request, dan provisioned IOPS dengan persentase per hari atau perbulan digunakan. Sedangkan tipenya ada 2, yaitu solid state drives (SSD) dan har disk drives (HDD). 

Amazon Elastic File System (EFS)

Amazon EFS merupakan layanan sederhana, terskalakan, dan pengaturan penuh untuk NFS storage. Network file system (NFS) memungkinkan penyimpanan dan pengambilan data di jaringan. Amazon EFS mampu melakukan penskalaan hingga petabyte dengan latensi file system yang rendah. Amazon EFS berada dalam scope region atau pada level region. Nah, untuk mengakses file system maka perlu dibuat mount targets di dalam VPC. Setiap mount target mengikuti properti:

  • ID mount target
  • Subnet ID dimana akan dibuat
  • File system ID dibuat untuk
  • Sebuah IP address dimana file system bisa dipasangkan
  • Mount target state
Di mount command bisa digunakan IP address atau domain name system (DNS).

Amazon Glacier

Amazon Glacier merupakan layanan storage S3 dengan keamanan yang baik, ketahanan, dan biaya yang amat rendah. Biasanya digunakan untuk backup dalam jangka panjang. Pengambilan data dari Amazon Glacier ada 3 opsi, yaitu expedited (1-5 menit), standard (3-5 jam), dan bulk (5-12 jam). Sebuah vault merupakan koleksi dari beberapa arsip.

Amazon Storage Gateway

Storage dapat dilakukan dengan cara hybrid yaitu menghubungkan antara AWS cloud storage dan on-premise, penghubungnya adalah Amazon Storage Gateway. Standar protokol yang digunakan adalah network file system (NFS), server message block (SMB), dan internal small computer interface (iSCSi).

Amazon Lightsail

Mirip dengan Amazon Elastic Beanstalk yang memudahkan dalam proses deployement web application atau website, hanya saja di Beanstalk dikembangkan dengan Java, .NET, PHP, Node.js, Python, Ruby, Go, dan Docker dengan server seperti Apache, Nginx, Passenger, dan IIS, sedangkan Amazon Lightsail dikembangkan dengan WordPress, Plesk, LAMP, Node.js dan lainnya. Keduanya sama-sama mengakomodasi teknologi Node.js.

AWS Snowcone, Snowball, Snowmobile

Ketiga layanan ini adalah untuk memindahkan data dari on-premise ke cloud tanpa melalui jaringan internet. Satu Snowcone mampu membawa data lebih dari 8 TB, sedangkan satu Snowball mampu membawa data hingga 80 TB, dan satu Snowmobile mampu membawa data 100 PB.

AWS DataSync

Melakukan akselerasi secara aman untuk memindahkan data antara on-premise dan AWS storage dengan metode sinkronus. Duplikasi data dapat dilakukan dengan Network File System (NFS), Server Message Block (SMB), dan Hadoop Distributed File Systems (HDFS).

Amazon Simple Queue Service (SQS) dan Amazon Simple Notification Service (SNS)

Secara penuh diatur oleh AWS untuk antrian pesan yang memungkinkan arsitektur loosely coupled serta penskalaan microservices. Sedangkan SNS digunakan untuk berkomunikasi antaraplikasi atau application-to-application (A2A) dan application-to-person (A2P). Melalui pembuatan topik dan subscribe dimungkinkan untuk mengirim email notifikasi. Selain itu SNS juga mendukung SMS ke lebih dari 200 negara.

Amazon Transcribe

Layanan yang memungkinkan mengubah secara otomatis rekognisi suara kemudian mengubah audio menjadi text. Melalui Amazon Transcribe API, bisa dilakukan analisis file audio, bahkan secara live audio streaming dapat dikirim ke Amazon Transcribe dan melakukan pengubahan audio menjadi text dalam kondisi real-time.

Amazon Polly

Sebaliknya dengan Amazon Transcribe, Amazon Polly memungkinkan perubahan text ke audio sehingga bisa membuat applikasi berbicara. Layanan ini akan membantu aplikasi dapat bekerja dibanyak negara yang berbeda.

Amazon Kendra

Layanan yang memungkinkan pencarian dengan tingkat akurasi yang tinggi karena didukung dengan machine learning (ML). Dengan Amazon Kendra maka developers memberikan kemampuan aplikasi untuk melakukan pencarian kepada end users. Ketika pertanyaan diajukan maka algoritma machine learning akan memahami konteks dan mengembalikan hasil yang paling relevan.

Amazon Neptune

Kecepatan dan dapat diandalkan untuk membuat grafik dari database. Biasanya digunakan untuk grafik sosial dan pembaruan targeting, personalization, dan analisis.

Amazon Inspector

Otomatis memberikan penilaian keamanan sehingga membantu perbaikan keamanan dari aplikasi yang dideploy di AWS. Penilain dilakukan untuk melihat exposure, vulnerabilities, dan deviasi dari praktek terbaik. Hasil temuan akan dilihat secara detail dengan prioritas level.

AWS CloudTrail

Melakukan monitor dan merekam aktivitas akun di infrastruktur AWS. Dengan AWS CloudTrail dapat diketahui siapa melakukan apa, siapa melakukan dimana, dan siapa melakukan kapan. Misalnya saja melalui AWS CloudTrail dapat mengetahui siapa yang menghapus bucket.

AWS CloudHSM

Kalau AWS Key Management Service atau KMS merupakan layanan untuk membuat enkripsi maka AWS CloudHSM digunakan untuk mengatur atau me-manage enkripsi. HSM merupakan kependekan dari Hardware Security Module. Di belakang HSM ada instance yang berjalan.

AWS Organization

Pengaturan tersentralisasi dan pemerintahan lingkungan atau environment sejauh perkembangan dan penskalaan sumber daya AWS. Selain itu keunggulan dari AWS Organization adalah massive economy of scale atau penggunaan single billing yang memungkinkan harga lebih murah.

AWS Budgets

Mirip dengan AWS CloudWatch bedanya AWS Budgets melakukan monitor untuk pembayaran. Dengan bantuan SNS dimungkinkan membuat alert jika terjadi kelebihan biaya berdasarkan forcast sebelumnya.

AWS Cloud Development Kit

Perangkat lunak terbuka yang merupakan framework untuk menentukan sumber daya yang dibutuhkan sebuah aplikasi yang akan dikembangkan dengan bahasa pemrograman tertentu.

AWS CodeStar

Memungkinkan untuk melakukan develop, build, dan deploy aplikasi secara cepat di AWS. Keunggulannya adalah peralatan untuk CD atau continuous delivery dapat tersedia dalam hitungan menit sehingga kode dapat di release secara lebih cepat.

AWS Software Developer Kit

Sekumpulan alat dan program yang digunakan untuk developer membuat aplikasi spesifik platform yang bekerja bersama dengan Amazon S3, Amazon EC2, DynamoDB, dan yang lainnya.

Amazon SES

Simple Email Service menerapkan prinsip cost-effective, flexible, dan scalable untuk mengirim email ke setiap aplikasi. Konfigurasi secara cepat dapat dilakukan untuk mengirim email transaksi atau marketing atau email secara masal untuk berkomunikasi.

Amazon Kinesis

Layanan terkelola secara penuh untuk menjalankan aplikasi secara streaming. Keunggulannya adalah real-time data seperti video, audio, log aplikasi, bahkan hingga IoT. Selain itu Amazon Kinesis juga dapat memanfaatkan video yang streaming tadi untuk direkognisi wajah sehingga dapat memungkinkan proteksi lebih baik.

Amazon Athena

Seperti diketahui sebelumnya bahwa S3 merupakan storage level object. Namun, di Amazon level storage dapat dilakukan query dengan standar SQL. Dengan Athena tidak lagi diperlukan pekerjaan ETL atau extract, transformation, load. Biasanya Amazon Athena digunakan untuk query CloudWatch Log.

Amazon Elastic MapReduce (EMR)

EMR digunakan untuk big data sebagai dasar pembuatan machine learning yang menggunakan perangkat lunak terbuka seperti Apache Spark, Apache Hive, dan Presto. EMR juga memungkinkan tranformasi database keluar dan kedalam S3 dan DynamoDB.

Amazon Macie

Pengelolaan secara penuh data keamanan dan data privasi dengan menggunakan machine learning serta pola yang sesuai. Dengan Macie data yang bersifat sensitif dapat disimpan dengan baik walaupun terjadi penskalaan.

Amazon MemoryDB

Layanan untuk Redis atau remote dictionary server yang menimpan data key-value, sumber terbuka, dan dalam memori yang cepat. Latensi yang mencapai mikro detik memungkinkan untuk membangun arsitektur mikroservis dari online gaming dan streaming.

Amazon ElastiCache

Mendukung fleksibilitas caching in-memory serta untuk kasus real-time. ElastiCache bisa digunakan untuk caching agar akselerasi dari aplikasi menjadi lebih baik dan performansi dari database juga meningkat. ElastiCache bekerja dengan 2 in-memory caching engine, yaitu Redis dan Memcached.

AWS Security Hub

Memberikan tinjauan secara komprehensif dari keamanan di AWS serta kepatuhan terhadap standar keamanan dan praktek terbaiknya. Security Hub memungkinkan secara tersentralisasi terhadap temuan keamanan dari jaringan berbagai sumber daya yang digunakan di AWS.

AWS Service Health Dashboard

Publikasi informasi dalam hitungan menit ke menit ke dashboard. Subscribe bisa dilakukan ke sebuah RSS feed atau really simple syndication untuk menotifikasi interupsi ke setiap layanan individual.

AWS Personal Health Dashboard

Tinjauan personal mengenai status kesehatan dari layanan AWS yang menjadi kekuatan aplikasi dapat dilihat di Personal Health Dashboard. Informasi yang dihasilkan tentunya lebih spesifik dibandingkan AWS Service Health Dashboard, misalnya menerima events lost dari Amazon Elastic Block Store yang berasosiasi dengan EC2 instance.

AWS OpsWorks

Merupakan manajemen konfigurasi untuk instance dengan Chef dan Puppet. Dengan menggunakan Chef dan Puppet konfigurasi server dapat dilakukan secara otomatis.

AWS Trusted Advisor

Memberikan rekomendasi tentang praktek terbaik untuk menerapkan cloud computing di AWS. Evaluasi dilakukan dengan pemeriksaan security, performance, reduce cost, dan monitor service quotas.

AWS atau Amazon Web Service berspesialisasi di cloud computing yang menyediakan IaaS, PaaS, dan SaaS. Secara sederhana itu berarti ada 3 model cloud computing, yaitu infrastructure as a service, platform as a service, dan software as a service. Ada 4 kategori dalam persiapan infrastruktur teknologi informasi, yaitu security, networking, servers, dan storage-database. Perhatikan perbedaan terminologi antara on-premise dan AWS cloud:

  1. Security
    • firewalls >< security group
    • ACLs >< network ACL
    • administrator >< IAM
  2. Networking
    • data center >< amazon VPC
    • router >< route tables
    • switches >< subnets
    • modem >< internet gateway
    • NAT gateway : untuk menghubungkan private subnets
  3. Servers
    • on-premise servers >< AMI, instances
  4. Storage and database
    • direct-attached storage >< amazon EBS
    • storage area network >< amazon EFS
    • network-attached storage >< amazon S3
    • relational database management system >< amazon RDS

Di AWS ada 25 kategori layanan mulai dari analytics, blockchain, compute, hingga storage dan AR & VR. Untuk membangun infrastruktur di cloud secara sederhana ada 4 layanan yang diperlukan, yaitu networking, compute, database, dan storage. Networking pada AWS disebut VPC atau virtual private cloud. VPC secara analog mirip dengan istilah data center di on-premise. Yang dimaksud compute di AWS adalah EC2 instance atau elastic compute cloud. EC2 instance secara analog mirip dengan istilah server di on-premise. Pembeda antara database dan storage adalah engine. Database menggunakan engine sedangkan storage tidak. Database dibedakan menjadi 2, yaitu relational dan not only relational. Di AWS database relasional bisa didapatkan melalui Amazon RDS sedangkan database not only relational bisa didapatkan melalui Amazon DynamoDB. Layanan storage di AWS diakses melaui Amazon S3 atau simple storage service.

Teknologi cloud dibuat untuk alasan efisiensi, namun jika penggunaan teknologi cloud tidak tepat justru akan berdapak sebaliknya, yaitu boros biaya. Menurut coach Reza bahwa sebuah perusahaan itu memiliki sektor pengeluaran terbesar kedua yaitu teknologi informasi, sektor pengeluaran terbesar pertama adalah marketing. Di AWS ada 3 dasar perhitungan biaya, yaitu compute, storage, dan data transfer. Biaya compute dilakukan per jam atau per detik yang dibulatkan ke atas, sedangkan biaya storage dilakukan per GB dan bukan per Gb. Pada data transfer, setiap data yang masuk ke sumber daya AWS tidak dihitung biaya, namun begitu ada data yang keluar maka akan dihitung biaya. Sama seperti di storage data transfer dihitung per GB.

AWS menekankan pay for what you use atau bayar hanya pada apa yang digunakan. Jadi hati-hati dalam menggunakan sumber daya AWS, walaupun tidak setiap penggunaan sumber daya yang ada di AWS berbayar misalnya pembuatan VPC, Elastic Beanstalk, Auto Scaling, CloudFormation, dan IAM tidaklah berbayar. Untuk mendapatkan biaya yang lebih rendah ada 3 kategori, yaitu lakukan pembayaran di awal, hindari penggunaan eceran, dan berikan optimization ke AWS untuk dapat mempermurah pembayaran. Sebelum mengadopsi teknologi cloud lakukan perhitungan biaya dengan TCO atau total cost of ownership untuk membandingkan beban antara on-permise dan cloud. Perhatikan:

  1. Server costs
    • Hardware: server, rack chassis, power distribution units, top-of-rack switches (maintenance)
    • Software: OS, virtualization licenses (maintenance)
    • Facilities: space, power, cooling
  2. Storage costs
    • Hardware: storage disk, storage area network, fiber channel switches
    • Storage administration costs
    • Facilities: space, power, cooling
  3. Network costs
    • Hardware: local area network switches, load balancer bandwidth
    • Network administration costs
    • Facilities: space, power, cooling
  4. IT Labor costs
    • Server administration costs
Infrastruktur utama dari AWS adalah regions dan availability zone. Saat ini sudah ada sedikitnya 24 region di seluruh belahan dunia. Nah, setiap region ini terdiri atas minimal 1 availability zone. Kemudian availability zone ini saling beririsan dengan VPC. Internet protocol address digunakan dalam VPC, kalkulasi dapat dilakukan di jodies.de/ipcalc


ref:
https://aws.amazon.com/
albert-suwandhi

Energi dari Data Engineer

Menurut Head of Presales Dell Technologies Indonesia, Fitra Suryanto, hanya 12% dari organisasi yang mereka survey secara global mengerti dan mendapatkan insight dari data. Dewasa ini sering kali beberap orang mengatakan bahwa data is the new oil atau dengan kata lain data akan menjadi energi baru. Bahkan, beberapa orang menganggap data akan lebih mahal dibandingkan oil itu sendiri. Hal tersebut terjadi karena setiap organisasi pasti akan membuat keputusan dalam menjalankan roda bisnisnya, sedangkan keputusan itu perlu didukung oleh data yang akurat dan tepat.

Dalam dunia data ada istilah GIGO atau garbage in garbage out artinya jika data yang dimasukkan keliru maka keputusan yang dikeluarkan juga akan keliru. Oleh sebab itu untuk memastikan sebuah keputusan telah benar perlu dipastikan terlebih dahulu bahwa data yang diterima juga benar. Pada posisi ini orang yang bertugas menyediakan data menjadi vital. Secara sederhana tugas tersebut diemban oleh seorang data engineer. Ada 2 fundamental yang perlu dikuasai seorang data engineer, yaitu python dan SQL. Setelah fundamental keduanya dikuasai maka selanjutnya perlu untuk bisa menerapkannya pada data quality, data manipulation, dan data cleansing.

Ada 10 hal yang menjadi dasar dalam bahasa pemrograman Python, yaitu tipe data, aritmatika, comparison, logical, assignment, conditional, looping, data structure, function, dan class. Selebihnya merupakan penggunaan dari fitur yang telah ada di Python. Sedangkan di SQL ada 5 hal dasar yang perlu dikuasai, yaitu select, function, group by, inner join, dan union. Secara fundamental memang terlihat sederhana, yaitu hanya ada 15 hal yang perlu diketahui, namun jika dikombinasikan dalam hal yang sifatnya detail maka bisa ada ratusan kombinasi. Oleh sebab itu diperlukan kecerdikan untuk menggunakan tools yang ada di Python dan SQL. Output dari data engineer ada 3, yaitu:

  1. Data Lake : data yang masih sesuai aslinya (belum ada manipulasi)
  2. Data Warehouse : kumpulan seluruh data yang telah dimanipulasi
  3. Data Marts : salah satu bagian dalam data warehouse untuk lini bisnis tertentu

Ketiga data tersebut akan dianalisa oleh data analyst kemudian machine learning engineer membuat mesin pembelajaran agar dapat mencegah fraud yang pernah terjadi misalnya. Nah, orang yang bisa melakukan tugas data engineer, data analyst, dan machine learning maka layak disebut sebagai data scientist. Jadi kerja seorang data engineer adalah mengumpulkan data dari berbagai sumber sedemikian sehingga data tersebut ditempatkan di data warehouse dan siap digunakan oleh data scientist. Dengan demikian ada 3 pertanyaan bagi seorang yang hendak menjadi data engineer, yaitu:

  1. Bagaimana cara mendapatkan data, misalnya dari twitter?
  2. Bagaimana cara memuat data sehingga dapat dibaca? (import)
  3. Bagaimana cara memeriksa kualitas data yang telah didapatkan (apakah data tersebut memiliki impact terhadap bisnis)?
  4. Bagaimana cara melakukan manipulasi dari data (agar lebih mudah dibaca)?
  5. Bagaimana cara melakukan pembersihan data (baik missing value maupun outlier)?
  6. Bagaimana cara menyimpan data yang telah berhasil diolah? (export)
  7. Setelah data siap akan disimpan di mana? (on premise atau cloud)

Sumber: https://ilmudatapy.com/import-dan-export-data-di-python/

Cara Crawling

Untuk mengetahui apa yang sedang banyak diperbincangkan maka bisa digunakan twint untuk menarik kata kunci dari twitter. Gunakan python versi 3.8.5 dan install git bash. Buka git bash dan gunkan syntax di bawah:

  • $ pip install pipenv
  • $ pipenv --python 3.9
  • $ pipenv shell
  • $ pipenv install git+https://github.com/twintproject/twint.git#egg=twint

Setelah berhasil diinstall untuk melakukan crawling sebelumnya buka kembali git bash dan gunakan syntax:

  • $ pipenv shell
  • $ twint -u jokourno

Kemudian perhatikan git bash menuju ke folder mana, sebab folder tersebut yang akan dijadikan tempat penyimpanan dari data hasil crawling. Gunakan syntax di bawah untuk mendapatkan data:

  • $ twint -s "sambo" -o sambo.csv --limit 30 --since 2022-08-01 --until 2022-09-24 --csv

Keterangan dari command di atas adalah:

  • -s : mencari (search)
  • "sambo" : kata kunci yang dicari
  • -o : akan disimpan
  • sambo.csv : dengan nama file sambo
  • --limit 30 : cari sebanyak 30 data saja
  • --since 2022-08-01 : sejak tanggal 1 Agustus 2022
  • --until 2022-09-24 : hingga tanggal 24 September 2022
  • --csv : simpan dalam format csv

Cek di folder jika tidak ada masalah maka file sambo.csv akan muncul dan siap diakses baik melalui excel, calc, atau langsung melalui python. Selain crawling melalui twitter dengan twint, bisa juga dilakukan crawling di instagram dengan instalooter, serta crawling website.

Cara Import

Data yang telah didapatkan melalui crawling atau lainnya untuk diolah ke dalam python perlu dilakukan pembacaan atau import terlebih dahulu. Namun, dalam python istilah ini disebut load atau memuat. Sebelumnya install terlebih dahulu pandas untuk Python caranya adalah dengan menggunakan syntax:

  • pip install pandas

Lalu untuk membaca file csv gunakan syntax (hati-hati file harus berada di dalam folder yang digunakan untuk membuat kode di bawah):

  • import pandas as pd

  • dataset = pd.read_csv("sambo.csv")
  • print(dataset.head()) #untuk menampilkan 5 data teratas
  • print(dataset.head(10)) #untuk menampilkan 10 data teratas

Syntax di atas adalah contoh untuk melakukan load pada data dengan format .csv, untuk melakukan load pada data format lain bisa diperiksa di dokumentasi python. Cara import format lain:

  • Import .tsv
    • df_tsv = pd.read_csv("https://storage.googleapis.com/sample_tsv.tsv", sep='\t')
    • print(df_tsv.head(3)) # Menampilkan 3 data teratas
  • Import .xlsx
    • df_excel = pd.read_excel("https://storage.googleapis.com/sample_excel.xlsx", sheet_name="test")
    • print(df_excel.head(4)) # Menampilkan 4 data teratas
  • Import .json
    • url = "https://storage.googleapis.com/dqlab-dataset/covid2019-api-herokuapp-v2.json"
    • df_json = pd.read_json(url)
    • print(df_json.head(10)) # Menampilkan 10 data teratas
  • Import .sql
    • my_conn = mysql.connector.connect(host="relational.fit.cvut.cz",
    •                                   port=3306,
    •                                   user="guest",
    •                                   passwd="relational",
    •                                   database="financial",
    •                                   use_pure=True)
    • my_query = """
    • SELECT *
    • FROM loan;
    • """
    • df_loan = pd.read_sql_query(my_query, my_conn)
    • df_loan.head()
    • df_loan_= pd.read_sql(my_query, my_conn)
    • df_loan_.head()
  • Import google bigquery
    • query = """
    • SELECT * 
    • FROM `bigquery-public-data.covid19_jhu_csse_eu.summary`
    • LIMIT 1000;
    • """
    • df_covid19_eu_summary = pd.read_gbq(query, project_id="XXXXXXXX")
    • df_covid19_eu_summary

Cara Quality Check

Ada beberapa hal yang dilakukan untuk memeriksa kualitas dari data, yaitu tipe data, panjang kolom, banyak data yang tidak null, menghitung missing value, menghitung (min, max, mean, median, modus, standar deviasi), mencari quantile, menghitung korelasi, menangani missing value, menangani outlier, dan melakukan deduplikasi. Dengan demikian ada 10 prosedur standar yang digunakan untuk memeriksa kualitas dari data.

  1. Tipe data
    • print(dataset.dtypes)
  2. Panjang kolom
    • print(len(dataset['nama_kolom'])
  3. Banyak data yang tidak null
    • print(dataset['nama_kolom'].count())
  4. Menghitung missing value
    • missing_value = len(dataset['kolom1']) - dataset['kolom1'].count()
    • print(missing_value)
  5. Menghitung (min, max, mean, median, modus, standar deviasi)
    • print(dataset['nama_kolom'].min())
    • print(dataset['nama_kolom'].max())
    • print(dataset['nama_kolom'].mean())
    • print(dataset['nama_kolom'].median())
    • print(dataset['nama_kolom'].mode())
    • print(dataset['nama_kolom'].std())
  6. Mencari quantile
    • print(dataset['nama_kolom'].quantile([0.25, 0.5, 0.75]))
  7. Menghitung korelasi
    • print(dataset[['kolom1', 'kolom2']].corr())
  8. Menangani missing value
    • Memeriksa kolom yang memiliki missing value
      • print(dataset.isnull().any())
    • Imputasi kolom yang memiliki missing value (mengisi data kosong)
      • Mean
        • print(dataset['kolom_missing_value'].fillna(dataset.kolom_missing_value.mean()))
      • Modus
        • print(dataset['kolom_missing_value'].fillna(dataset.kolom_missing_value.modus()))
      • Predictive modeling
        • print(dataset['kolom_missing_value'].fillna(dataset.kolom_missing_value.function()))
    • Drop data yang memiliki missing value (membuang data kosong)
      • print(dataset['kolom_missing_value'].dropna())
  9. Menangani outlier
    • Batas kontrol
      • Q1 = dataset['nama_kolom'].quantile(0.25)
      • Q3 = dataset['nama_kolom'].quantile(0.75)
      • IQR = Q3 - Q1
    • Hapus outlier
      • print('shape awal: ', dataset.shape)
      • dataset = [~((dataset['nama_kolom'] < (Q1 - 1.5 * IQR)) | (dataset['nama_kolom'] > (Q3 + 1.5 * IQR)))]
      • print('shape akhir: ', dataset.shape)
  10. Melakukan deduplikasi
    • Periksa ukuran sebelum data duplikasi dibuang
      • print('Shape Awal: ', dataset.shape)
    • Buang data yang terduplikasi
      • dataset.drop_duplicates(inplace=True)
    • Periksa ukuran setelah data duplikasi dibuang
      • print('Shape Akhir: ', dataset.shape)

Dalam melakukan imputasi perlu dilakukan secara hati-hati, misalnya pada kolom id. Biasanya untuk mengangani missing value ini perlu dilakukan diskusi dengan business analyst atau dengan back end. Pada kasus kolom id ini tidak boleh dilakukan imputasi. Perlu dicatat juga untuk menangani missing value, ini bergantung pada adanya outlier atau tidak. Jika ada outlier atau pencilan ekstrim baik itu nilainya ekstrim tertinggi maupun ekstrim terendah maka tidak direkomendasikan menggunakan imputasi mean, sebab akan ada bias pada nilai mean-nya.

Cara Memanipulasi Data

Setelah data berhasil didapatkan melalui crawling, kemudian diimport ke python dan diperiksa kualitasnya maka selanjutnya akan dilakukan manipulasi data tersebut sedemikian rupa sehingga sesuai kebutuhan dari bisnis. Pandas adalah salah satu alat yang dapat digunakan untuk memanipulasi data. Di website pandas menyebut dirinya sebagai library dari python. Selain pandas biasanya untuk memperlancar proses, diinstal numpy yang juga merupakan library dari python. Ada 2 jenis kelas data yang perlu diketahui, yaitu data series dan data frame. Data series berupa array satu dimensi sedangkan dat frame berupa array dua dimensi (terdiri atas baris dan kolom). Maksud dimensi di sini adalah kolom dan baris.

  1. Memeriksa data
    • print(dataset.info()) : hanya dapat digunakan untuk data frame
    • print(dataset.shape) : mengetahui berapa baris dan berapa kolom
    • print(dataset.dtypes) : mengetahui tipe data tiap kolom
    • print(dataset.astype("str")) : mengkonversi tipe data ke string
    • Membuat salinan:
      • dset = dataset.copy()
      • print(dset)
    • print(dataset.to_list()) : mengubah series menjadi struktur data list
    • print(dataset.unique()) : menghitung data yang unik (tidak duplikat)
    • print(dataset.index) : mencari index
    • print(dataset.columns) : mengetahui kolom yang ada di data frame
    • print(dataset.loc[0:1]) : melakukan slice berdasarkan nama kolom atau index
    • print(dataset.iloc[0:1]) : bisa untuk melakukan slice, mengubah, dan mengambil data
  2. Mengkonversi data
    • Mengubah list menjadi series
      • ex_list = ['a',1,3,5,'c','d']
      • ex_series = pd.Series(ex_list)
      • print(ex_series)
    • Mengubah list of list menjadi data frame
      • ex_list_of_list = [[1,'a','b','c'],
      •                    [2.5,'d','e','f'],
      •            [5,'g','h','i'],
      •            [7.5,'j',10.5,'l']]
      • index = ['dq','lab','kar','lan']
      • cols = ['float','char','obj','char']
      • ex_df = pd.DataFrame(ex_list_of_list, index=index, columns=cols)
      • print(ex_df)
    • Mengubah dictionary menjadi series
      • dict_series = {'1':'a',
      •        '2':'b',
      •        '3':'c'}
      • ex_series = pd.Series(dict_series)
      • print(ex_series)
    • Mengubah dictionary menjadi data frame
      • df_series = {'1':['a','b','c'],
      •              '2':['b','c','d'],
      •              '4':[2,3,'z']}
      • ex_df = pd.DataFrame(df_series)
      • print(ex_df)
    • Mengubah numpy array menjadi series
      • arr_series = np.array([1,2,3,4,5,6,6,7])
      • ex_series = pd.Series(arr_series)
      • print(ex_series)
    • Mengubah numpy array menjadi data frame
      • arr_df = np.array([[1,2,3,5],
      •                    [5,6,7,8],
      •                    ['a','b','c',10]])
      • ex_df = pd.DataFrame(arr_df)
      • print(ex_df)
  3. Head & Tail
    • print("Tiga data teratas:\n", df.head(3))
    • print("Tiga data terbawah:\n", df.tail(3))
  4. Indexing
    • df = pd.read_csv("https://storage.googleapis.com/sample_tsv.tsv", sep="\t")
    • print("Index:", df.index)
    • print("Columns:", df.columns)
    • Membuat index baru
      • df.index = ["Pesanan ke-" + str(i) for i in range(1, 11)]
    • print("Dataframe dengan index baru:\n", df)
  5. Slicing
    • df = pd.read_csv("https://storage.googleapis.com/sample_csv.csv")
    • Slice berdasarkan kolom
      • df_slice = df.loc[(df["customer_id"] == 18055) &
      • (df["product_id"].isin(["P0029", "P0040", "P0041", "P0116", "P0117"]))]
      • print("Slice langsung berdasarkan kolom:\n", df_slice)
    • Slice berdasarkan index
      • df = df.set_index(["order_date", "order_id", "product_id"])
      • df_slice = df.loc[("2019-01-01",1612339,["P2154","P2159"]),:]
      • print("Slice df:\n", df_slice)
  6. Transforming
    • df = pd.read_csv("https://storage.googleapis.com/sample_csv.csv")
    • Tampilkan tipe data:
      • print("Tipe data df:\n", df.dtypes)
    • Ubah tipe data pada kolom order
      • df["order_date"] = pd.to_datetime(df["order_date"])
    • Tampilkan tipe data setelah transformasi
      • print("\nTipe data df setelah transformasi:\n", df.dtypes)
    • Mengubah isi kolom menjadi lower case
      • df["brand"] = df["brand"].apply(lambda x: x.lower())
    • print("Kolom brand setelah apply:\n", df["brand"].head())
    • Mengambil karakter terakhir
      • df["brand"] = df["brand"].map(lambda x: x[-1])
    • print("Kolom brand setelah map:\n", df["brand"].head())
  7. Inspeksi Missing Value
    • df = pd.read_csv("https://storage.googleapis.com/datacovid19.csv")
    • print(df.info())
    • Periksa missing value di setiap kolom
      • mv = df.isna().sum()
      • print("\nJumlah missing value per kolom:\n", mv)
    • print("Ukuran awal df: %d baris, %d kolom." % df.shape)
    • Mendrop (menghapus) missing value [alternatif 1]
      • Drop kolom yang seluruhnya missing value
        • df = df.dropna(axis=1, how="all")
        • print("Ukuran df setelah buang kolom dengan seluruh data missing: %d baris, %d kolom." % df.shape)
      • Drop baris jika ada satu saja data yang missing
        • df = df.dropna(axis=0, how="any")
        • print("Ukuran df setelah dibuang baris yang memiliki sekurangnya 1 missing value: %d baris, %d kolom." % df.shape)
    • Memfill (mengisi) missing value dengan string [alternatif 2]
      • print("Unique value awal:\n", df["province_state"].unique())
      • Isi missing value dengan "unknown_province_state"
        • df["province_state"] = df["province_state"].fillna("unknown_province_state")
      • print("Unique value setelah fillna:\n", df["province_state"].unique())
    • Memfill (mengisi) missing value dengan mean atau median [alternatif 3]
      • print("Awal: mean = %f, median = %f." % (df["active"].mean(), df["active"].median()))
      • print("Fillna median: mean = %f, median = %f." % (df_median.mean(), df_median.median()))
      • Isi missing value dengan nilai mean
        • df_mean = df["active"].fillna(df["active"].mean())
      • print("Fillna mean: mean = %f, median = %f." % (df_mean.mean(), df_mean.median()))
    • Memfill (mengisi) missing value dengan interpolasi [alternatif 4]
      • Data:
        • ts = pd.Series({
        •    "2020-01-01":9,
        •    "2020-01-02":np.nan,
        •    "2020-01-05":np.nan,
        •    "2020-01-07":24,
        •    "2020-01-10":np.nan,
        •    "2020-01-12":np.nan,
        •    "2020-01-15":33,
        •    "2020-01-17":np.nan,
        •    "2020-01-16":40,
        •    "2020-01-20":45,
        •    "2020-01-22":52,
        •    "2020-01-25":75,
        •    "2020-01-28":np.nan,
        •    "2020-01-30":np.nan
        • })
      • Isi missing value dengan interpolasi linier
        • ts = ts.interpolate()
      • print("Setelah diisi missing valuenya:\n", ts)
  8. Tingkat lanjut
    • Append
      • Data series
        • s1 = pd.Series([1,2,3,4,5,6])
        • s2 = pd.Series(["a","b","c","d","e","f"])
        • s2_append_s1 = s2.append(s1)
        • print("Series - append:\n", s2_append_s1)
      • Data frame
        • df1 = pd.DataFrame({'a':[1,2],
        •    'b':[3,4]})
        • df2 = pd.DataFrame({'b':[1,2],
        •    'a':[3,4]})
        • df2_append_df1 = df2.append(df1)
        • print("Dataframe - append:\n", df2_append_df1)
    • Concat
      • df1 = pd.DataFrame({'a':[1,2],
      •     'b':[3,4]})
      • df2 = pd.DataFrame({'b':[1,2],
      •     'a':[3,4]})
      • Untuk baris
        • row_wise_concat = pd.concat([df2, df1])
        • print("Row-wise - concat:\n", row_wise_concat)
      • Untuk kolom
        • col_wise_concat = pd.concat([df2, df1], axis=1)
        • print("Column-wise - concat:\n", col_wise_concat)
      • Menambah identifier
        • multiindex_concat = pd.concat([df2, df1], axis=0, keys=['df2', 'df1'])
        • print("Multiindex - concat:\n", multiindex_concat)
    • Merge
      • df1 = pd.DataFrame({
      •    'key':['k1','k2','k3','k4','k5'],
      •    'val1':[200, 500, 0, 500, 100],
      •    'val2':[30, 50, 100, 20, 10]
      • })
      • df2 = pd.DataFrame({
      •    'key':['k1','k3','k5','k7','k10'],
      •    'val3':[1,2,3,4,5],
      •    'val4':[6,7,8,8,10]
      • })
      • Left join
        • merge_df_left = pd.merge(left=df2, right=df1, how='left', left_on='key', right_on='key')
        • print('Merge - Left:\n', merge_df_left)
      • Right join
        • merge_df_right = pd.merge(left=df2, right=df1, how='right', left_on='key', right_on='key')
        • print('Merge - Right:\n', merge_df_right)
      • Inner join
        • merge_df_inner = pd.merge(left=df2, right=df1, how='inner', left_on='key', right_on='key')
        • print('Merge - Inner:\n', merge_df_inner)
      • Outer join
        • merge_df_outer = pd.merge(left=df2, right=df1, how='outer', left_on='key', right_on='key')
        • print('Merge - Outer:\n', merge_df_outer)
    • Join
      • df1 = pd.DataFrame({
      •    'key':['k1','k2','k3','k4','k5'],
      •    'val1':[200, 500, 0, 500, 100],
      •    'val2':[30, 50, 100, 20, 10]
      • })
      • df2 = pd.DataFrame({
      •    'key':['k1','k3','k5','k7','k10'],
      •    'val3':[1,2,3,4,5],
      •    'val4':[6,7,8,8,10]
      • })
      • Menggunakan set_index dan keyword how
        • join_df = df1.set_index('key').join(df2.set_index('key'), how='outer')
        • print(join_df)
    • Pivot
      • data = pd.DataFrame({
      •   'kelas': 6*['A'] + 6*['B'],
      •   'murid': 2*['A1'] + 2*['A2'] + 2*['A3'] + 2*['B1'] + 2*['B2'] + 2*['B3'],
      •   'pelajaran': 6*['math','english'],
      •   'nilai': [90,60,70,85,50,60,100,40,95,80,60,45]
      • }, columns=['kelas','murid','pelajaran','nilai'])
      • Pivot dengan satu kolom
        • pivot1 = data.pivot(index='murid', columns='pelajaran', values='nilai')
        • print('Pivoting with single column measurement:\n', pivot1)
      • Pivot dengan banyak kolom
        • pivot2 = data.pivot(index='murid', columns='pelajaran')
        • print('Pivoting with multiple column measurement:\n', pivot2)
    • Pivot Tabel
      • data = pd.DataFrame({
      •   'kelas': 6*['A'] + 6*['B'],
      •   'murid': 2*['A1'] + 2*['A2'] + 2*['A3'] + 2*['B1'] + 2*['B2'] + 2*['B3'],
      •   'pelajaran': 6*['math','english'],
      •   'nilai': [90,60,70,85,50,60,100,40,95,80,60,45]
      • }, columns=['kelas', 'murid', 'pelajaran', 'nilai'])
      • Menggunakan mean
        • pivot_tab_mean = data.pivot_table(index='kelas', columns='pelajaran', values='nilai', aggfunc='mean')
        • print('Creating pivot table -- aggfunc mean:\n', pivot_tab_mean)
      • Menggunakan median
        • pivot_tab_median = data.pivot_table(index='kelas', columns='pelajaran', values='nilai', aggfunc='median')
        • print('Creating pivot table -- aggfunc median:\n', pivot_tab_median)
    • Melt
      • data = pd.DataFrame({
      •   'kelas': 6*['A'] + 6*['B'],
      •   'murid': 2*['A1'] + 2*['A2'] + 2*['A3'] + 2*['B1'] + 2*['B2'] + 2*['B3'],
      •   'pelajaran': 6*['math','english'],
      •   'nilai': [90,60,70,85,50,60,100,40,95,80,60,45]
      • }, columns=['kelas','murid','pelajaran','nilai'])
      • Membuat pivot
        • data_pivot = data.pivot_table(index='kelas', columns='pelajaran', values='nilai', aggfunc='mean').reset_index()
        • print('Pivoting dataframe:\n', data_pivot)
      • Melting pivot
        • data_melt_1 = pd.melt(data_pivot)
        • print('Melting dataframe:\n', data_melt_1)
      • Melting pivot dengan id_vars
        • data_melt_2 = pd.melt(data_pivot, id_vars='kelas')
        • print('Melting dataframe dengan idvars:\n', data_melt_2)
    • Unstack
      • data = pd.DataFrame({
      •   'kelas': 6*['A'] + 6*['B'],
      •   'murid': 2*['A1'] + 2*['A2'] + 2*['A3'] + 2*['B1'] + 2*['B2'] + 2*['B3'],
      •   'pelajaran': 6*['math','english'],
      •   'nilai': [90,60,70,85,50,60,100,40,95,80,60,45]
      • }, columns=['kelas','murid','pelajaran','nilai'])
      • Mengatur index
        • data = data.set_index(['kelas', 'murid', 'pelajaran'])
        • print('Dataframe multi index:\n', data)
      • Melakukan unstacking
        • data_unstack_1 = data.unstack()
        • print('Unstacking dataframe:\n', data_unstack_1)
      • Melakukan unstacking dengan level nama
        • data_unstack_2 = data.unstack(level='murid')
        • print('Unstacking dataframe dengan level name:\n', data_unstack_2)
      • Melakukan unstacking dengan level position
        • data_unstack_3 = data.unstack(level=1)
        • print('Unstacking dataframe dengan level position:\n', data_unstack_3)
    • Aggregation
      • gaq = pd.read_csv('https://storage.googleapis.com/global_air_quality_4000rows.csv')
      • Mean dan std
        • Membuat variabel pollutant
          • pollutant = gaq[['country', 'city', 'pollutant', 'value']].pivot_table(index=['country', 'city'],columns='pollutant').fillna(0)
          • print('Data pollutant (5 teratas):\n', pollutant.head())
        • Agregasi mean
          • pollutant_mean = pollutant.groupby('country').mean()
          • print('Rata-rata pollutant (5 teratas):\n', pollutant_mean.head())
        • Agregasi std
          • pollutant_std = pollutant.groupby('country').std().fillna(0)
          • print('Standar deviasi pollutant (5 teratas):\n', pollutant_std.head())
      • .sum() dan .unique()
        • Agregasi .sum()
          • pollutant_sum = pollutant.groupby('country').sum()
          • print('Total pollutant (5 teratas):\n', pollutant_sum.head())
        • Agregasi .unique()
          • pollutant_nunique = pollutant.groupby('country').nunique()
          • print('Jumlah unique value pollutant (5 teratas):\n', pollutant_nunique.head())
      • Multiple aggregation
        • Agregasi min, median, mean, max
          • multiagg = pollutant.groupby('country').agg(['min', 'median', 'mean', 'max'])
          • print('Multiple aggregations (5 teratas):\n', multiagg.head())
      • Custom aggregation
        • Buat fungsi IQR
          • def iqr(series):
          • Q1 = series.quantile(0.25)
          • Q3 = series.quantile(0.75)
          • return Q3-Q1
        • Agregasi IQR
          • custom_agg = pollutant.groupby('country').agg(iqr)
          • print('Custom aggregation (5 teratas):\n', custom_agg.head())
      • Custom aggregation by dict
        • custom_agg_dict = pollutant['value'][['pm10', 'pm25', 'so2']].groupby('country').agg({
        •    'pm10':'median',
        •    'pm25':iqr,
        •    'so2':iqr
        • })
        • print('\nCetak 5 data teratas custom_agg_dict:\n', custom_agg_dict.head())
    • Time series
      • gaq = pd.read_csv('https://storage.googleapis.com/dqlab-dataset/LO4/global_air_quality_4000rows.csv')
      • gaq['timestamp'] = pd.to_datetime(gaq['timestamp'])
      • gaq = gaq.set_index('timestamp')
      • print('Dataset sebelum di-downsampling (5 teratas):\n', gaq.head())
      • Downsampling
        • Dari harian ke mingguan
          • gaq_weekly = gaq.resample('W').max()
          • print('Downsampling daily to weekly - max (5 teratas):\n', gaq_weekly.head())
      • Upsampling
        • Dari harian ke per jam
          • gaq_hourly = gaq.resample('H').mean()
          • print('Upsampling daily to hourly - mean (5 teratas):\n', gaq_hourly.head())
    • Visualisasi
      • Membuat pivot tabel yang menunjukkan waktu di baris
        • gaq_viz = gaq[['pollutant','value']].reset_index().set_index(['timestamp', 'pollutant'])
        • gaq_viz = gaq_viz.pivot_table(index='timestamp', columns='pollutant', aggfunc='mean').fillna(0)
        • gaq_viz.columns = gaq_viz.columns.droplevel(0)
        • print('Data (5 teratas):\n', gaq_viz.head())
      • Membuat fungsi
        • def default_val(val):
        •  if val < 0:
        •    return 0
        •  else:
        •    return val
        • line1 = gaq_viz.resample('M').mean().ffill().applymap(lambda x: default_val(x)).apply(lambda x: x/x.max()) # default value if value < 0 then 0, kemudian menghasilkan % value = value/max(value)
        • line1.plot(
        •    title = 'average value of each pollutant over months',
        •    figsize = (10,10), #ukuran canvas 10px x 10px
        •    ylim = (0,1.25), #memberikan batas tampilan y-axis hanya 0 sampai 125%
        •    subplots = True #memecah plot menjadi beberapa bagian sesuai dengan jumlah kolom
        • )
        • plt.ylabel('avg pollutant (%)')
        • plt.xlabel('month')
        • plt.show()

Pada bagian manipulasi data inilah peran seorang data engineer menjadi krusial. Diperlukan trik serta kecerdikan untuk menyiapkan data sesuai kebutuhan bisnis dengan bentuk data mentah yang masih teracak bahkan data yang masih bersifat unstructured. 

Cara Cleansing Data

Melakukan data cleansing adalah bagian dari memperbaiki kualitas data. Pada proses pemeriksaan kualitas disinggung sedikit mengenai bagaimana menangani missing value dan dan outlier. Perbedaannya data cleansing dilakukan setelah data dilakukan manipulasi.

  1. Mencari identitas yang valid
    • df_load = pd.read_csv('https://storage.googleapis.com/dataset.csv')
    • Jumlah baris dan kolom
      • print(df_load.shape)
    • Jumlah ID yang unik
      • print(df_load.customerID.nunique())
    • Memfilter ID format tertentu
      • df_load['valid_id']= df_load['customerID'].astype(str).str.match(r'(45\d{9,10})')
      • df_load = (df_load[df_load['valid_id'] == True]).drop('valid_id', axis=1)
      • print('Hasil jumlah ID Customer yang terfilter adalah', df_load['customerID'].count())
    • Memfilter ID duplikasi
      • Drop baris yang duplikat
        • df_load.drop_duplicates()
      • Drop duplikasi ID yang terurut berdasarkan periode
        • df_load = df_load.sort_values('UpdatedAt', ascending=False).drop_duplicates('customerID')
        • print('Hasil jumlah ID Customer yang sudah dihilangkan duplikasinya (distinct) adalah',df_load['customerID'].count())
  2. Mengatasi missing value
    • Dengan menghapus
      • df_load['valid_id'] = df_load['customerID'].astype(str).str.match(r'(45\d{9,10})')
      • df_load = (df_load[df_load['valid_id'] == True]).drop('valid_id', axis = 1)
      • df_load.drop_duplicates()
      • df_load = df_load.sort_values('UpdatedAt', ascending=False).drop_duplicates('customerID')

      • print('Total missing values data dari kolom Churn', df_load['Churn'].isnull().sum())
      • Drop semua baris dengan kolom spesifik
        • df_load.dropna(subset=['Churn'], inplace=True)
        • print('Total Rows dan kolom Data setelah dihapus data Missing Values adalah', df_load.shape)
    • Dengan mengisi
      • df_load['valid_id'] = df_load['customerID'].astype(str).str.match(r'(45\d{9,10})')
      • df_load = (df_load[df_load['valid_id'] == True]).drop('valid_id', axis = 1)
      • df_load.drop_duplicates()
      • df_load = df_load.sort_values('UpdatedAt', ascending=False).drop_duplicates('customerID')
      • df_load.dropna(subset=['Churn'],inplace=True)

      • print('Status Missing Values :',df_load.isnull().values.any())
      • print('\nJumlah Missing Values masing-masing kolom, adalah:')
      • print(df_load.isnull().sum().sort_values(ascending=False))
      • Mengisi missing value dengan angka 11
        • df_load['tenure'].fillna(11, inplace=True)
      • Mengisi missing value dengan median
        • for col_name in list(['MonthlyCharges', 'TotalCharges']):
        • median = df_load[col_name].median()
        • df_load[col_name].fillna(median, inplace=True)
        • print('\nJumlah Missing Values setelah di imputer datanya, adalah:')
        • print(df_load.isnull().sum().sort_values(ascending=False))
  3. Mengatasi outlier
    • Mendeteksi outlier
      • df_load['valid_id'] = df_load['customerID'].astype(str).str.match(r'(45\d{9,10})')
      • df_load = (df_load[df_load['valid_id'] == True]).drop('valid_id', axis = 1)
      • df_load.drop_duplicates()
      • df_load = df_load.sort_values('UpdatedAt', ascending=False).drop_duplicates('customerID')
      • df_load.dropna(subset=['Churn'],inplace=True)

      • df_load['tenure'].fillna(11, inplace=True)
      • for col_name in list(['MonthlyCharges','TotalCharges']):
      •     median = df_load[col_name].median()
      •     df_load[col_name].fillna(median, inplace=True)

      • print('\nPersebaran data sebelum ditangani Outlier: ')
      • print(df_load[['tenure','MonthlyCharges','TotalCharges']].describe())
      • Membuat box plot
        • plt.figure()
        • sns.boxplot(x=df_load['tenure'])
        • plt.show()
        • plt.figure()
        • sns.boxplot(x=df_load['MonthlyCharges'])
        • plt.show()
        • plt.figure()
        • sns.boxplot(x=df_load['TotalCharges'])
        • plt.show()
    • Mengatasi outlier
      • df_load['valid_id'] = df_load['customerID'].astype(str).str.match(r'(45\d{9,10})')
      • df_load = (df_load[df_load['valid_id'] == True]).drop('valid_id', axis = 1)
      • df_load.drop_duplicates()
      • df_load = df_load.sort_values('UpdatedAt', ascending=False).drop_duplicates('customerID')
      • df_load.dropna(subset=['Churn'],inplace=True)

      • df_load['tenure'].fillna(11, inplace=True)
      • for col_name in list(['MonthlyCharges','TotalCharges']):
      •     median = df_load[col_name].median()
      •     df_load[col_name].fillna(median, inplace=True)

      • Q1 = (df_load[['tenure','MonthlyCharges','TotalCharges']]).quantile(0.25)
      • Q3 = (df_load[['tenure','MonthlyCharges','TotalCharges']]).quantile(0.75)
      • IQR = Q3 - Q1
      • maximum = Q3 + (1.5*IQR)
      • print('Nilai Maximum dari masing-masing Variable adalah: ')
      • print(maximum)
      • minimum = Q1 - (1.5*IQR)
      • print('\nNilai Minimum dari masing-masing Variable adalah: ')
      • print(minimum)
      • more_than = (df_load > maximum)
      • lower_than = (df_load < minimum)
      • df_load = df_load.mask(more_than, maximum, axis=1)
      • df_load = df_load.mask(lower_than, minimum, axis=1)
      • print('\nPersebaran data setelah ditangani Outlier: ')
      • print(df_load[['tenure','MonthlyCharges','TotalCharges']].describe())
  4. Menstandardisasi nilai
    • df_load['valid_id'] = df_load['customerID'].astype(str).str.match(r'(45\d{9,10})')
    • df_load = (df_load[df_load['valid_id'] == True]).drop('valid_id', axis = 1)
    • df_load.drop_duplicates()
    • df_load = df_load.sort_values('UpdatedAt', ascending=False).drop_duplicates('customerID')
    • df_load.dropna(subset=['Churn'],inplace=True)

    • df_load['tenure'].fillna(11, inplace=True)
    • for col_name in list(['MonthlyCharges','TotalCharges']):
    •     median = df_load[col_name].median()
    •     df_load[col_name].fillna(median, inplace=True)

    • Q1 = (df_load[['tenure','MonthlyCharges','TotalCharges']]).quantile(0.25)
    • Q3 = (df_load[['tenure','MonthlyCharges','TotalCharges']]).quantile(0.75)
    • IQR = Q3 - Q1
    • maximum  = Q3 + (1.5*IQR)
    • minimum = Q1 - (1.5*IQR)

    • more_than     = (df_load > maximum)
    • lower_than    = (df_load < minimum)
    • df_load       = df_load.mask(more_than, maximum, axis=1) 
    • df_load       = df_load.mask(lower_than, minimum, axis=1)

    • for col_name in list(['gender','Dependents','Churn']):
    • print('\nUnique Values Count \033[1m' + 'After Standardized \033[0mVariable', col_name)
    • print(df_load[col_name].value_counts())

Data cleansing berfokus pada 3 hal utama yaitu missing value, outlier, dan standarisasi nilai. Selama tidak ada outlier maka missing value masih memungkinkan untuk diisi dengan mean. Beberapa ahli data merekomendasikan nilai median jika terdapat outlier. Namun, dalam hal menangani missing value harus didiskusikan dengan tim terkait seperti business intelligent atau backend atau machine learning. Dapat dikatakan proses cleansing merupakan sentuhan terakhir terhadap data sebelum diekspor. Data cleaning itu ada 2: structured dan unstructured, khusus data yang unstructured maka perlu melewati cara seperti NER, POS, Lemmatization, etc.

Cara Export Data

Setelah melewati pemeriksaan kualitas data kemudian data dimanipulasi sesuai kebutuhan dan diakhiri dengan cleansing maka data akan diekspor atau di save dalam format yang disepekati.

  • df = ...
  • Menyimpan ke .csv
    • df.to_csv("csv1.csv", index=False)
  • Menyimpan ke .tsv
    • df.to_tsv("tsv1.tsv", index=False, sep='\t')
  • Menyimpan ke .clipboard
    • df.to_clipboard()
  • Menyimpan ke .xlsx
    • df_excel.to_excel("xlsx1.xlsx", index=False)
  • Menyimpan ke .gbq
    • df.to_gbq("temp.test", project_id="XXXXXX", if_exists="fail")

Pada dasarnya ekspor data ini dilakukan untuk menyimpan data dalam format tertentu. Keberhasilan dari big data juga diperhatikan melalui 5V yaitu volume, velocity, variety, veracity dan value (Storey & Song, 2017).

Cara Save Data

Setelah big data ditentukan formatnya maka hal yang krusial selanjutnya adalah dimana penyimpanan data tersebut. Ada 2 alternatif, yaitu on-premise dan cloud. Kalau penyimpanan dilakukan di on-premise apakah data disimpan begitu saja atau perlu dilakukan teknik kriptografi yang memberikan tingkat keamanan lebih baik. Sedangkan jika disimpan di cloud, biasanya layananan keamanan tertentu telah tersedia. Salah satu layanan data warehouse adalah redshift di Amazon atau yandex management service di Yandex.

Dengan demikian minimal ada 7 job description bagi seorang data engineer, yaitu crawling, import, quality, manipulation, cleansing, export, and save.




ref:
katadata.co.id
tantut-wahyuu-s
arief-luqman

Jokourno

Jokourno is focus for providing efficient and fair solutions for all

Dasar Arsitektur Teknologi Informasi

Dahulu untuk seseorang bertemu dengan keluarganya di tempat yang jauh maka diperlukan perjalanan yang panjang, bahkan melewati lautan dan padang pasir. Selanjutnya ada kemudahan karena munculnya teknologi seperti kendaraan bermotor dan pesawat. Namun itu semua masih membutuhkan waktu yang seringkali menjadi penghambat. Dewasa ini dengan perkembangan teknologi informasi seseorang dapat langsung bertukar informasi secara real-time melalui video conference. Dengan adanya kemajuan tersebut membuat setiap perkumpulan berlomba-lomba membuat sistem teknologi informasi yang memanjakan pelanggannya. Sayangnya terkadang pembuatan sistem teknologi informasi tersebut mengabaikan arsitektur yang dipersyaratkan. sumber: https://pixabay.com/illustrations/video-conference-webinar-5352757/ Untuk membuat sistem informasi yang baik diperlukan pemahaman setidaknya 2 hal yaitu software dan hardware. Keduanya tentu saja memiliki arsitektur tersendiri seperti object oriented programming, functional progr...

Perancangan Machine Learning

Pemrograman dibuat untuk menyelesaikan permasalahan. Dalam pemrograman konvensional akan dibuat deretan kode yang memecah masalah tersebut menjadi solusi yang lebih kecil. Sayangnya ketika masalah itu begitu kompleks maka deretan kode yang diperlukan akan sangat banyak. Pada kondisi inilah machine learning dimungkinkan sebagai solusi. Alih-alih membuat deretan kode yang sangat banyak dari suatu permasalahan konteks, machine learning akan membuat penyelesaian lebih sederhana. Tipe machine learning sendiri ada 4, yaitu supervised, unsupervised, semi-supervised, dan reinforcement. Pada tipe reinforcement, mesin menggunakan teknik pengambilan keputusan terbaik, secara berurutan, untuk memaksimalkan ukuran sukses kehidupan nyata. Ada 4 komponen utama pada mesin tipe reinforcement, yaitu action, agent, environment, dan rewards. Semua itu menggambarkan Marcove Decision Process (MDP). sumber: https://magnitt.com/news/world%E2%80%99s-most-valuable-resource-no-longer-oil-data-21035 Sebagaimana d...

Minuman Cayenne Pepper

source: https://favpng.com/png_view/chilli-with-chicken-cayenne-pepper-chili-pepper-peppers-food-bell-pepper-png/xiXNdS3r Cayenne pepper (Capsicum annuum) adalah jenis cabai yang berasal dari keluarga solanaceae, yang dikenal dengan rasa pedasnya yang kuat. Cabai ini biasanya digunakan sebagai bahan bumbu dalam masakan untuk memberikan rasa pedas dan sedikit rasa manis. Cayenne pepper memiliki bentuk panjang dan tipis dengan warna merah cerah saat matang, namun pada umumnya dapat ditemukan dalam bentuk bubuk yang lebih praktis digunakan dalam masakan sehari-hari. Cayenne pepper mengandung senyawa aktif yang disebut capsaicin, yang memberikan rasa pedas dan memiliki berbagai manfaat kesehatan. Capsaicin diketahui dapat merangsang metabolisme, meningkatkan pembakaran lemak, serta memiliki sifat antiinflamasi dan analgesik. Oleh karena itu, cayenne pepper sering digunakan dalam pengobatan tradisional untuk membantu mengatasi masalah pencernaan, meredakan nyeri otot, dan meningkatkan p...