คุณสามารถติดตั้งใช้งาน ลบ และแก้ไขฟังก์ชันได้โดยใช้Firebaseคำสั่ง CLI หรือโดยการตั้งค่าตัวเลือกเวลาเรียกใช้ในซอร์สโค้ดของฟังก์ชัน
ทำให้ฟังก์ชันใช้งานได้
หากต้องการติดตั้งใช้งานฟังก์ชัน ให้เรียกใช้คำสั่ง Firebase CLI นี้
firebase deploy --only functions
โดยค่าเริ่มต้น CLI ของ Firebase จะทําการติดตั้งใช้งานฟังก์ชันทั้งหมดภายใน
แหล่งที่มาของคุณพร้อมกัน หากโปรเจ็กต์มีฟังก์ชันมากกว่า 5 รายการ
เราขอแนะนำให้ใช้แฟล็ก --only กับชื่อฟังก์ชันที่เฉพาะเจาะจง
เพื่อทำให้เฉพาะฟังก์ชันที่คุณแก้ไข
ได้รับการติดตั้งใช้งาน การติดตั้งฟังก์ชันที่เฉพาะเจาะจง
วิธีนี้จะช่วยเร่งกระบวนการติดตั้งใช้งานและช่วยให้คุณไม่ต้องเจอกับ
โควต้าการติดตั้งใช้งาน เช่น
firebase deploy --only functions:addMessage,functions:makeUppercase
เมื่อติดตั้งใช้งานฟังก์ชันจำนวนมาก คุณอาจใช้โควต้ามาตรฐานเกินและได้รับข้อความแสดงข้อผิดพลาด HTTP 429 หรือ 500 หากต้องการแก้ไข ปัญหานี้ ให้ติดตั้งใช้งานฟังก์ชันเป็นกลุ่มๆ ละไม่เกิน 10 รายการ
ดูรายการคำสั่งทั้งหมดที่ใช้ได้ในFirebaseข้อมูลอ้างอิง CLI
โดยค่าเริ่มต้น Firebase CLI จะค้นหาซอร์สโค้ดในโฟลเดอร์ functions/
คุณจัดระเบียบฟังก์ชัน
ในฐานของโค้ดหรือชุดไฟล์หลายชุดได้หากต้องการ
ลบฟังก์ชัน
คุณลบฟังก์ชันที่ติดตั้งใช้งานก่อนหน้านี้ได้ด้วยวิธีต่อไปนี้
- อย่างชัดเจนใน Firebase CLI ด้วย
functions:delete - อย่างชัดเจนในคอนโซล Google Cloud
- โดยปริยายด้วยการนำฟังก์ชันออกจากแหล่งที่มาก่อนการติดตั้งใช้งาน
การดำเนินการลบทั้งหมด จะแจ้งให้คุณยืนยันก่อนนำฟังก์ชันออกจากเวอร์ชันที่ใช้งานจริง
การลบฟังก์ชันอย่างชัดเจนใน Firebase CLI รองรับอาร์กิวเมนต์หลายรายการ รวมถึงฟังก์ชัน กลุ่ม และช่วยให้คุณระบุฟังก์ชันที่ทำงานในภูมิภาคหนึ่งๆ ได้ นอกจากนี้ คุณยังลบล้างข้อความแจ้งให้ยืนยันได้ด้วย
ลบฟังก์ชันทั้งหมดที่ตรงกับชื่อที่ระบุในทุกภูมิภาค
firebase functions:delete FUNCTION-1_NAME
ลบฟังก์ชันที่ระบุซึ่งทำงานในภูมิภาคที่ไม่ใช่ค่าเริ่มต้น
firebase functions:delete FUNCTION-1_NAME --region REGION_NAME
ลบฟังก์ชันมากกว่า 1 รายการ
firebase functions:delete FUNCTION-1_NAME FUNCTION-2_NAME
ลบกลุ่มฟังก์ชันที่ระบุ
firebase functions:delete GROUP_NAME
ข้ามข้อความแจ้งให้ยืนยัน
firebase functions:delete FUNCTION-1_NAME --force
เมื่อใช้การลบฟังก์ชันโดยนัย firebase deploy จะแยกวิเคราะห์แหล่งที่มาและ
นำฟังก์ชันที่นำออกจากไฟล์ออกจากการใช้งานจริง
แก้ไขชื่อ ภูมิภาค หรือทริกเกอร์ของฟังก์ชัน
หากคุณเปลี่ยนชื่อหรือเปลี่ยนภูมิภาคหรือทริกเกอร์สำหรับฟังก์ชันที่จัดการการเข้าชมเวอร์ชันที่ใช้งานจริง ให้ทำตามขั้นตอนในส่วนนี้เพื่อหลีกเลี่ยงไม่ให้เหตุการณ์สูญหายระหว่างการแก้ไข ก่อนทำตามขั้นตอนเหล่านี้ โปรดตรวจสอบก่อนว่าฟังก์ชันของคุณทำซ้ำได้ เนื่องจากทั้งฟังก์ชันเวอร์ชันใหม่และเวอร์ชันเก่าจะทำงานพร้อมกันในระหว่างการเปลี่ยนแปลง
เปลี่ยนชื่อฟังก์ชัน
หากต้องการเปลี่ยนชื่อฟังก์ชัน ให้สร้างฟังก์ชันเวอร์ชันใหม่ที่เปลี่ยนชื่อแล้วในแหล่งที่มา
จากนั้นเรียกใช้คำสั่งการติดตั้งใช้งาน 2 คำสั่งแยกกัน คำสั่งแรกจะทำให้ฟังก์ชันที่มีชื่อใหม่ทำงาน และคำสั่งที่สองจะนำเวอร์ชันที่ทำให้ทำงานก่อนหน้านี้ออก เช่น หากคุณมีฟังก์ชัน Node.js
ชื่อ webhook ที่ต้องการเปลี่ยนเป็น webhookNew ให้แก้ไขโค้ดดังนี้
// before
const functions = require('firebase-functions/v1');
exports.webhook = functions.https.onRequest((req, res) => {
res.send("Hello");
});
// after
const functions = require('firebase-functions/v1');
exports.webhookNew = functions.https.onRequest((req, res) => {
res.send("Hello");
});
จากนั้นเรียกใช้คำสั่งต่อไปนี้เพื่อติดตั้งใช้งานฟังก์ชันใหม่
# Deploy new function called webhookNew firebase deploy --only functions:webhookNew # Wait until deployment is done; now both webhookNew and webhook are running # Delete webhook firebase functions:delete webhook
เปลี่ยนภูมิภาคของฟังก์ชัน
หากคุณกำลังเปลี่ยนภูมิภาคที่ระบุสำหรับฟังก์ชันที่จัดการการเข้าชมในเวอร์ชันที่ใช้งานจริง คุณสามารถป้องกันไม่ให้เหตุการณ์สูญหายได้โดยทำตามขั้นตอนต่อไปนี้ตามลำดับ
- เปลี่ยนชื่อฟังก์ชัน และเปลี่ยนภูมิภาคตามต้องการ
- ทําการติดตั้งใช้งานฟังก์ชันที่เปลี่ยนชื่อแล้ว ซึ่งจะทําให้โค้ดเดียวกันทํางานชั่วคราวในทั้ง 2 ชุดภูมิภาค
- ลบฟังก์ชันก่อนหน้า
เช่น หากคุณมีฟังก์ชันชื่อ webhook ที่ปัจจุบันใช้งาน
ใน us-central1 และต้องการย้ายข้อมูลไปยัง asia-northeast1 คุณจะต้อง
แก้ไขซอร์สโค้ดก่อนเพื่อเปลี่ยนชื่อฟังก์ชันและแก้ไขภูมิภาค
// before
const functions = require('firebase-functions/v1');
exports.webhook = functions
.https.onRequest((req, res) => {
res.send("Hello");
});
// after
const functions = require('firebase-functions/v1');
exports.webhookAsia = functions
.region('asia-northeast1')
.https.onRequest((req, res) => {
res.send("Hello");
});
จากนั้นติดตั้งใช้งานโดยเรียกใช้คำสั่งต่อไปนี้
firebase deploy --only functions:webhookAsia
ตอนนี้มีฟังก์ชันที่เหมือนกัน 2 รายการที่ทำงานอยู่ โดย webhook ทำงานใน us-central1
และ webhookAsia ทำงานใน asia-northeast1
จากนั้นลบ webhook โดยทำดังนี้
firebase functions:delete webhook
ตอนนี้มีฟังก์ชันเดียวคือ webhookAsia ซึ่งทำงานใน asia-northeast1
เปลี่ยนประเภททริกเกอร์ของฟังก์ชัน
เมื่อพัฒนาCloud Functions for Firebaseการติดตั้งใช้งานไปเรื่อยๆ คุณอาจต้องเปลี่ยนประเภททริกเกอร์ของฟังก์ชันด้วยเหตุผลหลายประการ เช่น คุณอาจต้องการเปลี่ยนจากเหตุการณ์ประเภทหนึ่งของ Firebase Realtime Database หรือCloud Firestore ไปเป็นอีกประเภทหนึ่ง
คุณไม่สามารถเปลี่ยนประเภทเหตุการณ์ของฟังก์ชันได้โดยเพียงแค่เปลี่ยน
ซอร์สโค้ดและเรียกใช้ firebase deploy หากต้องการหลีกเลี่ยงข้อผิดพลาด
ให้เปลี่ยนประเภททริกเกอร์ของฟังก์ชันโดยทำตามขั้นตอนต่อไปนี้
- แก้ไขซอร์สโค้ดให้มีฟังก์ชันใหม่ที่มีประเภททริกเกอร์ที่ต้องการ
- ติดตั้งฟังก์ชัน ซึ่งจะทำให้ฟังก์ชันเก่าและใหม่ทำงานพร้อมกันชั่วคราว
- ลบฟังก์ชันเก่าออกจากเวอร์ชันที่ใช้งานจริงอย่างชัดเจนโดยใช้ Firebase CLI
เช่น หากคุณมีฟังก์ชัน Node.js ชื่อ objectChanged ที่มีประเภทเหตุการณ์ onChange แบบเดิม และต้องการเปลี่ยนเป็น onFinalize ก่อนอื่นให้เปลี่ยนชื่อฟังก์ชันและแก้ไขให้มีประเภทเหตุการณ์ onFinalize
// before
const functions = require('firebase-functions/v1');
exports.objectChanged = functions.storage.object().onChange((object) => {
return console.log('File name is: ', object.name);
});
// after
const functions = require('firebase-functions/v1');
exports.objectFinalized = functions.storage.object().onFinalize((object) => {
return console.log('File name is: ', object.name);
});
จากนั้นเรียกใช้คำสั่งต่อไปนี้เพื่อสร้างฟังก์ชันใหม่ก่อนที่จะลบฟังก์ชันเก่า
# Create new function objectFinalized firebase deploy --only functions:objectFinalized # Wait until deployment is done; now both objectChanged and objectFinalized are running # Delete objectChanged firebase functions:delete objectChanged
ตั้งค่าตัวเลือกของรันไทม์
Cloud Functions for Firebase ช่วยให้คุณเลือกตัวเลือกเวลาเรียกใช้ได้ เช่น เวอร์ชันเวลาเรียกใช้ Node.js และการหมดเวลาต่อฟังก์ชัน การจัดสรรหน่วยความจำ และอินสแตนซ์ฟังก์ชันขั้นต่ำ/สูงสุด
แนวทางปฏิบัติแนะนำคือควรกำหนดตัวเลือกเหล่านี้ (ยกเว้นเวอร์ชัน Node.js) ใน
ออบเจ็กต์การกำหนดค่าภายในโค้ดฟังก์ชัน ออบเจ็กต์
RuntimeOptions
นี้เป็นแหล่งข้อมูลที่เชื่อถือได้สำหรับตัวเลือกเวลาเรียกใช้ของฟังก์ชัน และจะ
ลบล้างตัวเลือกที่ตั้งค่าโดยใช้วิธีอื่น (เช่น คอนโซล Google Cloud หรือ gcloud CLI)
หากเวิร์กโฟลว์การพัฒนาของคุณเกี่ยวข้องกับการตั้งค่าตัวเลือกเวลาเรียกใช้ด้วยตนเองโดยใช้Google Cloudคอนโซลหรือgcloud CLI และคุณไม่ต้องการให้ค่าเหล่านี้
ถูกลบล้างในการติดตั้งใช้งานแต่ละครั้ง ให้ตั้งค่าตัวเลือก preserveExternalChanges เป็น
true เมื่อตั้งค่าตัวเลือกนี้เป็น true Firebase จะผสานตัวเลือกการรันไทม์ที่ตั้งค่า
ในโค้ดกับการตั้งค่าของฟังก์ชันเวอร์ชันที่กําลังใช้งานอยู่
โดยมีลําดับความสําคัญดังนี้
- ตั้งค่าตัวเลือกในโค้ดฟังก์ชัน: ลบล้างการเปลี่ยนแปลงภายนอก
- ตั้งค่าเป็น
RESET_VALUEในโค้ดฟังก์ชัน: ลบล้างการเปลี่ยนแปลงภายนอกด้วยค่าเริ่มต้น - ไม่ได้ตั้งค่าตัวเลือกในโค้ดฟังก์ชัน แต่ตั้งค่าในฟังก์ชันที่กําลังใช้งานอยู่: ใช้ตัวเลือกที่ระบุในฟังก์ชันที่ใช้งานอยู่
preserveExternalChanges: true ไม่แนะนำ
ให้ใช้ตัวเลือกนี้ในกรณีส่วนใหญ่ เนื่องจาก
โค้ดของคุณจะไม่ใช่แหล่งข้อมูลที่เชื่อถือได้ทั้งหมดสำหรับตัวเลือกเวลาเรียกใช้ของฟังก์ชันอีกต่อไป
หากคุณใช้ ให้ตรวจสอบคอนโซล Google Cloud หรือใช้
gcloud CLI เพื่อดูการกำหนดค่าแบบเต็มของฟังก์ชัน
ตั้งค่าเวอร์ชัน Node.js
Firebase SDK สำหรับ Cloud Functions อนุญาตให้เลือกใช้รันไทม์ Node.js คุณเลือกที่จะเรียกใช้ฟังก์ชันทั้งหมดในโปรเจ็กต์เฉพาะในสภาพแวดล้อมรันไทม์ ที่สอดคล้องกับ Node.js เวอร์ชันที่รองรับต่อไปนี้ได้
- Node.js 22
- Node.js 20
- Node.js 18 (เลิกใช้งานแล้ว)
ดูกำหนดเวลาการสนับสนุนเพื่อดูข้อมูลสำคัญเกี่ยวกับการสนับสนุน Node.js เวอร์ชันเหล่านี้อย่างต่อเนื่อง
วิธีตั้งค่าเวอร์ชัน Node.js
คุณตั้งค่าเวอร์ชันได้ในฟิลด์ engines ในไฟล์ package.json
ที่สร้างขึ้นในไดเรกทอรี functions/ ระหว่างการเริ่มต้น
เช่น หากต้องการใช้เฉพาะ
เวอร์ชัน 20 ให้แก้ไขบรรทัดนี้ใน package.json
"engines": {"node": "22"}
หากคุณใช้เครื่องมือจัดการแพ็กเกจ Yarn หรือมีข้อกำหนดอื่นๆ สำหรับฟิลด์ engines คุณสามารถตั้งค่ารันไทม์สำหรับ SDK ของ Firebase สำหรับ Cloud Functions ใน firebase.json แทนได้
{
"functions": {
"runtime": "nodejs22"
}
}
CLI จะใช้ค่าที่ตั้งไว้ใน firebase.json แทนค่าหรือช่วงที่คุณตั้งค่าแยกกันใน package.json
อัปเกรดรันไทม์ Node.js
วิธีอัปเกรดรันไทม์ Node.js
- ตรวจสอบว่าโปรเจ็กต์ใช้แพ็กเกจราคา Blaze
- ตรวจสอบว่าคุณใช้ Firebase CLI เวอร์ชัน 11.18.0 ขึ้นไป
- เปลี่ยนค่า
enginesในไฟล์package.jsonที่สร้างขึ้นใน ไดเรกทอรีfunctions/ระหว่างการเริ่มต้น เช่น หากคุณอัปเกรดจากเวอร์ชัน 16 เป็นเวอร์ชัน 18 รายการ ควรมีลักษณะดังนี้"engines": {"node": "18"} - คุณเลือกที่จะทดสอบการเปลี่ยนแปลงโดยใช้ Firebase Local Emulator Suite ได้
- ติดตั้งฟังก์ชันทั้งหมดอีกครั้ง
เลือกระบบโมดูล Node.js
ระบบโมดูลเริ่มต้นใน Node.js คือ CommonJS (CJS) แต่ Node.js เวอร์ชันปัจจุบัน ยังรองรับโมดูล ECMAScript (ESM) ด้วย Cloud Functions รองรับทั้ง 2 อย่าง
โดยค่าเริ่มต้น ฟังก์ชันจะใช้ CommonJS ซึ่งหมายความว่าการนำเข้าและส่งออกจะมีลักษณะดังนี้
const functions = require("firebase-functions/v1");
exports.helloWorld = functions.https.onRequest(async (req, res) => res.send("Hello from Firebase!"));
หากต้องการใช้ ESM แทน ให้ตั้งค่าฟิลด์ "type": "module" ในไฟล์ package.json ดังนี้
{
...
"type": "module",
...
}
เมื่อตั้งค่าแล้ว ให้ใช้ไวยากรณ์ ESM import และ export ดังนี้
import functions from "firebase-functions/v1";
export const helloWorld = functions.https.onRequest(async (req, res) => res.send("Hello from Firebase!"));
ระบบรองรับทั้ง 2 โมดูลอย่างเต็มที่ คุณเลือกใช้ตัวเลือกที่เหมาะกับโปรเจ็กต์มากที่สุดได้ ดูข้อมูลเพิ่มเติมได้ในเอกสารประกอบของ Node.js เกี่ยวกับโมดูล
ควบคุมลักษณะการปรับขนาด
โดยค่าเริ่มต้น Cloud Functions for Firebase จะปรับจำนวนอินสแตนซ์ที่ทำงาน ตามจำนวนคำขอที่เข้ามา ซึ่งอาจลดจำนวนอินสแตนซ์ลงเหลือ 0 ในช่วงที่มีการเข้าชมลดลง อย่างไรก็ตาม หากแอปของคุณต้องการลดเวลาในการตอบสนองและคุณต้องการจำกัดจำนวนการเริ่มต้นแบบเย็น คุณสามารถเปลี่ยนลักษณะการทำงานเริ่มต้นนี้ได้โดยการระบุจำนวนอินสแตนซ์คอนเทนเนอร์ขั้นต่ำที่จะเก็บไว้ในสถานะพร้อมใช้งานและพร้อมให้บริการคำขอ
ในทำนองเดียวกัน คุณสามารถกำหนดจำนวนสูงสุดเพื่อจำกัดการปรับขนาดอินสแตนซ์ใน การตอบสนองต่อคำขอขาเข้าได้ ใช้การตั้งค่านี้เพื่อควบคุมค่าใช้จ่าย หรือจำกัดจำนวนการเชื่อมต่อกับบริการสนับสนุน เช่น ฐานข้อมูล
ลดจำนวน Cold Start
หากต้องการตั้งค่าจำนวนอินสแตนซ์ขั้นต่ำสำหรับฟังก์ชันในซอร์สโค้ด ให้ใช้เมธอด
runWith
เมธอดนี้ยอมรับออบเจ็กต์ JSON ที่เป็นไปตามอินเทอร์เฟซ
RuntimeOptions
ซึ่งกำหนดค่าสำหรับ minInstances ตัวอย่างเช่น
ฟังก์ชันนี้จะตั้งค่าอินสแตนซ์ขั้นต่ำเป็น 5 เพื่อให้พร้อมใช้งานอยู่เสมอ
exports.getAutocompleteResponse = functions
.runWith({
// Keep 5 instances warm for this latency-critical function
minInstances: 5,
})
.https.onCall((data, context) => {
// Autocomplete a user's search term
});
สิ่งที่ควรพิจารณาเมื่อตั้งค่าสำหรับ minInstances มีดังนี้
- หาก Cloud Functions for Firebase ขยายขนาดแอปเกินการตั้งค่า
minInstancesคุณจะพบกับ Cold Start สำหรับแต่ละอินสแตนซ์ที่สูงกว่าเกณฑ์นั้น - Cold Start ส่งผลกระทบต่อแอปที่มีการเข้าชมที่ผันผวนมากที่สุด หากแอปมีปริมาณการเข้าชมที่ผันผวนและคุณตั้งค่า
minInstancesให้สูงพอที่จะลดการเริ่มต้นใหม่เมื่อปริมาณการเข้าชมเพิ่มขึ้นแต่ละครั้ง คุณจะเห็นว่าเวลาในการตอบสนองลดลงอย่างมาก สำหรับแอปที่มีการเข้าชมอย่างต่อเนื่อง การเริ่มต้นแบบเย็นไม่น่าจะส่งผลต่อประสิทธิภาพอย่างรุนแรง การตั้งค่าอินสแตนซ์ขั้นต่ำอาจเหมาะสมกับสภาพแวดล้อมการใช้งานจริง แต่โดยปกติแล้ว ควรหลีกเลี่ยงในสภาพแวดล้อมการทดสอบ หากต้องการปรับขนาดเป็น 0 ในโปรเจ็กต์ทดสอบ แต่ยังคงลด Cold Start ในโปรเจ็กต์เวอร์ชันที่ใช้งานจริง คุณสามารถตั้งค่า
minInstancesตามตัวแปรสภาพแวดล้อมFIREBASE_CONFIGได้ดังนี้// Get Firebase project id from `FIREBASE_CONFIG` environment variable const envProjectId = JSON.parse(process.env.FIREBASE_CONFIG).projectId; exports.renderProfilePage = functions .runWith({ // Keep 5 instances warm for this latency-critical function // in production only. Default to 0 for test projects. minInstances: envProjectId === "my-production-project" ? 5 : 0, }) .https.onRequest((req, res) => { // render some html });
จำกัดจำนวนอินสแตนซ์สูงสุดสำหรับฟังก์ชัน
หากต้องการตั้งค่าอินสแตนซ์สูงสุดในซอร์สโค้ดของฟังก์ชัน ให้ใช้วิธี runWith เมธอดนี้ยอมรับออบเจ็กต์ JSON ที่เป็นไปตามอินเทอร์เฟซ
RuntimeOptions
ซึ่งกำหนดค่าสำหรับ maxInstances ตัวอย่างเช่น ฟังก์ชันนี้จะตั้งค่าขีดจำกัดของอินสแตนซ์เป็น 100 รายการเพื่อไม่ให้ฐานข้อมูลเดิมสมมติทำงานหนักเกินไป
exports.mirrorOrdersToLegacyDatabase = functions
.runWith({
// Legacy database only supports 100 simultaneous connections
maxInstances: 100,
})
.firestore.document("orders/{orderId}")
.onWrite((change, context) => {
// Connect to legacy database
});
หากฟังก์ชัน HTTP ขยายขนาดจนถึงขีดจำกัด maxInstances ระบบจะจัดคิวคำขอใหม่เป็นเวลา 30 วินาที แล้วปฏิเสธด้วยโค้ดตอบกลับ 429 Too Many Requests หากไม่มีอินสแตนซ์พร้อมใช้งานภายในเวลานั้น
ดูข้อมูลเพิ่มเติมเกี่ยวกับแนวทางปฏิบัติแนะนำในการใช้การตั้งค่าอินสแตนซ์สูงสุดได้ที่แนวทางปฏิบัติแนะนำในการใช้ maxInstances
ตั้งค่าบัญชีบริการ
บัญชีบริการเริ่มต้นสำหรับฟังก์ชันรุ่นที่ 1
PROJECT_ID@
คุณอาจต้องการลบล้างบัญชีบริการเริ่มต้นและจำกัดฟังก์ชันให้ใช้เฉพาะทรัพยากรที่จำเป็นเท่านั้น
คุณทำได้โดยสร้างบัญชีบริการที่กำหนดเอง
และมอบหมายให้กับฟังก์ชันที่เหมาะสมโดยใช้เมธอด .runWith()
เมธอดนี้ใช้ออบเจ็กต์ที่มีตัวเลือกการกำหนดค่า รวมถึงพร็อพเพอร์ตี้ serviceAccount
const functions = require("firebase-functions/v1");
exports.helloWorld = functions
.runWith({
// This function doesn't access other Firebase project resources, so it uses a limited service account.
serviceAccount:
"my-limited-access-sa@", // or prefer the full form: "my-limited-access-sa@my-project.iam.gserviceaccount.com"
})
.https.onRequest((request, response) => {
response.send("Hello from Firebase!");
});
ตั้งค่าการหมดเวลาและการจัดสรรหน่วยความจำ
ในบางกรณี ฟังก์ชันอาจมีข้อกำหนดพิเศษสำหรับค่าการหมดเวลาที่นาน หรือการจัดสรรหน่วยความจำจำนวนมาก คุณตั้งค่าเหล่านี้ได้ทั้งในคอนโซล Google Cloud หรือในซอร์สโค้ดของฟังก์ชัน (Firebase เท่านั้น)
หากต้องการตั้งค่าการจัดสรรหน่วยความจำและระยะหมดเวลาในซอร์สโค้ดของฟังก์ชัน ให้ใช้พารามิเตอร์
runWith
ที่เปิดตัวใน SDK ของ Firebase สำหรับ Cloud Functions 2.0.0 ตัวเลือกขณะรันไทม์นี้ยอมรับ
ออบเจ็กต์ JSON ที่เป็นไปตามอินเทอร์เฟซ
RuntimeOptions
ซึ่งกำหนดค่าสำหรับ timeoutSeconds และ memory
เช่น ฟังก์ชันพื้นที่เก็บข้อมูลนี้ใช้หน่วยความจำ 1 GB และหมดเวลาหลังจากผ่านไป 300 วินาที
exports.convertLargeFile = functions
.runWith({
// Ensure the function has enough memory and time
// to process large files
timeoutSeconds: 300,
memory: "1GB",
})
.storage.object()
.onFinalize((object) => {
// Do some complicated things that take a lot of memory and time
});
ค่าสูงสุดสำหรับ timeoutSeconds คือ 540 หรือ 9 นาที
ปริมาณหน่วยความจำที่ให้แก่ฟังก์ชันจะสอดคล้องกับ CPU ที่จัดสรร
สำหรับฟังก์ชัน ดังที่ระบุไว้ในรายการค่าที่ใช้ได้สำหรับ memory นี้
128MB— 200MHz256MB— 400MHz512MB— 800MHz1GB— 1.4 GHz2GB- 2.4 GHz4GB— 4.8 GHz8GB— 4.8 GHz
วิธีตั้งค่าการจัดสรรหน่วยความจำและระยะหมดเวลาในGoogle Cloudคอนโซล
- ในGoogle Cloudคอนโซล ให้เลือก Cloud Functions จากเมนูด้านซ้าย
- เลือกฟังก์ชันโดยคลิกชื่อฟังก์ชันในรายการฟังก์ชัน
- คลิกไอคอนแก้ไขในเมนูด้านบน
- เลือกการจัดสรรหน่วยความจำจากเมนูแบบเลื่อนลงที่มีป้ายกำกับว่าหน่วยความจำที่จัดสรร
- คลิกเพิ่มเติมเพื่อแสดงตัวเลือกขั้นสูง แล้วป้อนจำนวนวินาทีในกล่องข้อความหมดเวลา
- คลิกบันทึกเพื่ออัปเดตฟังก์ชัน