วิธี Deploy จากการ Upload S3 ไปยัง Elastic Beanstalk

การอัปโหลดไฟล์ Zip ที่เป็นไฟล์โปรเจกต์ไปเก็บที่ S3 Bucket เตรียมไว้ก่อน แล้ว Deploy โดยการอัปโหลดจาก S3 Bucket ไปยัง Elastic Beanstalk จะทำให้โปรเจ็กต์ของเรา Deploy ได้อย่างรวดเร็ว ทันใจ โดยเฉพาะโปรเจกต์ที่มีขนาดใหญ่แนะนำให้ใช้วิธีในบทความนี้เลยครับ

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

ครั้งนี้ผมจะมาแนะนำ วิธี Deploy จากการ Upload S3 ไปยัง Elastic Beanstalk ครับ เนื่องจากว่าการอัปโหลดไฟล์โปรเจกต์ที่มีขนาดใหญ่ไปยัง Elastic Beanstalk โดยตรงจะทำให้ต้องใช้เวลานาน แต่ถ้า Deploy โปรเจกต์โดยอัปโหลดไฟล์ผ่าน URL S3 (URL ที่เก็บไฟล์โปรเจกต์ใน S3 Bucket) ไปยัง Elastic Beanstalk ก็จะทำให้การ Deploy โปรเจกต์ของเราเสร็จอย่างรวดเร็ว ผมเห็นว่าวิธีนี้เป็นวิธีที่น่าสนใจมากๆ จึงอยากมาแนะนำในบทความนี้ครับ ! ไปเริ่มกันเลยครับ

สิ่งที่ต้องมี

  • มีไฟล์โปรเจกต์ Laravel บน EC2 (ดูตัวอย่างได้ที่ด้านล่างนี้ครับ)


  • EC2 ที่อัปโหลดไฟล์ Zip มีการ ตั้งค่า IAM Role ไว้ (ดูตัวอย่างได้ที่ด้านล่างนี้ครับ)

สร้างไฟล์ Zip และอัปโหลดไปยัง S3

สร้าง Bucket ขึ้นมาเพื่อจัดเก็บไฟล์ Deploy ใน S3 ในตัวอย่างนี้จะใช้ชื่อว่าtinnakorn-upload

จากนั้นให้รันคำสั่งด้านล่างนี้เพื่อสร้างไฟล์ Zip ที่จะใช้ Deploy ครับ (เปลี่ยน [deploy_file_name.zip] ให้เป็นชื่อไฟล์ที่คุณต้องการ เช่น 20220720_1010.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 (เปลี่ยน [deploy_file_name.zip] ให้ตรงกับชื่อไฟล์ Zip ของคุณ และเปลี่ยน [bucket_name] ให้เป็นของคุณ)

aws s3 cp [deploy_file_name.zip] s3://[bucket_name]/

เมื่ออัปโหลดไฟล์ Zip ขึ้นไปแล้ว ให้เข้าไปที่ S3 Bucket ของเรา จะเห็นว่ามีไฟล์ Zip ของเราถูกอัปโหลดมาเรียบร้อยแล้วครับ

ขั้นตอนต่อไปคือการ Deploy โปรเจกต์ Laravel จาก S3 Bucket ไปยัง Elastic Beanstalk

Deploy จาก S3 ไปยัง Elastic Beanstalk

ทำการสร้าง Application ใน Elastic Beanstalk เตรียมไว้ และสร้าง Environment ใน Application ของเราครับ

ตัวอย่างการสร้าง Environment : การสร้าง Environment ใน Elastic Beanstalk

ขั้นตอนการ Upload ไฟล์ Zip ของลิงก์นี้มีการเปลี่ยนแปลง ผมจึงเขียนไว้ในขั้นตอนถัดไปครับ

Deploy จาก S3 ไปยัง Elastic Beanstalk

เข้ามาที่ S3 Bucket ของเรา ติ๊กโปรเจกต์ที่จะใช้ Deploy และคลิกที่Copy URL

นำ URL ที่ Copy มาจาก S3 มาวางที่ ◉ Public S3 URL และทำการตั้งค่า Configure more options ตามที่คุณต้องการ

สรุป

การอัปโหลดไฟล์ Zip ที่เป็นไฟล์โปรเจกต์ไปเก็บที่ S3 Bucket จะใช้เวลาอัปโหลดไม่นาน เช่นถ้ามีไฟล์โปรเจกต์ขนาดใหญ่ที่ต้องการ Deploy ไปยัง Elastic Beanstalk ก็ควรที่จะเลือกใช้วิธีตามบทความนี้ เพราะว่าถ้าไฟล์โปรเจกต์มีขนาดใหญ่แล้วทำการ Deploy ไปยัง Elastic Beanstalk โดยตรงจะทำให้ใช้เวลานานมาก

แต่ถ้าอัปโหลดไฟล์โปรเจกต์ไปยัง S3 Bucket เตรียมไว้ก่อน แล้วทำการ Deploy โดยอัปโหลดไฟล์โปรเจกต์จาก Public S3 URL (URL ไฟล์โปรเจกต์ที่เก็บอยู่ใน S3 Bucket) ก็จะทำให้การ Deploy โปรเจกต์ขนาดใหญ่ไปยัง Elastic Beanstalk เสร็จสิ้นอย่างรวดเร็วนั่นเองครับ

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