Định cấu hình dịch vụ lưu trữ ứng dụng

Đối với cấu hình nâng cao như biến môi trường hoặc chế độ cài đặt thời gian chạy, chẳng hạn như giới hạn cho mô hình đồng thời, CPU và bộ nhớ, bạn cần tạo và chỉnh sửa tệp apphosting.yaml trong thư mục gốc của ứng dụng. Tệp này cũng hỗ trợ tham chiếu đến các khoá bí mật được quản lý bằng Trình quản lý bí mật của Cloud, giúp bạn có thể kiểm tra chế độ kiểm soát nguồn một cách an toàn.

Sau đây là ví dụ minh hoạ một tệp apphosting.yaml thông thường, với các chế độ cài đặt cho dịch vụ Cloud Run của phần phụ trợ, một số biến môi trường và một số tham chiếu đến khoá bí mật do Cloud Secret Manager quản lý:

# Settings for Cloud Run
runConfig:
  minInstances: 2
  maxInstances: 100
  concurrency: 100
  cpu: 2
  memoryMiB: 1024

# Environment variables and secrets
env:
  - variable: STORAGE_BUCKET
    value: mybucket.appspot.com
    availability:
      - BUILD
      - RUNTIME

  - variable: API_KEY
    secret: myApiKeySecret

    # Same as API_KEY above but with a pinned version.
  - variable: PINNED_API_KEY
    secret: myApiKeySecret@5

    # Same as API_KEY above but with the long form secret reference as defined by Cloud Secret Manager.
  - variable: VERBOSE_API_KEY
    secret: projects/test-project/secrets/secretID

    # Same as API_KEY above but with the long form secret reference with pinned version.
  - variable: PINNED_VERBOSE_API_KEY
    secret: projects/test-project/secrets/secretID/versions/5

Phần còn lại của hướng dẫn này cung cấp thêm thông tin và ngữ cảnh cho các chế độ cài đặt mẫu này.

Định cấu hình chế độ cài đặt dịch vụ Cloud Run

Với chế độ cài đặt apphosting.yaml, bạn có thể định cấu hình cách cấp phép dịch vụ Cloud Run. Các chế độ cài đặt có sẵn của dịch vụ Cloud Run được cung cấp trong đối tượng runConfig:

  • cpu – Số CPU được sử dụng cho mỗi phiên bản phân phát (mặc định là 0).
  • memoryMiB – Dung lượng bộ nhớ được phân bổ cho mỗi thực thể phân phát trong MiB (mặc định là 512)
  • maxInstances – Số vùng chứa tối đa sẽ chạy cùng một lúc (mặc định là 100 và được quản lý theo hạn mức)
  • minInstances – Số vùng chứa luôn duy trì hoạt động (mặc định là 0).
  • concurrency – Số yêu cầu tối đa mà mỗi thực thể phân phát có thể nhận được (mặc định là 80).

Lưu ý mối quan hệ quan trọng giữa cpumemoryMiB; bạn có thể đặt bộ nhớ thành bất kỳ giá trị số nguyên nào từ 128 đến 32768, nhưng việc tăng giới hạn bộ nhớ có thể yêu cầu tăng giới hạn CPU:

  • Trên 4GiB yêu cầu ít nhất 2 CPU
  • Trên 8GiB yêu cầu ít nhất 4 CPU
  • Phiên bản cao hơn 16GiB yêu cầu ít nhất 6 CPU
  • Phiên bản 24GiB yêu cầu ít nhất 8 CPU

Tương tự, giá trị của cpu ảnh hưởng đến chế độ cài đặt đồng thời. Nếu thiết lập giá trị nhỏ hơn 1 CPU, thì bạn phải thiết lập tính năng đồng thời thành 1 và CPU sẽ chỉ được phân bổ trong quá trình xử lý yêu cầu.

Định cấu hình môi trường tạo bản dựng

Đôi khi, bạn cần định cấu hình bổ sung cho quy trình xây dựng, chẳng hạn như khoá API của bên thứ ba hoặc các chế độ cài đặt có thể điều chỉnh. Dịch vụ Lưu trữ ứng dụng cung cấp cấu hình môi trường trong apphosting.yaml để lưu trữ và truy xuất loại dữ liệu này cho dự án của bạn.

env:
-   variable: STORAGE_BUCKET
    value: mybucket.appspot.com

Đối với các ứng dụng Next.js, các tệp dotenv chứa các biến môi trường cũng sẽ hoạt động với tính năng Lưu trữ ứng dụng. Bạn nên sử dụng apphosting.yaml để kiểm soát chi tiết biến về môi trường với bất kỳ khung nào.

Trong apphosting.yaml, bạn có thể chỉ định những quy trình có quyền truy cập vào biến môi trường của bạn bằng cách sử dụng thuộc tính availability. Bạn có thể đặt giới hạn để một biến môi trường chỉ dùng được cho môi trường tạo bản dựng hoặc chỉ dùng được cho môi trường thời gian chạy. Theo mặc định, chế độ này có thể sử dụng được cho cả hai.

env:
-   variable: STORAGE_BUCKET
    value: mybucket.appspot.com
    availability:
    -   BUILD
    -   RUNTIME

Đối với các ứng dụng Next.js, bạn cũng có thể sử dụng tiền tố NEXT_PUBLIC_ giống như cách bạn thực hiện trong tệp dotenv để tạo một biến có thể truy cập trong trình duyệt.

env:
-   variable: NEXT_PUBLIC_STORAGE_BUCKET
    value: mybucket.appspot.com
    availability:
    -   BUILD
    -   RUNTIME

Khoá biến hợp lệ bao gồm các ký tự A-Z hoặc dấu gạch dưới. Một số khoá biến môi trường được dành riêng để sử dụng nội bộ. Không sử dụng bất kỳ khoá nào sau đây trong tệp cấu hình:

  • Bất kỳ biến nào bắt đầu bằng X_FIREBASE_
  • PORT
  • K_SERVICE
  • K_REVISION
  • K_CONFIGURATION

Lưu trữ và truy cập vào các tham số bí mật

Bạn nên lưu trữ thông tin nhạy cảm như khoá API dưới dạng bí mật. Bạn có thể tham chiếu các mã thông báo bí mật trong apphosting.yaml để tránh kiểm tra thông tin nhạy cảm vào phần kiểm soát nguồn.

Tham số thuộc loại secret biểu thị tham số chuỗi có giá trị được lưu trữ trong Cloud Secret Manager. Thay vì trực tiếp lấy giá trị, các tham số bí mật sẽ kiểm tra sự tồn tại trong Cloud Secret Manager và tải các giá trị trong quá trình phát hành.

  -   variable: API_KEY
      secret: myApiKeySecret

Khoá bí mật trong Trình quản lý bí mật trên đám mây có thể có nhiều phiên bản. Theo mặc định, giá trị của một tham số bí mật dành cho phần phụ trợ trực tiếp sẽ được ghim vào phiên bản bí mật mới nhất hiện có tại thời điểm tạo phần phụ trợ. Nếu có yêu cầu về việc tạo phiên bản và quản lý vòng đời của các tham số, bạn có thể ghim vào các phiên bản cụ thể bằng Cloud Secret Manager. Ví dụ: để ghim vào phiên bản 5:

  - variable: PINNED_API_KEY
    secret: myApiKeySecret@5

Bạn có thể tạo khoá bí mật bằng lệnh CLI firebase apphosting:secrets:set và bạn sẽ được nhắc thêm các quyền cần thiết. Quy trình này cung cấp cho bạn lựa chọn tự động thêm tham chiếu bí mật vào apphosting.yaml.

Để sử dụng trọn bộ chức năng của Cloud Secret Manager, bạn có thể dùng bảng điều khiển của Cloud Secret Manager. Nếu làm như vậy, bạn cần cấp quyền cho phần phụ trợ Lưu trữ ứng dụng bằng lệnh CLI firebase apphosting:secrets:grantaccess.

Đồng bộ hoá trạng thái Xác thực Firebase

Các ứng dụng sử dụng tính năng Xác thực Firebase nên cân nhắc sử dụng SDK Web Firebase để giúp đồng bộ hoá trạng thái xác thực giữa ứng dụng và máy chủ. Bạn có thể hỗ trợ việc này bằng cách triển khai FirebaseServerApp bằng một trình chạy dịch vụ. Quy trình tác vụ cơ bản là:

  1. Triển khai trình chạy dịch vụ giúp thêm tiêu đề phù hợp cho ứng dụng của bạn theo yêu cầu đến máy chủ.
  2. Lấy tiêu đề từ yêu cầu trên máy chủ và chuyển đổi tiêu đề đó thành người dùng xác thực bằng FirebaseServerApp.