วิธีการ deploy Flask application ขึ้นบน AWS โดยใช้ Elastic Beanstalk
AWS และ Elastic Beanstalk
Elastic Beanstalk ของ AWS คือ service ของ AWS ที่ใช้สำหรับการ deploy และ scaling web applications และ service ต่างๆ ที่พัฒนาด้วยภาษาคอมพิวเตอร์เช่น Java, .NET, PHP, Node.js, Python, Ruby, Go, หรือ Docker เป็นต้น
เราสามารถ upload code โปรเจคของเราได้อย่างง่ายๆ ด้วย Elastic Beanstalk ซึ่งจะจัดการติดตั้ง dependency ที่จำเป็นให้แบบอัตโนมัติตามที่เราตั้งค่าไว้ใน config file อีกทั้งยังจัดการเรื่อง capacity provisioning, load balancing, auto-scaling, health monitoring ให้อย่างเรียบร้อยในเวลาเดียวกัน อีกทั้งคุณยังสามารถเข้าไปจัดการตั้งค่าแบบ manual ในส่วนที่ Elastic Beanstalk ตั้งค่าไว้ให้ได้อีกด้วยถ้าเราต้องการ custom config เอง
สิ่งที่ต้องเตรียมก่อน deploy
- Account ของ AWS
- โปรเจค flask ที่เราทำ
- Requirement.txt (ใช้คำสั่งนี้ในการสร้าง pip freeze > requirements.txt)
- Config file ของ AWS (อยู่ใน ~/.aws/config ถ้าไม่เจอใช้ vim สร้างเองได้)
โดย blog นี้เราจะไม่พูดถึงการสมัคร AWS ถือว่าทุกคนมี Account แล้ว ส่วนโครงสร้างโปรเจคเรา ให้จัดตามนี้
~/flask_market/
|-- virt (environment for application)
|-- application.py
|-- requirements.txt (dependency for application)
โดย default EB จะมองหา ตัวแปล กับ ชื่อไฟล์ ที่ใช้รัน web app เป็นชื่อ application
ขั้นตอน deploy บน AWS
1. ติดตั้ง Elastic Beanstalk CLI ลงบนเครื่อง
1.1 รันคำสั่งใน CMD ดังนี้
1.2 ใส่ path ใน environment variables ของ window
1.3 ตรวจว่า Elastic Beanstalk CLI ได้ลงเรียบร้อย
2. Set ค่า config ใน ~/.aws/config ดังนี้
[cmth_dev_profile] aws_access_key_id = XXXXXXXXXXXXX aws_secret_access_key = XXXXXXXXXXXX
3. ใส่คำสั่ง eb init flask-market --profile cmth_dev_profile --interactive
3.1 หลังจากนั้น เลือก region เป็น 7 ( singapore )
eb init <ชื่อ environment> --profile <ชื่อ profile ที่ตั้งไว้ใน config>
3.2 ต่อไปคือถามว่าใช้ python ได้หรือไม่ ให้เราเลือก Y
3.3 จากนั้นเลือก 2 ( Python 3.7 running on 64bit Amazon Linux 2 เลือกตาม version ที่ตัวเองใช้ )
3.4 ต่อไปคือถามว่าใช้ CodeCommit มั้ย ให้เราเลือก N ( ถ้าโปรเจคของเราเขียนเป็นทีมก็ให้เลือก Y )
3.5 ต่อไปคือถามว่าใช้ SSH มั้ย ให้เราเลือก Y
3.6 ต่อไปคือเลือก key pair ที่เราต้องการ ในที่นี้คือ aws-web-training-satang
4. ใส่คำสั่ง eb create flask-market --profile cmth_dev_profile
5. ตรวจเว็บไซต์ของเราใน AWS ถ้าขึ้นตามนี้ก็แสดงว่าการ deploy เสร็จเรียบร้อย
สรุป
จากการทดลอง deploy โดยใช้ Elastic Beanstalk CLI ของ AWS แล้วจะเห็นได้ว่าขั้นตอนต่างๆไม่ได้ซับซ้อนกว่าที่คิดเพราะว่าทุกอย่าง Elastic Beanstalk จะสร้างให้ตามที่เราตั้งค่าไว้ในคำสั่ง หวังว่าทุกคนจะลองไปทดลองทำตามขั้นตอนดูนะครับ
ข้อมูลอ้างอิง
https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create-deploy-python-flask.html
https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/eb-cli3-install-windows.html