การจัดการทรัพยากร Dependency


การระบุการอ้างอิงสำหรับ Cloud Functions ที่เขียนด้วย Python ทำได้ 2 วิธี ได้แก่ การใช้ไฟล์ pip ของผู้จัดการแพ็กเกจ requirements.txt หรือรวมทรัพยากร Dependency ในเครื่องไว้กับฟังก์ชันของคุณ

ไม่รองรับข้อกำหนดการขึ้นต่อกันที่ใช้มาตรฐาน Pipfile/Pipfile.lock โปรเจ็กต์ของคุณไม่ควรมีไฟล์เหล่านี้

การระบุทรัพยากร Dependency ด้วย PIP

การขึ้นต่อกันใน Python ได้รับการจัดการด้วย pip และแสดงในไฟล์ข้อมูลเมตาที่ชื่อว่า requirements.txt ไฟล์นี้ต้องอยู่ในไดเรกทอรีเดียวกับไฟล์ main.py ที่มีโค้ดฟังก์ชันของคุณ

เมื่อคุณทำให้ฟังก์ชันใช้งานได้หรือใช้งานได้อีกครั้ง Cloud Functions จะใช้ PIP เพื่อดาวน์โหลดและติดตั้ง Dependency เวอร์ชันล่าสุดตามที่ประกาศไว้ในไฟล์ requirements.txt ไฟล์ requirements.txt มี 1 บรรทัดต่อแพ็กเกจ แต่ละบรรทัดจะมีชื่อแพ็กเกจ และอาจเป็นเวอร์ชันที่ขอหรือไม่ก็ได้ ดูรายละเอียดเพิ่มเติมได้ที่ข้อมูลอ้างอิง requirements.txt

เพื่อป้องกันไม่ให้บิลด์ได้รับผลกระทบจากการเปลี่ยนแปลงเวอร์ชันทรัพยากร Dependency ให้ปักหมุดแพ็กเกจทรัพยากร Dependency เป็นเวอร์ชันที่ต้องการ

ต่อไปนี้เป็นตัวอย่างไฟล์ requirements.txt

functions-framework
requests==2.20.0
numpy

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

หากฟังก์ชันต้องใช้ทรัพยากร Dependency ส่วนตัว เราขอแนะนำให้มิเรอร์ functions-framework ไปยังรีจิสทรีส่วนตัว รวม functions-framework ที่มิเรอร์เป็นทรัพยากร Dependency สำหรับฟังก์ชันของคุณเพื่อหลีกเลี่ยงการติดตั้งแพ็กเกจจากอินเทอร์เน็ตสาธารณะ

การจัดแพ็กเกจทรัพยากร Dependency ภายใน

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

ตัวอย่างเช่น คุณอาจใช้โครงสร้างไดเรกทอรีดังตัวอย่างต่อไปนี้

myfunction/
├── main.py
└── localpackage/
    ├── __init__.py
    └── script.py

จากนั้นคุณสามารถนำเข้าโค้ดจาก localpackage ตามปกติโดยใช้คำสั่ง import ต่อไปนี้

# Code in main.py
from localpackage import script

โปรดทราบว่าวิธีนี้จะไม่เรียกใช้ไฟล์ setup.py ใดๆ แพ็กเกจที่มีไฟล์เหล่านั้นยังคงรวมอยู่ในแพ็กเกจได้ แต่อาจเรียกใช้บน Cloud Functions ได้ไม่ถูกต้อง