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

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

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

VPC ağına nasıl bağlanacağınızı seçme

  • Doğrudan VPC çıkışı: Daha basit, daha hızlı ve daha ucuzdur. Kapsayıcı başına bir IP adresi kullanır. Çoğu kullanım alanı için önerilir.
  • Sunucusuz Konnektörler: Daha büyük uygulamalar için IP adreslerini birleştirir. Temel sanal makine için ödeme yapılması gerekir. Fiyatlandırma ayrıntıları için VPC fiyatlandırma sayfasındaki "Sunucusuz VPC Erişimi" bölümüne bakın.

apphosting.yaml uygulamasında yapılandırın

Erişimi yapılandırmak için apphosting.yaml dosyanızdaki vpcAccess eşlemesini kullanın. Tam nitelikli bir ağ/bağlayıcı adı veya kimlik kullanın. Kimliklerin kullanılması, farklı bağlayıcılar/ağlar içeren hazırlık ve üretim ortamları arasında taşınabilirliği sağlar.

Doğrudan VPC çıkış yapılandırması (apphosting.yaml):

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

Sunucusuz Bağlayıcı Yapılandırması (apphosting.yaml):

runConfig:
  vpcAccess:
    egress: ALL_TRAFFIC
    connector: connector-id

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

Redis veya Memcached gibi önbelleğe alma sistemleri, genellikle bir uygulama için hızlı veri önbelleğe alma katmanı oluşturmak amacıyla 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 buna nasıl bağlanacağınız gösterilmektedir.

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

  1. Google Cloud konsolunda Memorystore for Redis sayfasına gidin.
    • Firebase App Hosting için kullandığınız projenin seçildiğinden emin olun.
    • Bu sayfaya erişemiyorsanız projeniz için 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 aşağıda verilmiştir:
    • Ö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 Basic'i (Temel) seçin. Temel katman, verilerinizi yedeklemek için replika düğümü kullanan standart katmanın aksine bağımsız bir Redis düğümü tanımlar.
    • Bölge seçiciden App Hosting arka ucunuzun bölgesini seçin. Bu değeri, arka ucunuzun bölgesiyle eşleşecek şekilde ayarladığınızdan emin olun.
    • Bölge seçiciden any'yi (herhangi biri) seçin.
    • Kapasite bölümüne 5 yazın. Bu işlem, örnek kapasitenizi 5 GB olarak ayarlar.
    • Sürüm bölümünde 7.0 (veya varsayılan önerilen sürüm) seçeneğini belirleyin.
    • Yetkili ağ seçiciden varsayılan'ı seçin.

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

  1. Google Cloud konsolunda VPC ağları sayfasını ziyaret edin.
  2. Memorystore for Redis ö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 konsolundaki 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şkenlerini kullanarak Redis'e bağlanın. Google Cloud konsolundaki ana makine ve bağlantı noktası değerlerini kullanarak bunları apphosting.yaml 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ızdan Redis'i kullanma

  1. redis npm paketini yükleyin:

    npm install redis@latest

  2. Kodunuzdan Redis önbelleğinize erişme Önceki adımda yapılandırılan ortam değişkenlerini kullanın. Örneğin, Next.js rota işleyicisinde bir önbellekten nasıl okuma yapabileceğiniz aşağıda açıklanmıştır:

    • 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({
            socket: {
              host: REDISHOST,
              port: Number(REDISPORT),
            },
          })
            .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, Redis'in yerel bir yüklemesini kullanarak yerel olarak geliştirme yapabilmek için REDISHOST değerini localhost'u işaret edecek şekilde değiştirebilirsiniz.

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

    env:
      - variable: REDISHOST
        value: 127.0.0.1