Google is committed to advancing racial equity for Black communities. See how.
หน้านี้ได้รับการแปลโดย Cloud Translation API
Switch to English

จัดการการปรับใช้ฟังก์ชันและตัวเลือกรันไทม์

คุณสามารถปรับใช้ลบและแก้ไขฟังก์ชันโดยใช้คำสั่ง Firebase CLI หรือโดยการตั้งค่าตัวเลือกรันไทม์ในซอร์สโค้ดฟังก์ชันของคุณ

ปรับใช้ฟังก์ชัน

ในการปรับใช้ฟังก์ชันให้เรียกใช้คำสั่ง Firebase CLI นี้:

$ firebase deploy --only functions

โดยค่าเริ่มต้น Firebase CLI จะปรับใช้ฟังก์ชันทั้งหมดภายใน index.js พร้อมกัน หากโปรเจ็กต์ของคุณมีมากกว่า 5 ฟังก์ชันเราขอแนะนำให้คุณใช้ - เฉพาะแฟ --only มีชื่อฟังก์ชันเฉพาะเพื่อปรับใช้เฉพาะฟังก์ชันที่คุณแก้ไข การปรับใช้ฟังก์ชันเฉพาะ ด้วยวิธีนี้จะทำให้กระบวนการปรับใช้เร็วขึ้นและช่วยให้คุณหลีกเลี่ยงการทำงานในโควต้าการปรับใช้ ตัวอย่างเช่น:

$ firebase deploy --only functions:addMessage,functions:makeUppercase

เมื่อปรับใช้ฟังก์ชันจำนวนมากคุณอาจใช้งานเกินโควต้ามาตรฐานและได้รับข้อความแสดงข้อผิดพลาด HTTP 429 หรือ 500 ในการแก้ปัญหานี้ให้ปรับใช้ฟังก์ชันในกลุ่ม 10 หรือน้อยกว่า

ดู ข้อมูลอ้างอิง Firebase CLI สำหรับรายการคำสั่งทั้งหมดที่ใช้ได้

ตามค่าเริ่มต้น Firebase CLI จะค้นหา functions/ โฟลเดอร์สำหรับซอร์สโค้ด คุณสามารถระบุโฟลเดอร์อื่นได้โดยเพิ่มบรรทัดต่อไปนี้ใน firebase.json :

"functions": {
  "source": "another-folder"
}

ลบฟังก์ชัน

คุณสามารถลบฟังก์ชันที่ปรับใช้ก่อนหน้านี้ได้ด้วยวิธีต่อไปนี้:

  • อย่างชัดเจน ใน Firebase CLI พร้อม functions:delete
  • โดยใช้เมนูบริบทใน รายการฟังก์ชัน ในคอนโซล Firebase อย่างชัดเจน
  • โดย นัย โดยการลบฟังก์ชันออกจาก index.js ก่อนการปรับใช้

การดำเนินการลบทั้งหมดจะแจ้งให้คุณยืนยันก่อนนำฟังก์ชันออกจากการผลิต

การลบฟังก์ชันที่ชัดเจนใน Firebase CLI รองรับหลายอาร์กิวเมนต์เช่นเดียวกับกลุ่มฟังก์ชันและช่วยให้คุณระบุฟังก์ชันที่ทำงานในภูมิภาคเฉพาะ นอกจากนี้คุณสามารถแทนที่พรอมต์การยืนยันได้

# Delete all functions that match the specified name in all regions.
$ firebase functions:delete myFunction

# Delete a specified function running in a specific region.
$ firebase functions:delete myFunction --region us-east-1

# Delete more than one function
$ firebase functions:delete myFunction myOtherFunction

# Delete a specified functions group.
$ firebase functions:delete groupA

# Bypass the confirmation prompt.
$ firebase functions:delete myFunction --force

ด้วยการลบฟังก์ชันโดยนัย firebase deploy จะ firebase deploy แยกวิเคราะห์ index.js และลบฟังก์ชันใด ๆ ที่ถูกลบออกจากไฟล์จากการใช้งานจริง

แก้ไขชื่อภูมิภาคหรือทริกเกอร์ของฟังก์ชัน

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

เปลี่ยนชื่อฟังก์ชัน

ในการเปลี่ยนชื่อฟังก์ชันให้สร้างเวอร์ชันที่เปลี่ยนชื่อใหม่ของฟังก์ชันใน index.js แล้วรันคำสั่งการปรับใช้สองคำสั่งแยกกัน คำสั่งแรกปรับใช้ฟังก์ชันที่ตั้งชื่อใหม่และคำสั่งที่สองจะลบเวอร์ชันที่ปรับใช้ก่อนหน้านี้ ตัวอย่างเช่นหากคุณมีฟังก์ชันที่เรียกว่า webhook ที่คุณต้องการเปลี่ยนเป็น webhookNew ให้แก้ไขโค้ดดังต่อไปนี้:

// before
const functions = require('firebase-functions');

exports.webhook = functions.https.onRequest((req, res) => {
    res.send("Hello");
});

// after
const functions = require('firebase-functions');

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

เปลี่ยนขอบเขตของฟังก์ชันหรือพื้นที่

หากคุณกำลังเปลี่ยน ภูมิภาคที่ ระบุสำหรับฟังก์ชันที่จัดการทราฟฟิกการผลิตคุณสามารถป้องกันการสูญหายของเหตุการณ์โดยทำตามขั้นตอนเหล่านี้ตามลำดับ:

  1. เปลี่ยนชื่อฟังก์ชันและเปลี่ยนภูมิภาคหรือภูมิภาคตามต้องการ
  2. ปรับใช้ฟังก์ชันที่เปลี่ยนชื่อซึ่งส่งผลให้มีการเรียกใช้รหัสเดียวกันชั่วคราวในทั้งสองชุดของภูมิภาค
  3. ลบฟังก์ชันก่อนหน้านี้

ตัวอย่างเช่นหากคุณมีฟังก์ชันที่เรียกว่า webhook ซึ่งปัจจุบันอยู่ในขอบเขตฟังก์ชันเริ่มต้นของ us-central1 และคุณต้องการย้ายไปยัง asia-northeast1 1 คุณต้องแก้ไขซอร์สโค้ดของคุณก่อนเพื่อเปลี่ยนชื่อฟังก์ชันและแก้ไขภูมิภาค .

// before
const functions = require('firebase-functions');

exports.webhook = functions
    .https.onRequest((req, res) => {
            res.send("Hello");
    });

// after
const functions = require('firebase-functions');

exports.webhookAsia = functions
    .region('asia-northeast1')
    .https.onRequest((req, res) => {
            res.send("Hello");
    });

จากนั้นปรับใช้โดยเรียกใช้:

$ firebase deploy --only functions:webhookAsia

ขณะนี้มีสองฟังก์ชันที่เหมือนกันทำงานอยู่: webhook ทำงานอยู่ใน us-central1 และ webhookAsia กำลังทำงานใน asia-northeast1 1

จากนั้นลบ webhook :

$ firebase functions:delete webhook

ตอนนี้มีเพียงฟังก์ชั่นเดียวคือ webhookAsia ซึ่งทำงานใน asia-northeast1 1

เปลี่ยนประเภททริกเกอร์ของฟังก์ชัน

ในขณะที่คุณพัฒนา Cloud Functions สำหรับการใช้งาน Firebase ในช่วงเวลาหนึ่งคุณอาจต้องเปลี่ยนประเภททริกเกอร์ของฟังก์ชันด้วยเหตุผลหลายประการ ตัวอย่างเช่นคุณอาจต้องการ:

  • เปลี่ยนจากเหตุการณ์ onChange เก็บข้อมูลเดิมเป็น onFinalize , onDelete , onArchive และ onMetadataUpdate (เรียนรู้เพิ่มเติมเกี่ยวกับสิ่งนี้ใน คู่มือการอัปเกรดเบต้าเป็น v1 หรือ v2 )
  • เปลี่ยนจาก Firebase Realtime Database หรือ Cloud Firestore ประเภทหนึ่งไปเป็นอีกเหตุการณ์หนึ่งเช่นเหตุการณ์ onWrite ทั่วไปเป็นเหตุการณ์ onCreate

ไม่สามารถเปลี่ยนประเภทเหตุการณ์ของฟังก์ชันได้เพียงแค่เปลี่ยนซอร์สโค้ดและเรียก firebase deploy เพื่อหลีกเลี่ยงข้อผิดพลาดให้เปลี่ยนประเภททริกเกอร์ของฟังก์ชันตามขั้นตอนนี้:

  1. แก้ไขซอร์สโค้ดเพื่อรวมฟังก์ชันใหม่ด้วยประเภททริกเกอร์ที่ต้องการ
  2. ปรับใช้ฟังก์ชันซึ่งส่งผลให้ทั้งฟังก์ชันเก่าและฟังก์ชันใหม่ทำงานชั่วคราว
  3. ลบฟังก์ชันเก่าอย่างชัดเจนจากการใช้งานจริงโดยใช้ Firebase CLI

ตัวอย่างเช่นหากคุณมีฟังก์ชัน objectChanged ที่มีประเภทเหตุการณ์ onChange ดั้งเดิมและคุณต้องการเปลี่ยนเป็น onFinalize ก่อนอื่นให้เปลี่ยนชื่อฟังก์ชันและแก้ไขเพื่อให้มีประเภทเหตุการณ์ onFinalize

// before
const functions = require('firebase-functions');

exports.objectChanged = functions.storage.object().onChange((object) => {
    return console.log('File name is: ', object.name);
});

// after
const functions = require('firebase-functions');

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 สำหรับ Firebase ช่วยให้คุณสามารถเลือกตัวเลือกรันไทม์เช่นเวอร์ชันรันไทม์ Node.js และการหมดเวลาต่อฟังก์ชันและการจัดสรรหน่วยความจำ

ตั้งค่าเวอร์ชัน Node.js

Firebase SDK สำหรับ Cloud Functions 2.0.0 ขึ้นไปช่วยให้สามารถเลือกรันไทม์ Node.js ได้ คุณสามารถเลือกที่จะเรียกใช้ฟังก์ชันทั้งหมดในโปรเจ็กต์เฉพาะบนสภาพแวดล้อมรันไทม์ที่สอดคล้องกับเวอร์ชัน Node.js ที่รองรับเหล่านี้:

  • โหนด js 12
  • โหนด js 10

  • Node.js 8 (เลิกใช้แล้วเมื่อวันที่ 8 มิถุนายน 2020) การ ปรับใช้ฟังก์ชัน Node.js 8 จะไม่ได้รับอนุญาตอีกต่อไปหลังจากวันที่ 15 กุมภาพันธ์ 2021 จากนั้นการเรียกใช้ฟังก์ชัน Node.js 8 ที่ปรับใช้แล้วจะหยุดลงหลังจากวันที่ 15 มีนาคม 2021 หากคุณปรับใช้ฟังก์ชันกับรันไทม์ Node.js 8 ขอแนะนำให้ อัปเกรดเป็นรันไทม์ Node.js 10

ในการตั้งค่าเวอร์ชัน Node.js:

ตั้งรุ่นใน engines ฟิลด์ใน package.json แฟ้มที่ถูกสร้างขึ้นในคุณ functions/ ไดเรกทอรีระหว่างการเริ่มต้น ตัวอย่างเช่นหากต้องการใช้เฉพาะเวอร์ชัน 10 ให้แก้ไขบรรทัดนี้ใน package.json :

  "engines": {"node": "10"}

ต้องระบุฟิลด์ engines ต้อง ระบุเวอร์ชัน Node.js ที่รองรับเพื่อให้คุณปรับใช้และรันฟังก์ชันได้ firebase init functions ปัจจุบันตั้งค่าฟิลด์นี้เป็น 10

อัปเกรดรันไทม์ Node.js ของคุณ

ในการอัพเกรดรันไทม์ Node.js ของคุณ:

  1. ตรวจสอบให้แน่ใจว่าคุณใช้ แผนการเรียกเก็บเงิน แบบจ่ายตามการใช้งานของ Blaze
  2. ตรวจสอบว่าคุณใช้ Firebase CLI เวอร์ชัน 8.1.0 หรือใหม่กว่า
  3. เปลี่ยน engines ค่าใน package.json แฟ้มที่ถูกสร้างขึ้นในคุณ functions/ ไดเรกทอรีระหว่างการเริ่มต้น ตัวอย่างเช่นหากคุณกำลังอัปเกรดจากเวอร์ชัน 8 เป็นเวอร์ชัน 10 รายการควรมีลักษณะดังนี้ "engines": {"node": "10"}
  4. หรือทดสอบการเปลี่ยนแปลงของคุณโดยใช้ โปรแกรมจำลอง Firebase
  5. ทำให้ฟังก์ชันใช้งานได้อีกครั้งโดยใช้ Firebase CLI v8.1.0 หรือใหม่กว่า

ตั้งค่าการหมดเวลาและการจัดสรรหน่วยความจำ

ในบางกรณีฟังก์ชันของคุณอาจมีข้อกำหนดพิเศษสำหรับค่าการหมดเวลานานหรือการจัดสรรหน่วยความจำจำนวนมาก คุณสามารถตั้งค่าเหล่านี้ได้ทั้งใน Google Cloud Console หรือในซอร์สโค้ดของฟังก์ชัน (Firebase เท่านั้น)

ในการตั้งค่าการจัดสรรหน่วยความจำและการหมดเวลาในซอร์สโค้ดของฟังก์ชันให้ใช้พารามิเตอร์ runWith แนะนำใน Firebase SDK for Cloud Functions 2.0.0 อ็อพชันรันไทม์นี้ยอมรับอ็อบเจ็กต์ JSON ที่เป็นไปตามอินเตอร์เฟส RuntimeOptions ซึ่งกำหนดค่าสำหรับ timeoutSeconds และ memory ตัวอย่างเช่นฟังก์ชั่นการจัดเก็บนี้ใช้หน่วยความจำ 1GB และหมดเวลาหลังจาก 300 วินาที:

const runtimeOpts = {
  timeoutSeconds: 300,
  memory: '1GB'
}

exports.myStorageFunction = functions
  .runWith(runtimeOpts)
  .storage
  .object()
  .onFinalize((object) = > {
    // do some complicated things that take a lot of memory and time
  });

ค่าสูงสุดสำหรับการ timeoutSeconds เวลา timeoutSeconds คือ 540 หรือ 9 นาที ค่าที่ถูกต้องสำหรับ memory คือ:

  • 128MB
  • 256MB
  • 512MB
  • 1GB
  • 2GB

วิธีตั้งค่าการจัดสรรหน่วยความจำและการหมดเวลาในคอนโซล Google Cloud Platform:

  1. ในคอนโซล Google Cloud Platform ให้เลือก Cloud Functions จากเมนูด้านซ้าย
  2. เลือกฟังก์ชันโดยคลิกที่ชื่อในรายการฟังก์ชัน
  3. คลิกไอคอน แก้ไข ในเมนูด้านบน
  4. เลือกการจัดสรรหน่วยความจำจากเมนูแบบเลื่อนลงที่มีข้อความว่า จัดสรรหน่วยความจำ
  5. คลิก เพิ่มเติม เพื่อแสดงตัวเลือกขั้นสูงและป้อนจำนวนวินาทีในกล่องข้อความ หมดเวลา
  6. คลิก บันทึก เพื่ออัปเดตฟังก์ชัน