[Update] วิธี Deploy จากการ Upload S3 ไปยัง Elastic Beanstalk
สวัสดีครับ POP จากบริษัท Classmethod (Thailand) ครับ
การอัปโหลดไฟล์โปรเจกต์ที่มีขนาดใหญ่ไปยัง Elastic Beanstalk โดยตรงอาจต้องใช้เวลานาน แต่ถ้า Deploy โปรเจกต์โดยอัปโหลดไฟล์ผ่าน URL S3 (URL ที่เก็บไฟล์โปรเจกต์ใน S3 Bucket) ไปยัง Elastic Beanstalk จะทำให้การ Deploy โปรเจกต์ของเราเสร็จอย่างรวดเร็ว
สิ่งที่ต้องมี
EC2 Instance และโปรเจกต์ Laravel
※สร้าง EC2 Instance และเชื่อมต่อ Instance ด้วย Remote – SSH ใน VSCode แล้ว
※มีโปรเจกต์ Laravel บน EC2 และตั้งค่าที่จำเป็นเพื่อ Deploy Laravel ใน Elastic Beanstalk แล้ว
*ยังไม่ต้องทำหัวข้อ Deploy โปรเจกต์ Laravel ใน Elastic Beanstalk เนื่องจากต้องอัปโหลดไฟล์ ZIP ไปยัง S3 ก่อน แล้วค่อยทำขั้นตอน Deploy จาก S3 ไปยัง Elastic Beanstalk ในภายหลัง
การใช้ S3 จาก EC2 ด้วย AWS CLI S3
※EC2 ที่อัปโหลดไฟล์ ZIP มีการตั้งค่า IAM Role ไว้แล้ว
ครั้งนี้สร้าง S3 Bucket ชื่อ tinnakorn-upload
*หากมี EC2 Instance อยู่แล้ว สามารถสร้าง IAM Role สำหรับใช้ S3 จาก EC2 ได้ในภายหลังและเพิ่ม IAM Role ไปยัง EC2 ได้
สร้างไฟล์ ZIP
*กรณีที่ยังไม่ได้รันคำสั่งสร้างไฟล์ ZIP ให้ทำขั้นตอนนี้ด้วย แต่ถ้ารันคำสั่งสร้างไฟล์ ZIP ไปแล้ว ข้ามขั้นตอนนี้ไปได้เลย
รันคำสั่งสร้างไฟล์ ZIP ที่จะใช้ Deploy (เปลี่ยน [deploy_file_name.zip] ให้เป็นชื่อไฟล์ที่คุณต้องการ เช่น tinnakorn-laravel.zip เป็นต้น)
zip -r
: คำสั่งสร้างไฟล์ ZIP-x
: คำสั่งยกเว้นโฟลเดอร์หรือไฟล์เพื่อไม่ให้รวมใน ZIP
zip -r [deploy_file_name.zip] * .editorconfig .styleci.yml .ebextensions .platform -x \*/.git/\* vendor/\* node_modules/\* public/build/\* public/hot/\* public/storage/\* storage/\*.key Homestead.json Homestead.yaml npm-debug.log yarn-error.log .idea .vscode
อัปโหลดไฟล์ ZIP ไปยัง S3
อัปโหลดไฟล์ ZIP ไปยัง S3 (เปลี่ยน [deploy_file_name.zip] ให้ตรงกับชื่อไฟล์ Zip ของคุณ และเปลี่ยน [bucket_name] ให้เป็นของคุณ)
aws s3 cp [deploy_file_name.zip] s3://[bucket_name]/
เมื่ออัปโหลดไฟล์ ZIP ไปยัง S3 แล้ว ให้เข้าไปที่ S3 Bucket ของเรา จะเห็นว่ามีไฟล์ ZIP ถูกอัปโหลดมาเรียบร้อยแล้ว
แล้วดำเนินการ Deploy โปรเจกต์ Laravel จาก S3 Bucket ไปยัง Elastic Beanstalk ในขั้นตอนถัดไป
Deploy จาก S3 ไปยัง Elastic Beanstalk
สร้าง Application
ดูตัวอย่างสร้าง Application ที่ลิงก์ด้านล่างนี้
- ตัวอย่างการสร้าง Application : สร้าง Application ใน Elastic Beanstalk
สร้าง Environment
ดูตัวอย่างสร้าง Environment ที่ลิงก์ด้านล่างนี้
- ตัวอย่างการสร้าง Environment : สร้าง Environment ใน Elastic Beanstalk
สำหรับหัวข้อ Application code ใน "Step 1 - Configure environment" ให้ดูที่ด้านล่างนี้ เนื่องจากวิธีการระบุไฟล์แตกต่างกัน โดยเราสามารถเลือกไฟล์โปรเจกต์จาก S3 Bucket โดยเลือกและระบุที่ Public S3 URL
ในหัวข้อ "Application code" ได้ตามต้องการ
เข้ามาที่ S3 Bucket ที่อัปโหลดไฟล์โปรเจกต์ไปตอนแรก แล้วติ๊ก ✅
โปรเจกต์ที่จะใช้ Deploy และคลิกที่ Copy URL
แล้วนำ URL ที่คัดลอกมาจาก S3 วางที่ Public S3 URL
แล้วป้อนชื่อ Version label
และดำเนินการตั้งค่า Environment แต่ละ Step ตามต้องการ
หลังจากนี้ก็ตั้งค่าการสร้าง Environment ตามต้องการได้เลย
ทดสอบหน้าเว็บไซต์
เมื่อสร้าง Environment เสร็จแล้ว เปิด Domain บนเว็บเบราว์เซอร์จาก Elastic Beanstalk ก็จะแสดงหน้าจอแบบนี้
เพียงเท่านี้การ Deploy จากการ Upload S3 ไปยัง Elastic Beanstalk ก็เสร็จเรียบร้อยแล้ว
สรุป
การ Deploy โปรเจกต์จาก Public S3 URL
(URL ไฟล์โปรเจกต์ที่เก็บอยู่ใน S3 Bucket) จะใช้เวลาน้อยกว่าการ Deploy จาก Local file
หากมีไฟล์โปรเจกต์ขนาดใหญ่ที่ต้องการ Deploy ไปยัง Elastic Beanstalk เราขอแนะนำให้เลือกใช้วิธีตามบทความนี้ เนื่องจากจะช่วยให้การ Deploy โปรเจกต์เสร็จสิ้นอย่างรวดเร็ว
ผมหวังว่าบทความนี้จะเป็นประโยชน์ให้กับผู้อ่านได้นะครับ
POP (Tinnakorn Maneewong) จากบริษัท Classmethod (Thailand) ครับ !