Firebase App Hosting'i VPC ağına bağlama

Firebase App Hosting arka uçunuz bir Sanal Özel Bulut (VPC) ağına bağlanabilir. Bu sayede Firebase App Hostingarka ucunuz, Cloud SQL, Spanner, Cloud MemorystoreCompute Engine veya Kubernetes'in dahili mikro hizmetleri gibi herkese açık IP adresleri kullanılarak erişilemeyen arka uç hizmetlerine erişebilir.

VPC erişimi yalnızca derleme zamanında (Cloud Build) değil, çalışma zamanında (Cloud Run kapsayıcınızdan) kullanılabilir.

apphosting.yaml'da yapılandırma

Erişimi yapılandırmak için vpcAccess dosyanızdaki apphosting.yaml eşlemeyi kullanın. Tam alan adı veya kimlik kullanın. Kimlikler kullanıldığında, farklı bağlayıcılar/ağlar içeren hazırlık ve üretim ortamları arasında taşınabilirlik sağlanır.

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

Örnek: Next.js uygulamasından Memorystore for Redis'e bağlanma

Redis veya Memcached gibi önbelleğe alma sistemleri, bir uygulama için hızlı veri önbelleğe alma katmanı oluşturmak amacıyla yaygın olarak kullanılır. Bu örnekte, Firebase App Hosting arka ucunuzla aynı Google Cloud projesinde Redis için Memorystore'u nasıl ayarlayacağınız ve doğrudan VPC çıkışı kullanarak nasıl bağlanacağınız gösterilmektedir.

0. adım: Memorystore for Redis örneği oluşturun

  1. Google Cloud konsolunda Redis için Memorystore sayfasına gidin.
    • Firebase App Hosting için kullandığınız projenin seçildiğinden emin olun.
    • Bu sayfaya erişemiyorsanız projenizde faturalandırmanın etkinleştirildiğinden ve Memorystore API'yi etkinleştirdiğinizden emin olun.
  2. Create Instance'ı (Örnek oluştur) seçin.
  3. Yeni örneği tercih ettiğiniz ayarlarla yapılandırın. Kullanabileceğiniz bazı örnek değerler:
    • Instance ID (Örnek Kimliği) bölümüne my-redis-cache girin.
    • Görünen ad bölümüne Redis cache girin.
    • Katman seçicinin altında Temel'i seçin. Temel katman, verilerinizi yedeklemek için bir kopya düğümü kullanan standart katmanın aksine bağımsız bir Redis düğümü atar.
    • Bölge seçiciden App Hosting arka uçunuzun bölgesini seçin. Bu değeri, arka uçunuzun bölgesine uyacak şekilde ayarladığınızdan emin olun.
    • Bölge seçiciden herhangi birini seçin.
    • Kapasite bölümüne 5 girin. Bu işlem, örnek kapasitenizi 5 GB olarak ayarlar.
    • Sürüm bölümünde 5.0'yı seçin (önerilir).
    • Yetkili ağ seçiciden varsayılan'ı seçin.

1. adım: apphosting.yaml değerini VPC ağınızın kimliğiyle güncelleyin

  1. Google Cloud konsolunda VPC ağları sayfasını ziyaret edin.
  2. Redis için Memorystore örneğinizin VPC ağı kimliğini bulun (genellikle default olur).
  3. VPC ağ kimliğini kullanarak apphosting.yaml içinde doğrudan VPC çıkış yapılandırmasını ayarlayın:

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

2. adım: Uygulamanızı Redis'e yönlendiren ortam değişkenleri ekleyin

  1. Google Cloud konsolunda Redis için Memorystore örneğinizin "Bağlantılar" sekmesinde bağlantı bilgilerini (ana makine ve bağlantı noktası) bulun.
  2. REDISPORT ve REDISHOST ortam değişkenleriyle Redis'e bağlanın. apphosting.yaml konsolundaki ana makine ve bağlantı noktası değerlerini kullanarak bunları Google Cloud içinde ayarlayın:

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

3. adım: Uygulamanızda Redis'i kullanın

  1. redis npm paketini yükleyin:

    npm install redis@latest

  2. Kodunuzdan Redis önbelleğinize erişin. Önceki adımda yapılandırılan ortam değişkenlerini kullanın. Örneğin, Next.js rota işleyicisinde bir önbellekten okuma işlemi şu şekilde yapılabilir:

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

4. adım (isteğe bağlı): Uygulamanızı yerel geliştirme için yapılandırın

Firebase App Hosting Emülatör, apphosting.emulator.yaml kullanarak değerleri geçersiz kılabilir. Burada, REDISHOST değerini localhost'u işaret edecek şekilde değiştirebilirsiniz. Böylece, Redis'in yerel bir kurulumunu kullanarak yerel olarak geliştirebilirsiniz.

  1. Redis'i yerel makinenize yükleme
  2. Yerel örneğinize referans vermek için apphosting.emulators.yaml oluşturun veya düzenleyin:

    env:
      - variable: REDISHOST
        value: 127.0.0.1