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

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

chức năng triển khai

Để triển khai chức năng, chạy lệnh căn cứ hỏa lực CLI này:

firebase deploy --only functions

Theo mặc định, căn cứ hỏa lực 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 có chứa hơn 5 chức năng, chúng tôi khuyên bạn nên sử dụng --only mà chỉ làm cờ với tên hàm cụ thể để triển khai chỉ các chức năng mà bạn đã chỉnh sửa. Triển khai chức năng cụ thể theo cách này 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 một 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 HTTP 429 hoặc 500 thông báo lỗi. Để giải quyết việc này, triển khai chức năng trong nhóm 10 người trở xuống.

Xem các tài liệu tham khảo căn cứ hỏa lực CLI cho đầy đủ danh sách các lệnh có sẵn.

Theo mặc định, căn cứ hỏa lực CLI trông trong functions/ thư mục cho mã nguồn. Nếu bạn thích, bạn có thể sắp xếp các chức năng trong codebases hoặc nhiều bộ tập tin.

chức năng Xóa

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

  • rõ ràng trong căn cứ hỏa lực CLI với functions:delete
  • rõ ràng trong Google Cloud Bảng điều khiển .
  • implictly bằng cách loại bỏ các chức năng từ index.js trước khi triển khai.

Tất cả các hoạt động xóa nhắc bạn xác nhận trước khi tháo các chức năng từ khâu sản xuất.

xóa chức năng rõ ràng trong căn cứ hỏa lực CLI hỗ trợ nhiều tranh cãi 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 chạy trong một khu vực cụ thể. Ngoài ra, bạn có thể ghi đè lên dấu nhắc xác nhận.

# Delete all functions that match the specified name in all regions.
firebase functions:delete myFunction
Phần giữ chỗ
# Delete a specified function running in a specific region.
firebase functions:delete myFunction --region us-east-1
Phần giữ chỗ
# 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 xóa chức năng tiềm ẩn, firebase deploy phân tích index.js và loại bỏ từ khâu sản xuất bất kỳ chức năng đã được lấy ra từ các tập tin.

Sửa đổi tên của một chức năng, khu vực hoặc kích hoạt

Nếu bạn đang đổi tên hoặc thay đổi khu vực hoặc kích hoạt cho các chức năng được 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 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 chức năng, tạo ra một phiên bản đổi tên mới của các chức năng 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 các chức năng mới được đặt tên, và lệnh thứ hai loại bỏ các phiên bản được 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 để webhookNew , rà soát lại các 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 các 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 khu vực hoặc khu vực của một chức năng

Nếu bạn đang thay đổi quy định khu vực cho một chức năng đó là xử lý giao thông sản xuất, bạn có thể ngăn chặn sự mất 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 chức năng, và thay đổi khu vực hoặc khu vực của mình như mong muốn.
  2. Triển khai chức năng đổi tên, mà kết quả trong tạm thời chạy cùng 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 chức năng gọi là webhook hiện đang có trong các chức năng mặc định khu vực của us-central1 , và bạn muốn di chuyển nó đến asia-northeast1 , bạn cần phải đầu tiên sửa đổi mã nguồn của bạn để đổi tên các chức năng và rà soát khu vực .

// 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 chạy: webhook đang chạy trong us-central1 , và webhookAsia đang chạy trong khu vực asia-northeast1 .

Sau đó, xóa webhook :

firebase functions:delete webhook

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

Thay đổi kiểu kích hoạt một chức năng

Khi bạn phát triển Chức năng Cloud Print của bạn cho việc triển khai căn cứ hỏa lực theo thời gian, bạn có thể cần phải thay đổi loại kích hoạt một chức năng vì nhiều lý do. Ví dụ, bạn có thể muốn:

  • Thay đổi từ việc lưu trữ di sản onChange sự kiện để onFinalize , onDelete , onArchive , và onMetadataUpdate . (Tìm hiểu thêm về điều này trong phiên bản beta để v1 hoặc v2 nâng cấp hướng dẫn ).
  • Thay đổi từ một loại cơ sở dữ liệu căn cứ hỏa lực Realtime hoặc sự kiện đám mây FireStore với nhau, chẳng hạn như chung onWrite sự kiện vào hạt onCreate sự kiện.

Nó không phải là có thể thay đổi loại sự kiện của chức năng bằng cách chỉ cần thay đổi mã nguồn và chạy firebase deploy . Để tránh sai sót, thay đổi loại kích hoạt một chức năng của thủ tục này:

  1. Sửa đổi mã nguồn để bao gồm một chức năng mới với các loại kích hoạt mong muốn.
  2. Triển khai chức năng, mà kết quả trong tạm thời chạy cả các chức năng cũ và mới.
  3. Dứt khoát xóa các chức năng cũ từ khâu sản xuất bằng cách sử dụng căn cứ hỏa lực CLI.

Ví dụ, nếu bạn đã có một chức năng objectChanged có những di sản onChange loại sự kiện, và bạn muốn thay đổi nó để onFinalize , đầu tiên đổi tên chức năng và chỉnh sửa nó để có onFinalize loại sự kiện.

// 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 ra các chức năng mới đầu tiên, trước khi xóa các 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

Đám mây Chức năng cho căn cứ hỏa lực cho phép bạn chọn tùy chọn thời gian chạy như phiên bản runtime Node.js và mỗi chức năng thời gian chờ, cấp phát bộ nhớ, và tối thiểu / trường hợp chức năng tối đa.

phiên bản Set Node.js

Căn cứ hỏa lực SDK cho Cloud Chức năng 2.0.0 và cao hơn cho phép một sự lựa chọn của Node.js runtime. Bạn có thể chọn để chạy tất cả các chức năng trong một dự án độc quyền đối với môi trường runtime tương ứng với một trong các phiên bản Node.js được hỗ trợ:

  • Node.js 16
  • Node.js 14
  • Node.js 12
  • Node.js 10
  • Node.js 8 (bị phản đối trên 08 Tháng 6 năm 2020) Triển khai các chức năng để các Node.js 8 runtime được vô hiệu hóa trong căn cứ hỏa lực CLI vào ngày 15, năm 2020. Thực hiện các chức năng đã triển khai-sẽ dừng lại ở một số điểm trong tương lai; nếu bạn đã triển khai chức năng để thời gian chạy Node.js 8, chúng tôi khuyên bạn nên nâng cấp lên Node.js 16 runtime .

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

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

  "engines": {"node": "16"}

Các engines lĩnh vực được yêu cầu; nó phải xác định một trong những phiên bản Node.js được hỗ trợ theo thứ tự để bạn có thể triển khai và chức năng chạy. Hiện nay firebase init functions bộ lĩnh vực này để 16 .

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 dự án của bạn là trên kế hoạch giá Blaze .
  2. Hãy chắc chắn rằng bạn đang sử dụng căn cứ hỏa lực CLI v9.17.0 hay muộn.
  3. Thay đổi engines giá trị trong package.json tập tin được tạo ra trong bạn functions/ thư mục trong quá trình khởi. Ví dụ, nếu bạn đang nâng cấp từ phiên bản 10 lên phiên bản 16, sự xâm nhập sẽ trông như thế này: "engines": {"node": "16"}
  4. Tùy chọn, kiểm tra những thay đổi của bạn bằng cách sử dụng căn cứ hỏa lực địa phương Emulator Suite .
  5. chức năng redeploy sử dụng v9.17.0 căn cứ hỏa lực CLI hay muộn.

Hành vi rộng kiểm soát

Theo mặc định, Cloud Chức năng cho căn cứ hỏa lực quy mô số lượng chạy trường dựa trên số lượng yêu cầu gửi đến, có khả năng mở rộng quy mô xuống không trường hợp trong thời gian giao thông giảm. Tuy nhiên, nếu ứng dụng của bạn đòi hỏi phải giảm độ trễ và bạn muốn giới hạn số lượng bắt đầu lạnh, bạn có thể thay đổi hành vi mặc định này bằng cách xác định một số lượng tối thiểu các trường hợp container để được giữ ấm và sẵn sàng để phục vụ yêu cầu.

Tương tự, bạn có thể thiết lập một số lượng tối đa để hạn chế mở rộng quy mô của trường để đáp ứng với yêu cầu đến. Sử dụng thiết lập này như một cách để kiểm soát chi phí của bạn hoặc để hạn chế số lượng kết nối đến một dịch vụ hậu thuẫn như một cơ sở dữ liệu.

Giảm số lượng bắt đầu lạnh

Để số tối thiểu đã đặt các trường hợp cho một hàm trong mã nguồn, sử dụng runWith tham số. 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 minInstances . Ví dụ, chức năng này đặt tối thiểu là 5 trường hợp để giữ ấm:

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

Dưới đây là một số điều cần xem xét khi thiết lập một giá trị cho minInstances :

  • Nếu Cloud Chức năng cho căn cứ hỏa lực quy mô ứng dụng của bạn trên của bạn minInstances cài đặt, bạn sẽ trải nghiệm một sự khởi đầu lạnh cho mỗi trường hợp trên ngưỡng đó.
  • bắt đầu lạnh có tác dụng nghiêm trọng nhất trên các ứng dụng với giao thông có gai nhọn. Nếu ứng dụng của bạn có giao thông có gai nhọn và bạn thiết lập một minInstances đánh giá đủ cao mà bắt đầu lạnh được giảm trên mỗi tăng giao thông, bạn sẽ thấy giảm đáng kể độ trễ. Đối với các ứng dụng với giao thông liên tục, bắt đầu lạnh không có khả năng nghiêm trọng ảnh hưởng đến hiệu suất.
  • Thiết trường tối thiểu có thể có ý nghĩa cho các môi trường sản xuất, nhưng thông thường nên tránh trong việc kiểm tra môi trường. Để mở rộng quy mô bằng không trong dự án thử nghiệm của bạn nhưng vẫn giảm bắt đầu lạnh trong dự án sản xuất, bạn có thể thiết lập minInstances dựa trên FIREBASE_CONFIG biến môi trường:

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

Hạn chế số lượng tối đa các trường hợp cho một chức năng

Để các trường hợp tối đa bộ trong mã nguồn của chức năng, sử dụng runWith tham số. 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 maxInstances . Ví dụ, chức năng này đặt ra một giới hạn 100 trường hợp để không lấn át một cơ sở dữ liệu di sản giả:

exports.mirrorOrdersToLegacyDatabase = functions
    .runWith({
      // Legacy database only supports 100 simultaneous connections
      maxInstances: 100,
    })
    .firestore.document("orders/{orderId}")
    .onWrite((change, context) => {
      // Connect to legacy database
    });

Nếu một chức năng HTTP được nhân rộng đến maxInstances giới hạn, yêu cầu mới đang xếp hàng đợi trong 30 giây và sau đó bị từ chối với một mã phản hồi của 429 Too Many Requests nếu không có trường hợp có sẵn bằng cách sau đó.

Để tìm hiểu thêm về thực tiễn tốt nhất cho việc sử dụng các thiết lập trường hợp tối đa, hãy kiểm tra các thực hành tốt nhất cho việc sử dụng maxInstances .

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

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

Để cấp phát bộ nhớ thiết lập và thời gian chờ trong mã nguồn các chức năng, sử dụng runWith tham số được giới thiệu vào căn cứ hỏa lực SDK cho Cloud Chức năng 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à thời gian ra sau 300 giây:

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

Giá trị tối đa cho timeoutSeconds540 , tương đương 9 phút. Dung lượng bộ nhớ cấp cho một chức năng tương ứng với CPU phân bổ cho các chức năng, như trình bày chi tiết trong danh sách này của giá trị hợp lệ cho memory :

  • 128MB - 200MHz
  • 256MB - 400MHz
  • 512MB - 800MHz
  • 1GB - 1,4 GHz
  • 2GB - 2.4 GHz
  • 4GB - 4.8 GHz
  • 8GB - 4.8 GHz

Để thiết lập phân bổ bộ nhớ và thời gian chờ trong Google Cloud Console:

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