mcpField
G
gcp-development

gcp-development

github.com/mindrally云与 DevOps287941 次安装3 周前更新
代码仓库

关于 gcp-development

面向构建和运维云应用的工程师的 Google Cloud 开发技能,汇集无服务器服务、数据产品、Terraform、安全、部署与可观测性指导。

主要功能

  1. 01Cloud Functions 和 Cloud Run 实践
  2. 02Firestore、BigQuery 与 Storage 指导
  3. 03Terraform 基础设施模式
  4. 04IAM、密钥与网络安全
  5. 05部署与可观测性实践

适用场景

  1. 01规划由 Terraform 管理的 GCP 基础设施
  2. 02构建无服务器 HTTP 或批处理工作负载
  3. 03设计 Firestore 数据或优化 BigQuery 查询
  4. 04配置云安全与监控

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/mindrally/skills --skill gcp-development

安装后在 Claude Code 中输入/gcp-development确认已加载。

详细介绍

GCP 开发最佳实践

概述

本技能提供在 Google Cloud Platform(GCP)上开发应用程序的综合指南,涵盖无服务器计算、数据服务、使用 Terraform 实现基础设施即代码以及安全最佳实践。

核心原则

  • 使用 GCP 客户端库编写简洁、结构良好的代码
  • 使用基础设施即代码(Terraform)管理所有基础设施
  • 遵循 Google Cloud 安全最佳实践和合规性指南
  • 使用 Cloud Logging 实现全面的日志记录,并使用 Cloud Monitoring 进行监控

代码组织与结构

Terraform 模块结构
infrastructure/
├── main.tf           # Primary resources
├── variables.tf      # Input variables
├── outputs.tf        # Output values
├── versions.tf       # Provider versions
├── terraform.tfvars  # Variable values
└── modules/
    ├── compute/
    ├── storage/
    └── networking/
应用程序结构
src/
├── functions/        # Cloud Functions
├── services/         # Cloud Run services
├── shared/           # Shared utilities
└── tests/            # Test files

Cloud Functions 指南

函数配置
import { HttpFunction } from '@google-cloud/functions-framework';

export const helloWorld: HttpFunction = async (req, res) => {
  try {
    // Validate request
    if (req.method !== 'POST') {
      res.status(405).send('Method Not Allowed');
      return;
    }

    // Business logic
    const result = await processRequest(req.body);

    res.status(200).json(result);
  } catch (error) {
    console.error('Function error:', error);
    res.status(500).json({ error: 'Internal Server Error' });
  }
};
最佳实践
  • 使用第 2 代 Cloud Functions,以获得更好的性能
  • 设置适当的内存和超时限制
  • 使用环境变量进行配置
  • 实现适当的错误处理和日志记录
  • 对数据库连接使用连接池

Cloud Run 指南

容器最佳实践
  • 使用 distroless 或精简基础映像
  • 实现运行状况检查端点
  • 处理 SIGTERM,实现优雅关停
  • 对 HTTP 工作负载使用 Cloud Run 服务
  • 对批处理使用 Cloud Run 作业
Dockerfile 示例
FROM node:20-slim AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production

FROM gcr.io/distroless/nodejs20-debian12
WORKDIR /app
COPY --from=builder /app/node_modules ./node_modules
COPY . .
CMD ["dist/index.js"]
服务配置
# service.yaml
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: my-service
spec:
  template:
    spec:
      containers:
        - image: gcr.io/PROJECT_ID/my-service
          resources:
            limits:
              memory: 512Mi
              cpu: '1'
          env:
            - name: NODE_ENV
              value: production

Firestore 指南

数据建模
  • 根据查询模式设计集合
  • 使用子集合存储分层数据
  • 为复杂查询创建复合索引
  • 使用批量写入更新多个文档
最佳实践
import { Firestore } from '@google-cloud/firestore';

const db = new Firestore();

// Use transactions for atomic operations
await db.runTransaction(async (transaction) => {
  const docRef = db.collection('users').doc(userId);
  const doc = await transaction.get(docRef);

  if (!doc.exists) {
    throw new Error('User not found');
  }

  transaction.update(docRef, {
    lastLogin: Firestore.FieldValue.serverTimestamp()
  });
});

BigQuery 指南

查询最佳实践
  • 使用分区表和聚簇表
  • 避免在生产查询中使用 SELECT *
  • 使用参数化查询,防止 SQL 注入
  • 在适当情况下实现查询缓存
成本优化
  • 设置预算提醒
  • 对可预测的工作负载使用插槽预留
  • 将旧数据归档到 Cloud Storage
  • 对重复查询使用物化视图

Cloud Storage 指南

存储桶配置
  • 使用统一的存储桶级访问权限
  • 为重要数据启用版本控制
  • 设置生命周期规则以自动清理
  • 使用签名 URL 实现临时访问
最佳实践
import { Storage } from '@google-cloud/storage';

const storage = new Storage();
const bucket = storage.bucket('my-bucket');

// Generate signed URL for upload
const [url] = await bucket.file('uploads/file.pdf').getSignedUrl({
  version: 'v4',
  action: 'write',
  expires: Date.now() + 15 * 60 * 1000, // 15 minutes
  contentType: 'application/pdf',
});

Terraform 最佳实践

Provider 配置
terraform {
  required_version = ">= 1.0"

  required_providers {
    google = {
      source  = "hashicorp/google"
      version = "~> 5.0"
    }
  }

  backend "gcs" {
    bucket = "my-terraform-state"
    prefix = "terraform/state"
  }
}

provider "google" {
  project = var.project_id
  region  = var.region
}
模块最佳实践
  • 使用 Terraform Registry 中带版本号的模块
  • 锁定 Provider 版本,确保一致性
  • 使用工作区隔离环境
  • 将状态存储在 Cloud Storage 中并进行加密

安全最佳实践

IAM 配置
  • 使用权限最少的服务账号
  • 为 GKE 实现 Workload Identity
  • 使用 IAM Conditions 实现精细访问控制
  • 定期使用 Policy Analyzer 进行审计
密钥管理
import { SecretManagerServiceClient } from '@google-cloud/secret-manager';

const client = new SecretManagerServiceClient();

async function getSecret(secretName: string): Promise<string> {
  const [version] = await client.accessSecretVersion({
    name: `projects/PROJECT_ID/secrets/${secretName}/versions/latest`,
  });

  return version.payload?.data?.toString() || '';
}
网络安全
  • 对敏感数据使用 VPC Service Controls
  • 使用 Cloud Armor 防御 DDoS 攻击
  • 对内部服务使用 Private Google Access
  • 按最小权限原则配置防火墙规则

部署最佳实践

蓝绿部署
  • 在 Cloud Run 中使用流量拆分
  • 在切换流量前实施运行状况检查
  • 提前准备回滚策略
  • 使用 Cloud Deploy 管理部署
使用 Cloud Build 实现 CI/CD
# cloudbuild.yaml
steps:
  - name: 'node:20'
    entrypoint: npm
    args: ['ci']

  - name: 'node:20'
    entrypoint: npm
    args: ['test']

  - name: 'gcr.io/cloud-builders/docker'
    args: ['build', '-t', 'gcr.io/$PROJECT_ID/my-service', '.']

  - name: 'gcr.io/cloud-builders/docker'
    args: ['push', 'gcr.io/$PROJECT_ID/my-service']

  - name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
    entrypoint: gcloud
    args:
      - 'run'
      - 'deploy'
      - 'my-service'
      - '--image=gcr.io/$PROJECT_ID/my-service'
      - '--region=us-central1'

可观测性

Cloud Logging
  • 使用 JSON 格式的结构化日志
  • 添加跟踪 ID,以支持分布式跟踪
  • 设置基于日志的指标进行监控
  • 配置日志接收器以进行长期存储
Cloud Monitoring
  • 为服务创建 SLI 和 SLO
  • 为关键指标设置告警策略
  • 使用自定义指标跟踪业务 KPI
  • 为端点实施运行时间检查
Cloud Trace
import { TraceExporter } from '@google-cloud/opentelemetry-cloud-trace-exporter';
import { NodeTracerProvider } from '@opentelemetry/sdk-trace-node';

const provider = new NodeTracerProvider();
provider.addSpanProcessor(
  new BatchSpanProcessor(new TraceExporter())
);
provider.register();

调试策略

  • 使用 Cloud Debugger 调试生产环境问题
  • 使用 Error Reporting 实现错误报告
  • 使用 Cloud Profiler 分析性能
  • 部署前使用模拟器进行本地测试

推荐工具

  • gcloud CLI:通过命令行与 GCP 交互
  • Terraform:基础设施即代码
  • Cloud Code VS Code Extension:IDE 集成
  • Docker:本地容器化
  • Emulator Suite:在本地测试 Firestore、Pub/Sub 等服务

应避免的常见陷阱

  1. 未在工作负载中使用服务账号
  2. 将项目 ID 或凭据硬编码
  3. 忽略 Cloud Functions 的冷启动优化
  4. 未正确设置 IAM 绑定
  5. 缺少 Cloud Monitoring 警报
  6. 过度配置资源
  7. 未为敏感工作负载使用 VPC
  8. 忽略成本优化最佳实践

评论

支持 Markdown