Google is committed to advancing racial equity for Black communities. See how.
Trang này được dịch bởi Cloud Translation API.
Switch to English

Quản lý các tùy chọn triển khai và thời gian chạy

Bạn có thể triển khai, xóa và sửa đổi các chức năng bằng các lệnh Firebase CLI hoặc bằng cách đặt các tùy chọn thời gian chạy trong mã nguồn chức năng của bạn.

Triển khai các chức năng

Để triển khai các chức năng, hãy chạy lệnh Firebase CLI này:

 $ firebase deploy --only functions
 

Nếu bạn gặp lỗi quyền khi triển khai các chức năng, hãy đảm bảo rằng các vai trò IAM thích hợp được gán cho người dùng đang chạy các lệnh triển khai.

Theo mặc định, Firebase CLI triển khai tất cả các chức năng bên trong index.js cùng một lúc. Nếu dự án của bạn chứa hơn 5 hàm, chúng tôi khuyên bạn nên sử dụng cờ --only với các tên hàm cụ thể để chỉ triển khai các hàm mà bạn đã chỉnh sửa. Triển khai các chức năng cụ thể theo cách này sẽ tăng tốc quá trình triển khai và giúp bạn tránh chạy vào hạn ngạch triển khai. Ví dụ:

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

Khi triển khai số lượng lớn các chức năng, bạn có thể vượt quá hạn ngạch tiêu chuẩn và nhận thông báo lỗi HTTP 429 hoặc 500. Để giải quyết vấn đề này, hãy triển khai các chức năng theo nhóm từ 10 trở xuống hoặc yêu cầu tăng hạn ngạch cho các yêu cầu Viết mỗi 100 giây cho mỗi hạn ngạch người dùng .

Xem tham chiếu Firebase CLI để biết danh sách đầy đủ các lệnh có sẵn.

Theo mặc định, Firebase CLI tìm trong các functions/ thư mục cho mã nguồn. Bạn có thể chỉ định một thư mục khác bằng cách thêm các dòng sau vào firebase.json :

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

Xóa chức năng

Bạn có thể xóa các chức năng đã triển khai trước đó theo những cách sau:

  • rõ ràng trong Firebase CLI với các functions:delete
  • sử dụng rõ ràng menu ngữ cảnh trong danh sách chức năng trong bảng điều khiển Firebase
  • ngụ ý bằng cách xóa hàm khỏi index.js trước khi triển khai.

Tất cả các thao tác xóa sẽ nhắc bạn xác nhận trước khi xóa chức năng khỏi sản xuất.

Xóa chức năng rõ ràng trong Firebase CLI hỗ trợ nhiều đối số cũng như các nhóm chức năng và cho phép bạn chỉ định một chức năng đang chạy trong một khu vực cụ thể. Ngoài ra, bạn có thể ghi đè lời nhắc xác nhận.

 # 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
 

Với việc xóa chức năng ngầm, firebase deploy phân tích index.js và xóa khỏi sản xuất bất kỳ chức năng nào đã bị xóa khỏi tệp.

Sửa đổi tên, vùng hoặc kích hoạt của hàm

Nếu bạn đang đổi tên hoặc thay đổi vùng hoặc kích hoạt các chức năng đang xử lý lưu lượng sản xuất, hãy làm theo các bước trong phần này để tránh mất các sự kiện trong quá trình sửa đổi. Trước khi bạn làm theo các bước này, đầu tiên đảm bảo rằng chức năng của bạn là idempotent , vì cả hai phiên bản mới và phiên bản cũ của chức năng của bạn sẽ được chạy cùng một lúc trong sự thay đổi.

Đổi tên một chức năng

Để đổi tên một hàm, tạo một phiên bản mới được đổi tên của hàm trong index.js và sau đó chạy hai lệnh triển khai riêng biệt. Lệnh đầu tiên triển khai chức năng mới được đặt tên và lệnh thứ hai loại bỏ phiên bản đã triển khai trước đó. Ví dụ: nếu bạn có một chức năng gọi là webhook mà bạn muốn thay đổi thành webhookNew , hãy sửa lại mã như sau:

 // 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");
});
 

Sau đó chạy các lệnh sau để triển khai chức năng mới:

 # 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
 

Thay đổi vùng hoặc vùng của hàm

Nếu bạn đang thay đổi các vùng được chỉ định cho một chức năng xử lý lưu lượng sản xuất, bạn có thể ngăn ngừa mất sự kiện bằng cách thực hiện các bước sau theo thứ tự:

  1. Đổi tên hàm và thay đổi vùng hoặc vùng của nó theo ý muốn.
  2. Triển khai chức năng được đổi tên, dẫn đến việc tạm thời chạy cùng một mã trong cả hai bộ khu vực.
  3. Xóa chức năng trước đó.

Ví dụ: nếu bạn có một hàm gọi là webhook hiện đang ở trong vùng hàm mặc định của us-central1 và bạn muốn di chuyển nó sang asia-northeast1 us-central1 , trước tiên bạn cần sửa đổi mã nguồn của mình để đổi tên hàm và sửa lại vùng .

 // 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");
    });

 

Sau đó triển khai bằng cách chạy:

 $ firebase deploy --only functions:webhookAsia
 

Bây giờ có hai chức năng giống hệt nhau đang chạy: webhook đang chạy trong us-central1webhookAsia đang chạy ở asia-northeast1 webhookAsia .

Sau đó, xóa webhook :

 $ firebase functions:delete webhook
 

Bây giờ chỉ có một chức năng - webhookAsia , đang chạy ở asia-northeast1 webhookAsia .

Thay đổi loại kích hoạt của chức năng

Khi bạn phát triển Chức năng đám mây để triển khai Firebase theo thời gian, bạn có thể cần thay đổi loại kích hoạt của chức năng vì nhiều lý do. Ví dụ: bạn có thể muốn:

  • Thay đổi từ lưu trữ kế thừa sự kiện onChange thành onFinalize , onDelete , onArchiveonMetadataUpdate . (Tìm hiểu thêm về điều này trong hướng dẫn nâng cấp beta lên v1 hoặc v2 ).
  • Thay đổi từ một loại cơ sở dữ liệu thời gian thực Firebase hoặc sự kiện Cloud Firestore sang một loại khác, chẳng hạn như sự kiện onWrite chung thành sự kiện onCreate chi tiết.

Không thể thay đổi loại sự kiện của chức năng bằng cách chỉ thay đổi mã nguồn và chạy firebase deploy . Để tránh lỗi, thay đổi loại kích hoạt của chức năng theo quy trình này:

  1. Sửa đổi mã nguồn để bao gồm một chức năng mới với loại kích hoạt mong muốn.
  2. Triển khai chức năng, dẫn đến việc tạm thời chạy cả chức năng cũ và mới.
  3. Xóa hoàn toàn chức năng cũ khỏi sản xuất bằng Firebase CLI.

Ví dụ: nếu bạn có một hàm objectChanged có loại sự kiện onChange kế thừa và bạn muốn thay đổi nó thành onFinalize , trước tiên hãy đổi tên hàm và chỉnh sửa nó thành loại sự kiện 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);
});
 

Sau đó chạy các lệnh sau để tạo chức năng mới trước, trước khi xóa chức năng cũ:

 # 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
 

Đặt tùy chọn thời gian chạy

Các hàm đám mây cho Firebase cho phép bạn chọn các tùy chọn thời gian chạy như phiên bản thời gian chạy Node.js và thời gian chờ cho mỗi chức năng và phân bổ bộ nhớ.

Đặt phiên bản Node.js

Firebase SDK cho Cloud Function 2.0.0 trở lên cho phép lựa chọn thời gian chạy Node.js. Bạn có thể chọn chạy tất cả các chức năng trong một dự án dành riêng cho môi trường thời gian chạy tương ứng với một trong các phiên bản Node.js được hỗ trợ này:

  • Node.js 12 (Beta)
  • Node.js 10

  • Node.js 8 (không dùng nữa kể từ ngày 8 tháng 6 năm 2020) Việc triển khai các hàm Node.js 8 sẽ không còn được phép sau ngày 15 tháng 2 năm 2020. Sau đó, việc thực thi các hàm Node.js 8 đã được triển khai sẽ dừng sau ngày 15 tháng 3 năm 2021 . Nếu bạn đã triển khai các chức năng cho thời gian chạy Node.js 8, bạn nên nâng cấp lên thời gian chạy Node.js 10 .

Để đặt phiên bản Node.js:

Đặt phiên bản trong trường engines trong tệp package.json đã được tạo trong thư mục functions/ thư mục của bạn trong quá trình khởi tạo. Ví dụ: để chỉ sử dụng phiên bản 10, hãy chỉnh sửa dòng này trong package.json :

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

Lĩnh vực engines là cần thiết; nó phải chỉ định một trong các phiên bản Node.js được hỗ trợ để bạn triển khai và chạy các chức năng. Hiện tại các firebase init functions đặt trường này thành 10 .

Nâng cấp thời gian chạy Node.js của bạn

Để nâng cấp thời gian chạy Node.js của bạn:

  1. Hãy chắc chắn rằng bạn đang trên đường pay-as-you-go Blaze kế hoạch thanh toán .
  2. Đảm bảo bạn đang sử dụng Firebase CLI phiên bản 8.1.0 trở lên.
  3. Thay đổi giá trị engines trong tệp package.json đã được tạo trong thư mục functions/ thư mục của bạn trong quá trình khởi tạo. Ví dụ: nếu bạn đang nâng cấp từ phiên bản 8 lên phiên bản 10, mục nhập sẽ giống như sau: "engines": {"node": "10"}
  4. Tùy chọn, kiểm tra các thay đổi của bạn bằng trình giả lập Firebase .
  5. Tái triển khai các chức năng bằng Firebase CLI v8.1.0 trở lên.

Đặt thời gian chờ và cấp phát bộ nhớ

Trong một số trường hợp, các chức năng của bạn có thể có các yêu cầu đặc biệt cho giá trị thời gian chờ dài hoặc phân bổ bộ nhớ lớn. Bạn có thể đặt các giá trị này trong Google Cloud Console hoặc trong mã nguồn chức năng (chỉ Firebase).

Để đặt cấp phát bộ nhớ và thời gian chờ trong mã nguồn chức năng, hãy sử dụng tham số runWith giới thiệu trong Firebase SDK cho Cloud Function 2.0.0. Lựa chọn thời gian chạy này chấp nhận một đối tượng JSON phù hợp với các RuntimeOptions giao diện, trong đó xác định giá trị cho timeoutSecondsmemory . Ví dụ: chức năng lưu trữ này sử dụng 1GB bộ nhớ và hết thời gian sau 300 giây:

 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
  });
 

Giá trị tối đa cho thời timeoutSeconds540 hoặc 9 phút. Các giá trị hợp lệ cho memory là:

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

Để đặt cấp phát bộ nhớ và thời gian chờ trong Bảng điều khiển Google Cloud Platform:

  1. Trong Bảng điều khiển nền tảng đám mây của Google, chọn Chức năng đám mây từ menu bên trái.
  2. Chọn một chức năng bằng cách nhấp vào tên của nó trong danh sách chức năng.
  3. Nhấp vào biểu tượng Chỉnh sửa trong menu trên cùng.
  4. Chọn cấp phát bộ nhớ từ menu thả xuống có nhãn Bộ nhớ được phân bổ .
  5. Bấm Thêm để hiển thị các tùy chọn nâng cao và nhập một số giây vào hộp văn bản Hết giờ .
  6. Nhấn Save để cập nhật chức năng.