AWS Elastic Beanstalk คืออะไร? การแนะนำฟังก์ชันล่าสุดของ AWS

นี่เป็นบทความแปล ที่มีเนื้อหามาจากบทความภาษาญี่ปุ่นของ Classmethod, Inc. ในหัวข้อ「AWS再入門ブログリレー2022 AWS Elastic Beanstalk編」 หากผู้อ่านสนใจอ่านเนื้อหาต้นฉบับสามารถอ่านได้ที่ลิ้งค์ "บทความที่เกี่ยวข้อง" ด้านล่าง เนื้อหาในบทความนี้การอธิบายบางอย่างจะถูกปรับให้เข้าใจง่ายขึ้นทำให้แตกต่างจากต้นฉบับในบางจุด
2022.06.17

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

สวัสดีครับทุกคน ซูกิคาเนะ ครับ

รายการนี้จะเขียนเกี่ยวกับ AWS ปี 2022 ฉบับเบื้องต้น โดยฝ่าย Consulting ของบริษัทเราเอง นี่เป็นบทความที่จะมาเล่าเกี่ยวกับเนื้อหา AWS Service มาเล่าใหม่อีกครั้งว่ามีอะไรถูกอัพเดทอะไรบ้างแล้ว
แบบละเอียด/เจาะลึกตั้งแต่เบสิกพร้อมคำอธิบาย โดยเหล่าสมาชิกที่เคยเขียนบทความเหล่านี้มาแล้ว

เหมาะสำหรับผู้ที่ต้องการเริ่มเรียนเกี่ยวกับ AWS หรือผู้ที่ใช้งาน AWS อยู่แล้ว แต่ต้องการหาความรู้ใหม่ว่าปี 2022 มีการอัพเดทอะไรบ้าง หากคุณใช่บุคคลเหล่านี้
ทางผู้เขียนก็หวังว่าบทความนี้จะเป็นประโยชน์สำหรับคุณครับ

งั้นก็ไปเริ่มกันเลยครับ Theme ในวันนี้คือ "AWS Elastic Beanstalk" ครับ

AWS Elastic Beanstalk คือ

ภาพรวม

AWS Elastic Beanstalk คือ Service ของ AWS ที่ใช้สำหรับ Deploy หรือ Scaling เว็บแอปพลิเคชั่นหรือบริการต่างๆ ที่พัฒนาโดยใช้ Java, .NET, PHP, Node.js, Python, Ruby, Go และ Docker บนเซิร์ฟเวอร์ที่คุ้นเคย เช่น Apache, Nginx, Passenger และ IIS โดยมี Environments ที่สามารถสร้างได้ แบ่งออกเป็น 2 ชนิดคือ Web server environments และ worker environments

  • Web server environments
    • Environments สำหรับสั่งใช้งาน Web API ที่จัดการ เว็บไซต์ เว็บแอปพลิเคชั่น หรือ HTTP Request
  • Worker environments
    • Environments สำหรับสั่งใช้งาน Worker Application ที่ใช้เวลาในการจัดการ Workload นานแบบ On-Demand หรือ จัดการงานต่างๆตามที่ Schedule กำหนดไว้

วิธีอ่านออกเสียง "AWS Elastic Beanstalk"

AWS อ่านออกเสียงว่า เอ-ดับเบิ่ลยู-เอส อ่านเร็วๆว่า เอ-ดา-เบส
Elastic อ่านออกเสียงว่า ออล-ล้าส-ส-ติก Beanstalk อ่านออกเสียงว่า บี้น-สุ-ตัก
โดยรวมกัน AWS Elastic Beanstalk อ่านออกเสียงว่า เอ-ดา-เบส ออล-ล้าส-ส-ติก บี้น-สุ-ตัก

จุดเด่น

AWS Elastic Beanstalk มีจุดเด่นดั่งต่อไปนี้ครับ

  • มีตัวเลือกในการ Deploy แอปพลิเคชันที่หลากหลาย
  • มี User Interface ที่ถูกรวมไว้เป็นหนึ่งเดียวสำหรับการใช้จัดการสถานะ Monitoring ของ แอปพลิเคชัน
  • สามารถรับ Platform เวอร์ชั่นล่าสุด หรือ New Patch ได้โดยอัตโนมัติ ด้วยการใช้ "Modify managed supdates"
  • สามารถปรับขนาดแอปพลิเชันให้ตรงกีบความต้องการโดยอัตโนมัติ ด้วยการใช้ ELB กับ Auto Scaling
  • สามารถเลือก AWS Resource ที่เหมาะสมที่สุดกับแอปพิลชันได้ (เช่น Spot Instance หรือ EC2 Instance)
  • มีแอปพลิเคชันที่หลากหลาย

platform ที่รองรับ

AWS Elastic Beanstalk มี platform ที่รองรับดั่งต่อไปนี้ครับ

  • .NET Core on Linux
  • .NET on Windows Server
  • Go
  • Java
  • Node.js
  • PHP
  • Python
  • Ruby
  • Tomcat

ในตอนที่สร้าง Environments ของ Elastic Beanstalk เราสามารถเลือกได้ว่าจะเอา Platform ไหน

โดยจากภาพด้านบนจะสังเกตเห็นได้ว่าเราสามารถเลือก "Custom platform" ได้ด้วย โดยการสร้าง platform ด้วยตนเองจะทำให้สามารถใช้งานภาษาที่ไม่ร้องรับ หรือ ใช้ Infrastructure software อื่นๆ สำหรับ platform application ได้
"Custom platform" สามารถสร้างได้โดยการสร้าง AMI ที่สร้างจาก OS ที่รองรับ(เช่น Ubunt, RHEL, Amazon Linux) แล้วนำไป customize แล้วใช้ Packer สร้าง platform ของตนเอง

องค์ประกอบหลัก

มีสององค์ประกอบใหญ่ๆที่ประกอบเป็น Elastic Beanstalk คือ "Environment" และ "Application" โดยมีความเกี่ยวข้องกันตามแผนภาพด้านล่างคือ จะมี "Application" เป็นหัวข้อหลัก แล้วในแต่ละ "Application" จะมี "Environment" อยู่

หน้าที่ของ "Application" คือ การอัพโหลดหรือควบคุมแอปพลิเคชันที่สร้างขึ้น
หน้าที่ของ "Environment" คือ กำหนดสภาพแวดล้อมที่แอปพลิเคชันที่ทำงานจริง

หรือสามารถดูหน้าต่าง Console เพื่อให้เห็นภาพมากขึ้น โดยภาพภาพที่เห็นต่อไปคือภาพฝั่ง "Application"
โดยในครั้งนี้ผมได้สร้างแอปพลิเคชันที่คือว่า "supanut-test-app" แล้วให้มี 2 "Environments" ชื่อว่า "supanut-test-app-env-1" และ "supanut-test-app-env-2"


โดยมีข้อควรระวังคือ ชื่อของ "Application" และ "Environment" ไม่สามารถซ้ำกันได้ ต่อให้เป็นคนละแอปพลิเคชันก็ตาม

วิธีการอัพโหลดแอปพลิเคชัน กับ Deploy ไปที่ Environments

หากท่านผู้อ่านอยากทำตาม Blog ตั้งแต่เริ่มต้น ทางผู้จัดทำแนะนำให้เริ่มที่หัวข้อ วิธีสร้างแอปพลิเคชัน
แล้วจึงกลับมาที่หัวข้อนี้ครับ

เมื่อเรากด Application versions ของแอปพลิเคชันเราเลือก จะแสดงให้เห็นแอปพลิเคชันที่อัพโหลดและที่ๆเรานำไป Deployed
โดยผมจะใช้ตัวอย่างเป็น cmth-website ซึ่งเป็นเว็บไซต์ของทาง Classmethod Thailand ครับ

(การจะเข้ามาหน้าต่างนี้ได้จำเป็นต้องมี Application ที่ถูก Created อยู่แล้ว)

โดยต่อจากนี้เราจะทำการ Upload และ Deploy แอปพลิเคชันกันครับ

วิธีการ Upload แอปพลิเคชัน

สำหรับวิธีการอัพโหลด ให้เรากดปุ่มUploadที่อยู่ขวาบนในหน้าต่างApplication versions

แล้วเราจะเห็นหน้าตางนี้เป็นหน้าต่างอัพโหลด โดยเพื่อให้เราแยกแยะได้ว่าคือการอัพโหลดอะไรให้ใส่ชื่อที่ "Version label:" และถ้าจำเป็นก็สามารถใส่คำอธิบายที่ "Description:" ได้ครับ
ไฟล์แอปพลิเคชันที่เลือกอัพโหลดจะอยู่ในรูป war/zip ครับ พอเราอัพโหลดเสร็จเวอร์ชั่นที่เราอัพก็จะถูกนำไปแสดงในหน้า Application versions โดยไฟล์แอปพลิเคชันที่อัพโหลดไปนั้นจะถูกนำไปจัดเก็บใน AWS S3 โดยอัตโนมัติ

วิธีการ Deploy แอปพลิเคชัน

แค่การอัพโหลดเฉยๆจะไม่สามารถ Deploy ไปยัง Environment ที่ใช้อยู่ได้
การจะ Deploy นั้น ต้องกดไปที่ label Actions แล้วไปที่ Deploy

โดยผมจะลอง deploy ไปที่ Environment "cmth-website-develop" ที่ใช้อยู่นะครับ

โดยเราสามารถตรวจสอบสถานะการ Deploy ได้ที่ Elastic Beanstalk > Environments > แอปพลิเคชันของเรา

หากยังอยู่ในกระบวนการ Deploy ตรง Health จะเป็นเป็นสัญลักษณ์หมุนสีเทาๆ
ถ้า Deploy เสร็จแล้วจะเป็นสัญลักษณ์เครื่องหมายถูกสีเขียวตามในภาพ
ถ้าเป็นสัญลักษณ์สีแดง หมายความว่าเกิดปัญหาขึ้น เราสามารถกดปุ่ม "Causes" เพื่อดูสาเหตุได้

พอ Deploy เสร็จสิ้นก็จะแสดงให้เห็นในหน้าต่าง Application versions

สำหรับการ Upload และ Deploy แอปพลิเคชันก็มีเพียงเท่านี้ครับ โดยถ้าสรุปอย่างง่ายๆ ก็มีแค่การอัพโหลดไฟล์แล้วก็เลือก Environment ที่จะไป Deploy แค่นี้เองครับ โดยในบทต่อไปเราจะมาแนะนำวิธีสร้างแอปพลิเคชันกันครับ

วิธีสร้างแอปพลิเคชัน

สำหรับผู้ที่ไม่เคยใช้ Amazon Elastic Beanstalk มาก่อน หรือ ไม่มีรายชื่อ Application ในหน้า Applications
กรุณาคลิกที่นี่
สำหรับผู้ที่มีรายชื่อ Application ในหน้า Applications
กรุณาคลิกที่นี่

สำหรับผู้ที่ไม่มีรายชื่อ Application ในหน้า Applications



หากเรากด Create Application ในหน้าต่างนี้ จะเข้าสู่หัวข้อ Getting started ซึ่งจะเป็นหน้าการสร้างแอปพลิเคชันที่มีหัวข้อที่แตกต่างจากการสอนในบทความนี้

ทางผู้จัดทำจึงขอรวบวิธีใช้วิธีการ Create application เป็นวิธีเดียวเพื่อง่ายต่อการอธิบาย โดยให้ผู้อ่านที่ลองทำตามเข้าไปยังหน้าต่าง Create application โดยใช้ URL ดังต่อไปนี้เพื่อเข้าไปยังหน้า Create application แทน
https://ap-southeast-1.console.aws.amazon.com/elasticbeanstalk/home?region=ap-southeast-1#/createNewApplication   (หากผู้อ่านใช้งาน region อื่น อย่าลืมเปลี่ยน URL ในส่วน region ด้วย)     

สำหรับผู้ที่มีรายชื่อ Application ในหน้า Applications

เราสามารถแอปพลิเคชันได้โดยการเข้าไปที่ฟังชัน Applications แล้วกด Create a new application

เริ่มการสร้างแอปพลิเคชัน


เมื่อเราเข้ามาถึงหน้านี้จะเห็นว่าจะมีแค่ให้เราใส่ "Application name" "Description" และถ้าจำเป็นก็ใส่ Tag พอเราสร้างเสร็จแล้วกดCreate แอปพลิเคชันของเราก็จะไปขึ้นโชว์ที่ List ในหน้า "All Application"
สำหรับขั้นตอนการสร้าง Application ก็มีเพียงเท่านี้ครับ

วิธีสร้าง Environments

เราสามารถสร้าง environment จาก application ได้โดยการเข้าไปที่ ✅เลือกแอปพลิเคชันที่เราจะสร้าง environment
กด Actions กด Create environment

แล้วจะมีให้เราเลือก environment tier โดยครั้งนี้ผมจะใช้ Web server environment ครับ

พอเราเลือก environment tier เราจะต้องเขียน Environment name และ Description
เราสามารถกำหนดชื่อของ Domain ได้ ถ้าเราไม่ตั้ง ชื่อของ Domain จะถูกตั้งโดยอัตโนมัติเป็น [environment name].xxxx.[ชื่อRegion].elasticbeanstalk.com

หากคุณผู้อ่านต้องการเข้าถึงด้วย Domain ของคุณผู้อ่านเอง ให้คุณผู้อ่านระบุ "[environment name].xxxx.[ชื่อRegion].elasticbeanstalk.com"
ใน CNAME Record ใน DNS ของ Domian ของคุณผู้อ่านเอง หากคุณผู้อ่านใช้ Route 53 ในการจัดการโดเมนของคุณผู้อ่าน คุณผู้อ่านสามารถใช้ Alias Target แทนได้
หากคุณผู้อ่านต้องการเข้าใจถึงความแตกต่างของ CNAME Record ของ Route 53 กับ Alias Target สามารถดูได้ในลิ้งค์ด้านล่างนี้
(แต่ถ้าจะให้อธิบายให้เข้าใจง่ายๆก็คือ Alias Target แตกต่างจาก CNAME Query ตรงที่ไม่เสียตัง)

ในขั้นต่อไปเราสามารถเลือก platform กับ แอปพลิเคชันที่จะ Deploy ได้ครับ ถ้าไม่ต้องการตั้งค่าอะไรเพิ่มเติมก็ให้กด Create environment ได้เลยครับ แต่ถ้าอยากจะตั้งค่าแบบละเอียดก็สามารถกดได้ที่Configure more options ครับ

หากเรากด Configure more options จะถูกส่งไปอีกหน้านึงที่สามารถตั้งค่า Preset หรือ Category ต่างๆ ได้อย่างละเอียด

รายการที่สามารถตั้งค่าได้

ในหมวด Configure more options ผมได้จัดทำตารางว่ามีหมวดหมู่การตั้งค่าอะไรบ้างมาให้ดูแล้วครับ

category ตัวอย่างเนื้อหาการตั้งค่าที่สามารถทำได้
Software Proxy server, AWS X-Ray, S3 log storage, Instance log streaming to CloudWatch Logs, Environment properties
Instances Root volume (boot device), Instance metadata service (IMDS), EC2 security groups
Capacity Auto scaling group setting(Fleet composition, Instance types, AMI ID, Availability Zones), Scaling triggers
Load balancer Load balancer type, Listener, process, role, Log save settings
Rolling updates and deployments Application deployment policy, Configuration updates, Deployment preferences(health check, Command timeout)
Security Service role, Virtual machine permissions(EC2 key pair, IAM instance profile)
Monitoring Health reporting, Health event streaming to CloudWatch Logs
Managed Updates Managed platform updates, Update level, Instance replacement
Notifications Email notifications
Network Virtual private cloud (VPC), Instance subnets or ELB, Database subnets
Database RDS Database settings(Engine, Instance class, Storage, MultiAZ), Database deletion policy
Tags environments resource tags

Rolling updates and deployments

จากในตารางด้านบน สิ่งที่เราอยากจะให้คุณผู้อ่านเข้าใจเป็นพิเศษก็คือ "Rolling updates and deployments" โดยเจ้านี้จะมีหน้าที่ในการกำหนดว่า เมื่อมีการ Deploy แอปพลิเคชันใหม่ไปที่ environment ที่มีอยู่แล้วจะแสดงผลอย่างไร หรือ เมื่อมีการปรับโครงสร้างของ environment เดิม จะต้องปรับการตั้งค่าอย่างไร

Application deployments

มีทั้งหมด 5 แบบครับ

  • All at once
  • Rolling
  • Rolling with additional batch
  • Immutable
  • Traffic splitting: อนุญาตให้แค่ ALB ไม่สามารถใช้กับ NLB กับ CLB

โดยสามารถดูการเปรียบเทียบได้ที่ลิ้งค์ด้านล่างนี้ครับ

ถ้าจะให้พูดถึง Policy นึงที่น่าสนใจคือ Immutable (ไม่สามารถเปลี่ยนได้)
Immutable มีผลกระทบต่อ environment การทำงานเพียงเล็กน้อย แต่ต้องใช้เวลาในการ Deploy เนื่องจากจำเป็นต้องเปลี่ยน environment ที่สร้างเรียงกันให้ไปในทางทิศเดียวกัน
หากไม่ต้องการให้มีผลกระทบต้องผู้ใช้งานแอปพลิเคชัน ก็สามารถเลือก Policy ที่เน้นผลกระทบน้อยลง
และหากไม่มีปัญหาแม้ว่าจะได้รับผลกระทบจาก environment การพัฒนา ก็สามารถเลือก Policy ที่เน้นความเร็ว

Configuration updates

มีทั้งหมด 4 แบบครับ

  • Disabled
  • Rolling Based on Health
  • Rolling Based on Time
  • Immutable

โดยสามารถดูการเปรียบเทียบได้ที่ลิ้งค์ด้านล่างนี้ครับ

การใช้ Blue/Green deployment ด้วย Elastic Beanstalk

นอกจาก Deployment policies(Disabled, Rolling Based on Health, Rolling Based on Time, Immutable) ด้านบนแล้ว ยังมี Blue/Green deployment ที่สามารถใช้ได้ผ่านฟังก์ชันอื่น โดยอยู่ที่ "Swap environment URLs"

ตอนที่สร้าง environment เราสามารถสลับ environment URL ที่กำหนด โดยกดเลือก environment URL ที่ต้องการสลับ แล้วกด Swap

DNS ที่ควบคุมอยู่ก็สามารถใช้ Blue/Green deployment ได้ แต่จุดสำคัญคือ Elastic Beanstalk สามารถใช้งานได้ด้วยฟังก์ชันของมันเอง
มีอีกจุดระวังก็คือ URL สามารถเปลี่ยนได้ แต่ชื่อ environment จะไม่เปลี่ยนตาม อาจจะทำให้งงกันได้

EB CLI

บทที่ผ่านมาเราเรียนรู้เกี่ยวกับการใช้ AWS Elastic Beanstalk ผ่าน AWS Management Console มาแล้ว
คราวนี้เราจะมาเรียนเกี่ยวกับ EBI CLI ที่เป็น Command Line Tool ของ Elastic Beanstalk โดยเฉพาะกันครับ(แต่ Elastic Beanstalk เองก็สามารถใช้ผ่าน AWS CLI หรือ SDK ได้เหมือนกันครับ) สำหรับใครที่อยากใช้ Elastic Beanstalk จนแตกฉาน ก็ขอแนะให้ไปลองใช้กันครับ

วิธีการติดตั้ง (Mac, Windows)

สำหรับ MacOS

สำหรับ Windows

การตั้งค่าเริ่มต้น (eb init)

พอ Install EB CLI เสร็จแล้วให้ให้คำสั่ง eb init แล้วเลือก Region, การตั้งค่า Project Directory และแอปพลิเคชันที่จะใช้ควบคุม

การจัดการ Environments

เมื่อเราตั้งค่าเริ่มต้นเสร็จสิ้นแล้วจะต้องใช้คำสั่งต่างๆเพื่อควบคุม หรือ จัดการ Environments

ในกรณีต้องการตั้งค่าแบบละเอียด(.ebextensions)

ในบางครั้งเราอาจจะจำเป็นต้อง Customize การส่งเมลล์ผ่าน EC2 Instance หรือ การวางไฟล์ตั้งค่าไว้ที่ S3, EFS ในตอนที่ Deploy บ้าง
สิ่งที่ไม่สามารถทำผ่าน Console ได้ เราสามารถใช้ผ่าน ebextensions ได้ครับ
โดยถ้าให้อธิบายก็คือ เราจะสร้าง Directory ที่ชื่อว่า .ebextensions แล้วสร้างไฟล์ใส่ไว้
แล้วอัพโหลดไฟล์ zip ที่รวมแอปพลิชันไว้อยู่ใส่ไว้ในโฟล์เดอร์ จะทำให้ที่ๆเรา Deploy ถูกอัพเดทไปด้วยตามไฟล์ที่อัพ

ตัวอย่างไฟล์ที่จะใส่ใน .ebextensions

ชื่อไฟล์: .ebextensions/network-load-balancer.config

option_settings:
  aws:elasticbeanstalk:environment:
    LoadBalancerType: network

โดยตามที่เขียนด้านบน คือการตั้งค่าประเภทของ Load Balancer ของ environment ให้เป็น Network Load Balancer ครับ
แต่การตั้งค่าแบบนี้ สามารถทำได้ทั้งใน AWS Management Console และ AWS CLI ทำให้จะมีลำดับความสำคัญของแต่ละการตั้งค่า ซึ่งจะอยู่ในหัวข้อต่อไปครับ
(คือถ้าการตั้งค่าในแต่ละที่มันต่างกัน AWS Elastic Beanstalk จะเลือกใช้อันไหนเป็นหลักนั่นเอง)

ลำดับความสำคัญของการตั้งค่าตอนสร้าง Environments

ที่จะเขียนต่อจากนี้เป็นลำดับความสำคัญ เรียงจากมากสุดไปน้อยสุดครับ

  • การตั้งค่าที่ถูกปรับใช้งานให้กับ environment โดยตรงทันที - การถูกปรับการตั้งค่าโดย Client ที่เรียกใช้ Elastic Beanstalk API ผ่าน Elastic Beanstalk console, EB CLI, AWS CLI หรือ SDK ในตอนที่สร้าง หรือ อัพเดท environment
  • การตั้งค่าที่ถูกบันทึกไว้ - การตั้งค่าที่จะถูกโหลดจากการตั้งค่าที่ถูกบันทึกไว้ หากไม่ถูกระบุใน Option การตั้งค่าของที่ถูกปรับใช้งานให้กับ environment โดยตรงทันที(อันด้านบนนี้)
  • ไฟล์การตั้งค่า (.ebextensions) - การตั้งค่าจะถูกโหลดจากการตั้งค่าที่ถูกบันทึกไว้จากไฟล์ .ebextensions ของโฟล์เดอร์การตั้งค่าที่อยู่ใน root ของ Application source bundle หากไม่ถูกระบุใน Option การตั้งค่าของที่ถูกปรับใช้งานให้กับ environment โดยตรงทันที หรือ  การตั้งค่าที่ถูกบันทึกไว้(อันด้านบนนี้)

โดยไฟล์จะถูก Run ตามลำดับของตัวอักษร เช่น .ebextensions/01run.config จะถูก Run ก่อน .ebextensions/02run.config
* ค่า Default - ถ้าในการตั้งค่าในด้านบนที่กล่าวมาไม่ได้ถูกตั้งค่าไว้ และ การตั้งค่าของตัว Object มีค่า Default อยู่ จะถูกปรับใช้ตามค่าที่กำหนดในนี้

การตั้งค่า Ebextensions สำหรับ OS ของ EC2 Instance ของคุณ

ถ้าใส่ Key ที่เขียนอยู่ด้านล่างนี้ จะทำให้สามารถ Customize EC2 Instance ของ OS นั้นๆ ได้

กรณีของเซิร์ฟเวอร์ Linux

Key สิ่งที่ทำได้
packages ดาวน์โหลดและ Install แพ็คเกจ Application กับ Component
groups สร้าง Group ของ Linux/UNIX แล้วกำหนด Group ID
users สร้าง User ของ Linux/UNIX ใน EC2 Install
sources ดาวน์โหลด Archive file จาก Public URL แล้ว Unzip ที่ Target Directory ใน EC2 Instance
files สร้างไฟล์ใน EC2 Instance
commands Run คำสั่งใน EC2 Instance
services กำหนด Services ที่จำเป็นต้อง Started หรือ Stopped เมื่อ Instance เริ่มขึ้น
container_commands Run คำสั่ง ที่มีผลกระทบต่อ source code ของ application ใช้ `leader_only` เพื่อ Run คำสั่งใน Instance 1 ตัว, Run คำสั่ง กำหนดการตั้งค่าเป็น `true` สำหรับให้ test command แสดงผลออกมาเป็น `test`
[หมายเหตุ] คำสั่ง `leader_only` จะมีผลในแค่ในตอนสร้าง environment หรือ deploy เท่านั้น คำสั่งอื่น หรือ Server customization operation จะถูก Run เมื่อ Instance provisioned หรือ อัพเดท คำสั่ง `leader_only` จะไม่ถูก Run ตามการปรับเปลี่ยนของการตั้งค่าเริ่มต้นของ AMI ID หรือ ประเภท Instance

กรณีของเซิร์ฟเวอร์ Windows

Key สิ่งที่ทำได้
packages ดาวน์โหลดและ Install แพ็คเกจ Application กับ Component
sources ดาวน์โหลด Archive file จาก Public URL แล้ว Unzip ที่ Target Directory ใน EC2 Instance
files สร้างไฟล์ใน EC2 Instance
commands Run คำสั่งใน EC2 Instance
services กำหนด Services ที่จำเป็นต้อง Started หรือ Stopped เมื่อ Instance เริ่มขึ้น
container_commands ใช้ Key container_commands เพื่อ Run คำสั่งที่มีผลกระทบต่อ source code ของ application ใช้ Option ของ leader_only เพื่อ Run คำสั่งใน Instance 1 ตัว, Run คำสั่ง กำหนดการตั้งค่าเป็น `true` สำหรับให้ test command แสดงผลออกมาเป็น `test` [หมายเหตุ] คำสั่ง `leader_only` จะมีผลในแค่ในตอนสร้าง environment หรือ deploy เท่านั้น Command อื่น หรือ Server customization operation จะถูก Run เมื่อ Instance provisioned หรือ อัพเดท

ebextensions เป็นศาสตร์ที่ลึกซึ้งครับ แต่มี Sample เตรียมไว้ให้ศึกษาอยู่ครับ โดยสามารถดูได้ที่ลิ้งค์ด้านล่างสุดที่อยู่ใน บทความที่เกี่ยวข้องนะครับ

การใช้ Custom Amazon Machine Image (AMI)

Custom AMIs ยังสามารถใช้ในแนวทางในการ Customize environment ที่แตกต่างได้ด้วยครับ

Monitoring

ในหัวข้อนี้เราจะมาแนะนำวิธีการ Monitoring ของ Elastic Beanstalk environment ครับ

หน้าต่าง Monitoring Environments

ในหน้าต่าง Console ของ แอปพลิเคชันของเรา เราสามารถเลือกฟังก์ชัน Monitoring เพื่อตรวจสอบสถานะต่างๆจาก Dashboard ได้

Health report

ในหน้าต่าง Console ของ แอปพลิเคชันของเรา เราสามารถเลือกฟังก์ชัน ชื่อแอปพลิเคชันของเรา เพื่อตรวจสอบสถานะ "Health" ได้

โดยจะมีสีต่างๆแสดงสถานะอยู่

สี คำอธิบาย
เทา อยู่ในระหว่างอัพเดท environment
เขียว environment ผ่าน Health Check ครั้งล่าสุด มี Instance อย่างน้อย 1 ตัวใน environment ที่ทำงานได้ และ กำลังรับ Request ต่างๆอยู่
เหลือง มี Instance อย่างน้อย 1 ตัวใน environment ของแอปพลิเคชันเราไม่ผ่าน Health Check หรือ มี Request บางอย่างที่ส่งไป environment เกิดความล้มเหลว
แดง มี Instance อย่างน้อย 3 ตัวใน environment ของแอปพลิเคชันเราไม่ผ่าน Health Check, Resource ของ environment ไม่สามารถใช้งานได้ หรือ Request บางอย่างที่ส่งไป environment เกิดความล้มเหลวอย่างต่อเนื่อง

ในหน้าต่างของ Health สามารถตรวดสอบสถานะของแต่ละ Instance ได้

Alarm Control

เราสามารถตั้งค่า Alarm ได้จากไอค่อน กระดิ่ง ในหน้าต่าง Monitoring

อ้างอิง: การควบคุม Alarm AWS Offical Document
https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features.alarms.html

เราสามารถตรวจสอบ Alarm ได้จากฟังก์ชัน Alarm ครับ

ดูประวัติการเปลี่ยนแปลงของ Elastic Beanstalk

ในส่วน Top ของฟังก์ชันจะมี Change history ที่สามารถตรวจสอบ Change history ที่อยู่ใน Region นั้นๆได้

ดู Streaming Event ของ Elastic Beanstalk Environments

เราสามารถตรวจสอบ Events ที่อยู่ในแต่ละ environment ได้ที่ฟังก์ชัน Event ครับ

ดู Logs ของ Amazon EC2 Instance ใน Elastic Beanstalk Environments

ในฟังก์ชัน Logs เราสามารถ Request Log ที่อยู่ใน Instance ทั้งหมดได้ โดยสามารถตรวจสอบได้โดยไม่ต้อง Login ครับ
Logs จะถูกบันทึกในตำแหน่งมาตรฐาน ของ Amazon EC2 Instance ที่อยู่ใน environment โดยจะมี Logs ตามด้านล่างนี้ที่ถูกสร้างจาก Elastic Beanstalk

Linux

  • /var/log/eb-activity.log
  • /var/log/eb-commandprocessor.log

Windows Server

  • C:\Program Files\Amazon\ElasticBeanstalk\logs\
  • C:\cfn\logs\cfn-init.log

Logs เหล่านี้นั้น มี Message ที่เกี่ยวกับการตั้งค่าไฟล์, Message ที่เกี่ยวกับ Deployment activity ปะปนอยู่ครับ
แต่ละแอปพลิเคชัน กับ Web Server จะมี Logs อยู่ในโฟลเดอร์ที่ถูกกำหนดไว้แล้ว

  • Apache/var/log/httpd/
  • IISC:\inetpub\wwwroot\
  • Node.js/var/log/nodejs/
  • nginx/var/log/nginx/
  • Passenger/var/app/support/logs/
  • Puma/var/log/puma/
  • Python/opt/python/log/
  • Tomcat/var/log/tomcat8/

ค่าใช้จ่าย

ตัว AWS Elastic Beanstalk Service นั้นไม่มีการเสียค่าใช้จ่ายเพิ่มเติมครับ
แต่จะมีค่าใช้จ่ายในส่วนของ AWS Resource ต่างๆ ในที่เกิดจาก Run แอปพลิเคชันที่ถูกสร้างหรือจำเป็นต่อการจัดเก็บใช้งานเช่น EC2, S3, ELB, RDS โดย AWS Elastic Beanstalk เท่านั้นเองครับ

สรุป

เป็นยังไงกันบ้างครับสำหรับบทความ AWS Elastic Beanstalk สำหรับผมนับเป็น Service ที่มีประโยชน์กันมากเลยทีเดียว โดยเราสามารถสร้าง Run แอปพลิเคชันต่างๆที่เราคุ้นเคย โดยไม่จำเป็นลงมือจัดการอะไรหลายๆอย่าง แค่เราเลือกประเภทภาษาและเซิฟเวอร์ที่ใช้ เราสามารถเตรียม Environment สำหรับการใช้งานจริงได้แล้ว
และยังมีในการควบคุมจัดการที่สามารถพ่วงกับ Services อื่นๆของ AWS ได้อีก ใครที่สนใจศึกษาเพิ่มเติมสามารถดูได้ที่บทความที่เกี่ยวข้องด้านล่างกันได้นะครับ

บทความที่เกี่ยวข้อง

บทความที่เกี่ยวของภาษาญี่ปุ่น