gcp-cloud-functions – DevOps & Infrastructure skill for AI agents
Deploy serverless functions on Google Cloud Functions. Configure triggers and manage deployments. Use when implementing serverless workloads on GCP.
Install the gcp-cloud-functions skill with one command
Pick the tool you use, copy the command and paste it in your terminal. The skill lands in that tool's skills folder and is ready in your next session.
Claude Code
mkdir -p ~/.claude/skills && curl -fsSL https://skill.dn1nguoi.com/z/gcp-cloud-functions-a4e70.tgz | tar xz -C ~/.claude/skills
Call it in Claude Code: /gcp-cloud-functions – then describe the task you want done.
Codex
mkdir -p ~/.codex/skills && curl -fsSL https://skill.dn1nguoi.com/z/gcp-cloud-functions-a4e70.tgz | tar xz -C ~/.codex/skills
Call it in Codex: $gcp-cloud-functions – then describe the task you want done.
Hermes Agent
mkdir -p ~/.hermes/skills && curl -fsSL https://skill.dn1nguoi.com/z/gcp-cloud-functions-a4e70.tgz | tar xz -C ~/.hermes/skills
Call it in Hermes Agent: /gcp-cloud-functions – then describe the task you want done.
DeepSeek
mkdir -p ~/.deepcode/skills && curl -fsSL https://skill.dn1nguoi.com/z/gcp-cloud-functions-a4e70.tgz | tar xz -C ~/.deepcode/skills
Call it in DeepSeek: /gcp-cloud-functions – then describe the task you want done.
SKILL.md content
GCP Cloud Functions
Build and deploy event-driven serverless applications with Google Cloud Functions (Gen1 and Gen2).
When to Use
- Processing webhooks, API endpoints, or lightweight HTTP backends
- Reacting to events from Pub/Sub, Cloud Storage, Firestore, or Eventarc
- Running scheduled tasks (cron) without maintaining a server
- Building data-processing pipelines triggered by file uploads
- Prototyping microservices before committing to Cloud Run or GKE
Prerequisites
- Google Cloud SDK (
gcloud) installed and authenticated - APIs enabled: Cloud Functions, Cloud Build, Artifact Registry, Cloud Run (Gen2)
- IAM role
roles/cloudfunctions.developer(orroles/run.developerfor Gen2)
gcloud services enable cloudfunctions.googleapis.com cloudbuild.googleapis.com \
artifactregistry.googleapis.com run.googleapis.com eventarc.googleapis.comGen1 vs Gen2 Comparison
| Feature | Gen1 | Gen2 (recommended) |
|---------|------|---------------------|
| Runtime | Cloud Functions infra | Built on Cloud Run |
| Max timeout | 9 minutes | 60 minutes |
| Max memory | 8 GB | 32 GB |
| Concurrency | 1 request/instance | Up to 1000/instance |
| Traffic splitting | No | Yes |
| Eventarc triggers | No | Yes |
Deployment and event boundaries
Select exact project/region/generation, approved service accounts and current supported runtime/quotas. Do not grant broad public access or extra IAM roles simply to clear an error. Deployment can replace code/config and incur costs; preview source exclusions so secrets are not uploaded. Event delivery/retries can duplicate effects: validate payloads, derive authorized resource IDs and make order/file processing idempotent using durable event IDs/state transitions. Set total resource/cost limits and inspect the actual deployed URL for Scheduler rather than constructing it blindly.
Deploy an HTTP Function (Gen2)
# Python HTTP function
gcloud functions deploy hello-http \
--gen2 --region=us-central1 --runtime=python312 \
--trigger-http --no-allow-unauthenticated \
--entry-point=hello_http \
--memory=256Mi --timeout=60s \
--min-instances=0 --max-instances=100 \
--set-env-vars=APP_ENV=production --source=.
# Node.js HTTP function
gcloud functions deploy hello-node \
--gen2 --region=us-central1 --runtime=nodejs20 \
--trigger-http --no-allow-unauthenticated \
--entry-point=helloNode --memory=256Mi --source=.Deploy a Pub/Sub Triggered Function
gcloud pubsub topics create order-events
gcloud functions deploy process-order \
--gen2 --region=us-central1 --runtime=python312 \
--trigger-topic=order-events \
--entry-point=process_order \
--memory=512Mi --timeout=120s --retry \
--service-account=order-processor@${PROJECT_ID}.iam.gserviceaccount.com \
--source=.Deploy a Cloud Storage Triggered Function
gcloud functions deploy process-upload \
--gen2 --region=us-central1 --runtime=python312 \
--trigger-event-filters="type=google.cloud.storage.object.v1.finalized" \
--trigger-event-filters="bucket=my-upload-bucket" \
--entry-point=process_upload \
--memory=1Gi --timeout=300s --source=.Deploy a Scheduled Function
gcloud functions deploy daily-cleanup \
--gen2 --region=us-central1 --runtime=python312 \
--trigger-http --no-allow-unauthenticated \
--entry-point=daily_cleanup --source=.
gcloud scheduler jobs create http daily-cleanup-job \
--schedule="0 2 * * *" \
--uri="https://us-central1-${PROJECT_ID}.cloudfunctions.net/daily-cleanup" \
--http-method=POST \
--oidc-service-account-email=scheduler-sa@${PROJECT_ID}.iam.gserviceaccount.com \
--location=us-central1Python Function Examples
# main.py
import functions_framework
import base64, json
from flask import jsonify
from google.cloud import firestore
@functions_framework.http
def hello_http(request):
"""HTTP Cloud Function."""
name = request.args.get("name", "World")
return jsonify({"message": f"Hello, {name}!", "status": "ok"}), 200
@functions_framework.cloud_event
def process_order(cloud_event):
"""Triggered by a Pub/Sub message."""
data = base64.b64decode(cloud_event.data["message"]["data"]).decode("utf-8")
order = json.loads(data)
db = firestore.Client()
db.collection("orders").document(order["id"]).set({
"status": "processing", "items": order["items"], "total": order["total"],
})
@functions_framework.cloud_event
def process_upload(cloud_event):
"""Triggered when a file is uploaded to Cloud Storage."""
data = cloud_event.data
bucket_name, file_name = data["bucket"], data["name"]
if not file_name.lower().endswith((".png", ".jpg", ".jpeg")):
return
from google.cloud import vision
client = vision.ImageAnnotatorClient()
image = vision.Image(source=vision.ImageSource(
gcs_image_uri=f"gs://{bucket_name}/{file_name}"))
labels = [l.description for l in client.label_detection(image=image).label_annotations]
print(f"Labels for {file_name}: {labels}")# requirements.txt
functions-framework==3.*
google-cloud-firestore==2.*
google-cloud-storage==2.*
google-cloud-vision==3.*
flask>=2.0Node.js Function Examples
// index.js
const functions = require("@google-cloud/functions-framework");
functions.http("helloNode", (req, res) => {
const name = req.query.name || "World";
res.json({ message: `Hello, ${name}!`, status: "ok" });
});
functions.cloudEvent("processMessage", (cloudEvent) => {
const data = Buffer.from(cloudEvent.data.message.data, "base64").toString();
console.log(`Processing: ${JSON.parse(data)}`);
});Managing Deployed Functions
gcloud functions list --gen2 --region=us-central1
gcloud functions describe hello-http --gen2 --region=us-central1
gcloud functions logs read hello-http --gen2 --region=us-central1 --limit=50
gcloud functions delete hello-http --gen2 --region=us-central1 --quiet
# Update configuration via deploy (inspect source/config behavior before running)
gcloud functions deploy hello-http --gen2 --region=us-central1 \
--update-env-vars=APP_ENV=staging
# Test locally before deploying
functions-framework --target=hello_http --port=8080Terraform Configuration
resource "google_cloudfunctions2_function" "api" {
name = "hello-http"
location = "us-central1"
build_config {
runtime = "python312"
entry_point = "hello_http"
source {
storage_source {
bucket = google_storage_bucket.source.name
object = google_storage_bucket_object.source.name
}
}
}
service_config {
min_instance_count = 0
max_instance_count = 100
available_memory = "256Mi"
timeout_seconds = 60
service_account_email = google_service_account.fn.email
environment_variables = { APP_ENV = "production" }
}
}
resource "google_cloud_run_service_iam_member" "invoker" {
location = google_cloudfunctions2_function.api.location
service = google_cloudfunctions2_function.api.name
role = "roles/run.invoker"
member = "serviceAccount:approved-caller@PROJECT_ID.iam.gserviceaccount.com"
}
resource "google_cloudfunctions2_function" "processor" {
name = "process-order"
location = "us-central1"
build_config {
runtime = "python312"
entry_point = "process_order"
source {
storage_source {
bucket = google_storage_bucket.source.name
object = google_storage_bucket_object.source.name
}
}
}
service_config {
max_instance_count = 50
available_memory = "512Mi"
timeout_seconds = 120
service_account_email = google_service_account.fn.email
}
event_trigger {
trigger_region = "us-central1"
event_type = "google.cloud.pubsub.topic.v1.messagePublished"
pubsub_topic = google_pubsub_topic.orders.id
retry_policy = "RETRY_POLICY_RETRY"
}
}Troubleshooting
| Symptom | Cause | Fix |
|---------|-------|-----|
| PERMISSION_DENIED on deploy | Missing Cloud Build or Artifact Registry perms | Grant roles/cloudbuild.builds.builder to Cloud Build SA |
| Function deploys but returns 403 | Missing roles/run.invoker for Gen2 | Grant the intended authenticated caller invoker access; public access requires explicit design approval |
| Cold start latency > 5s | Large dependencies or no min instances | Set --min-instances=1; reduce deps; use lazy imports |
| Pub/Sub messages redelivered | Function errors or times out | Increase --timeout; fix error handling; add dead-letter topic |
| Build failed during deploy | Syntax error or missing dependency | Check gcloud builds log; verify requirements.txt |
| Cannot connect to VPC resource | Function not on VPC connector | Add --vpc-connector=my-connector to deploy |
Related Skills
- gcp-networking - VPC connectors for accessing private resources from functions
- gcp-cloud-sql - Connecting Cloud Fun
… (full content is in the download package)
Related skills
- gcp-cloud-run – Specialized skill for building production-ready serverless applications on GCP. Covers…
- gcp-cloud-sql – Provision Cloud SQL databases. Configure high availability, backups, and security. Use…
- gcp-compute – Manage Compute Engine instances and instance templates. Configure managed instance…
- gcp-gke – Deploy and manage Google Kubernetes Engine clusters. Configure node pools, networking…
- gcp-networking – Configure VPCs, firewall rules, and Cloud NAT. Implement shared VPC and private service…
- gcp-secret-manager – Secure secrets in Google Cloud Secret Manager. Configure IAM policies, integrate with…
- senior-devops – Comprehensive DevOps skill for CI/CD, infrastructure automation, containerization, and…
- gitlab-ci – Configure GitLab CI/CD pipelines and runners for automated building, testing, and…