| 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.orgile barındırılıyorsa bu alanıregistry.npmjs.orgolarak 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_TOKENortam değişkenini,gcloud functions deploykomutunuzun--set-build-env-varsbağı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.