Use Cases

Claude Code × GCP Cloud Run संपूर्ण गाइड | सर्वरलेस कंटेनर ऑटो-डिप्लॉयमेंट

Claude Code के साथ GCP Cloud Run डिप्लॉयमेंट को तेज़ करें। Dockerfile जनरेशन, ऑटो-स्केलिंग, CI/CD पाइपलाइन और Secret Manager इंटीग्रेशन के साथ पूर्ण गाइड।

“मैं GCP पर कंटेनर चलाना चाहता हूं, लेकिन बहुत सारी सेटिंग्स हैं — समझ नहीं आता कहां से शुरू करूं” — मैं भी पहले ऐसा ही महसूस करता था। लेकिन जब मैंने Cloud Run को वास्तव में इस्तेमाल किया, तो मुझे सच में हैरानी हुई कि ECS की तुलना में कॉन्फिगरेशन कितनी आसान थी। न VPC सेटअप, न टास्क रोल डिज़ाइन, न क्लस्टर मैनेजमेंट। बस एक कंटेनर इमेज तैयार करें और लगभग तुरंत HTTPS एंडपॉइंट मिल जाता है।

Claude Code के साथ मिलाएं, और Dockerfile जनरेशन से लेकर Cloud Build CI/CD पाइपलाइन सेटअप तक सब कुछ आश्चर्यजनक रूप से कम समय में हो जाता है। यह लेख 6 स्पष्ट चरणों में उन कदमों को समझाता है जो मैंने वास्तव में आज़माए।


Cloud Run ECS से आसान क्यों है

Cloud Run GCP का पूरी तरह से प्रबंधित कंटेनर एक्जीक्यूशन सर्विस है। यह “रिक्वेस्ट-ड्रिवन सर्वरलेस” मॉडल का उपयोग करता है जहां HTTP रिक्वेस्ट आने पर ही कंटेनर शुरू होते हैं।

Cloud Run:
- क्लस्टर मैनेजमेंट: आवश्यक नहीं
- नेटवर्क सेटअप:    बाहरी HTTPS डिफ़ॉल्ट रूप से पब्लिश
- स्केलिंग:          0 से N तक पूरी तरह ऑटोमैटिक
- बिलिंग:            रिक्वेस्ट प्रोसेसिंग टाइम पर (आइडल में लगभग मुफ्त)

AWS ECS/Fargate:
- क्लस्टर मैनेजमेंट: आवश्यक (3 परतें: Cluster / Service / TaskDef)
- नेटवर्क सेटअप:    VPC और सिक्योरिटी ग्रुप डिज़ाइन आवश्यक
- स्केलिंग:          न्यूनतम इंस्टेंस काउंट के लिए बिलिंग
- बिलिंग:            चल रहे टास्क टाइम पर

Step 1: Dockerfile ऑटो-जनरेट करें

claude -p "
निम्नलिखित आवश्यकताओं के साथ प्रोडक्शन-रेडी Dockerfile जनरेट करें:

- App: TypeScript + Express API (पोर्ट 8080)
- Node.js वर्शन: 22 LTS
- मल्टी-स्टेज बिल्ड (builder → runner)
- नॉन-रूट यूजर (node यूजर) के रूप में चलाएं
- .dockerignore भी जनरेट करें
- Cloud Run की सिफारिश के अनुसार PORT एनवायरनमेंट वेरिएबल सपोर्ट
- हेल्थ चेक: /health एंडपॉइंट
"

जनरेट किया गया Dockerfile:

# ---- builder स्टेज ----
FROM node:22-alpine AS builder
WORKDIR /app

# बिल्ड कैश का उपयोग करने के लिए पहले डिपेंडेंसी कॉपी करें
COPY package*.json ./
RUN npm ci --only=production=false

COPY tsconfig.json ./
COPY src ./src
RUN npm run build

# ---- runner स्टेज ----
FROM node:22-alpine AS runner
WORKDIR /app

# सिक्योरिटी: नॉन-रूट यूजर के रूप में चलाएं
RUN addgroup -S appgroup && adduser -S appuser -G appgroup

# केवल प्रोडक्शन डिपेंडेंसी इंस्टॉल करें
COPY package*.json ./
RUN npm ci --only=production && npm cache clean --force

# बिल्ड आर्टिफैक्ट्स कॉपी करें
COPY --from=builder /app/dist ./dist

# Cloud Run PORT एनवायरनमेंट वेरिएबल के जरिए पोर्ट पास करता है
ENV PORT=8080
ENV NODE_ENV=production

# नॉन-रूट यूजर पर स्विच करें
USER appuser

EXPOSE 8080
CMD ["node", "dist/index.js"]

Step 2: Cloud Run पर पहला डिप्लॉयमेंट

gcloud run deploy myapp-api \
  --image asia-northeast1-docker.pkg.dev/my-project-123/myapp/api:v1.0.0 \
  --region asia-northeast1 \
  --platform managed \
  --memory 512Mi \
  --cpu 1 \
  --concurrency 80 \
  --allow-unauthenticated \
  --set-env-vars NODE_ENV=production \
  --port 8080

Step 3: ऑटो-स्केलिंग कॉन्फिगर करें

gcloud run services update myapp-api \
  --region asia-northeast1 \
  --min-instances 1 \
  --max-instances 20 \
  --concurrency 80 \
  --cpu-throttling \
  --execution-environment gen2
# service.yaml - Cloud Run सर्विस कॉन्फिगरेशन
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: myapp-api
spec:
  template:
    metadata:
      annotations:
        # न्यूनतम इंस्टेंस (कोल्ड स्टार्ट कम करने के लिए)
        autoscaling.knative.dev/minScale: "1"
        # अधिकतम इंस्टेंस (लागत सीमा)
        autoscaling.knative.dev/maxScale: "20"
        # 70% CPU उपयोग पर स्केल आउट
        autoscaling.knative.dev/target-utilization-percentage: "70"
        run.googleapis.com/execution-environment: gen2
    spec:
      containerConcurrency: 80
      containers:
        - image: asia-northeast1-docker.pkg.dev/my-project-123/myapp/api:latest
          resources:
            limits:
              memory: 512Mi
              cpu: "1"

Step 4: Secret Manager इंटीग्रेशन

# सीक्रेट रजिस्टर करें
echo -n "postgresql://user:password@host:5432/db" | \
  gcloud secrets create DATABASE_URL --data-file=-

# सर्विस अकाउंट को रीड परमिशन दें
gcloud projects add-iam-policy-binding my-project-123 \
  --member="serviceAccount:[email protected]" \
  --role="roles/secretmanager.secretAccessor"

# Cloud Run में सीक्रेट माउंट करें
gcloud run services update myapp-api \
  --region asia-northeast1 \
  --set-secrets="DATABASE_URL=DATABASE_URL:latest,SENDGRID_API_KEY=SENDGRID_API_KEY:latest,JWT_SECRET=JWT_SECRET:latest"
// src/config.ts
export const config = {
  databaseUrl: process.env.DATABASE_URL!,
  sendgridApiKey: process.env.SENDGRID_API_KEY!,
  jwtSecret: process.env.JWT_SECRET!,
  port: parseInt(process.env.PORT || "8080", 10),
  nodeEnv: process.env.NODE_ENV || "development",
};

// स्टार्टअप पर आवश्यक सीक्रेट वैलिडेट करें
const requiredEnvVars = ["DATABASE_URL", "SENDGRID_API_KEY", "JWT_SECRET"];
for (const envVar of requiredEnvVars) {
  if (!process.env[envVar]) {
    console.error(`Missing required environment variable: ${envVar}`);
    process.exit(1);
  }
}

Step 5: Cloud Build के साथ CI/CD पाइपलाइन

# cloudbuild.yaml
steps:
  # Step 1: डिपेंडेंसी इंस्टॉल और टेस्ट चलाएं
  - name: "node:22-alpine"
    id: "test"
    entrypoint: "sh"
    args:
      - "-c"
      - |
        npm ci
        npm run test
        npm run lint

  # Step 2: Docker इमेज बिल्ड करें
  - name: "gcr.io/cloud-builders/docker"
    id: "build"
    args:
      - "build"
      - "-t"
      - "asia-northeast1-docker.pkg.dev/$PROJECT_ID/myapp/api:$COMMIT_SHA"
      - "-t"
      - "asia-northeast1-docker.pkg.dev/$PROJECT_ID/myapp/api:latest"
      - "."

  # Step 3: Artifact Registry में पुश करें
  - name: "gcr.io/cloud-builders/docker"
    id: "push"
    args:
      - "push"
      - "--all-tags"
      - "asia-northeast1-docker.pkg.dev/$PROJECT_ID/myapp/api"

  # Step 4: Cloud Run में डिप्लॉय करें
  - name: "gcr.io/google.com/cloudsdktool/cloud-sdk"
    id: "deploy"
    entrypoint: "gcloud"
    args:
      - "run"
      - "deploy"
      - "myapp-api"
      - "--image"
      - "asia-northeast1-docker.pkg.dev/$PROJECT_ID/myapp/api:$COMMIT_SHA"
      - "--region"
      - "asia-northeast1"
      - "--platform"
      - "managed"
      - "--quiet"

options:
  logging: CLOUD_LOGGING_ONLY
  machineType: E2_HIGHCPU_8
timeout: "1200s"

5 सामान्य गलतियां

1. कोल्ड स्टार्ट से टाइमआउट

प्रोडक्शन में min-instances को कम से कम 1 पर सेट करें।

gcloud run services update myapp-api --min-instances 1 --region asia-northeast1

2. SIGTERM हैंडल न करना

process.on("SIGTERM", () => {
  server.close(() => process.exit(0));
  setTimeout(() => process.exit(1), 30000);
});

3. एनवायरनमेंट वेरिएबल में सेंसिटिव डेटा

# ❌ कभी नहीं: प्लेन टेक्स्ट में सीक्रेट
gcloud run services update myapp-api --set-env-vars DATABASE_PASSWORD=mypassword123

# ✅ सही: Secret Manager का उपयोग करें
gcloud run services update myapp-api --set-secrets="DATABASE_PASSWORD=DATABASE_PASSWORD:latest"

4. अपर्याप्त मेमोरी कॉन्फिगरेशन

CMD ["node", "--max-old-space-size=384", "dist/index.js"]

5. रिक्वेस्ट के बाहर बैकग्राउंड प्रोसेसिंग

gcloud run services update myapp-api --no-cpu-throttling --region asia-northeast1

सारांश

कार्यClaude Code का योगदान
Dockerfile जनरेशनमल्टी-स्टेज बिल्ड और नॉन-रूट सेटअप ऑटोमेटेड
पहला डिप्लॉयमेंटआवश्यकताओं से पूरे gcloud कमांड जनरेट
स्केलिंग कॉन्फिगरेशनmin/max इंस्टेंस और CPU थ्रेशोल्ड ऑप्टिमाइज़
Secret Manager इंटीग्रेशनसीक्रेट क्रिएशन, परमिशन और माउंट कॉन्फिग
CI/CD पाइपलाइनटेस्ट के साथ cloudbuild.yaml जनरेट
कस्टम डोमेनलोड बैलेंसर Terraform कॉन्फिग ऑटो-जनरेट

संबंधित लेख

संदर्भ

#claude-code #gcp #cloud-run #docker #typescript #serverless
मुफ़्त

मुफ़्त PDF: 5 मिनट में Claude Code चीटशीट

बस अपना ईमेल दर्ज करें और हम तुरंत A4 एक-पृष्ठ चीटशीट PDF भेज देंगे।

हम आपकी व्यक्तिगत जानकारी की सुरक्षा करते हैं और स्पैम नहीं भेजते।

अपने Claude Code वर्कफ़्लो को अगले स्तर पर ले जाएँ

Claude Code में तुरंत कॉपी-पेस्ट करने योग्य 50 आज़माए हुए प्रॉम्प्ट टेम्पलेट।

Masa

लेखक के बारे में

Masa

Claude Code का गहराई से उपयोग करने वाले इंजीनियर। claudecode-lab.com चलाते हैं, जो 10 भाषाओं में 2,000 से अधिक पेजों वाला टेक मीडिया है।