Kết nối tính năng Lưu trữ ứng dụng Firebase với mạng VPC

Phần phụ trợ Firebase App Hosting có thể kết nối với mạng Đám mây riêng ảo (VPC). Điều này cho phép phần phụ trợ Firebase App Hosting truy cập vào các dịch vụ phụ trợ không thể truy cập bằng địa chỉ IP công khai, chẳng hạn như Cloud SQL, Spanner, Cloud Memorystore, Compute Engine hoặc các dịch vụ vi mô nội bộ của Kubernetes.

Quyền truy cập vào VPC chỉ có trong thời gian chạy (từ vùng chứa Cloud Run) chứ không phải tại thời điểm tạo bản dựng (Cloud Build).

Định cấu hình trong apphosting.yaml

Sử dụng mối liên kết vpcAccess trong tệp apphosting.yaml để định cấu hình quyền truy cập. Sử dụng tên mạng đủ điều kiện hoặc mã nhận dạng. Việc sử dụng mã nhận dạng cho phép di chuyển giữa môi trường thử nghiệm và môi trường sản xuất bằng nhiều trình kết nối/mạng.

runConfig:
  vpcAccess:
    egress: PRIVATE_RANGES_ONLY # Default value
    networkInterfaces:
      # Specify at least one of network and/or subnetwork
      - network: my-network-id
        subnetwork: my-subnetwork-id

Ví dụ: kết nối với Memorystore cho Redis từ ứng dụng Next.js

Các hệ thống lưu vào bộ nhớ đệm như Redis hoặc Memcached thường được dùng để tạo một lớp lưu vào bộ nhớ đệm dữ liệu nhanh cho ứng dụng. Ví dụ này cho bạn biết cách thiết lập Memorystore cho Redis trong cùng một dự án Google Cloud với phần phụ trợ Firebase App Hosting và kết nối với dự án đó bằng Luồng dữ liệu trực tiếp ra khỏi VPC.

Bước 0: Tạo một thực thể Memorystore for Redis

  1. Chuyển đến trang Memorystore cho Redis trong bảng điều khiển Google Cloud.
    • Đảm bảo bạn đã chọn đúng dự án mà bạn đang sử dụng cho Firebase App Hosting.
    • Nếu bạn không thể truy cập vào trang này, hãy đảm bảo bạn đã bật tính năng thanh toán cho dự án và đã bật API Memorystore.
  2. Chọn Tạo thực thể.
  3. Định cấu hình thực thể mới bằng các chế độ cài đặt mà bạn muốn. Dưới đây là một số giá trị mẫu bạn có thể sử dụng:
    • Nhập my-redis-cache trong mục Instance ID (Mã thực thể).
    • Nhập Redis cache trong phần Display name (Tên hiển thị).
    • Chọn Cơ bản trong bộ chọn cấp. Cấp cơ bản chỉ định một nút Redis độc lập, trái ngược với cấp tiêu chuẩn sử dụng nút sao lưu để sao lưu dữ liệu của bạn.
    • Chọn khu vực của phần phụ trợ App Hosting trong bộ chọn Khu vực. Hãy nhớ đặt giá trị này cho phù hợp với khu vực của phần phụ trợ.
    • Chọn bất kỳ trong bộ chọn vùng.
    • Nhập 5 trong mục Dung lượng. Thao tác này sẽ đặt dung lượng của thực thể thành 5 GB.
    • Chọn 5.0 trong Phiên bản (nên dùng).
    • Chọn mặc định trong bộ chọn Mạng được uỷ quyền.

Bước 1: Cập nhật apphosting.yaml bằng mã nhận dạng mạng VPC

  1. Truy cập vào trang Mạng VPC trong bảng điều khiển Google Cloud.
  2. Tìm mã nhận dạng mạng VPC cho thực thể Memorystore cho Redis (thường là default).
  3. Thiết lập cấu hình đầu ra VPC trực tiếp trong apphosting.yaml bằng cách sử dụng mã nhận dạng mạng VPC:

    runConfig:
      vpcAccess:
        egress: PRIVATE_RANGES_ONLY # Default value
      networkInterfaces:
        - network: my-network-id
    

Bước 2: Thêm các biến môi trường hướng ứng dụng của bạn đến Redis

  1. Tìm thông tin kết nối (máy chủ và cổng) trong thẻ "Kết nối" của thực thể Memorystore cho Redis trong bảng điều khiển Google Cloud.
  2. Kết nối với Redis bằng biến môi trường REDISPORTREDISHOST. Đặt các giá trị này trong apphosting.yaml bằng cách sử dụng giá trị máy chủ lưu trữ và cổng từ bảng điều khiển Google Cloud:

    env:
      # Sample only. Use actual values provided by Memorystore
      - variable: REDISPORT
        value: 6379
      - variable: REDISHOST
        value: 10.127.16.3
    

Bước 3: Sử dụng redis từ ứng dụng

  1. Cài đặt gói npm redis:

    npm install redis@latest

  2. Truy cập vào bộ nhớ đệm redis từ mã của bạn. Sử dụng các biến môi trường đã định cấu hình ở bước trước. Ví dụ: sau đây là cách bạn có thể đọc từ bộ nhớ đệm trong trình xử lý tuyến Next.js:

    • src/lib/redis.js

      import { createClient } from "redis";
      
      // Set these environment variables in apphosting.yaml
      const REDISHOST = process.env.REDISHOST;
      const REDISPORT = process.env.REDISPORT;
      
      let redisClient;
      
      export async function getClient(req, res) {
        // Only connect if a connection isn't already available
        if (!redisClient) {
          redisClient = await createClient(REDISPORT, REDISHOST)
            .on("error", (err) => console.error("Redis Client Error", err))
            .connect();
        }
      
        return redisClient;
      }
      
    • src/app/counter/route.js

      import { getClient } from "@/lib/redis.js";
      
      export async function GET(request) {
        const redisClient = await getClient();
        const count = await redisClient.get("counter");
      
        return Response.json({ count });
      }
      
      export async function POST(request) {
        const redisClient = await getClient();
        const count = await redisClient.incr("counter");
      
        return Response.json({ count });
      }
      

Bước 4 (không bắt buộc): Định cấu hình ứng dụng để phát triển cục bộ

Trình mô phỏng Firebase App Hosting có thể ghi đè các giá trị bằng cách sử dụng apphosting.emulator.yaml. Tại đây, bạn có thể thay đổi giá trị của REDISHOST để trỏ đến máy chủ cục bộ để có thể phát triển cục bộ bằng cách cài đặt Redis cục bộ.

  1. Cài đặt Redis trên máy cục bộ
  2. Tạo hoặc chỉnh sửa apphosting.emulators.yaml để tham chiếu thực thể cục bộ:

    env:
      - variable: REDISHOST
        value: 127.0.0.1