Deploy Python Flask di AWS Elastic Beanstalk

Amazon AWS

Jika kita sudah mengenal Flask untuk membangun aplikasi berbasis web, tentunya kita juga tidak asing dengan bagaimana cara melakukan deployment aplikasi tersebut. Sangat banyak sekali artikel yang membahas tentang ini dan tentunya mungkin bagi kebanyakan orang awam atau pemula masih sedikit banyak kurang terlalu memahami konsepnya atau bahkan bisa dianggap terlalu rumit.

Tetapi, dengan munculnya berbagai macam cloud platform hal ini menjadi semakin mudah. Karena kebanyakan cloud provider sudah menyediakan banyak fitur yang dapat digunakan untuk berbagai tujuan termasuk melakukan deployment aplikasi dengan jauh lebih sederhana.

Berikut cara sederhana untuk melakukan deploy aplikasi Flask di AWS:

Persiapkan Virtual Enviroment

Sebenarnya ketika kita membuat sebuah environment di AWS Cloud9, secara default sudah terpasang banyak library python yang bisa kita gunakan. Tetapi mungkin kita hanya membutuhkan beberapa library saja untuk membangun aplikasi Flask sesuai dengan apa yang kita butuhkan.

Maka dari itu, ada baiknya kita membuat virtual environment sendiri secara manual agar ketika melakukan packing aplikasi maka hanya library yang dibutuhkan saja yang akan digunakan dan ukuran aplikasi menjadi tidak besar

$ mkdir eb-flask
$ cd eb-flask/
$ mkdir templates
$ python3 -m venv virt
$ source virt/bin/activate
$ pip install flask
$ pip freeze

Persiapkan Kode Flask di AWS Cloud9


AWS Cloud9 dapat dikatakan IDE yang disediakan oleh AWS. Di Cloud9 kita dapat menuliskan kode secara online dan langsung menjalankannya disana. Ini memudahkan kita untuk menuliskan kode yang dapat diakses langsung melalui internet sehingga kita tidak bingung soal penyimpanan.

Berikut contoh kode Flask yang akan kita deploy di AWS. Tempatkan file application.py di dalam folder eb-flask. Kemudian file index.html di dalam folder eb-flask/templates/. Kurang lebih strukturnya akan seperti ini:

Project
   |----- eb-flask
             |------- application.py
   |----- templates
             |------- index.html

Berikut kode sederhananya:

from flask import Flask, render_template

application = Flask(__name__)

@application.route('/')
def hello_world():
    return render_template('index.html')

if __name__ == '__main__':
    # Run on port 5000 and allow access from all addresses
    application.run(host='0.0.0.0', port=5000, debug=True)
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>AWS Test</title>
</head>
<body>
    <h1>Hello, World!</h1>
    <p>This is a deployment test</p>
</body>
</html>

Mencoba untuk Menjalankan Flask di Virtual Environment

Ada baiknya kita memastikan kode Flask yang kita buat bisa berjalan dengan baik. Jalankan kode Flask di atas virtual environment yang kita buat untuk memastikan library yang kita install di atasnya juga sudah sesuai dengan kebutuhan

$ python3 application.py

Kemudian coba buka browser dan akses IP atau URL dari instance AWS Cloud9 kita. Atau bisa menggunakan preview bawaan Cloud9.

Melakukan Deployment

Cara yang lebih sederhana untuk melakukan kode yang kita buat di AWS Cloud9 ke AWS Elastic Beanstalk adalah dengan menggunakan beberapa command sederhana. Nanti kode yang kita buat di AWS Cloud9 akan otomatis terdeploy di AWS Elastic Beanstalk.

$ pip freeze > requirements.txt
$ touch .ebignore
$ nano .ebignore
$ eb init -p python-3.9 flask-app --region ap-southeast-1
$ eb create flask-environtment

Tunggu prosesnya sampai selesai. Jika sudah, maka jika dilihat pada AWS Elastic Beanstalk akan terdapat satu environment yang terbentuk. Kita bisa mengakses aplikasi melalui domain yang tergenerate oleh AWS Elastic Beanstalk.

Jika kita melekaukan perubahan pada kode dan ingin melakukan update ke aplikasi yang sedang berjalan sekarang, kita cukup menggunakan perintah sederhana di bawah ini dan secara otomatis aplikasi akan ter-deploy dan ter-update.

$ eb deploy

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.