gcp-development
Google Cloud Platform(GCP)における Cloud Functions、Cloud Run、Firestore、BigQuery、およびInfrastructure as Code のベストプラクティスに基づいた開発を支援するスキルです。GCP サービスを活用した設計・実装・デプロイ時に活用できます。
description の原文を見る
Google Cloud Platform (GCP) development best practices for Cloud Functions, Cloud Run, Firestore, BigQuery, and Infrastructure as Code.
SKILL.md 本文
GCP開発のベストプラクティス
概要
このスキルは、Google Cloud Platform (GCP) でのアプリケーション開発に関する包括的なガイドラインを提供します。サーバーレスコンピューティング、データサービス、Terraform を用いたインフラストラクチャアズコード、セキュリティベストプラクティスをカバーしています。
コアプリンシパル
- GCP クライアントライブラリを使用してクリーンで構造化されたコードを書く
- すべてのインフラストラクチャ管理に Infrastructure as Code (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 のベストプラクティス
プロバイダ設定
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 のバージョン管理されたモジュールを使用する
- 一貫性のためプロバイダバージョンをロックする
- 環境の分離にはワークスペースを使用する
- 暗号化を有効にして Cloud Storage にステートを保存する
セキュリティのベストプラクティス
IAM 設定
- 最小限の権限を持つサービスアカウントを使用する
- GKE に対して Workload Identity を実装する
- きめ細かいアクセス制御に IAM 条件を使用する
- 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 を使用する
- DDoS 対策に Cloud Armor を実装する
- 内部サービスに対しては Private Google Access を使用する
- 最小権限の原則でファイアウォールルールを設定する
デプロイメントのベストプラクティス
Blue/Green デプロイメント
- 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: Infrastructure as Code
- Cloud Code VS Code Extension: IDE 統合
- Docker: ローカルコンテナ化
- Emulator Suite: Firestore、Pub/Sub などのローカルテスト
避けるべき一般的な落とし穴
- ワークロードにサービスアカウントを使用しない
- プロジェクト ID または認証情報をハードコーディングする
- Cloud Functions のコールドスタート最適化を無視する
- 適切な IAM バインディングを設定しない
- Cloud Monitoring アラートを設定していない
- リソースのオーバープロビジョニング
- 機密ワークロードに VPC を使用しない
- コスト最適化ベストプラクティスを無視する
ライセンス: Apache-2.0(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- mindrally
- リポジトリ
- mindrally/skills
- ライセンス
- Apache-2.0
- 最終更新
- 不明
Source: https://github.com/mindrally/skills / ライセンス: Apache-2.0
関連スキル
hugging-face-trackio
Trackioを使用してMLトレーニング実験を追跡・可視化できます。トレーニング中のメトリクスログ記録(Python API)、トレーニング診断のアラート発火、ログされたメトリクスの取得・分析(CLI)が必要な場合に活用してください。リアルタイムダッシュボード表示、Webhookを使用したアラート、HF Space同期、自動化向けのJSON出力に対応しています。
btc-bottom-model
ビットコインのサイクルタイミングモデルで、加重スコアリングシステムを搭載しています。日次パルス(4指標、32ポイント)とウィークリー構造(9指標、68ポイント)の2カテゴリーにわたる13の指標を追跡し、0~100のマーケットヒートスコアを算出します。ETFフロー、ファンディングレート、ロング/ショート比率、恐怖・貪欲指数、LTH-MVRV、NUPL、SOPR(LTH+STH)、LTH供給率、移動平均倍率(365日MA、200週MA)、週次RSI、出来高トレンドに対応します。市場サイクル全体を通じて買いと売りの両方の推奨を提供します。ビットコインの底値拾い、BTCサイクルポジション、買い時・売り時、オンチェーン指標、MVRV、NUPL、SOPR、LTH動向、ETFの流出入、ファンディングレート、恐怖指数、ビットコインが過熱状態か、マイナーコスト、暗号資産市場のセンチメント、BTCのポジションサイジング、「今ビットコインを買うべきか」「BTCが天井をつけているか」「オンチェーン指標は何を示しているか」といった質問の際にこのスキルを活用します。
protein_solubility_optimization
タンパク質の溶解性最適化 - タンパク質の溶解性を最適化します。タンパク質の特性を計算し、溶解性と親水性を予測し、有効な変異を提案します。タンパク質配列の特性計算、タンパク質機能の予測、親水性計算、ゼロショット配列予測を含むタンパク質エンジニアリング業務に使用できます。3つのSCPサーバーから4つのツールを統合しています。
research-lookup
Parallel Chat APIまたはPerplexity sonar-pro-searchを使用して、最新の研究情報を検索できます。学術論文の検索にも対応しています。クエリは自動的に最適なバックエンドにルーティングされるため、論文の検索、研究データの収集、科学情報の検証に活用できます。
tree-formatting
ggtree(R)またはiTOL(ウェブ)を使用して、系統樹の可視化とフォーマットを行います。系統樹を図として描画する際、ツリーレイアウトの選択、分類学に基づく枝やラベルの色付け、クレードの折りたたみ、サポート値の表示、またはツリーへのオーバーレイ追加が必要な場合に使用してください。系統推定(protein-phylogenyスキルを使用)やドメイン注釈(今後の独立したスキル)には使用しないでください。
querying-indonesian-gov-data
インドネシア政府の50以上のAPIとデータソースに接続できます。BPJPH(ハラール認証)、BOM(食品安全)、OJK(金融適正性)、BPS(統計)、BMKG(気象・地震)、インドネシア中央銀行(為替レート)、IDX(株式)、CKAN公開データポータル、pasal.id(第三者法MCP)に対応しています。インドネシア政府データを活用したアプリ開発、.go.idウェブサイトのスクレイピング、ハラール認証の確認、企業の法的適正性の検証、金融機関ステータスの照会、またはインドネシアMCPサーバーへの接続時に使用できます。CSRF処理、CKAN API使用方法、IP制限回避など、すぐに実行可能なPythonパターンを含んでいます。