Cloud Run'u kullanarak akışları dağıtma

Cloud Run'u kullanarak Genkit akışlarını HTTPS uç noktaları olarak dağıtabilirsiniz. Cloud Run, container tabanlı dağıtım da dahil olmak üzere çeşitli dağıtım seçeneklerine sahiptir. Bu sayfada, akışlarınızı doğrudan koddan nasıl dağıtacağınız açıklanmaktadır.

Başlamadan önce

  • Google Cloud KSA'yı yükleyin.
  • Genkit'in akış kavramı ve bunların nasıl yazılacağı hakkında bilgi sahibi olmanız gerekir. Bu sayfada, dağıtmak istediğiniz akışların zaten mevcut olduğu varsayılmaktadır.
  • Daha önce Google Cloud ve Cloud Run'u kullanmış olmanız faydalı olsa da zorunlu değildir.

1. Google Cloud projesi oluşturun

Henüz bir Google Cloud projeniz yoksa aşağıdaki adımları uygulayın:

  1. Cloud Console'u kullanarak yeni bir Google Cloud projesi oluşturun veya mevcut bir projeyi seçin.

  2. Projeyi bir faturalandırma hesabına bağlayın. Bu, Cloud Run için gereklidir.

  3. Google Cloud CLI'yi projenizi kullanacak şekilde yapılandırın:

    gcloud init

2. Node projenizi dağıtıma hazırlama

Akışlarınızın dağıtılabilmesi için proje kodunuzda bazı küçük değişiklikler yapmanız gerekir:

package.json dosyasına başlangıç ve derleme komut dosyaları ekleme

Bir Node.js projesini Cloud Run'a dağıtırken dağıtım araçları, projenizde bir start komut dosyasının ve isteğe bağlı olarak bir build komut dosyasının olmasını bekler. Tipik bir TypeScript projesi için genellikle aşağıdaki komut dosyaları yeterlidir:

"scripts": {
  "start": "node lib/index.js",
  "build": "tsc"
},

Akış sunucusunu yapılandırma ve başlatma kodu ekleme

start komut dosyanız tarafından çalıştırılan dosyaya startFlowServer çağrısı ekleyin. Bu yöntem, akışlarınızı web uç noktaları olarak yayınlamak için ayarlanmış bir Express sunucusu başlatır.

Çağrıyı yaparken yayınlamak istediğiniz akışları belirtin:

ai.startFlowServer({
  flows: [menuSuggestionFlow],
});

Belirtmeniz gereken bazı isteğe bağlı parametreler de vardır:

  • port: Dinlenecek ağ bağlantı noktası. Belirtilmemişse sunucu, PORT ortam değişkeninde tanımlanan bağlantı noktasında dinler. PORT ayarlanmamışsa varsayılan olarak 3400 olur.
  • cors: Akış sunucusunun CORS politikası. Bu uç noktalara bir web uygulamasından erişecekseniz büyük olasılıkla bunu belirtmeniz gerekir.
  • pathPrefix: Akış uç noktalarınızın önüne eklenecek isteğe bağlı bir yol ön eki.
  • jsonParserOptions: Express'in JSON gövde ayrıştırıcısına iletilecek seçenekler

İsteğe bağlı: Yetkilendirme politikası tanımlama

Yayınlanan tüm akışlar için bir tür yetkilendirme gereklidir. Aksi takdirde, pahalı olabilecek üretken yapay zeka akışlarınız herkes tarafından çağrılabilir.

Akışlarınızı Cloud Run ile dağıtırken yetkilendirme için iki seçeneğiniz vardır:

  • Cloud IAM tabanlı yetkilendirme: Bitiş noktalarınıza erişimi kontrol etmek için Google Cloud'un yerel erişim yönetimi olanaklarını kullanın. Bu kimlik bilgilerini sağlama hakkında bilgi edinmek için Cloud Run dokümanlarındaki Kimlik doğrulama bölümüne bakın.

  • Kodda tanımlanan yetkilendirme politikası: Özel kod kullanarak yetkilendirme bilgilerini doğrulamak için Genkit akışlarının yetkilendirme politikası özelliğini kullanın. Bu genellikle, ancak her zaman değil, jeton tabanlı yetkilendirmedir.

Kodda bir yetkilendirme politikası tanımlamak istiyorsanız akış tanımında authPolicy parametresini kullanın:

const myFlow = ai.defineFlow(
  {
    name: "myFlow",
    authPolicy: (auth, input) => {
      if (!auth) {
        throw new Error("Authorization required.");
      }
      // Custom checks go here...
    },
  },
  async () => {
    // ...
  }
);

Yetkilendirme politikasının auth parametresi, istek nesnesinin auth mülkünden gelir. Bu özelliği genellikle Express aracısı kullanarak ayarlarsınız. Yetkilendirme ve bütünlük başlıklı makaleyi inceleyin.

API kimlik bilgilerini dağıtılan akışlar için kullanılabilir hale getirme

Yayınlanan akışlarınızın, kullandıkları uzak hizmetlerle kimlik doğrulaması yapması gerekir. Çoğu akışta, kullandıkları model API hizmetine erişmek için en azından kimlik bilgileri gerekir.

Bu örnekte, seçtiğiniz model sağlayıcıya bağlı olarak aşağıdakilerden birini yapın:

Gemini (Google Yapay Zeka)

  1. Google Yapay Zeka'nın bölgenizde kullanılabildiğinden emin olun.

  2. Google AI Studio'yu kullanarak Gemini API için API anahtarı oluşturun.

  3. API anahtarını Cloud Run ortamında kullanılabilir hale getirin:

    1. Cloud Console'da Secret Manager API'yi etkinleştirin.
    2. Gizli Anahtar Yöneticisi sayfasında, API anahtarınızı içeren yeni bir gizli anahtar oluşturun.
    3. Gizli anahtarı oluşturduktan sonra, aynı sayfada varsayılan bilgi işlem hizmet hesabınıza Secret Manager Gizli Anahtar Erişeni rolüyle gizli anahtara erişim izni verin. (Varsayılan bilgi işlem hizmet hesabının adını IAM sayfasında arayabilirsiniz.)

    Daha sonraki bir adımda, hizmetinizi dağıtırken bu gizli anahtarın adını referans olarak kullanmanız gerekir.

Gemini (Vertex AI)

  1. Cloud Console'da, projeniz için Vertex AI API'yi etkinleştirin.

  2. IAM sayfasında, Varsayılan Compute hizmet hesabına Vertex AI Kullanıcısı rolünün atandığından emin olun.

Bu eğitim için ayarlamanız gereken tek gizlilik, model sağlayıcı içindir ancak genel olarak akışınızın kullandığı her hizmet için benzer bir işlem yapmanız gerekir.

3. Akışları Cloud Run'a dağıtma

Projenizi dağıtıma hazır hale getirdikten sonra gcloud aracını kullanarak dağıtabilirsiniz.

Gemini (Google Yapay Zeka)

gcloud run deploy --update-secrets=GOOGLE_GENAI_API_KEY=<your-secret-name>:latest

Gemini (Vertex AI)

gcloud run deploy

Dağıtım aracı, ihtiyaç duyduğu tüm bilgileri sizden ister.

Kimliği doğrulanmamış çağrılara izin vermek isteyip istemediğiniz sorulduğunda:

  • IAM kullanmıyorsanız ve bunun yerine kodda bir yetkilendirme politikası tanımladıysanız Y cevabını verin.
  • Hizmetinizi IAM kimlik bilgilerini gerektirecek şekilde yapılandırmak için N'ü yanıtlayın.

İsteğe bağlı: Dağıtılan akışı deneyin

Dağıtım tamamlandıktan sonra araç, hizmet URL'sini yazdırır. curl ile test edebilirsiniz:

curl -X POST https://<service-url>/menuSuggestionFlow \
  -H "Authorization: Bearer $(gcloud auth print-identity-token)" \
  -H "Content-Type: application/json" -d '{"data": "banana"}'