Claude Code × GCP Cloud Functions संपूर्ण गाइड | सर्वरलेस फंक्शन तेज़ी से विकसित करें
Claude Code से GCP Cloud Functions को ऑप्टिमाइज़ करें। HTTP/Pub/Sub/Firestore ट्रिगर, लोकल टेस्टिंग और डिप्लॉयमेंट ऑटोमेशन — Masa के व्यावहारिक अनुभव से रियल कोड उदाहरणों के साथ।
Cloud Run बहुत जटिल था — इसलिए मैंने Cloud Functions चुना
मैं Masa हूं, claudecode-lab.com का डेवलपर।
जब मैंने GCP Serverless का उपयोग शुरू किया, तो मैंने Cloud Run पर विचार किया। लचीला और कंटेनर-आधारित — लेकिन “सिर्फ एक Webhook प्राप्त करने” या “रात में एक बार batch चलाने” जैसे कामों के लिए यह स्पष्ट रूप से अत्यधिक जटिल था। इसलिए मैंने Cloud Functions Gen2 को अपनाया।
Claude Code के साथ, मेरे 90% से अधिक Cloud Functions कोड स्वचालित रूप से जनरेट होते हैं।
चरण 1: HTTP ट्रिगर फंक्शन
import { http, HttpFunction } from "@google-cloud/functions-framework";
import { Request, Response } from "express";
import { Firestore } from "@google-cloud/firestore";
const db = new Firestore();
const VALID_TOKEN = process.env.API_SECRET_TOKEN;
interface ActionRequest {
userId: string;
action: string;
}
const handleAction: HttpFunction = async (req: Request, res: Response) => {
// CORS हेडर सेट करें
res.set("Access-Control-Allow-Origin", "*");
if (req.method === "OPTIONS") {
res.set("Access-Control-Allow-Methods", "POST");
res.set("Access-Control-Allow-Headers", "Authorization, Content-Type");
res.status(204).send("");
return;
}
// केवल POST की अनुमति दें
if (req.method !== "POST") {
res.status(405).json({ success: false, message: "Method Not Allowed" });
return;
}
// Bearer टोकन सत्यापित करें
const authHeader = req.headers.authorization ?? "";
if (!authHeader.startsWith("Bearer ") || authHeader.slice(7) !== VALID_TOKEN) {
res.status(401).json({ success: false, message: "अनधिकृत" });
return;
}
const body = req.body as Partial<ActionRequest>;
if (!body.userId || !body.action) {
res.status(400).json({ success: false, message: "userId और action आवश्यक हैं" });
return;
}
try {
const logRef = await db.collection("action_logs").add({
userId: body.userId,
action: body.action,
timestamp: new Date(),
ip: req.ip,
});
res.status(200).json({ success: true, message: "एक्शन लॉग हुआ", logId: logRef.id });
} catch (err) {
console.error("Firestore लिखने में त्रुटि:", err);
res.status(500).json({ success: false, message: "आंतरिक सर्वर त्रुटि" });
}
};
http("handleAction", handleAction);
चरण 2: Pub/Sub ट्रिगर फंक्शन
import { cloudEvent, CloudEvent } from "@google-cloud/functions-framework";
import { MessagePublishedData } from "@google/events/cloud/pubsub/v1/MessagePublishedData";
import { Storage } from "@google-cloud/storage";
const storage = new Storage();
interface ImageUploadedMessage {
bucketName: string;
filePath: string;
}
cloudEvent<MessagePublishedData>("handleImageUploaded", async (event: CloudEvent<MessagePublishedData>) => {
const base64Data = event.data?.message?.data;
if (!base64Data) {
console.warn("कोई संदेश डेटा नहीं मिला, छोड़ रहा है");
return;
}
const rawJson = Buffer.from(base64Data, "base64").toString("utf-8");
let payload: ImageUploadedMessage;
try {
payload = JSON.parse(rawJson) as ImageUploadedMessage;
} catch {
console.error("Pub/Sub संदेश में अमान्य JSON:", rawJson);
return;
}
const { bucketName, filePath } = payload;
try {
const [metadata] = await storage.bucket(bucketName).file(filePath).getMetadata();
console.log("फ़ाइल मेटाडेटा:", { नाम: metadata.name, आकार: metadata.size });
} catch (err) {
// एक्सेप्शन थ्रो करने पर Pub/Sub संदेश को दोबारा कोशिश करेगा
console.error(`${filePath} की प्रोसेसिंग विफल:`, err);
throw err;
}
});
चरण 3: लोकल टेस्टिंग और डिप्लॉयमेंट
# लोकल स्टार्ट
npm run build
npx @google-cloud/functions-framework --target=handleAction --port=8080
# टेस्ट रिक्वेस्ट भेजें
curl -X POST http://localhost:8080 \
-H "Content-Type: application/json" \
-H "Authorization: Bearer test-token" \
-d '{"userId": "user-123", "action": "login"}'
# GCP पर डिप्लॉय करें
gcloud functions deploy handleAction \
--gen2 \
--runtime=nodejs22 \
--region=asia-south1 \
--source=. \
--entry-point=handleAction \
--trigger-http \
--allow-unauthenticated \
--memory=512Mi \
--timeout=60s \
--set-secrets="API_SECRET_TOKEN=api-secret-token:latest"
4 सामान्य समस्याएं
| समस्या | कारण | समाधान |
|---|---|---|
| Cold Start लेटेंसी | निष्क्रिय इंस्टेंस से 2–5 सेकंड की देरी | महत्वपूर्ण फंक्शन के लिए --min-instances=1 |
| Timeout सीमा | अधिकतम 9 मिनट (540 सेकंड) | Pub/Sub से बड़े कामों को विभाजित करें |
| Secret Manager अनुमति | रनटाइम पर Permission denied | secretmanager.secretAccessor रोल दें |
| मेमोरी की कमी | भारी प्रोसेसिंग में OOM | --memory=2Gi --cpu=2 सेट करें |
सारांश
| ट्रिगर | उपयोग का मामला | मुख्य बात |
|---|---|---|
| HTTP | Webhook, API एंडपॉइंट | Authentication, CORS |
| Pub/Sub | असंक्रमिक इवेंट प्रोसेसिंग | base64 डिकोड, retry डिज़ाइन |
| Firestore | डेटा बदलाव पर प्रतिक्रिया | अनंत लूप से बचें |
| Cloud Scheduler | निर्धारित batch जॉब | OIDC सत्यापन, टाइमज़ोन |
संबंधित लेख
मुफ़्त PDF: 5 मिनट में Claude Code चीटशीट
बस अपना ईमेल दर्ज करें और हम तुरंत A4 एक-पृष्ठ चीटशीट PDF भेज देंगे।
हम आपकी व्यक्तिगत जानकारी की सुरक्षा करते हैं और स्पैम नहीं भेजते।
अपने Claude Code वर्कफ़्लो को अगले स्तर पर ले जाएँ
Claude Code में तुरंत कॉपी-पेस्ट करने योग्य 50 आज़माए हुए प्रॉम्प्ट टेम्पलेट।
लेखक के बारे में
Masa
Claude Code का गहराई से उपयोग करने वाले इंजीनियर। claudecode-lab.com चलाते हैं, जो 10 भाषाओं में 2,000 से अधिक पेजों वाला टेक मीडिया है।
संबंधित लेख
Codex Automations क्या है? AI से content ops, analysis और deploy करवाने का तरीका
Codex Automations से analytics, article planning, CTA सुधार, deploy और monetization workflow चलाने की practical guide.
Claude Code के साथ Firestore Schema Design: Collections से पहले Queries
Claude Code से Firestore schema, indexes, cost और security rules को query-first तरीके से design करने की practical guide.
Claude Code × GCP Cloud Run संपूर्ण गाइड | सर्वरलेस कंटेनर ऑटो-डिप्लॉयमेंट
Claude Code के साथ GCP Cloud Run डिप्लॉयमेंट को तेज़ करें। Dockerfile जनरेशन, ऑटो-स्केलिंग, CI/CD पाइपलाइन और Secret Manager इंटीग्रेशन के साथ पूर्ण गाइड।