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


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

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

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

การขึ้นต่อกันใน 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

เฟรมเวิร์กฟังก์ชันเป็นทรัพยากร 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