Herley Shaori
7 min readSep 14, 2022

Pengembangan Java Springboot menggunakan AWS CodePipeline dan AWS Fargate

Java Spring Framework (Spring Framework) adalah kerangka kerja yang populer dan open source (https://github.com/spring-projects/spring-boot) untuk membuat aplikasi yang berjalan di Java Virtual Machine (JVM). Java Spring Boot (Spring Boot) adalah alat yang membuat pengembangan aplikasi web dan layanan mikro dengan Spring Framework lebih cepat dan lebih mudah melalui tiga kemampuan inti:

1. Konfigurasi otomatis

2. Menyediakan berbagai konfigurasi.

3. Kemampuan untuk membuat aplikasi mandiri (standalone application).

Fitur-fitur ini bekerja sama untuk memberi Anda alat yang memungkinkan Anda mengatur aplikasi berbasis Spring dengan konfigurasi dan pengaturan minimal. Java spring boot adalah teknologi yang umum digunakan untuk Backend. Pada umumnya, Backend menghasilkan API (application programming interface) yang siap dikonsumsi oleh Frontend (baik layanan web atau mobile). Saya sendiri suka menggunakan kerangka kerja ini karena menurut saya, bahasa pemograman Java merupakan bahasa pemograman yang mudah dipahami secara intuitif, statically typed dan compiled.

Saat pengembangan perangkat lunak telah selesai pada tahap tertentu di komputer lokal Anda, tentu Anda ingin agar API yang telah Anda kembangkan dapat dikonsumsi oleh pihak lain secara aman, cepat dan mudah. Anda butuh layanan yang mampu menjawab tantangan berikut:

1. Mampu menampung kode program tim Anda.

2. Melakukan proses pembangunan kode program Anda. Misalnya, kalau di Java, melakukan kompilasi kode program .java sehingga menghasilkan berkas .jar.

3. Melakukan proses deployment aplikasi. Misalnya adalah menjalankan berkas .jar yang telah dikompilasi sebelumnya ke sebuah komputer server. Saya memilih deployment ke komputer server daripada laptop sendiri karena memang laptop tidak dirancang untuk menyala terus-menerus dan menangani fluktuasi API request.

Saya menggunakan layanan komputasi awan untuk menjawab tantangan tersebut. Pada tutorial ini, saya menggunakan AWS (Amazon Web Service) sebagai layanan komputasi awan.

Gambar 1:CodePipeline

Gambar 1 merupakan apa yang akan saya bangun. AWS CodeCommit adalah repositori kode program. Kode program saya akan saya push kesini. AWS CodeBuild adalah layanan pembangun kode program. Pada tutorial ini, saya butuh berkas .java saya, dikompilasi sedemikian sehingga saya mendapatkan berkas .jar. AWS CodeDeploy adalah layanan untuk membantu saya deploy berkas .jar yang sudah dikompilasi. Saya mengguanakan AWS Fargate sebagai sasaran deployment. Ketiga layanan ini dapat Anda cari pada panel pencarian AWS sebagai AWS CodePipeline.

Penulisan ini mengikuti urutan aliran dari CodePipeline yaitu dari CodeCommit, CodeBuild dan CodeDeploy.

AWS CodeCommit

AWS CodeCommit adalah repositori kode program. Fitur yang saya suka dari CodeCommit adalah pengaturan akses pengembang (developer) dapat dilakukan melalui AWS IAM. Kita juga dapat mengatur siapa yang boleh commit ke branch apa.

Gambar 2:Struktur Kode Program

Kode program yang ada pada Gambar 2, merupakan kode program pada komputer saya. Berkas yang penting dari struktur kode program diatas adalah:

1. buildspec.yml. Berkas ini digunakan oleh AWS CodeBuild untuk melakukan kompilasi kode program java, menghasilkan .jar, kemudian memberi tahu ECS nama kontainer yang telah dibuat.

2. Dockerfile. Berkas ini digunakan untuk membuat docker image.

3. pom.xml. Berkas berisi dependensi program lain yang digunakan pada program ini.

Saya sertakan tautan github kode program yang saya gunakan di artikel ini. Anda tidak perlu khawatir.

Silakan Anda membuat repositori kode program di AWS CodeCommit. Silakan masuk ke repositori yang telah Anda buat tersebut, kemudian clone repositori ini. Jika Anda menekan tombol clone, Anda kemudian dapat memilih Connection Steps. Connection Steps menjelaskan bagaimana cara Anda untuk terhubung ke AWS CodeCommit sedemikian sehingga Anda dapat mengunggah kode program Anda. Gambar 3 merupakan contoh connection step yang bisa langsung dicoba saat membuat repositori. Gambar 4 merupakan kode program yang sudah masuk ke repositori. Saya memberi nama repositori yang sudah saya buat dengan Hello-World-Repository.

Gambar 3:Contoh Connection Steps untuk Metode SSH di Linux.
Gambar 4:Kode Program yang berhasil masuk ke Repository

AWS CodeBuild

Saya menggunakan AWS CodeBuild untuk membangun kode program yang ada pada CodeCommit. Saya menggunakan bahasa pemograman Java. Saya perlu mendapatkan berkas .jar dari kode program saya.

AWS CodeBuild menggunakan buildspec.yml dalam membangun kode program. Berkas buildspec.yml berisi Anda dapat mengacu pada Gambar 4. Berkas buildspec.yml dibagi kedalam tiga bagian yaitu:

1. Fase prebuild. Pertama, fase ini saya gunakan untuk mencoba login ke ECR (Elastic Container Registry). Hal ini saya lakukan karena saya ingin proses gagal secepatnya apabila terjadi kesalahan konfigurasi (gagal login). Unggah ke ECR saya lakukan karena deployment target kita adalah AWS Fargate yang membutuhkan docker image. Kedua, saya melakukan pembangunan kode program Java melalui perintah mvn clean install. Perintah ini akan menghasilkan berkas .jar.

2. Fase build. Saya menggunakan fase ini untuk membangun docker image.

3. Fase postbuild. Saya menggunakan fase ini untuk mengeluarkan nama kontainer dan alamat dari docker image yang sudah dibuat. Informasi ini saya simpan kedalam berkas yang bernama imageexplanations.json.

AWS CodeDeploy

AWS CodeDeploy adalah layanan penerapan terkelola sepenuhnya yang mengotomasi implementasi penerapan perangkat lunak untuk berbagai layanan komputasi antara lain Amazon EC2, AWS Fargate, AWS Lambda, dan server yang dijalankan di lokasi (on premise server).

AWS Fargate membutuhkan docker image. Kita bisa membuat terlebih dahulu docker image kemudian menyimpannya ke ECR (elastic container registry). Saya membuat docker image di komputer lokal saya, kemudian saya push docker image ini ke AWS ECR. Pada tutorial ini, saya menggunakan sistem operasi UBuntu, bahasa pemograman java dan openjdk 8. Pastikan perintah javac dan java bisa dijalankan di komputer lokal Anda, jika tidak, besar kemungkinan Anda belum memasang Java.

Saya sudah memiliki docker image di AWS ECR. Docker image ini bisa kita daftarkan ke AWS Fargate supaya bisa diluncurkan. Saya juga ingin ketika ada perubahan kode program, kode program saya berubah secara otomatis hingga tahap deployment, hal ini dicapai dengan menggunakan AWS CodePipeline.

Gambar 5:Docker Image pada ECR

Gambar 5 merupakan docker image yang berhasil yang push ke ECR. Klik nama repositori Anda, kemudian tekan view push commands pada area sekitar pojok kanan atas. Langkah teknis untuk push kode program ini ke ECR akan ditampilkan. Pastikan semua langkah langkah ini telah Anda coba sebelumnya menggunakan awscli.

AWS Elastic Container Service Fargate

Cari di search bar Elastic Container Service. Buatlah sebuah klaster. Ada beberapa pilihan cluster template. Namun pada tutorial ini saya memilih Networking Only. Isi cluster name dengan nama apapun yang Anda sukai. Saya mengisikan Hello World Cluster sebagai nama klaster. Catat bahwa nama klaster hanya dapat mengandung huruf, angka dan tanda hubung (-) hyphen. Tekan Create. Selamat, Anda sudah memiliki sebuah klaster kosong yang siap diisi dengan service dan task.

Gambar 6:Klaster pada ECS Fargate

Mari kita deploy dulu docker image yang sudah kita taruh pada AWS Elastic Container Registry ke ECS. Pilih Task Definitions, kemudian pilih Create new Task Definition. Pada halaman Select launch type compatibility, pilih Fargate sebagaimana saya lampirkan pada Gambar 6. Lanjut ke halaman berikutnya dan lengkapi semua informasi yang dibutuhkan.

Jangan lupa untuk menambahkan Container Definitions. Isi informasi pada bagian ini dengan docker image yang sudah dibuat di AWS ECR. URL pada container berasal dari URI AWS ECR, tinggal copy dan paste saja. Expose port 5000. Port ini dapat diatur di application.properties pada aplikasi Java Springboot. Security group pada service juga harus mengizinkan port 5000 sebagai inbound connection.

Gambar 7:Task yang Sudah Berjalan

Baik, pembuatan task definition sudah selesai, sekarang kita membuat service. Silakan kembali ke Cluster, pilih tab Services dan tekan Create. Isikan konfigurasi dari servis yang diinginkan. Pada halaman selanjutnya, isi VPC dan subnet. Saya pilih subnet ap-southeast-1c dan ap-southeast-1a. Lewati konfigurasi Load Balancer. Maju hingga halaman terakhir dan buat servis. Setelah beberapa saat, kembali ke halaman Hello-World-Cluster, Hello-World-Service, pilih tab Task, klik tautan Task. Gulir ke bawah, maka Anda akan menemukan Task yang tadi diatur, saat ini sudah mendapatkan ip privat dan publik sebagaimana diberikan pada Gambar 7. Selamat saat ini docker image Anda sudah online (Gambar 8).

Gambar 8:Hello World

Catatan Galat:

Saya mengalami galat ecr:GetAuthenticationToken error. Contoh error yang saya dapatkan adalah seperti ini:

An error occurred (AccessDeniedException) when calling the GetAuthorizationToken operation: User: arn:aws:sts::xxx:assumed-role/codebuild-hello-world-sederhana-service-role/AWSCodeBuild-xxx is not authorized to perform: ecr:GetAuthorizationToken on resource: * because no identity-based policy allows the ecr:GetAuthorizationToken action.

Hal ini terjadi karena CodeBuild membutuhkan permission tambahan pada role yang telah dibuat (saya memilih pembuatan role otomatis pada saat konfigurasi CodeBuild). Solusi dari masalah ini adalah dengan menambahkan permission AmazonEC2ContainerRegistryFullAccess. Permission ini saya gunakan karena saya butuh membaca dan menulis ke ECR. Gambar 9 mendaftar permission yang saya gunakan untuk CodeBuild.

Gambar 9:Tampilan Role yang digunakan oleh CodeBuild.

Kode Program

Kode program bisa Anda akses di https://github.com/herley-shaori/Hello-World-Deploy-To-Fargate

Sign up to discover human stories that deepen your understanding of the world.

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

Herley Shaori
Herley Shaori

Written by Herley Shaori

I love to write about AWS and other related computer science topics.

Responses (1)

Write a response