| name | gcpsdk |
| description | Referência e guia de uso do Google Cloud SDK (gcloud) para gerenciar recursos GCP: autenticação, GKE, Artifact Registry, Cloud Run, IAM e Cloud SQL. Use quando: provisionar ou gerenciar recursos GCP via linha de comando, scripts de automação ou pipelines CI/CD. |
| user-invocable | true |
Google Cloud SDK (gcloud) — Gerenciamento de Recursos GCP
Quando Usar
- Provisionar ou gerenciar recursos GCP sem Terraform (scripts rápidos, bootstrap)
- Autenticar e configurar acesso a clusters GKE
- Empurrar imagens para Google Artifact Registry
- Gerenciar segredos no Secret Manager
- Scripts de automação em Bash para pipelines CI/CD (GitHub Actions, Cloud Build)
Instalação e Configuração
curl https://sdk.cloud.google.com | bash
exec -l $SHELL
brew install --cask google-cloud-sdk
gcloud version
gcloud init
gcloud auth login
gcloud auth application-default login
gcloud auth activate-service-account \
--key-file=/path/to/service-account.json
export GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account.json
gcloud config set project DevKit-prod
gcloud config set compute/region southamerica-east1
gcloud config set compute/zone southamerica-east1-a
gcloud config list
gcloud config configurations create production
gcloud config configurations activate production
gcloud config configurations list
Projetos e IAM
gcloud projects list
gcloud projects create DevKit-prod \
--name="DevKit Production" \
--labels=environment=production
gcloud services enable \
container.googleapis.com \
artifactregistry.googleapis.com \
secretmanager.googleapis.com \
sqladmin.googleapis.com \
cloudresourcemanager.googleapis.com
gcloud services list --enabled --filter="NAME:container"
gcloud iam service-accounts create sa-cicd-DevKit \
--display-name="DevKit CI/CD Service Account" \
--project=DevKit-prod
gcloud projects add-iam-policy-binding DevKit-prod \
--member="serviceAccount:sa-cicd-DevKit@DevKit-prod.iam.gserviceaccount.com" \
--role="roles/container.developer"
gcloud projects add-iam-policy-binding DevKit-prod \
--member="serviceAccount:sa-cicd-DevKit@DevKit-prod.iam.gserviceaccount.com" \
--role="roles/artifactregistry.writer"
gcloud iam service-accounts keys create sa-key.json \
--iam-account=sa-cicd-DevKit@DevKit-prod.iam.gserviceaccount.com
gcloud projects get-iam-policy DevKit-prod \
--flatten="bindings[].members" \
--format="table(bindings.role,bindings.members)" \
--filter="bindings.members:serviceAccount"
GKE — Google Kubernetes Engine
gcloud container clusters create-auto DevKit-prod \
--region southamerica-east1 \
--project DevKit-prod
gcloud container clusters create DevKit-prod \
--zone southamerica-east1-a \
--num-nodes 3 \
--machine-type e2-standard-4 \
--min-nodes 2 \
--max-nodes 10 \
--enable-autoscaling \
--cluster-version 1.29 \
--enable-ip-alias \
--workload-pool=DevKit-prod.svc.id.goog \
--labels environment=production
gcloud container clusters get-credentials DevKit-prod \
--zone southamerica-east1-a \
--project DevKit-prod
gcloud container clusters list
gcloud container clusters upgrade DevKit-prod \
--master \
--cluster-version 1.30 \
--zone southamerica-east1-a
gcloud container clusters resize DevKit-prod \
--node-pool default-pool \
--num-nodes 5 \
--zone southamerica-east1-a
gcloud container clusters delete DevKit-prod \
--zone southamerica-east1-a \
--quiet
Artifact Registry
gcloud artifacts repositories create DevKit-docker \
--repository-format=docker \
--location=southamerica-east1 \
--description="Imagens Docker DevKit" \
--project=DevKit-prod
gcloud auth configure-docker southamerica-east1-docker.pkg.dev
IMAGE="southamerica-east1-docker.pkg.dev/DevKit-prod/DevKit-docker/api"
docker build -t $IMAGE:$GIT_SHA .
docker push $IMAGE:$GIT_SHA
docker tag $IMAGE:$GIT_SHA $IMAGE:latest
docker push $IMAGE:latest
gcloud artifacts docker images list \
southamerica-east1-docker.pkg.dev/DevKit-prod/DevKit-docker \
--include-tags
gcloud artifacts docker images delete \
southamerica-east1-docker.pkg.dev/DevKit-prod/DevKit-docker/api:old-tag \
--quiet
gcloud artifacts repositories set-cleanup-policies DevKit-docker \
--location=southamerica-east1 \
--policy=cleanup-policy.json
Secret Manager
echo -n "senha_super_secreta" | \
gcloud secrets create db-password \
--data-file=- \
--replication-policy=automatic \
--project=DevKit-prod
echo -n "nova_senha" | \
gcloud secrets versions add db-password --data-file=-
gcloud secrets versions access latest \
--secret=db-password \
--project=DevKit-prod
gcloud secrets versions access 3 --secret=db-password
gcloud secrets list --project=DevKit-prod
gcloud secrets versions list db-password --project=DevKit-prod
gcloud secrets add-iam-policy-binding db-password \
--member="serviceAccount:sa-app@DevKit-prod.iam.gserviceaccount.com" \
--role="roles/secretmanager.secretAccessor"
gcloud secrets delete db-password --quiet
Cloud Run
gcloud run deploy DevKit-api \
--image southamerica-east1-docker.pkg.dev/DevKit-prod/DevKit-docker/api:latest \
--platform managed \
--region southamerica-east1 \
--port 3000 \
--min-instances 1 \
--max-instances 20 \
--memory 512Mi \
--cpu 1 \
--concurrency 80 \
--allow-unauthenticated \
--set-env-vars "NODE_ENV=production" \
--set-secrets "DATABASE_URL=db-url:latest" \
--project DevKit-prod
gcloud run services list --region southamerica-east1
gcloud run services describe DevKit-api \
--region southamerica-east1 \
--format="value(status.url)"
gcloud run revisions list --service DevKit-api --region southamerica-east1
gcloud run services update-traffic DevKit-api \
--to-revisions=DevKit-api-00005-abc=100 \
--region southamerica-east1
Cloud SQL (PostgreSQL)
gcloud sql instances create psql-DevKit-prod \
--database-version=POSTGRES_16 \
--tier=db-custom-4-16384 \
--region=southamerica-east1 \
--availability-type=REGIONAL \
--backup-start-time=03:00 \
--enable-bin-log \
--storage-size=100GB \
--storage-auto-increase \
--project=DevKit-prod
gcloud sql users set-password postgres \
--instance=psql-DevKit-prod \
--password="$DB_ROOT_PASSWORD"
gcloud sql databases create DevKit \
--instance=psql-DevKit-prod
gcloud sql users create appuser \
--instance=psql-DevKit-prod \
--password="$DB_APP_PASSWORD"
cloud_sql_proxy DevKit-prod:southamerica-east1:psql-DevKit-prod=tcp:5432 &
psql -h 127.0.0.1 -p 5432 -U postgres -d DevKit
Integração com CI/CD (GitHub Actions)
- name: Autenticar no GCP
uses: google-github-actions/auth@v2
with:
credentials_json: ${{ secrets.GCP_SA_KEY }}
- name: Configurar gcloud
uses: google-github-actions/setup-gcloud@v2
with:
project_id: DevKit-prod
- name: Autenticar Docker no Artifact Registry
run: gcloud auth configure-docker southamerica-east1-docker.pkg.dev --quiet
- name: Build e Push
run: |
docker build -t southamerica-east1-docker.pkg.dev/DevKit-prod/DevKit-docker/api:${{ github.sha }} .
docker push southamerica-east1-docker.pkg.dev/DevKit-prod/DevKit-docker/api:${{ github.sha }}
- name: Deploy no GKE
run: |
gcloud container clusters get-credentials DevKit-prod \
--zone southamerica-east1-a
kubectl set image deployment/api api=southamerica-east1-docker.pkg.dev/DevKit-prod/DevKit-docker/api:${{ github.sha }}
Output Esperado
- Projeto GCP configurado com APIs habilitadas
- Service Account com roles mínimas necessárias (least privilege)
- Cluster GKE com kubeconfig atualizado
- Artifact Registry com Docker autenticado
- Secret Manager com segredos da aplicação e politica de acesso