Բոլոր դասերը
DevOps և ամպՄիջին13 րոպե ընթերցումԱրժե իմանալ

Google Cloud (GCP)

Container-ներ, որոնք scale են լինում մինչև զրո, managed Postgres և serverless data warehouse՝ բոլորը մեկ IAM մոդելի ներքո։

  • Cloud Run
  • GKE
  • Cloud SQL
  • BigQuery
  • IAM
Քայլ 1/5
Մեկ VPS՝ էժան ու պարզ, բայց admin-ն էլ դու ես, backup-ներ անողն էլ, գիշերվա 3-ի զարթուցիչն էլ։

30 վայրկյանում

Google Cloud-ը Google-ի public cloud-ն է․ սեփական սերվերներ պահելու փոխարեն վարձում ես compute, տվյալների բազաներ, storage և analytics։ Վեբ թիմերի համար նրա ամենաուժեղ մասերն են Cloud Run-ը (գործարկում է ցանկացած container, վճարում ես ըստ request-ի, scale է լինում մինչև զրո), Cloud SQL-ը (managed Postgres կամ MySQL), GKE-ն (managed Kubernetes) և BigQuery-ն (data warehouse, որին SQL-ով query ես անում՝ առանց որևէ սերվեր կառավարելու)։ Ամեն ինչ ապրում է project-ների մեջ և կառավարվում է IAM-ով՝ Google-ի թույլտվությունների համակարգով։

Իմ ամենօրյա stack-ում չէ․ գիտեմ հիմնական գաղափարները և մանրամասները կսովորեմ, երբ նախագիծը դա պահանջի։

Ինչու է սա կարևոր

  • Cloud Run-ը production-ում container գործարկելու ամենապարզ ձևերից մեկն է․ push ես անում image-ը, ստանում ես HTTPS URL, autoscaling և scale մինչև զրո՝ առանց cluster կառավարելու։
  • BigQuery-ն թույլ է տալիս թիմին վերլուծել միլիարդավոր տողեր սովորական SQL-ով և վճարել ըստ scan արված տվյալի ծավալի․ հենց դրա համար շատ ընկերություններ իրենց analytics-ը պահում են GCP-ում, նույնիսկ եթե հավելվածն այլ տեղ է աշխատում։
  • GKE-ն լայնորեն համարվում է ամենահասուն managed Kubernetes-ը, իսկ նրա Autopilot ռեժիմը հանում է node-երի կառավարումը, ուստի այն թիմերը, որոնց արդեն Kubernetes է պետք, հաճախ ընտրում են GCP-ն։
  • Մեկ VPS-ի համեմատ թիմը ստանում է managed backup-ներ, failover, գլոբալ load balancing և մանրակրկիտ IAM․ գինը՝ սովորելու ավելի շատ հասկացություններ և հաշիվ, որին պետք է հետևել։

Ինչպես է աշխատում

01Մտածողության մոդելը՝ organization, project-ներ, region-ներ

GCP-ում ամեն ինչ պատկանում է որևէ project-ի։ Project-ը ռեսուրսների, billing-ի և թույլտվությունների «տարա» է․ պատկերացրու այն որպես շենքի մեկ բնակարան՝ իր բանալիներով և իր էլեկտրահաշվիչով։ Project-ները կարող են դրվել folder-ների մեջ organization-ի տակ, ինչը թույլ է տալիս ընկերությանը policy-ներ (օրինակ՝ «public bucket-ներ չլինեն») կիրառել բոլոր թիմերի վրա միանգամից։ Տարածված դասավորություն է՝ մեկ project յուրաքանչյուր միջավայրի համար՝ app-dev, app-staging, app-prod։ Դա staging-ի և production-ի միջև կոշտ պատ է տալիս, առանձին quota-ներ և հստակ հաշիվ յուրաքանչյուր միջավայրի համար։ Ռեսուրսները աշխատում են region-ում (europe-west1, us-central1) և երբեմն դրա ներսի zone-ում (europe-west1-b)։ Ընտրիր օգտատերերին մոտ region և հավելվածն ու նրա տվյալների բազան պահիր նույն region-ում, որովհետև region-ների միջև traffic-ը փող արժե և latency է ավելացնում։ AWS-ի համեմատ GCP project-ը մոտավորապես AWS account է, իսկ GCP organization-ը՝ մոտավորապես AWS Organizations։

  • Organization → folder-ներ → project-ներ → ռեսուրսներ։
  • Մեկ project յուրաքանչյուր միջավայրի համար ամենապարզ անվտանգ դասավորությունն է։
  • Նույն region-ը հավելվածի և բազայի համար՝ ավելի ցածր latency, առանց inter-region egress-ի։

02Compute՝ Cloud Run, GKE թե Compute Engine

GCP-ն կոդ գործարկելու երեք հիմնական ձև է տալիս։ Compute Engine-ը սովորական վիրտուալ մեքենաներ են՝ VPS-ին ամենամոտ բանը․ OS-ը, patch-երը և process manager-ը կառավարում ես ինքդ։ GKE-ն managed Kubernetes է։ Standard ռեժիմում node-երի չափը որոշում և կառավարում ես դու, Autopilot ռեժիմում վճարում ես քո pod-երի պահանջած CPU-ի և հիշողության համար, իսկ node-երը Google-ն է կառավարում։ Cloud Run-ը դրանց վերևում է․ նրան տալիս ես container, որը լսում է PORT environment variable-ով, և ստանում ես HTTPS endpoint, autoscaling ըստ միաժամանակյա request-ների, revision-ներ և traffic splitting։ Cloud Run-ը գործարկում է նաև job-եր (batch task-եր, որոնք աշխատում են մինչև ավարտ), function-ներ (նախկինում Cloud Functions կոչվող արտադրանքն այժմ Cloud Run functions է) և worker pool-եր pull-based ֆոնային աշխատանքի համար։ Տիպիկ վեբ API-ի համար սկսիր Cloud Run-ից։ GKE-ին անցիր, երբ պետք են շատ service-ներ service mesh-ով, custom networking կամ երկարակյաց stateful workload-ներ, իսկ Compute Engine-ին՝ երբ պետք է մեքենայի լիարժեք վերահսկողություն։

03Container-ի deploy Cloud Run-ում

Ամենաարագ ճանապարհը թույլ տալն է, որ Cloud Run-ը source-ից build անի Cloud Build-ով և image-ը պահի Artifact Registry-ում (հին Container Registry-ն արդեն փակված է)։ Իրական project-ների համար image-ը build արա CI-ում, push արա Artifact Registry, ապա deploy արա հենց այդ image tag-ը։ Service-ին տուր իր սեփական service account-ը՝ միայն անհրաժեշտ role-երով, secret-ները պահիր Secret Manager-ում, իսկ Cloud SQL-ին միացիր ներկառուցված connector-ով։ Հիմնական flag-երը որոշում են արժեքն ու վարքը․ --min-instances-ը տաք instance-ներ է պահում (cold start-եր չկան, բայց դրանց համար վճարում ես), --max-instances-ը սահմանափակում է և՛ scale-ը, և՛ հաշիվը, իսկ --concurrency-ն որոշում է, թե մեկ instance-ը քանի request է միաժամանակ սպասարկում։ Node և PHP հավելվածները սովորաբար լավ են տանում շատ միաժամանակյա request-ներ, ուստի 80-ի default-ը խելամիտ սկիզբ է։

bash
gcloud config set project app-prod
gcloud services enable run.googleapis.com artifactregistry.googleapis.com
 
gcloud run deploy api \
  --image=europe-west1-docker.pkg.dev/app-prod/apps/api:1.4.2 \
  --region=europe-west1 \
  [email protected] \
  --set-secrets=DATABASE_URL=database-url:latest \
  --add-cloudsql-instances=app-prod:europe-west1:main-db \
  --min-instances=0 --max-instances=10 \
  --concurrency=80 --cpu=1 --memory=512Mi \
  --allow-unauthenticated

04Տվյալներ՝ Cloud SQL, Firestore, Cloud Storage և BigQuery

Cloud SQL-ը managed PostgreSQL, MySQL կամ SQL Server է․ Google-ն է հոգում patch-երը, ավտոմատ backup-ները, point-in-time recovery-ն և ըստ ցանկության high availability՝ standby-ով այլ zone-ում։ Այն լինում է Enterprise և Enterprise Plus edition-ներով․ Plus-ը ավելի արագ failover և ավելի մեծ արտադրողականություն է տալիս՝ ավելի բարձր գնով։ AlloyDB-ն Google-ի Postgres-համատեղելի engine-ն է ավելի ծանր workload-ների համար։ Firestore-ը serverless document database է, որը հայտնի է mobile հավելվածներում։ Cloud Storage-ը ֆայլեր է պահում (upload-ներ, backup-ներ, static asset-ներ) bucket-ներում՝ storage class-ներով Standard-ից մինչև Archive։ BigQuery-ն տարբերվում է այս բոլորից․ այն columnar warehouse է analytics-ի համար, ոչ թե քո հավելվածի transaction-ների։ Event-ները բեռնում կամ stream ես անում դրա մեջ և SQL ես գործարկում հսկայական աղյուսակների վրա։ On-demand գնագոյացումը գանձում է ըստ scan արված terabyte-ի, ուստի լայն աղյուսակի վրա SELECT *-ը բառացիորեն թանկ է․ ընտրիր միայն անհրաժեշտ սյունակները և աղյուսակները partition արա ըստ ամսաթվի։

  • Հավելվածի տվյալներ → Cloud SQL (կամ AlloyDB)։ Ֆայլեր → Cloud Storage։
  • Analytics և հաշվետվություններ → BigQuery, որը սնվում է հավելվածից կամ export-ներով։
  • Cloud SQL-ը free tier չունի․ նույնիսկ ամենափոքր instance-ը գանձվում է ամեն ժամ, քանի դեռ գոյություն ունի։

05IAM՝ ով ինչ կարող է անել

IAM-ը պատասխանում է մեկ հարցի․ որ principal-ը (օգտատեր, խումբ կամ service account) որ role-ն ունի որ ռեսուրսի վրա։ Role-երը թույլտվությունների փաթեթներ են, օրինակ՝ roles/run.invoker կամ roles/cloudsql.client։ Owner, Editor և Viewer basic role-երից խուսափիր ամեն ինչի համար, բացի փոքր փորձերից․ դրանք չափազանց լայն են։ Յուրաքանչյուր workload-ի տուր իր service account-ը և նրան predefined role-եր տուր հնարավոր ամենանեղ scope-ով՝ մեկ bucket կամ secret, ոչ թե ամբողջ project-ը։ GCP-ի անվտանգության ամենակարևոր կանոնը՝ մի ստեղծիր download արվող service account key-եր։ JSON key ֆայլը երկարակյաց գաղտնաբառ է, որը հայտնվում է repo-ներում և laptop-ներում։ Google Cloud-ում աշխատող կոդը credential-ները ավտոմատ ստանում է կցված service account-ից, իսկ CI համակարգերը, օրինակ GitHub Actions-ը, պետք է օգտագործեն Workload Identity Federation, որը կարճակյաց OIDC token-ը փոխանակում է Google credential-ների հետ։ Հենց այս պատճառով նոր organization-ներում key-երի ստեղծումը default-ով արգելված է policy-ով։

06Production խորհուրդներ և գնային թակարդներ

GCP-ն շատ բաների համար գանձում է վայրկյանով, ինչը հրաշալի է, մինչև որ աշխատում է մի բան, որի մասին մոռացել ես։ Առաջին իսկ օրը budget դիր alert-ներով (budget-ները զգուշացնում են, ծախսը չեն կանգնեցնում)։ Տարածված անակնկալները՝ Cloud SQL instance-ները գանձվում են շուրջօրյա, նույնիսկ երբ հավելվածը պարապ է, Cloud Run-ի min-instances-ը գանձվում է պարապ ժամանակ, Cloud NAT-ը և load balancer-ները ժամավճար ունեն, ինտերնետ egress-ը գանձվում է ըստ GB-ի, իսկ BigQuery on-demand query-ները՝ ըստ scan արված byte-երի, ուստի dashboard-ը, որը ամեն րոպե SELECT * է թարմացնում, կարող է ամբողջ հավելվածից թանկ արժենալ։ Logging-ը ևս մեկ թակարդ է․ Cloud Logging-ը գանձում է ingestion-ի համար անվճար սահմանից վեր, ուստի production-ում debug level-ով ամբողջական request body-ներ մի log արա։ Always-free tier-ը ծածկում է Cloud Run-ի, Cloud Storage-ի, BigQuery-ի և մեկ փոքր VM-ի փոքր օգտագործումը, իսկ նոր account-ները trial credit են ստանում, բայց կարդա սահմանները, նախքան դրանց վրա հույս դնելը։

Օգտագործեք, երբ

  • Ուզում ես container-ներ գործարկել առանց սերվերներ կամ cluster կառավարելու, scale մինչև զրո՝ ալիքաձև կամ ցածր traffic-ի համար․ այստեղ Cloud Run-ը հիանալի է։
  • Ընկերությունդ լուրջ analytics կամ machine learning է անում և ուզում է BigQuery-ն ու Vertex AI-ը տվյալներին մոտ ունենալ։
  • Պետք է managed Kubernetes և ուզում ես node-երի կառավարումը հասցնել նվազագույնի (GKE Autopilot)։
  • Թիմը կամ client-ը արդեն օգտագործում է Google Workspace և ուզում է identity-ն ու billing-ը մեկ տեղում։

Մի՛ օգտագործեք, երբ

  • Կայուն traffic-ով փոքր հավելված․ Docker Compose-ով մեկ VPS-ը սովորաբար ավելի էժան է և ավելի հեշտ հասկանալի։
  • Client-ի ընկերությունը ամբողջությամբ AWS-ի կամ Microsoft-ի վրա է․ երկրորդ cloud-ը կրկնապատկում է IAM-ի, networking-ի և billing-ի աշխատանքը։
  • Պետք է մի service, որը լավ է առաջարկում միայն այլ provider, կամ տվյալների խիստ residency մի region-ում, որը GCP-ն չի ծածկում։

Այլընտրանքներ

  • AWS

    Ամենամեծ կատալոգն ու շուկայի բաժինը։ App Runner/ECS Fargate-ը ամենամոտն են Cloud Run-ին, RDS-ը՝ Cloud SQL-ին, Redshift/Athena-ն՝ BigQuery-ին։

  • Azure

    Բնական ընտրություն Microsoft-կենտրոն ընկերությունների համար՝ Entra ID, .NET, Office 365։ Container Apps-ը նրա Cloud Run-ի համարժեքն է։

  • VPS + Docker Compose

    Ֆիքսված ամսական գին և լիարժեք վերահսկողություն, բայց backup-ները, failover-ը, patch-երը և scaling-ը քո վրա են։

  • Vercel / Netlify

    Ավելի լավ են frontend-ծանր Next.js-ի կամ static կայքերի համար, ավելի քիչ հարմար՝ երկարակյաց backend-ների և բազաների համար։

Լավագույն պրակտիկաներ

  1. Օգտագործիր մեկ project յուրաքանչյուր միջավայրի համար և դրանք դիր մեկ folder-ում, որպեսզի policy-ները կիրառվեն բոլորի վրա։
  2. Յուրաքանչյուր service-ի տուր իր service account-ը predefined, նեղ scope-ով role-երով․ երբեք մի օգտագործիր Editor workload-ների համար։
  3. CI/CD-ի համար օգտագործիր Workload Identity Federation՝ service account-ի JSON key-երի փոխարեն։
  4. Secret-ները պահիր Secret Manager-ում և mount արա Cloud Run-ում, ոչ թե environment ֆայլերում կամ image-ներում։
  5. Budget-ներ դիր 50%, 90% և 100% alert-ներով և ամեն Cloud Run service-ի վրա --max-instances սահմանիր։
  6. Deploy արա immutable image tag-եր Artifact Registry-ից և ակնթարթային rollback-ի համար օգտագործիր Cloud Run revision-ները։
  7. BigQuery-ի աղյուսակները partition և cluster արա և միշտ ընտրիր միայն անհրաժեշտ սյունակները։

Տարածված սխալներ

  • Լոկալ development-ի համար service account key download անել և commit անել repository։
  • Cloud SQL instance կամ GKE Standard cluster ամիսներով աշխատող թողնել մոռացված test project-ում։
  • Cloud Run-ում request-based billing-ով HTTP response-ից հետո ֆոնային աշխատանք կատարել, մինչդեռ request-ների միջև CPU-ն throttle է արվում։
  • Հավելվածը դնել մի region-ում, իսկ բազան՝ մեկ այլ, և ամեն query-ի վրա վճարել egress-ի ու latency-ի համար։
  • Dashboard-ներից BigQuery-ում SELECT * query-ներ գործարկել և մի քանի սյունակի համար terabyte-ներ scan անել։

Խորը վերլուծություն

07Cloud Run-ի ներսը՝ concurrency, CPU allocation և cold start-եր

Cloud Run-ը scale է լինում ըստ միաժամանակյա request-ների, ոչ միայն ըստ CPU-ի։ Եթե concurrency-ն 80 է, և 400 request ընթացքի մեջ է, այն ձգտում է մոտ հինգ instance-ի։ Յուրաքանչյուր instance աշխատում է gVisor-ի վրա հիմնված sandbox-ում (երկրորդ սերնդի execution environment-ը լիարժեք Linux համատեղելիություն և ավելի արագ CPU ու ցանց է տալիս)։ Billing-ը երկու ռեժիմ ունի։ Request-based billing-ը CPU-ի և հիշողության համար գանձում է միայն այն ժամանակ, երբ instance-ը request է սպասարկում, իսկ request-ների միջև CPU-ն throttle է արվում գրեթե մինչև զրո, ուստի timer-ները, queue consumer-ները և response-ից հետո «կրակիր ու մոռացիր» աշխատանքը կարող են պարզապես կանգ առնել։ Instance-based billing-ը (նախկինում «CPU always allocated») գանձում է instance-ի ամբողջ կյանքի համար՝ ավելի ցածր միավորի գնով, և թույլ է տալիս ֆոնային աշխատանք։ Cold start-երը գալիս են image-ը pull անելուց և runtime-ը բեռնելուց․ նվազեցրու դրանք փոքր image-ներով, lazy initialization-ով, startup CPU boost-ով և, որտեղ latency-ն կարևոր է, մեկ կամ երկու instance-ի նվազագույն քանակով։

bash
# Background-friendly service: instance billing + warm instance
gcloud run services update worker-api \
  --region=europe-west1 \
  --no-cpu-throttling \
  --cpu-boost \
  --min-instances=1 \
  --execution-environment=gen2

08Networking՝ VPC-ներ, private access և egress

GCP VPC-ն գլոբալ է․ մեկ ցանցը կարող է subnet-ներ ունենալ շատ region-ներում, ի տարբերություն AWS-ի, որտեղ VPC-ն region-ային է։ Cloud Run-ը default-ով քո VPC-ի ներսում չէ․ private ռեսուրսների (Cloud SQL private IP, Memorystore Redis, ներքին VM-ներ) հասնելու համար օգտագործիր Direct VPC egress, որը service-ը կցում է subnet-ին՝ առանց հին Serverless VPC Access connector VM-ների։ Դեպի ինտերնետ ելքային կանչերը, որոնք պետք է գան ֆիքսված IP-ից (partner allowlist-ներ), անցնում են Cloud NAT-ով՝ reserved հասցեով։ Private Service Connect-ը և Private Google Access-ը թույլ են տալիս workload-ներին հասնել Google API-ներին առանց public IP-ների։ Մուտքային traffic-ի համար գլոբալ external Application Load Balancer-ը տալիս է մեկ anycast IP, managed certificate-ներ, Cloud CDN և Cloud Armor (WAF և rate limiting)՝ Cloud Run-ի, GKE-ի կամ bucket-ների առջևում։ Այս մասերից յուրաքանչյուրն ունի իր ժամավճարը և GB-ի վճարը, ուստի traffic-ի ճանապարհը նկարիր, նախքան կառուցելը։

09Organization policy-ներ, audit log-եր և պաշտպանիչ սահմաններ

Ընկերության մասշտաբով կարևոր վերահսկողությունները project-ներից վեր են։ Organization policy constraint-ները կարող են արգելել service account key-երի ստեղծումը, ռեսուրսների տեղակայումը սահմանափակել որոշ region-ներով, արգելել public IP-ները VM-ների վրա, պարտադրել uniform bucket-level access և կանգնեցնել public sharing-ը։ Cloud Audit Logs-ը անվճար գրանցում է admin activity-ն և կարող է գրանցել data access-ը (լրացուցիչ վճարով) compliance-ի համար։ Զգայուն project-ները դիր VPC Service Controls-ի հետևում՝ տվյալների արտահոսքի ռիսկը նվազեցնելու համար․ նույնիսկ գողացված credential-ը չի կարող BigQuery dataset-ը պատճենել perimeter-ից դուրս project։ IAM binding-ներում օգտագործիր խմբեր, ոչ թե առանձին օգտատերեր, և grant-ները վերանայիր IAM Recommender-ով, որն առաջարկում է հեռացնել երբեք չօգտագործված թույլտվությունները։ Ենթակառուցվածքը պետք է լինի Terraform-ում՝ remote state-ով bucket-ում, որպեսզի ամեն փոփոխություն review արվի, ոչ թե console-ում click-ով արվի։

Իրական իրավիճակներ

01

Cloud Run API, որն անընդհատ սպառում է Postgres-ի connection-ները

Խնդիր

Traffic-ի պիկի ժամանակ Cloud Run-ը scale եղավ մինչև 60 instance, և Cloud SQL-ը սկսեց մերժել connection-ները։ Յուրաքանչյուր instance բացում է 10 connection-ի pool։

Ինչպես լուծել

Նախ հաշվարկիր․ 60 instance × 10 connection = 600, ինչը գերազանցում է instance-ի max_connections-ը։ Scale-ը սահմանափակիր --max-instances-ով՝ չափելով այն, ինչ բազան կարող է տանել, և յուրաքանչյուր pool-ը փոքրացրու մինչև 2–5 connection, քանի որ 80 concurrency-ով մեկ instance-ին կարճ query-ների համար հազվադեպ է ավելին պետք։ Եթե մեծ scale է պետք, դրանց միջև pooler դիր (PgBouncer փոքր VM-ի վրա կամ Cloud SQL Managed Connection Pooling, որտեղ հասանելի է) և օգտագործիր transaction pooling։ Ավելացրու connection timeout, որպեսզի request-ները արագ ձախողվեն, այլ ոչ թե կուտակվեն։ Վերջում alert դիր Cloud SQL-ի connection-ների քանակի և CPU-ի վրա և կարդալու-ծանր endpoint-ների համար դիտարկիր ավելի մեծ tier կամ read replica-ներ։

02

CI-ին պետք է deploy անել առանց key ֆայլերի

Խնդիր

Թիմի GitHub Actions pipeline-ը օգտագործում է service account-ի JSON key, որը պահված է որպես repository secret։ Security թիմը ուզում է, որ այն վերանա։

Ինչպես լուծել

Ստեղծիր Workload Identity Pool և OIDC provider GitHub-ի համար, որը attribute condition-ով սահմանափակված է քո organization-ով և repository-ով (օրինակ՝ assertion.repository == 'your_org/your_repo')։ Ստեղծիր deployer service account միայն roles/run.developer, roles/artifactregistry.writer և runtime account-ի վրա roles/iam.serviceAccountUser role-երով։ Թույլ տուր այդ repository-ի pool principal-ին impersonate անել այն roles/iam.workloadIdentityUser-ի միջոցով։ Workflow-ում օգտագործիր google-github-actions/auth workload_identity_provider-ով և service_account-ով, ինչպես նաև permissions id-token: write։ Ջնջիր հին key-ը և պարտադրիր organization policy-ն, որն արգելում է նոր key-երը։

03

BigQuery-ի հաշիվը մեկ ամսում տասնապատկվում է

Խնդիր

Գործարկվեց նոր ներքին dashboard, և հաշվում BigQuery-ի տողը տասնյակներից հասավ հարյուրավոր դոլարների։

Ինչպես լուծել

Բացիր INFORMATION_SCHEMA.JOBS-ը և դասավորիր ըստ total_bytes_billed-ի՝ ծանր query-ները գտնելու համար․ դրանք սովորաբար գալիս են մեկ service account-ից։ Տիպիկ պատճառներն են SELECT *-ը լայն event աղյուսակի վրա, partition filter-ի բացակայությունը և ամեն րոպե թարմացումը։ Ուղղիր աղյուսակը՝ partition արա ըստ event-ի ամսաթվի, cluster արա ըստ tenant-ի կամ event-ի տեսակի և սահմանիր require_partition_filter։ Ուղղիր query-ները՝ ընտրիր անհրաժեշտ սյունակները և ավելացրու ամսաթվի ֆիլտրեր։ Dashboard-ի համար ավելացրու materialized view կամ scheduled aggregation աղյուսակ, որպեսզի այն կարդա megabyte-ներ, ոչ թե terabyte-ներ։ Ապա սահմանիր maximum bytes billed և custom per-user quota-ներ, որպեսզի որևէ query երբեք նորից անվերահսկելի չդառնա։

Արագ ուղեցույց

Login և project-ի ընտրություն
gcloud auth login && gcloud config set project app-prod
Լոկալ credential-ներ client library-ների համար
gcloud auth application-default login
Deploy source-ից Cloud Run
gcloud run deploy api --source . --region=europe-west1
Traffic-ը վերադարձնել revision-ի
gcloud run services update-traffic api --to-revisions=api-00042-abc=100
Կարդալ Cloud Run-ի log-երը
gcloud run services logs read api --region=europe-west1 --limit=50
Ստեղծել secret
printf 'value' | gcloud secrets create database-url --data-file=-
Լոկալ միանալ Cloud SQL-ին
cloud-sql-proxy app-prod:europe-west1:main-db --port 5432
Գնահատել BigQuery query-ի արժեքը
bq query --use_legacy_sql=false --dry_run 'SELECT col FROM ds.t WHERE dt = "2026-11-01"'
Role տալ project-ի վրա
gcloud projects add-iam-policy-binding app-prod --member=serviceAccount:[email protected] --role=roles/cloudsql.client

Հարցեր և պատասխաններ

Q1Ի՞նչ է Cloud Run-ը, և ե՞րբ կընտրես այն GKE-ի փոխարեն։

Cloud Run-ը serverless պլատֆորմ է container-ների համար։ Նրան տալիս ես image, որը լսում է port-ով, և այն հոգում է HTTPS-ը, autoscaling-ը ըստ միաժամանակյա request-ների, scale-ը մինչև զրո և revision-ների rolling թարմացումը։ Node-եր կամ cluster-ներ կառավարելու կարիք չկա, իսկ request-based billing-ով վճարում ես հիմնականում այն ժամանակ, երբ request-ներ են սպասարկվում։ Ես այն ընտրում եմ stateless API-ների, վեբ հավելվածների, webhook-ների և scheduled job-երի համար։ GKE-ն իմաստ ունի, երբ գործարկում ես շատ service-ներ, որոնց պետք են Kubernetes-ի հնարավորությունները՝ custom networking, sidecar-ներ, service mesh, operator-ներ, stateful set-եր կամ scheduling-ի նուրբ վերահսկողություն։ Շատ թիմեր սկսում են Cloud Run-ից և GKE-ին անցնում միայն այն ժամանակ, երբ իրական սահմանափակման են բախվում։

Q2Ինչպե՞ս է աշխատում authentication-ը Google Cloud-ում աշխատող կոդի համար։

Google-ի client library-ները օգտագործում են Application Default Credentials։ Cloud Run-ում, GKE-ում կամ Compute Engine-ում կոդը metadata server-ից ավտոմատ ստանում է կարճակյաց token-ներ workload-ին կցված service account-ի համար, ուստի key ֆայլ պետք չէ։ Լոկալ միջավայրում developer-ները գործարկում են gcloud auth application-default login՝ սեփական identity-ն օգտագործելու համար։ CI-ում Workload Identity Federation-ը թույլ է տալիս GitHub Actions-ին կամ GitLab-ին իրենց OIDC token-ը փոխանակել Google credential-ների հետ։ Կանոնն այսպիսին է․ կցիր առանձին service account նվազագույն role-երով և երբեք JSON key-եր մի տարածիր։ Key-երը երկարակյաց են, հեշտ արտահոսում են և դժվար է rotate անել։

Q3Ինչպե՞ս Cloud Run-ը անվտանգ կմիացնես Cloud SQL բազային։

Ամենապարզ անվտանգ տարբերակը ներկառուցված Cloud SQL կապն է․ instance-ը ավելացրու --add-cloudsql-instances-ով և միացիր նրա տրամադրած Unix socket-ով, իսկ runtime service account-ը թող ունենա roles/cloudsql.client։ Traffic-ը գաղտնագրված է և IAM-ով authorize արված՝ առանց բազան ինտերնետին բացելու։ Private networking-ի համար instance-ին private IP տուր և Cloud Run-ից օգտագործիր Direct VPC egress։ Բազայի գաղտնաբառը պահիր Secret Manager-ում կամ օգտագործիր IAM database authentication՝ գաղտնաբառերից ընդհանրապես խուսափելու համար։ Նաև սահմանափակիր connection-ները․ մեծ pool-երով շատ Cloud Run instance-ներ կարող են սպառել Postgres-ի connection limit-ը, ուստի pool-երը փոքր պահիր կամ pooler ավելացրու։

Q4Ի՞նչն է որոշում BigQuery-ի արժեքը, և ինչպե՞ս ես այն վերահսկում։

On-demand գնագոյացմամբ վճարում ես ըստ քո query-ների scan արած տվյալների terabyte-ի, գումարած storage-ը։ Քանի որ BigQuery-ն columnar է, ընտրած սյունակներն են որոշում scan արված byte-երը, ուստի SELECT *-ը ամենաթանկ սովորությունն է։ Արժեքը վերահսկիր՝ աղյուսակները partition անելով ըստ ամսաթվի և partition filter պարտադրելով, cluster անելով հաճախ ֆիլտրվող սյունակներով, ընտրելով միայն անհրաժեշտ սյունակները և query-ն գործարկելուց առաջ ստուգելով գնահատված byte-երը։ Սահմանիր maximum bytes billed յուրաքանչյուր query-ի համար և custom quota-ներ ըստ օգտատիրոջ կամ project-ի։ Ծանր, կանխատեսելի օգտագործման դեպքում capacity գնագոյացումը edition-ներով և reserved slot-երով կարող է on-demand-ից էժան լինել։

Q5Client-ը հարցնում է․ Google Cloud-ը VPS-ից էժա՞ն է։

Կախված է traffic-ի ձևից։ Կայուն հավելվածի համար, որը ամբողջ օրը փոքր սերվեր է օգտագործում, VPS-ը սովորաբար ավելի էժան է, և հաշիվը ֆիքսված է։ GCP-ն արժե, երբ managed service-ները իրական ինժեներական ժամանակ կամ ռիսկ են խնայում՝ բազայի ավտոմատ backup-ներ և failover, scaling traffic-ի պիկերի համար, scale մինչև զրո ցածր traffic-ով service-ների համար, IAM և audit log-եր compliance-ի համար։ Փոքր Cloud Run service-ը կարող է գրեթե ոչինչ չարժենալ, բայց managed բազան, load balancer-ը և egress-ը գումարվում են։ Ես երկուսն էլ կգնահատեի pricing calculator-ով՝ իրական traffic-ի թվերով, և հաշվի կառնեի այն աշխատանքի արժեքը, որը VPS-ը թողնում է թիմին։

Սենիոր մակարդակի հարցեր

S1Նախագծիր multi-region կառուցվածք GCP-ում latency-ի նկատմամբ զգայուն API-ի համար։ Որո՞նք են trade-off-ները։

Նույն Cloud Run service-ը deploy արա երկու կամ երեք region-ում և առջևում դիր գլոբալ external Application Load Balancer՝ serverless network endpoint group-երով, որպեսզի օգտատերերը մեկ anycast IP-ով հասնեն ամենամոտ առողջ region-ին։ Stateless compute-ը հեշտ մասն է, տվյալները՝ դժվարը։ Տարբերակներ՝ մեկ primary Cloud SQL cross-region read replica-ներով (պարզ է, գրառումները դեռ գնում են մեկ region, failover-ը նշանակում է replica-ն promote անել), Spanner՝ multi-region strong consistency-ի համար (հիանալի է, բայց թանկ և այլ data model), կամ Firestore multi-region։ Cloud CDN-ով և Memorystore-ով cache-ը յուրաքանչյուր region-ում նվազեցնում է cross-region ընթերցումները։ Trade-off-ը արժեքն ու բարդությունն են՝ ընդդեմ RTO-ի և latency-ի․ շատ արտադրանքների համար բավական է մեկ region, multi-zone HA և երկրորդ region-ում թեստավորված restore պլան։

S2Cloud Run, թե՞ GKE Autopilot 30 microservice-ից բաղկացած պլատֆորմի համար։

Cloud Run-ը յուրաքանչյուր թիմի տալիս է գրեթե zero-ops deploy թիրախ, ըստ service-ի scaling և scale մինչև զրո, և ինտեգրվում է IAM-ի հետ service-to-service auth-ի համար։ Նրա սահմանները երևում են շատ service-ների դեպքում՝ ընդհանուր sidecar-ներ կամ mesh չկան պլատֆորմի առաջարկածից դուրս, networking-ի և scheduling-ի վերահսկողությունը սահմանափակ է, և ըստ service-ի կոնֆիգուրացիան տարածվում է, եթե այն Terraform-ով չկառավարես։ GKE Autopilot-ը տալիս է Kubernetes-ի ամբողջական API-ն՝ Helm, operator-ներ, network policy-ներ, service mesh, stateful workload-ներ և cloud-ների միջև տեղափոխելիություն, որտեղ node-երը կառավարում է Google-ը, իսկ billing-ը ըստ pod request-ների է։ Գինը Kubernetes-ի գիտելիքն է, cluster-ի upgrade-ները և ավելի շատ շարժվող մասեր։ Եթե service-ների մեծ մասը stateless HTTP API-ներ են, և թիմը փոքր է, սովորաբար հաղթում է Cloud Run-ը։ Եթե պետք են պլատֆորմային հնարավորություններ, կամ արդեն այլ տեղ Kubernetes ես գործարկում՝ Autopilot։

S3Ինչպե՞ս GCP organization-ը անվտանգ պահել, երբ այն 3-ից աճում է մինչև 50 ինժեներ։

Մարդկանցից անցիր կառուցվածքի։ Օգտագործիր organization՝ folder-ներով ըստ միջավայրի կամ բիզնես միավորի, և project-ները ստեղծիր Terraform module-ով, որը կիրառում է label-ներ, budget-ներ, logging sink-եր և բազային IAM։ Պարտադրիր organization policy-ներ՝ արգելիր service account key-երը, սահմանափակիր region-ները, պարտադրիր uniform bucket access և անջատիր default network-ի ստեղծումը։ Role-երը տուր Google խմբերին, երբեք՝ անհատներին, և production admin իրավունքների համար օգտագործիր privileged access manager կամ just-in-time elevation։ Audit log-երը կենտրոնացրու կողպված logging project-ում։ CI-ը deploy է անում Workload Identity Federation-ով՝ նեղ deployer account-ներով։ Ավելացրու Security Command Center սխալ կոնֆիգուրացիաները գտնելու համար և VPC Service Controls զգայուն տվյալների շուրջ։ Ամեն եռամսյակ IAM Recommender-ով վերանայիր չօգտագործված թույլտվությունները։ Նպատակն այն է, որ անվտանգ ճանապարհը միաժամանակ լինի default ճանապարհը։

Բառարան

Project
Google Cloud-ում ռեսուրսների, billing-ի և IAM-ի հիմնական միավորը․ նման է AWS account-ին։
Service account
Identity ծրագրի, այլ ոչ թե մարդու համար, որը կցվում է workload-ին, որպեսզի այն կարողանա Google API-ներ կանչել։
Workload Identity Federation
Թույլ է տալիս արտաքին համակարգերին, օրինակ GitHub Actions-ին, իրենց token-ները փոխանակել կարճակյաց Google credential-ների հետ՝ առանց key ֆայլերի։
Cloud Run revision
Service-ի image-ի և կարգավորումների immutable snapshot․ traffic-ը կարելի է բաժանել կամ տեղափոխել revision-ների միջև։
Artifact Registry
Google-ի registry-ն container image-ների և լեզվային package-ների համար, որը փոխարինել է դադարեցված Container Registry-ին։
Autopilot
GKE ռեժիմ, որտեղ node-երը կառավարում է Google-ը, իսկ դու վճարում ես քո pod-երի պահանջած CPU-ի և հիշողության համար։
Slot
BigQuery-ի compute capacity-ի միավոր․ reserved slot-երը կանխատեսելի գին են տալիս՝ scan արված byte-ի համար վճարելու փոխարեն։
Application Default Credentials
Որոնման հերթականությունը, որով Google-ի client library-ները ավտոմատ գտնում են credential-ները յուրաքանչյուր միջավայրում։

Պրոդուկտի գաղափար ունե՞ք։Եկեք ստեղծենք այն։

Պատմեք ձեր գաղափարի, պրոդուկտի կամ թիմի մասին։ Սովորաբար պատասխանում եմ մեկ աշխատանքային օրվա ընթացքում։