Bağımlılıkları yönetme

Dil seçin: Node.js Python

Cloud Functions işlevleri, harici modülleri ve yerel bağımlılıkları kullanabilir. Bağımlılıkları nasıl belirleyeceğiniz ve yöneteceğiniz, çalışma zamanı dilinize bağlıdır.

Node.js

İşlevler, harici Node.js modüllerinin yanı sıra yerel verileri de kullanabilir. Node.js'deki bağımlılıklar npm ile yönetilir ve package.json adlı bir meta veri dosyasında ifade edilir. Cloud Functions Node.js çalışma zamanları; npm, yarn veya pnpm kullanarak yüklemeyi destekler.

İşleviniz için bir bağımlılık belirtmek istiyorsanız bunu package.json dosyanıza ekleyin.

Bu örnekte, package.json dosyasında bir bağımlılık listelenmiştir:

{
  "dependencies": {
    "escape-html": "^1.0.3"
  }
}

Ardından bağımlılık, işleve aktarılır:

JavaScript

const onRequest = require("firebase-functions/https");
const escapeHtml = require("escape-html");

// Return a greeting with the input HTML-escaped.
exports.hello = onRequest((req, res) => {
  res.send(`Hello ${escapeHtml(req.query.name || req.body.name || "World")}!`);
});

TypeScript

import { onRequest } from "firebase-functions/https";
import * as escapeHtml from "escape-html";

// Return a greeting with the input HTML-escaped.
export let hello = onRequest((req, res) => {
  res.send(`Hello ${escapeHtml(req.query.name || req.body.name || "World")}!`);
});

Yerel Node.js modüllerini dahil etme

İşlevinize yerel Node.js modülleri de ekleyebilirsiniz. Bunu yapmak için modülünüzü package.json içinde file: önekiyle tanımlayabilirsiniz. Aşağıdaki örnekte mymodule, modülünüzün adını, mymoduledir ise modülünüzü içeren dizini ifade eder:

{
  "dependencies": {
    "mymodule": "file:mymoduledir"
  }
}

Bu yerel modülün kodu, işlevinizin kök dizinindeki node_modules klasöründen başka bir yerde depolanmalıdır.

TypeScript için ek adımlar

TypeScript, en çok tür bilgisi içeren kitaplıkları kullanırken işinize yarar. Bu sayede TypeScript, söz dizimi hatalarını yakalayabilir ve düzenleyiciler size daha iyi otomatik tamamlama önerileri sunabilir. firebase-admin ve firebase-functions gibi bazı kitaplıklar, TypeScript tanımları dahil edilmiş olarak sunulur.

Birçok kitaplık kendi TypeScript tanımını sağlamaz. DefinitelyTyped projesi, en popüler düğüm kitaplıkları için topluluk tarafından yönetilen tanımlar sağlar. DefinitelyTyped, bu tanımları aynı NPM paketi adı altında ancak "@types" kuruluşu içinde yayınlar. Örneğin, uuid kitaplığı için tür bilgilerini aşağıdaki komutla yükleyebilirsiniz:

npm install @types/uuid

TypeScript'e daha aşina hale geldikçe her iki yüklemeyi de birleştirebilirsiniz:

npm install uuid @types/uuid

Tür bağımlılıkları, kitaplık bağımlılığıyla aynı türde olmalıdır. Örneğin, uuid normal bağımlılık, @types/uuid ise geliştirme bağımlılığı veya eş bağımlılık olarak kaydedilmemelidir.

Node.js modülleri yükleniyor

Yüklediğiniz Node.js modüllerini yüklemek için Node.js require() işlevini kullanın. İşlevinizle birlikte dağıttığınız yerel dosyaları içe aktarmak için require() işlevini de kullanabilirsiniz.

TypeScript'te işlev yazıyorsanız yüklediğiniz Node.js modüllerini yüklemek için import ifadesini aynı şekilde kullanın.

Özel modülleri kullanma

İşlevin dizinindeki bir .npmrc dosyasında kayıt defteriyle kimlik doğrulama ayarlarını sağlayarak özel bir npm modülü kullanabilirsiniz. Paket yöneticisi olarak Yarn v2 veya sonraki bir sürümü kullanıyorsanız bu dosyanın adı .yarnrc.yml olur.

Artifact Registry'deki özel modüller

Artifact Registry Node.js paket deposu, işleviniz için özel modüller barındırabilir. Bir Google Cloud Functions işlevi dağıttığınızda derleme işlemi, Cloud Build hizmet hesabı için otomatik olarak Artifact Registry kimlik bilgileri oluşturur. Ek kimlik bilgileri oluşturmadan .npmrc dosyanızda Artifact Registry deposunu listelemeniz yeterlidir. Örneğin:

@SCOPE:registry=https://REGION_ID-npm.pkg.dev/PROJECT_ID/REPOSITORY_NAME
//REGION_ID-npm.pkg.dev/PROJECT_ID/REPOSITORY_NAME:always-auth=true

Bu yaklaşım, Yarn v1 paket yöneticisi için de geçerlidir. Yarn v2 veya daha yeni bir sürüm kullanıyorsanız ek kimlik bilgileri olmadan .yarnrc.yml dosyanızda yalnızca Artifact Registry deposunu listelemeniz yeterlidir. Örneğin:

npmScopes:
  SCOPE:
    npmRegistryServer: https://REGION_ID-npm.pkg.dev/PROJECT_ID/REPOSITORY_NAME
    npmAlwaysAuth: true

Diğer depolardaki özel modüller

npm belgelerinde, özel salt okunur erişim jetonlarının nasıl oluşturulacağı açıklanmaktadır. Ana dizinde oluşturulan .npmrc dosyasının kullanılmasını önermiyoruz. Bu dosya, okuma-yazma jetonu içerir. Dağıtım sırasında yazma izinleri gerekli değildir ve güvenlik riski oluşturabilir.

Özel depolar kullanmıyorsanız işlevlerinizin dağıtım süresini uzatabileceği için .npmrc dosyasını eklemeyin.

Dosya biçimi

Özel bir kimlik doğrulama jetonu ayarlamak için .npmrc dosyası kullanıyorsanız bu dosya, aşağıda gösterilen satırı içermelidir.

//REGISTRY_DOMAIN/:_authToken=AUTH_TOKEN

Değiştir:

  • REGISTRY_DOMAIN: Özel npm kayıt defterinizin alan adı. Deponuz npmjs.org ile barındırılıyorsa bu alanı registry.npmjs.org olarak ayarlayın.
  • AUTH_TOKEN: npm kayıt defteriniz için yetkilendirme jetonu. Bu, jetonun gerçek metin değeri veya ${NPM_TOKEN} metin dizesi olabilir. npm, bu dizeyi ortamdaki gerçek jeton değeriyle değiştirir.

    $NPM_TOKEN ortam değişkenini, gcloud functions deploy komutunuzun --set-build-env-vars bağımsız değişkeniyle ayarlayabilirsiniz. NPM kimlik doğrulama jetonu hakkında daha fazla bilgi için özel modüllerle ilgili NPM eğitimine bakın.


Python

Python'da yazılmış Cloud Functions için bağımlılıkları belirtmenin iki yolu vardır: pip paket yöneticisinin requirements.txt dosyasını kullanmak veya yerel bağımlılıkları işlevinizle birlikte paketlemek.

Pipfile/Pipfile.lock standardı kullanılarak bağımlılık belirtimi desteklenmez. Projeniz bu dosyaları içermemelidir.

pip ile bağımlılıkları belirtme

Python'da bağımlılıklar pip ile yönetilir ve requirements.txt adlı bir meta veri dosyasında ifade edilir. Bu dosya, işlev kodunuzu içeren main.py dosyasıyla aynı dizinde olmalıdır.

İşlevinizi dağıttığınızda veya yeniden dağıttığınızda Cloud Functions, requirements.txt dosyasında belirtilen bağımlılıklarınızın en yeni sürümünü indirip yüklemek için pip'i kullanır. requirements.txt dosyası, her paket için bir satır içerir. Her satırda paket adı ve isteğe bağlı olarak istenen sürüm bulunur. Daha fazla bilgi için requirements.txt referansına bakın.

Derlemenizin bağımlılık sürümü değişikliklerinden etkilenmesini önlemek için bağımlılık paketlerinizi belirli bir sürüme sabitlemeyi düşünebilirsiniz.

Aşağıda örnek bir requirements.txt dosyası verilmiştir:

functions-framework
requests==2.20.0
numpy

Yerel bağımlılıkları paketleme

Bağımlılıkları işlevinizle birlikte paketleyip dağıtabilirsiniz. Bağımlılığınız pip paket yöneticisi aracılığıyla kullanılamıyorsa veya Cloud Functions ortamınızın internet erişimi kısıtlıysa bu yaklaşım faydalı olur.

Örneğin, aşağıdaki gibi bir dizin yapısı kullanabilirsiniz:

myfunction/
├── main.py
└── localpackage/
    ├── __init__.py
    └── script.py

Ardından, aşağıdaki import ifadesini kullanarak kodu her zamanki gibi localpackage üzerinden içe aktarabilirsiniz.

# Code in main.py
from localpackage import script

Bu yaklaşımın herhangi bir setup.py dosyasını çalıştırmayacağını unutmayın. Bu dosyaları içeren paketler yine de paketlenebilir ancak Cloud Functions üzerinde düzgün çalışmayabilir.