Contents

วิธีใช้ AWS S3 Bucket เพื่อโฮสต์ไฟล์สแตติกและไฟล์มีเดียใน Django

การจัดการสินทรัพย์คงที่และเนื้อหาที่ผู้ใช้สร้างขึ้นอย่างมีประสิทธิภาพเป็นสิ่งสำคัญในการพัฒนาเว็บแอปพลิเคชัน Django เนื่องจากองค์ประกอบเหล่านี้มีบทบาทสำคัญในการรับประกันประสิทธิภาพสูงสุดและประสบการณ์ผู้ใช้ที่ราบรื่น

ในการตั้งค่าการพัฒนา Django มีหน้าที่รับผิดชอบในการจัดการไฟล์ดังกล่าว อย่างไรก็ตาม ในบริบทของการผลิต คุณจะต้องพิจารณาโซลูชันทางเลือก เนื่องจากฐานผู้ใช้ของคุณขยายตัวอย่างมาก และเนื้อหาสื่อมีขนาดที่ใหญ่ขึ้นเรื่อย ๆ รวมถึงเนื้อหาเสียงและภาพ

การใช้ Amazon Web Services Simple Storage Solution (S3) ให้ทางเลือกอื่นสำหรับการจัดเก็บเนื้อหาแบบคงที่และมัลติมีเดีย ด้วยการรวมเข้ากับ Django วิธีการนี้ช่วยลดภาระบนเซิร์ฟเวอร์โดยการมอบหมายความรับผิดชอบในการจัดการไฟล์ให้กับ S3 ซึ่งจะช่วยลดภาระให้เหลือน้อยที่สุดและรับประกันการกระจายสินทรัพย์ที่รวดเร็วและเชื่อถือได้

ขั้นตอนที่ 1: สร้างบัญชี AWS

หากต้องการสร้างบัญชี Amazon Web Services (AWS) หากคุณยังไม่มี โปรดไปที่เว็บไซต์อย่างเป็นทางการของ AWS และทำตามคำแนะนำเพื่อสร้างบัญชีใหม่

บัญชี Amazon Web Services (AWS) ที่สร้างขึ้นใหม่มีสิทธิ์ได้รับสิทธิ์เข้าถึงพื้นที่จัดเก็บมาตรฐาน 5 กิกะไบต์ฟรีเป็นประจำทุกปี โดยเป็นส่วนหนึ่งของแพ็คเกจบริการ

ขั้นตอนที่ 2: สร้างบัคเก็ต S3 สำหรับโครงการของคุณ

⭐ หลังจากสร้างบัญชี AWS แล้ว ให้เข้าสู่ระบบและค้นหา S3 ในแถบค้นหาที่ด้านบน จากนั้นเลือกตัวเลือกแรก /th/images/create-an-aws-account.jpg

⭐ หลังจากเลือกตัวเลือกแรกแล้ว คุณจะเห็นหน้าใหม่ คลิกปุ่มสร้างที่ฝากข้อมูล: /th/images/select-create-bucket.jpg

⭐ ถัดไป ระบุชื่อสำหรับบัคเก็ต S3 ของคุณ คุณสามารถปล่อยให้การกำหนดค่าส่วนใหญ่เป็นค่าเริ่มต้นได้ /th/images/create-an-s3-bucket.jpg

⭐ เลื่อนลงไปที่ส่วน Block Public Access settings for this bucket ยกเลิกการเลือก Block all public access setting และรับทราบคำเตือนที่ปรากฏขึ้น /th/images/uncheck-block-public-access.jpg

⭐ เมื่อเสร็จแล้วให้คลิกปุ่มสร้างถัง ระบบจะนำคุณไปยังหน้าที่แสดงรายการบัคเก็ต S3 ที่คุณสร้างขึ้น /th/images/new-s3-bucket.jpg

ขั้นตอนที่ 3: สร้างผู้ใช้ IAM บน AWS

AWS นำเสนอโซลูชันที่เรียกว่า Identity and Access Management (IAM) ซึ่งช่วยให้สามารถสร้างบัญชีส่วนบุคคลที่ปรับแต่งให้ตรงกับความต้องการของบุคคลหรือแอปพลิเคชันที่ต้องการโต้ตอบกับบริการของ AWS

AWS ให้ระดับการควบคุมการเข้าถึงของผู้ใช้แบบละเอียดผ่านบริการ Identity and Access Management (IAM) ด้วยการกำหนดระดับสิทธิ์ต่างๆ ให้กับผู้ใช้ IAM ซึ่งอาจเป็นบุคคลหรือแอปพลิเคชันที่โต้ตอบกับทรัพยากร AWS ของคุณ คุณสามารถจำกัดการเข้าถึงทรัพยากรเฉพาะของพวกเขาได้ ในขณะเดียวกันก็มั่นใจได้ว่าพวกเขาจะไม่ได้รับสิทธิ์เข้าถึงพื้นที่อื่นโดยไม่ได้รับอนุญาต

เพื่อให้มั่นใจในความปลอดภัยของแอปพลิเคชันของเรา จำเป็นอย่างยิ่งที่จะต้องสร้างวิธีการโต้ตอบที่ปลอดภัยระหว่างโปรเจ็กต์ Django และบัคเก็ต Amazon S3 ของเรา เพื่อให้บรรลุวัตถุประสงค์นี้ เราจะต้องติดตั้งผู้ใช้ Identity and Access Management (IAM) ภายในแพลตฟอร์ม Amazon Web Services (AWS) โปรดปฏิบัติตามคำแนะนำโดยละเอียดด้านล่างเพื่อสร้างผู้ใช้ IAM ใน AWS ให้สำเร็จ:

⭐ ในแถบค้นหา พิมพ์ IAM แล้วเลือกตัวเลือกแรก หน้าใหม่จะปรากฏขึ้น /th/images/search-for-iam.jpg

⭐ ที่ด้านซ้ายมือของหน้า IAM เลือกผู้ใช้ จากนั้นคลิกปุ่มเพิ่มผู้ใช้ มันจะเปิดขึ้นมาอีกหน้าให้กรอกข้อมูล /th/images/create-iam-user.jpg

⭐ เริ่มต้นด้วยการป้อนชื่อสำหรับผู้ใช้ IAM และคลิกปุ่มถัดไปที่ด้านล่าง: /th/images/enter-iam-username.jpg ในหน้าถัดไป คุณต้องเลือกระดับสิทธิ์สำหรับผู้ใช้ IAM ทำตามขั้นตอนเหล่านี้:

เริ่มต้นด้วยการเลือกตัวเลือก"แนบนโยบายโดยตรง"ภายในส่วน"สิทธิ์"

เพื่อสร้างกรอบการอนุญาตสำหรับผู้ใช้ IAM ของเรา เราต้องระบุขอบเขตของการดำเนินการที่ผู้ใช้ได้รับอนุญาตให้ดำเนินการภายในข้อจำกัดที่ระบุ เนื่องจากแอปพลิเคชันของเราต้องการความสามารถในการดึงและฝากเนื้อหาไฟล์ในบัคเก็ต Amazon S3 จึงควรให้สิทธิ์แก่ผู้ใช้ IAM ในการเข้าถึงพื้นที่เก็บข้อมูลดังกล่าวอย่างไม่จำกัด

⭐ ในส่วนนโยบายสิทธิ์ คุณควรค้นหา S3FullAccess และเลือกตัวเลือก เมื่อเสร็จแล้วให้คลิกปุ่มถัดไป /th/images/select-permission-for-iam-user.jpg

⭐ ถัดไป ตรวจสอบนโยบายสำหรับผู้ใช้ IAM และคลิกปุ่มสร้างผู้ใช้เพื่อสร้างผู้ใช้ IAM ของคุณ /th/images/review-iam-user.jpg

ขั้นตอนที่ 4: สร้างคีย์การเข้าถึงสำหรับผู้ใช้ IAM ของคุณ

ใน Amazon Web Services (AWS) คีย์การเข้าถึงประกอบด้วยชุดข้อมูลรับรองการตรวจสอบสิทธิ์ที่เปิดใช้งานการเข้าถึงทรัพยากร AWS โดยทางโปรแกรมในลักษณะที่ปลอดภัย ในการเข้าสู่บัคเก็ต Amazon Simple Storage Service (S3) ภายในแอปพลิเคชัน Django ของคุณ จำเป็นต้องมีข้อมูลรับรองการเข้าถึงที่จำเป็นโดยโครงการของคุณ

การปฏิบัติตามชุดคำแนะนำขั้นตอนสามารถอำนวยความสะดวกในการผลิตรหัสผ่านการอนุญาตเฉพาะสำหรับความพยายามที่กำลังดำเนินอยู่ของคุณ

⭐ หลังจากสร้างผู้ใช้ IAM แล้ว คุณจะได้รับข้อความแจ้งเตือนที่แจ้งให้คุณดูผู้ใช้ หรือ คุณสามารถดูผู้ใช้โดยคลิกที่ชื่อผู้ใช้ /th/images/select-new-iam-user.jpg

⭐ จากนั้น เลือกแท็บ Security credentials เลื่อนลงเพื่อค้นหาส่วนคีย์การเข้าถึง แล้วเลือก สร้างคีย์การเข้าถึง /th/images/select-create-access-key.jpg

⭐ คุณจะต้องเลือกกรณีการใช้งานสำหรับการเข้าถึงของคุณ ดังนั้น AWS จึงสามารถแนะนำตัวเลือกอื่นได้ตามความเหมาะสม ไม่มีผลกับคีย์การเข้าถึงของคุณ อย่าลังเลที่จะเลือกตัวเลือก เช่น บริการของบุคคลที่สามหรือรหัสท้องถิ่น และรับทราบคำเตือนที่ปรากฏขึ้น เมื่อเสร็จแล้วให้คลิกปุ่มถัดไป /th/images/select-access-key-use-case.jpg

⭐ ในหน้าถัดไป ป้อนแท็กคำอธิบายสำหรับคีย์การเข้าถึงของคุณ แล้วคลิกปุ่มสร้างคีย์การเข้าถึง /th/images/add-description-for-access-key.jpg

⭐ หลังจากสร้างรหัสการเข้าถึงแล้ว คุณสามารถคัดลอกข้อมูลประจำตัวของคุณหรือดาวน์โหลดเป็นไฟล์ CSV ไม่ว่าจะด้วยวิธีใด ตรวจสอบให้แน่ใจว่าได้รักษาข้อมูลนี้ให้ปลอดภัย /th/images/get-access-key-credentials.jpg

ขั้นตอนที่ 5: กำหนดค่าโครงการ Django ของคุณสำหรับ S3 Bucket

ในการรวมบัคเก็ต Amazon S3 เข้ากับโปรเจ็กต์ Django จำเป็นต้องติดตั้งแพ็คเกจเฉพาะที่อำนวยความสะดวกในการผสานรวมนี้ แพ็คเกจเหล่านี้มีดังนี้:

Django Storages เป็นส่วนเสริมที่ช่วยให้สามารถสร้างแบ็คเอนด์ของที่เก็บไฟล์แบบกำหนดเองภายในเฟรมเวิร์กการพัฒนาเว็บ Django ช่วยให้นักพัฒนาสามารถกำหนดค่าและนำโซลูชันการจัดเก็บข้อมูลที่ต้องการไปใช้ได้ ให้ความยืดหยุ่นในการจัดการสินทรัพย์ดิจิทัลและปรับปรุงกระบวนการจัดการข้อมูล

Boto3 ซึ่งเป็นชุดพัฒนาซอฟต์แวร์ (SDK) ทำหน้าที่เป็นเครื่องมือสำคัญในการอำนวยความสะดวกในการโต้ตอบที่ราบรื่นระหว่างโครงการที่ใช้ Python และ Amazon Web Services (AWS)

ในการติดตั้งแพ็คเกจดังกล่าวภายในสภาพแวดล้อมเสมือน Python ของคุณ ให้ใช้ pip package manager โดยรันคำสั่งต่อไปนี้ผ่านเทอร์มินัลของคุณ:

 pip install django-storages boto3

เมื่อคุณได้ติดตั้งแพ็คเกจเหล่านี้อย่างมีประสิทธิภาพแล้ว คุณจำเป็นต้องเข้าถึงไฟล์ settings.py'ของคุณ และเพิ่ม boto3 ` ลงในรายการแอปพลิเคชันแบบบูรณาการภายในไฟล์การกำหนดค่าดังกล่าว

ในการใช้บัคเก็ต Amazon Web Services (AWS) Simple Storage Service (S3) ภายในโครงการ Django จำเป็นต้องทำการกำหนดค่าเฉพาะ ด้านล่างนี้เป็นขั้นตอนที่จำเป็นสำหรับกระบวนการนี้:

 AWS_ACCESS_KEY_ID = 'AWS_ACCESS_KEY_ID '
AWS_SECRET_ACCESS_KEY = 'AWS_SECRET_ACCESS_KEY'
AWS_STORAGE_BUCKET_NAME = 'AWS_STORAGE_BUCKET_NAME'
AWS_S3_SIGNATURE_NAME = 's3v4',
AWS_S3_REGION_NAME = 'AWS_S3_REGION_NAME'
AWS_S3_FILE_OVERWRITE = False
AWS_DEFAULT_ACL = None
AWS_S3_VERITY = True
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'

รวมการกำหนดค่าที่ให้ไว้ในไฟล์ settings.py เพื่อให้แน่ใจว่าแต่ละฟิลด์ที่กำหนดได้รับการอัปเดตอย่างเหมาะสม โดยเฉพาะอย่างยิ่ง ให้แทนที่คีย์ที่เกี่ยวข้อง เช่น AWS Access Key ID, Secret Access Key, S3 Bucket Name และ S3 Region Name ด้วยคีย์ที่เกี่ยวข้องซึ่งได้รับหรือเรียกคืนมาก่อนหน้านี้

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

/th/images/s3-bucket-region-name.jpg

ขั้นตอนที่ 6: ทดสอบการกำหนดค่า AWS ของคุณ

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

เพื่อให้บริบทเหมาะสม ตัวอย่างหนึ่งที่เป็นไปได้ของแบบจำลองดังกล่าวอาจเป็นดังนี้:

 class Post(models.Model):
    title = models.CharField(max_length=225, blank=False, null=False)
    content = models.TextField('Post Body', blank=False, null=False)
    author = models.CharField(max_length=225, blank=False, null=False)
    date_published = models.DateTimeField(auto_now=True)
    image = models.ImageField(upload_to='posts')

    def __str__(self):
        return self.title

ตรวจสอบให้แน่ใจว่างานที่จำเป็นทั้งหมดได้รับการดำเนินการ รวมถึงการย้ายข้อมูล การรวมคุณลักษณะเข้ากับอินเทอร์เฟซการดูแลระบบ การสร้างวิธีการแสดงผลที่เหมาะสม และทำตามขั้นตอนเพิ่มเติมใดๆ ที่จำเป็นสำหรับการดำเนินโครงการของคุณให้สำเร็จ นอกจากนี้ ตรวจสอบให้แน่ใจว่าคุณปฏิบัติตามกระบวนทัศน์ Model-View-Template (MVT) ของ Django ในการพัฒนาแอปพลิเคชันของคุณ

เมื่อเสร็จสิ้นงานของคุณ โปรดดำเนินการต่อเพื่อเข้าถึงแดชบอร์ดการดูแลระบบของคุณ หรือใช้อินเทอร์เฟซเฉพาะที่คุณสร้างขึ้นสำหรับการส่งสื่อ จากนั้น อัปโหลดไฟล์กราฟิกในพื้นที่ที่กำหนด

/th/images/testing-s3-bucket.jpg

โปรดไปที่เว็บไซต์หลักของคุณและตรวจสอบว่าภาพที่ระบุปรากฏตามที่คาดไว้หรือไม่ หากมี ให้คลิกที่ภาพดังกล่าวโดยใช้เคอร์เซอร์ของเมาส์ในขณะที่กดปุ่ม “Ctrl” (หรือปุ่ม “Command” สำหรับ Mac) บนแป้นพิมพ์ของคุณ จากนั้น เลือกตัวเลือก"เปิดรูปภาพในแท็บใหม่"จากเมนูบริบทที่ปรากฏขึ้น เมื่อเปิดรูปภาพในหน้าต่างหรือแท็บเบราว์เซอร์แยกต่างหาก ให้สังเกต URL ที่แสดงที่ด้านบนของเบราว์เซอร์ ควรสอดคล้องกับตำแหน่งของบัคเก็ต Amazon S3 ที่สร้างไว้ก่อนหน้านี้

/th/images/test-aws-image-config-1.jpg

วิธีอื่นในการตรวจสอบว่าการกำหนดค่าของคุณทำงานอย่างถูกต้องคือการเข้าถึงคอนโซล Amazon Web Services (AWS) และการดูคอนเทนเนอร์พื้นที่เก็บข้อมูลที่กำหนด ซึ่งคุณควรค้นพบไฟล์สื่อภาพของคุณภายในนั้น

/th/images/confirm-aws-config-2.jpg

ขั้นตอนที่ 7: รวบรวมไฟล์คงที่ไปยัง S3 Bucket ของคุณ

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

ในการใช้งานฟังก์ชันนี้ จำเป็นต้องแก้ไขไฟล์’settings.py’โดยเพิ่มการกำหนดค่าเฉพาะ การกำหนดค่าเหล่านี้จะเปิดใช้งานผลลัพธ์ที่ต้องการและรับประกันประสิทธิภาพสูงสุดของระบบ

 STATICFILES_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
AWS_LOCATION = 'static'

หลังจากที่คุณเข้าถึง Command Line Interface (CLI) แล้ว โปรดดำเนินการคำสั่งต่อไปนี้:

 python manage.py collectstatic --noinput

เพื่อให้แน่ใจว่าบัคเก็ต Amazon Simple Storage Service (S3) ทำงานได้อย่างเหมาะสม ให้ไปที่ AWS Management Console และเข้าถึงบัคเก็ต S3 ของคุณ ภายในรายการของบัคเก็ต คุณควรสังเกตไดเร็กทอรีที่มีชื่อว่า"คงที่"

/th/images/confirm-static-folder.jpg

ใช้ AWS S3 Bucket เพื่ออะไรอีกมากมาย

Simple Storage Service (S3) ของ Amazon Web Services นำเสนอศักยภาพมากมายที่คู่ควรกับความเข้าใจและความเชี่ยวชาญของคุณในการใช้ความสามารถที่เหนือกว่าฟังก์ชันการจัดเก็บอ็อบเจกต์ทั่วไป ตัวอย่างเช่น คุณสามารถใช้ S3 เป็นแพลตฟอร์มที่เหมาะสำหรับการโฮสต์เว็บไซต์แบบสแตติก โดยใช้ประโยชน์จากความสามารถในการปรับขนาดและความน่าเชื่อถือ

การใช้ความสามารถของ Amazon Simple Storage Service (S3) Buckets อย่างเชี่ยวชาญสามารถให้ประโยชน์มากมายในแง่ของประสิทธิภาพและการพัฒนาผลิตภัณฑ์ อย่างไรก็ตาม จำเป็นอย่างยิ่งที่จะต้องเข้าใจว่า S3 อาจไม่สอดคล้องกับความต้องการเฉพาะของโครงการเสมอไป ดังนั้นจึงเป็นเรื่องสำคัญที่จะต้องประเมินข้อกำหนดของการดำเนินการก่อนดำเนินการ