Setup Data Infrastructure for Batch Data Pipeline Using Airflow MWAA, glue and AWS Redshift

Muhammad Saipul Rohman
7 min readJan 12, 2023

--

Pada artikel ini saya akan melanjutkan artikel sebelum nya di building batch data pipeline using airflow MWAA.

Artikel ini adalah artikel bagian kedua. Untuk artikel ketiga yaitu Create Airflow DAG script

Di artikel ini akan fokus setup Data Infrastruktur nya yang terdiri dari beberapa tahap yaitu :

  • Setup S3 Bucket
  • Setup MWAA
  • Setup IAM Roles
  • Setup Redshift

Setup S3 Bucket

Untuk langkah — langkah setup S3 bucket yaitu :

  1. Ke AWS S3 Console.
  2. Klik Create Bucket.
  3. Input nama bucket yang diinginkan.
  4. Untuk opsi lain tidak usah di ubah-ubah lalu klik Create Bucket.
  5. Klik di bucket yang sudah di buat sebelumnya kemudian klik Create Folder
  6. Input nama folder menjadi dags kemudian klik Create Folder
  7. Berikutnya buat 4 folder lagi lalu diberi nama folder data, plugins, requirements dan scripts.
  8. Klik folder scripts lalu buat 2 folder lagi kemudian beri nama folder glue dan emr.
  9. Download plugin yang akan digunakan saat membuat data pipeline nanti di sini.
  10. Upload hasil download zip file awsairflowlib_222.zip ke folder plugins yang sudah kalian buat sebelumnya.
  11. Buat text file baru beri nama requirements.txt di lokal komputer kalian lalu copy paste code di bawah ini ke file requirements.txt kalian.
--constraint "https://raw.githubusercontent.com/apache/airflow/constraints-2.2.2/constraints-3.7.txt"
apache-airflow[package-extra]==2.2.2
apache-airflow-providers-postgres[amazon]
apache-airflow-providers-cncf-kubernetes
psycopg2
fsspec
s3fs
pandas
sagemaker==v1.72
dag-factory==0.7.2

Kemudian langkah terakhir yaitu upload requirements.txt dari lokal komputer kalian ke folder requirements.

Jika sudah selesai di setup maka struktur folder di AWS S3 bucket kalian adalah seperti di bawah ini.

Berikutnya adalah setup instance MWAA.

Setup MWAA

  • Input nama S3 bucket sudah kalian buat sebelumnya atau klik Browse S3 lalu pilih S3 bucket yang kalian buat sebelumnya. contoh s3://nama_bucket
  • Untuk DAG folder, input s3: //nama_bucket/dag
  • Untuk Plugin folder, input s3://nama_bucket/plugins/awsairflowlib_222.zip/
  • Untuk file requirement, input s3://nama_bucket/requirements/requirements.txt
  • Klik Next kemudian klik Create MWAA VPC
  • Setelah itu otomatis akan membuka tab baru dengan cloud formation. Scroll sampai paling bawah lalu klik Create Stack
  • Tunggu sampai status nya menjadi CREATE_COMPLETE untuk stack MWAA- VPC
  • Ketika selesai, kembali ke Console Managed Apache Airflow dan pilih VPC yang sudah di buat sebelumnya dari dropdown
  • Di bagian Web Server Access, ganti ke Public network
  • Di bagian Security group(s), tidak usah di ganti ganti lagi dimana Create new security group di ceklist di checkbox
  • Di bagian Environment class, pilih mw1.small dan ganti Maximum worker count menjadi 4.
  • Di bagian monitoring, enable opsi Airflow DAG processing logs dan ganti Log level ke INFO untuk log pengolahan data.
  • Klik Next
  • Review semua konfigurasi, jika sudah ok klik tombol Create Environment di bagian bawah halaman

Berikutnya adalah setup IAM roles.

Setup IAM Roles

  • Pergi ke console IAM Roles
  • Cari role Airflow instance dimana nama role nya seperti AmazonMWAA-airflow-xxxx-instance-xxxx
  • Berikutnya attach IAM role permission di bawah ini ke instance airflow role

Berikutnya adalah kita akan membuat Glue service role untuk menjalankan crawling dan job. Untuk membuat IAM role untuk AWS Glue yaitu :

  • Pergi ke IAM roles Console
  • Klik Create Role
  • Untuk tipe role, pilih AWS Service kemudian cari dan pilih Glue lalu Klik Next
  • Di halaman attach permission policies, pilih AWS managed policy AWSGlueServiceRole untuk AWS Glue permission secara umum dan AWS managed policy AmazonS3FullAccess untuk akses Amazon S3 resource.
  • Untuk nama role, input AWSGlueServiceRoleDefault dan pilih Create Role.

Berikutnya adalah setup IAM role untuk redshift.

Setup Redshift IAM Role

Langkah — langkah untuk setup Redshift IAM role yaitu :

  • Pergi ke IAM roles Console
  • Klik Create Role
  • Untuk tipe role, pilih AWS Service kemudian cari dan pilih Redshift.
  • Pilih Redshift-Customizable di bagian select your case.
  • Klik Next
  • Di search box, cari dan cek 2 policy di bawah ini
  • Klik Next
  • Input role name AmazonMWAA-workshop-redshift-role
  • Verifikasi 2 policy di bawah ini sudah di attach ke role
  • Klik Create Role

Berikutnya adalah setup Subnet Group.

Setup Subnet groups

Kita akan setup Subnet Group berkaitan dengan VPC MWAA Airflow

  • Pergi ke Redshift
  • Klik Create cluster subnet group
  • Input nama untuk subnet group -AmazonMWAA-workshop-subnet-group
  • Input Deskripsi -Subnet group for the Amazon MWAA workshop
  • Di bagian Add Subnet, di dropdown pilih MWAA Environment dan klik Add all the subnets for this VPC
  • Klik Create cluster subnet group

Berikutnya adalah setupRedshift cluster

Setup Redshift Cluster

Di bagian ini kita akan membuat 2 node Redshift Cluster untuk menyimpan data hasil transformasi.

  • Pergi ke Redshift
  • Click Create Cluster
  • Untuk nama cluster identifier tidak usah di ubah biarkan nama defaultnya yaitu redshift-cluster-1
  • Di bagian planning cluster pilih Production
  • Pilih dc2.large sebagai tipe node
  • Input Number of Nodes menjadi 2
  • Ganti Master username menjadi admin
  • Input Master user password. Pastikan input password sesuai dengan rule yang ada(harus ada kombinasi huruf besar, huruf kecil dan spesial karakter !@#$%^&*()-+=).
  • Di bagian Cluster Permissions — Associated IAM roles, Klik Manage IAM roles lalu pilih Associate IAM roles
  • Di pop up window associate IAM role, pilih AmazonMWAA-workshop-redshift-role kemudian klik Associate IAM roles
  • Jika sudah akan tampil di bagian Associated IAM roles
  • Di bagian Additional configurations, geser slider Use defaults agar tidak memilih default konfigurasi. Di bagian Network and Security, pilih MWAAEnvironment dari dropdown VPC. Untuk pengaturan yang lain biarkan default
  • Klik Create Cluster

Pembuatan Cluster Redshift akan memakan waktu beberapa menit sampai statusnya menjadi available

Jika cluster sudah selesai dibuat dan status nya menjadi available maka lanjut ke tahap berikutnya yaitu setup S3 gateway endpoint

Setup S3 Gateway Endpoint

Di bagian ini kita akan mensetup S3 Gateway Endpoint agar Cluster Redshift bisa terhubung dengan S3 menggunakan private IP.

Lebih detail mengenai Amazon VPC bisa baca di https://docs.amazonaws.cn/en_us/vpc/latest/userguide/what-is-amazon-vpc.html

Lebih detail mengenai S3 Gateway Endpoint bisa baca di https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints-s3.html

  • Pergi ke Console AWS VPC
  • Klik Create Endpoint
  • Input name tag RedshiftS3EP
  • Pilih AWS Services di bagian Service category
  • Di bagian pencarian service name cari s3 lalu tekan enter
  • Harusnya muncul com.amazonaws.[region].s3 di hasil pencarian. Pilih opsi dari list dimana di sebutkan Type sebagai Gateway
  • Di bagian VPC, pilih VPC MWAAEnvironment. VPC ini akan digunakan juga di Redshift Cluster
  • Di bagian Configure route tables, centang dimana kolom Main nya Yes
  • Di bagian Policy biarkan default(Full Access)
  • Klik tombol Create endpoint
  • Jika sudah maka tunggu sampai statusnya berubah menjadi available

Verifikasi dan menambahkan rule ke default security group

Di langkah ini untuk melakukan verifikasi dan menambahkan rule ke redshift security group agar AWS Glue bisa berkomunikasi dengan Redshift.

  • Pergi ke VPC Security Groups
  • Pilih Redshift security groups. Jika ada lebih dari 1 security group, ikuti langkah di bawah ini :
  • Pergi ke Redshift console
  • Klik redshift-cluster-1
  • Klik tab properties
  • Scroll ke bawah dan check bagian Network & Security untuk security group
  • Setelah sudah memastikan security group, Klik security group tersebut.
  • Lalu klik Inbound Rules, klik Edit inbound rules
  • Klik Add rules, pilih type Redshift untuk memperbolehkan airflow untuk mengakses redshift cluster. Kemudian di bagian source pilih custom lalu pilih security group nya airflow
  • Kemudian Klik Add rules 1 lagi lalu pilih type HTTPS untuk akses Amazon S3 lalu klik save rules
  • Berikut nya di bagian Outbond Rules, klik Edit outbound rules
  • Pastikan sudah ada oubound rules All TCP. Jika belum maka dibuat terlebih dahulu

Membuat schema dan table di Redshift

  • Pergi ke Redshift Query Editor
  • Klik Go to query editor v2 di bagian paling atas sebelah kanan
  • Di sebelah kiri klik redshift-cluster-1 lalu klik Create connection
  • Di bagian authentication pilih Database username dan password kemudian input database, username dan password kemudian create connection
  • Jalankan query di bawah ini untuk membuat schema dan table hasil transformasi data
--    Create nyc schema.
CREATE schema nyc;

CREATE TABLE IF not EXISTS nyc.green(vendorid bigint ,
lpep_pickup_datetime character varying(256),
lpep_dropoff_datetime character varying(256),
store_and_fwd_flag character varying(256),
ratecodeid bigint,
pulocationid bigint,
dolocationid bigint,
passenger_count bigint,
trip_distance double precision,
fare_amount double precision,
extra double precision,
mta_tax double precision,
tip_amount double precision,
tolls_amount double precision,
ehail_fee character varying(256),
improvement_surcharge double precision,
total_amount double precision,
payment_type bigint,
trip_type bigint);

Ok sudah selesai untuk artikel setup data infrastruktur nya. Di artikel berikut nya akan membahas cara pembuatan airflow dag python script.

--

--

Muhammad Saipul Rohman

Data Engineering, Data Science and Cloud Computing Enthusiast.