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


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

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

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

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

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

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

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

functions-framework
requests==2.20.0
numpy

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

หากฟังก์ชันของคุณต้องใช้ทรัพยากร Dependency ส่วนตัว เราขอแนะนำให้คุณทำมิเรอร์ functions-framework ไปยังรีจิสทรีส่วนตัว รวม functions-frameworkที่มิเรอร์เป็นทรัพยากร 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