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


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

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

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

การบรรจุ Dependency ในพื้นที่

นอกจากนี้ คุณยังแพ็กเกจและทำให้ทรัพยากร Dependencies พร้อมใช้งานควบคู่ไปกับฟังก์ชันได้ด้วย วิธีนี้มีประโยชน์ในกรณีที่คุณไม่สามารถติดตั้งข้อกำหนดเบื้องต้นผ่านเครื่องมือจัดการแพ็กเกจ 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