{"id":30965,"date":"2026-10-16T22:09:58","date_gmt":"2026-10-16T22:09:58","guid":{"rendered":"https:\/\/umang.pk\/2026\/10\/16\/%d8%af%d8%b1%d8%ae%d9%88%d8%a7%d8%b3%d8%aa%d9%88%da%ba-%da%a9%d9%88-aws-%d8%b3%db%92-gke-%d9%85%db%8c%da%ba-%da%a9%db%8c%d8%b3%db%92-%d9%85%d9%86%d8%aa%d9%82%d9%84-%da%a9%db%8c%d8%a7-%d8%ac%d8%a7\/"},"modified":"2026-10-16T22:10:00","modified_gmt":"2026-10-16T22:10:00","slug":"%d8%af%d8%b1%d8%ae%d9%88%d8%a7%d8%b3%d8%aa%d9%88%da%ba-%da%a9%d9%88-aws-%d8%b3%db%92-gke-%d9%85%db%8c%da%ba-%da%a9%db%8c%d8%b3%db%92-%d9%85%d9%86%d8%aa%d9%82%d9%84-%da%a9%db%8c%d8%a7-%d8%ac%d8%a7","status":"publish","type":"post","link":"https:\/\/umang.pk\/ur\/2026\/10\/16\/%d8%af%d8%b1%d8%ae%d9%88%d8%a7%d8%b3%d8%aa%d9%88%da%ba-%da%a9%d9%88-aws-%d8%b3%db%92-gke-%d9%85%db%8c%da%ba-%da%a9%db%8c%d8%b3%db%92-%d9%85%d9%86%d8%aa%d9%82%d9%84-%da%a9%db%8c%d8%a7-%d8%ac%d8%a7\/","title":{"rendered":"\u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0648\u06ba \u06a9\u0648 AWS \u0633\u06d2 GKE \u0645\u06cc\u06ba \u06a9\u06cc\u0633\u06d2 \u0645\u0646\u062a\u0642\u0644 \u06a9\u06cc\u0627 \u062c\u0627\u0626\u06d2\u06d4 [Full Book]"},"content":{"rendered":"\n<div id=\"\">\n<p>\u06cc\u06c1 \u06af\u0627\u0626\u06cc\u0688\u0688 \u0644\u06cc\u0628 \u0622\u067e \u06a9\u0648 React UI \u0627\u0648\u0631 Express API \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u0627\u06cc\u06a9 \u0686\u06be\u0648\u0679\u06cc \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u06a9\u06cc \u0627\u06cc\u067e \u06a9\u0648 \u0645\u0646\u062a\u0642\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0644\u06d2 \u062c\u0627\u062a\u06cc \u06c1\u06d2 \u062c\u0648 \u0627\u06cc\u06a9 \u0648\u0627\u062d\u062f AWS EC2 \u0645\u062b\u0627\u0644 \u067e\u0631 \u0686\u0644\u062a\u06cc \u06c1\u06d2 \u062c\u0628\u06a9\u06c1 PostgreSQL AWS \u067e\u0631 \u0631\u06c1\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u067e\u0646\u06d2 UI \u0627\u0648\u0631 API \u06a9\u0648 Google Kubernetes Engine \u0645\u06cc\u06ba \u0645\u0646\u062a\u0642\u0644 \u06a9\u0631 \u06a9\u06d2 \u0627\u0646 \u0639\u0648\u0627\u0645\u06cc URLs \u06a9\u0648 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u06cc\u06d2 \u0628\u063a\u06cc\u0631 \u062c\u0646\u06c1\u06cc\u06ba \u0622\u067e \u06a9\u06d2 \u06af\u0627\u06c1\u06a9 \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631 \u0631\u06c1\u06d2 \u06c1\u06cc\u06ba\u060c \u0622\u067e \u0622\u06c1\u0633\u062a\u06c1 \u0622\u06c1\u0633\u062a\u06c1 \u0679\u0631\u06cc\u0641\u06a9 \u06a9\u0648 AWS \u0633\u06d2 GKE \u0645\u06cc\u06ba \u0645\u0646\u062a\u0642\u0644 \u06a9\u0631 \u062f\u06cc\u06ba \u06af\u06d2\u060c \u0627\u06cc\u06a9 \u0648\u0642\u062a \u0645\u06cc\u06ba \u0686\u0646\u062f \u0641\u06cc\u0635\u062f\u06d4<\/p>\n<p>\u0622\u062e\u0631 \u0645\u06cc\u06ba\u060c \u0622\u067e \u0627\u06cc\u067e \u06a9\u0648 \u0645\u0642\u0627\u0645\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0686\u0644\u0627\u0626\u06cc\u06ba \u06af\u06d2\u060c AWS \u06a9\u0648 \u06af\u06be\u0645\u0627\u0626\u06cc\u06ba \u06af\u06d2\u060c \u0622\u0679\u06be Terraform \u0645\u0631\u0627\u062d\u0644 \u0645\u06cc\u06ba GKE \u0628\u0646\u0627\u0626\u06cc\u06ba \u06af\u06d2\u060c \u0646\u0626\u06d2 \u0645\u0627\u062d\u0648\u0644 \u06a9\u06cc \u062c\u0627\u0646\u0686 \u06a9\u0631\u06cc\u06ba \u06af\u06d2\u060c \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u0679\u0631\u06cc\u0641\u06a9 \u06a9\u0648 GKE \u0645\u06cc\u06ba \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u06cc\u06ba \u06af\u06d2\u060c \u06a9\u0679 \u0627\u0648\u0648\u0631 \u06a9\u0648 \u0645\u06a9\u0645\u0644 \u06a9\u0631\u06cc\u06ba \u06af\u06d2\u060c \u0627\u0648\u0631 \u06c1\u0631 \u0648\u06c1 \u0686\u06cc\u0632 \u06c1\u0679\u0627 \u062f\u06cc\u06ba \u06af\u06d2 \u062c\u0633 \u06a9\u06cc \u0622\u067e \u06a9\u0648 \u0645\u0632\u06cc\u062f \u0636\u0631\u0648\u0631\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4<\/p>\n<p>\u0646\u06cc\u0686\u06d2 \u062f\u06cc \u06af\u0626\u06cc \u062a\u0635\u0648\u06cc\u0631 \u0645\u0627\u0626\u06cc\u06af\u0631\u06cc\u0634\u0646 \u06a9\u06d2 \u062f\u0631\u0645\u06cc\u0627\u0646 \u06a9\u0648 \u062f\u06a9\u06be\u0627\u062a\u06cc \u06c1\u06d2\u060c \u062f\u0648\u0646\u0648\u06ba \u0628\u0627\u062f\u0644\u0648\u06ba \u06a9\u06d2 \u0633\u0627\u062a\u06be\u060c \u0635\u0627\u0631\u0641 \u0627\u0628 \u0628\u06be\u06cc \u0627\u06cc\u06a9 URL \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631 \u0631\u06c1\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 AWS \u0645\u06cc\u06ba \u0628\u0627\u0642\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u062a\u06cc\u0646 \u0627\u0636\u0627\u0641\u06cc \u0646\u0638\u0627\u0645 \u0627\u0633 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u06d2 \u0631\u0627\u0633\u062a\u06d2 \u06a9\u06d2 \u0627\u0631\u062f \u06af\u0631\u062f \u06a9\u0627\u0645 \u0627\u0646\u062c\u0627\u0645 \u062f\u06cc\u062a\u06d2 \u06c1\u06cc\u06ba:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/10\/1792188588_286_\u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0648\u06ba-\u06a9\u0648-AWS-\u0633\u06d2-GKE-\u0645\u06cc\u06ba-\u06a9\u06cc\u0633\u06d2-\u0645\u0646\u062a\u0642\u0644-\u06a9\u06cc\u0627-\u062c\u0627\u0626\u06d2\u06d4.png\" alt=\"\u062a\u0635\u0648\u06cc\u0631 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u0627 \u0631\u0627\u0633\u062a\u06c1 \u062f\u06a9\u06be\u0627 \u0631\u06c1\u06cc \u06c1\u06d2\u06d4\" style=\"display: block;\" width=\"600\" height=\"400\" loading=\"lazy\" title=\"\"><\/p>\n<h2 id=\"heading-table-of-contents\">\u0627\u0646\u0688\u06cc\u06a9\u0633<\/h2>\n<h2 id=\"heading-before-you-start\">\u0627\u0633 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u06a9\u06c1 \u0622\u067e \u0634\u0631\u0648\u0639 \u06a9\u0631\u06cc\u06ba\u06d4<\/h2>\n<h3 id=\"heading-what-you-need-installed\">\u0622\u067e \u06a9\u0648 \u062c\u0633 \u0686\u06cc\u0632 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2 \u0627\u0646\u0633\u0679\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/h3>\n<p>\u0627\u0633 \u0628\u0627\u0628 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0636\u0631\u0648\u0631\u062a \u06a9\u06d2 \u0645\u0637\u0627\u0628\u0642 \u06c1\u0631 \u0679\u0648\u0644 \u0627\u0646\u0633\u0679\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 \u0622\u067e \u06a9\u0648 \u0627\u067e\u0646\u06d2 \u067e\u06c1\u0644\u06d2 \u062f\u0646 \u06c1\u0631 \u0686\u06cc\u0632 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4<\/p>\n<table>\n<thead>\n<tr>\n<th>\u0635\u0641\u062d\u06c1<\/th>\n<th>\u0633\u0627\u0645\u0627\u0646<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>1<\/td>\n<td>\u0688\u0648\u06a9\u0631 \u0688\u06cc\u0633\u06a9 \u0679\u0627\u067e (\u06cc\u0627 \u0644\u06cc\u0646\u06a9\u0633 \u067e\u0631 \u06a9\u0645\u067e\u0648\u0632 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u0688\u0648\u06a9\u0631 \u0627\u0646\u062c\u0646)\u060c \u06af\u0679\u060c \u0627\u0648\u0631 <code>python3<\/code><\/td>\n<\/tr>\n<tr>\n<td>4<\/td>\n<td>AWS \u0627\u06a9\u0627\u0624\u0646\u0679\u060c AWS CLI (\u0686\u0644\u0627\u0626\u06cc\u06ba\u06d4 <code>aws configure<\/code> \u0627\u06cc\u06a9 \u0628\u0627\u0631)\u060c Terraform 1.5 \u06cc\u0627 \u0627\u0633 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1\u060c <code>rsync<\/code>\u0627\u0648\u0631 SSH \u06a9\u0644\u06cc\u062f<\/td>\n<\/tr>\n<tr>\n<td>6<\/td>\n<td>\u0622\u067e \u06a9\u06d2 \u0644\u06cc\u067e \u0679\u0627\u067e \u067e\u0631 Node.js 20 \u06cc\u0627 \u0627\u0633 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u0627\u0646\u0633\u0679\u0627\u0644 \u06c1\u0648\u0646\u0627 \u0636\u0631\u0648\u0631\u06cc \u06c1\u06d2\u06d4 \u062a\u0635\u062f\u06cc\u0642\u06cc \u0627\u0633\u06a9\u0631\u067e\u0679 \u062f\u0631\u062c \u0630\u06cc\u0644 \u06c1\u06d2: <code>scripts\/<\/code> \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba <code>node<\/code> JSON \u067e\u0691\u06be\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2<\/td>\n<\/tr>\n<tr>\n<td>10<\/td>\n<td>\u0628\u0644\u0646\u06af \u06a9\u06d2 \u0633\u0627\u062a\u06be GCP \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679\u0633 \u0641\u0639\u0627\u0644 \u06c1\u06cc\u06ba\u06d4 <code>gcloud<\/code> CLI \u0627\u0648\u0631 <code>kubectl<\/code><\/td>\n<\/tr>\n<tr>\n<td>14<\/td>\n<td>\u0622\u067e \u06a9\u0627 GitHub \u0627\u06a9\u0627\u0624\u0646\u0679 \u0627\u0648\u0631 GitHub \u067e\u0631 \u0627\u0633 \u0630\u062e\u06cc\u0631\u06c1 \u06a9\u06cc \u0622\u067e \u06a9\u06cc \u0627\u067e\u0646\u06cc \u06a9\u0627\u067e\u06cc\u06d4<\/td>\n<\/tr>\n<tr>\n<td>19<\/td>\n<td><code>kustomize<\/code> (\u0627\u0633 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0627\u0646\u0633\u0679\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 <code>brew install kustomize<\/code> \u0645\u06cc\u06a9 \u067e\u0631\u060c kubectl.docs.kubernetes.io \u062f\u06cc\u06a9\u06be\u06cc\u06ba\u06d4<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u0648\u0646\u0688\u0648\u0632 \u067e\u0631\u060c \u0627\u0633 \u06a9\u062a\u0627\u0628 \u0645\u06cc\u06ba \u062a\u0645\u0627\u0645 \u06a9\u0645\u0627\u0646\u0688\u0632 \u06a9\u06d2 \u0644\u06cc\u06d2 Git Bash \u06cc\u0627 WSL \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 \u06a9\u0645\u0627\u0646\u0688 \u0628\u0627\u0634 \u0634\u06cc\u0644 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0644\u06a9\u06be\u06d2 \u06af\u0626\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<h3 id=\"heading-skills-you-need\">\u0645\u06c1\u0627\u0631\u062a \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2<\/h3>\n<p>\u06a9\u0633\u06cc \u0633\u0627\u0628\u0642\u06c1 \u200b\u200bKubernetes\u060c Terraform\u060c GCP\u060c \u06cc\u0627 \u0644\u0648\u0688 \u0628\u06cc\u0644\u0646\u0633 \u06a9\u06d2 \u062a\u062c\u0631\u0628\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u0688\u0648\u0645\u06cc\u0646 \u0646\u06c1 \u062e\u0631\u06cc\u062f\u06cc\u06ba\u06d4 AWS \u0645\u06cc\u06ba\u060c \u06a9\u06be\u0648\u0644\u06cc\u06ba: <code>https:\/\/<\/code> \u0644\u0686\u06a9\u062f\u0627\u0631 IPs \u0628\u06be\u06cc \u0634\u0627\u0645\u0644 \u06a9\u06cc\u06d2 \u06af\u0626\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0628\u0631\u0627\u0624\u0632\u0631 \u062e\u0648\u062f \u062f\u0633\u062a\u062e\u0637 \u0634\u062f\u06c1 \u0633\u0631\u0679\u06cc\u0641\u06a9\u06cc\u0679\u0633 \u06a9\u06d2 \u0628\u0627\u0631\u06d2 \u0645\u06cc\u06ba \u062e\u0628\u0631\u062f\u0627\u0631 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0627\u0633 \u067e\u0631 \u06a9\u0644\u06a9 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u0622\u067e \u06a9\u0648 \u0648\u06c1\u06cc \u06a9\u0644\u06cc\u0626\u0631 \u067e\u06d2 \u0644\u0627\u06af \u0627\u0646 \u0645\u0644\u06d2 \u06af\u0627 \u062c\u0648 \u0622\u067e \u06a9\u06d2 \u0644\u06cc\u067e \u0679\u0627\u067e \u067e\u0631 \u06c1\u06d2\u06d4 GCP \u0627\u06cc\u06a9 \u06a9\u0627 \u0627\u0636\u0627\u0641\u06c1 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 <code>\/etc\/hosts<\/code> \u062a\u0648 \u0644\u0627\u0626\u0646 <code>https:\/\/api.clearpay.test<\/code> \u062c\u0628 \u062a\u06a9 \u0622\u067e Cloud DNS \u0633\u06cc\u0679 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u06d2\u060c \u06cc\u06c1 \u0622\u067e \u06a9\u06d2 \u0644\u0648\u0688 \u0628\u06cc\u0644\u0646\u0633\u0631 \u06a9\u06cc \u0637\u0631\u0641 \u0627\u0634\u0627\u0631\u06c1 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-what-this-costs\">\u0627\u0633 \u06a9\u06cc \u0642\u06cc\u0645\u062a \u06a9\u062a\u0646\u06cc \u06c1\u06d2\u061f<\/h3>\n<p>AWS \u06a9\u06cc \u0644\u0627\u06af\u062a \u062a\u0642\u0631\u06cc\u0628\u0627\u064b $1.25 \u0641\u06cc \u062f\u0646 \u06c1\u06d2\u06d4 \u0627\u06cc\u06a9 \u0628\u0627\u0631 \u0622\u067e\u0631\u06cc\u0634\u0646\u0644 \u06c1\u0648\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f GCP \u06a9\u06cc \u0644\u0627\u06af\u062a \u062a\u0642\u0631\u06cc\u0628\u0627\u064b $1.60 \u0633\u06d2 $3 \u0641\u06cc \u062f\u0646 \u06c1\u06d2\u06d4 \u06c1\u0641\u062a\u06d2 \u06a9\u06d2 \u0622\u062e\u0631 \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u067e\u0648\u0631\u06cc \u06a9\u062a\u0627\u0628 \u067e\u0691\u06be\u0646\u06d2 \u0645\u06cc\u06ba \u0686\u0646\u062f \u0688\u0627\u0644\u0631 \u062e\u0631\u0686 \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u0646\u06c1 \u06c1\u06cc \u0645\u0627\u062d\u0648\u0644 \u0627\u06cc\u06a9 \u0645\u0627\u06c1 \u062a\u06a9 \u0686\u0644\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u06d4 \u0627\u06af\u0631 \u0686\u0646\u062f \u062f\u0646\u0648\u06ba \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u0631\u06a9\u06d2 \u062a\u0648 \u062f\u0648\u0646\u0648\u06ba \u06a9\u0648 \u0627\u0644\u06af \u06a9\u0631 \u062f\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">.\/scripts\/teardown-gcp.sh\ncd infra\/aws\/terraform && terraform destroy\n<\/code><\/pre>\n<p>\u062a\u0641\u0635\u06cc\u0644\u0627\u062a \u06a9\u06d2 \u0646\u0645\u0628\u0631 \u062f\u0648 \u0641\u0627\u0626\u0644\u0648\u06ba \u0645\u06cc\u06ba \u0645\u062d\u0641\u0648\u0638 \u06c1\u06cc\u06ba: infra\/aws\/COST.md \u0627\u0648\u0631 infra\/gcp\/COST.md\u06d4 \u06a9\u062a\u0627\u0628 \u0635\u0631\u0641 \u0648\u06c1 \u062f\u0648 \u0641\u0627\u0626\u0644\u06cc\u06ba \u0628\u06be\u06cc\u062c\u062a\u06cc \u06c1\u06d2\u060c \u06a9\u0648\u0626\u06cc \u0627\u0648\u0631 \u062f\u0633\u062a\u0627\u0648\u06cc\u0632\u0627\u062a \u0646\u06c1\u06cc\u06ba\u06d4<\/p>\n<h3 id=\"heading-how-this-book-works\">\u06cc\u06c1 \u06a9\u062a\u0627\u0628 \u06a9\u06cc\u0633\u06d2 \u06a9\u0627\u0645 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4<\/h3>\n<p>\u062c\u0628 \u062a\u06a9 \u06a9\u06c1 \u0645\u0631\u0627\u062d\u0644 \u0645\u06cc\u06ba \u0648\u0636\u0627\u062d\u062a \u0646\u06c1 \u06a9\u06cc \u06af\u0626\u06cc \u06c1\u0648\u060c \u0630\u062e\u06cc\u0631\u06c1 \u06a9\u0648 \u06a9\u0644\u0648\u0646 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u062a\u0645\u0627\u0645 \u06a9\u0645\u0627\u0646\u0688\u0632 \u06a9\u0648 \u0631\u0648\u0679 \u0641\u0648\u0644\u0688\u0631 \u0633\u06d2 \u0686\u0644\u0627\u0626\u06cc\u06ba\u06d4 <code>cd<\/code> \u062f\u0648\u0633\u0631\u06cc \u062c\u06af\u06c1:<\/p>\n<pre><code class=\"language-bash\">git clone https:\/\/github.com\/Osomudeya\/migrate-api-aws-gke-devops.git\n\ncd migrate-api-aws-gke-devops\n<\/code><\/pre>\n<p>\u0631\u06cc\u067e\u0648\u0632\u0679\u0631\u06cc \u0645\u06cc\u06ba \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u06c1\u06cc \u0622\u067e \u06a9\u06cc \u0627\u06cc\u067e\u0633\u060c Terraform\u060c Kubernetes \u0641\u0627\u0626\u0644\u06cc\u06ba\u060c \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646\u0632 \u0627\u0648\u0631 \u0627\u0633\u06a9\u0631\u067e\u0679\u0633 \u0645\u0648\u062c\u0648\u062f \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u0622\u067e \u06a9\u0648\u0626\u06cc \u0646\u06cc\u0627 \u06a9\u0648\u0688 \u0646\u06c1\u06cc\u06ba \u0644\u06a9\u06be\u06cc\u06ba \u06af\u06d2\u06d4 \u0622\u067e \u06a9\u0627 \u06a9\u0627\u0645 \u06c1\u0631 \u0642\u062f\u0645 \u067e\u0631 \u0639\u0645\u0644 \u06a9\u0631\u0646\u0627 \u06c1\u06d2\u060c \u067e\u0691\u06be\u0646\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0633\u0633\u0679\u0645 \u06a9\u06cc\u0627 \u067e\u0631\u0646\u0679 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u0641\u06cc\u0635\u0644\u06c1 \u06a9\u0631\u0646\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0622\u06cc\u0627 \u062c\u0627\u0631\u06cc \u0631\u06a9\u06be\u0646\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u06a9\u062a\u0627\u0628 \u0622\u067e \u06a9\u06d2 \u067e\u06c1\u0644\u06d2 \u06c1\u0641\u062a\u06d2 \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u0686\u06be\u0648\u0679\u06cc \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u06a9\u0645\u067e\u0646\u06cc \u0645\u06cc\u06ba \u0634\u0645\u0648\u0644\u06cc\u062a \u06a9\u06cc \u06a9\u06c1\u0627\u0646\u06cc \u06a9\u06cc \u0637\u0631\u062d \u067e\u0691\u06be\u062a\u06cc \u06c1\u06d2\u060c \u0627\u0648\u0631 \u06c1\u0631 \u0628\u0627\u0628 \u0679\u06cc\u0645 \u0645\u06cc\u06ba \u06a9\u0633\u06cc \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06c1 \u0622\u067e \u06a9\u0648 \u062a\u0641\u0648\u06cc\u0636 \u06a9\u0631\u062f\u06c1 \u06a9\u0627\u0645 \u06c1\u06d2\u06d4<\/p>\n<p>\u06c1\u0631 \u0628\u0627\u0628 \u0679\u0627\u0626\u0645 \u0627\u0633\u0679\u06cc\u0645\u067e \u0627\u0648\u0631 \u0627\u06cc\u06a9 \u0645\u0646\u0638\u0631 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u06a9\u06be\u0644\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u0633\u06cc \u0644\u0648\u067e \u06a9\u06cc \u067e\u06cc\u0631\u0648\u06cc \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/10\/1792188588_321_\u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0648\u06ba-\u06a9\u0648-AWS-\u0633\u06d2-GKE-\u0645\u06cc\u06ba-\u06a9\u06cc\u0633\u06d2-\u0645\u0646\u062a\u0642\u0644-\u06a9\u06cc\u0627-\u062c\u0627\u0626\u06d2\u06d4.png\" alt=\"\u06a9\u062a\u0627\u0628 \u062c\u0633 \u0644\u0648\u067e \u06a9\u06cc \u067e\u06cc\u0631\u0648\u06cc \u06a9\u0631\u062a\u06cc \u06c1\u06d2 \u0627\u0633 \u06a9\u0627 \u0641\u0644\u0648 \u0686\u0627\u0631\u0679\u06d4\" style=\"display: block;\" width=\"600\" height=\"400\" loading=\"lazy\" title=\"\"><\/p>\n<h4 id=\"heading-most-important-rule\">\u0633\u0628 \u0633\u06d2 \u0627\u06c1\u0645 \u0627\u0635\u0648\u0644<\/h4>\n<p>\u0648\u06c1 \u06a9\u0645\u0627\u0646\u0688 \u0646\u06c1 \u0686\u0644\u0627\u0626\u06cc\u06ba \u062c\u0648 \u0622\u067e \u0646\u06c1\u06cc\u06ba \u0633\u0645\u062c\u06be\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0627\u06af\u0631 \u06a9\u062a\u0627\u0628 \u0646\u06d2 \u0622\u067e \u06a9\u0648 \u067e\u06c1\u0644\u06d2 \u06c1\u06cc \u0646\u06c1\u06cc\u06ba \u0628\u062a\u0627\u06cc\u0627 \u06c1\u06d2 \u06a9\u06c1 \u06a9\u06cc\u0648\u06ba\u060c \u067e\u0691\u06be\u0646\u0627 \u062c\u0627\u0631\u06cc \u0631\u06a9\u06be\u06cc\u06ba\u06d4 \u06a9\u06cc\u0648\u0646\u06a9\u06c1 &quot;\u06a9\u06cc\u0648\u06ba&#8221; \u06a9\u0644\u06cc\u062f \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u0633 \u06a9\u062a\u0627\u0628 \u0645\u06cc\u06ba \u062f\u0648 \u0645\u0631\u0627\u062d\u0644 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u067e\u06c1\u0644\u0627 \u0635\u0631\u0641 \u06cc\u06c1 \u067e\u0648\u0686\u06be\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0622\u06cc\u0627 \u0627\u0633 \u0642\u062f\u0645 \u0646\u06d2 \u06a9\u0627\u0645 \u06a9\u06cc\u0627\u060c \u062c\u06cc\u0633\u06d2 \u06a9\u06c1 \u0641\u0627\u0626\u0644 \u06a9\u0627\u067e\u06cc \u06a9\u06cc \u06af\u0626\u06cc \u062a\u06be\u06cc \u06cc\u0627 \u06a9\u0646\u0679\u06cc\u0646\u0631 \u0634\u0631\u0648\u0639 \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u062a\u06be\u0627\u06d4 \u0627\u06af\u0631 \u0627\u06cc\u0633\u0627 \u06c1\u06d2 \u062a\u0648\u060c \u0628\u0631\u0627\u06c1 \u06a9\u0631\u0645 \u062c\u0627\u0631\u06cc \u0631\u06a9\u06be\u06cc\u06ba\u06d4<\/p>\n<p>\u062f\u0648\u0633\u0631\u0627 \u0622\u067e \u0633\u06d2 \u06a9\u06c1\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u06a9\u06cc\u0627 \u06c1\u0648\u0627 \u0627\u0633 \u06a9\u06d2 \u0628\u0627\u0631\u06d2 \u0645\u06cc\u06ba \u0633\u0648\u0686\u06cc\u06ba\u06d4 \u062c\u0628 \u06a9\u0645\u0627\u0646\u0688 \u0645\u06a9\u0645\u0644 \u06c1\u0648 \u062c\u0627\u0626\u06d2\u060c \u0627\u06af\u0644\u06d2 \u0628\u0627\u0628 \u067e\u0631 \u062c\u0627\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0622\u0624\u0679 \u067e\u0679 \u06a9\u0648 \u067e\u0691\u06be\u06cc\u06ba \u0627\u0648\u0631 \u0627\u0633 \u06a9\u06d2 \u0645\u0639\u0646\u06cc \u06a9\u0648 \u0633\u0645\u062c\u06be\u06cc\u06ba\u06d4<\/p>\n<h4 id=\"heading-the-chapters\">\u0628\u0627\u0628<\/h4>\n<p>\u0627\u0628\u0648\u0627\u0628 \u06a9\u0648 \u062a\u0631\u062a\u06cc\u0628 \u0633\u06d2 \u067e\u0691\u06be\u06cc\u06ba \u0627\u0648\u0631 \u0622\u06af\u06d2 \u0628\u0691\u06be\u06cc\u06ba\u06d4 \u0628\u0627\u0628 1 \u0622\u067e \u0633\u06d2 Kubernetes \u0627\u0646\u0633\u0679\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u06cc\u0627 GCP \u06a9\u06be\u0648\u0644\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u0648\u06c1 \u0628\u0639\u062f \u0645\u06cc\u06ba \u0622\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<table>\n<thead>\n<tr>\n<th>\u067e\u0627\u0631\u0679 \u0679\u0627\u0626\u0645 \u0646\u0648\u06a9\u0631\u06cc<\/th>\n<th>\u0635\u0641\u062d\u06c1<\/th>\n<th>\u06a9\u06cc\u0627 \u06c1\u0648\u062a\u0627 \u06c1\u06d2<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>1. ClearPay \u0634\u0631\u0648\u0639 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 AWS \u067e\u0631 \u062a\u0639\u06cc\u0646\u0627\u062a \u06a9\u0631\u06cc\u06ba\u06d4<\/td>\n<td>1~6<\/td>\n<td>\u0627\u067e\u0646\u06d2 \u0644\u06cc\u067e \u0679\u0627\u067e \u067e\u0631 \u0627\u06cc\u067e \u0686\u0644\u0627\u0626\u06cc\u06ba\u060c \u0627\u0633\u06d2 \u0627\u06cc\u06a9 AWS \u0633\u0631\u0648\u0631 \u067e\u0631 \u062a\u0639\u06cc\u0646\u0627\u062a \u06a9\u0631\u06cc\u06ba\u060c \u0627\u0648\u0631 \u0631\u0641\u062a\u0627\u0631 \u0631\u06cc\u06a9\u0627\u0631\u0688 \u06a9\u0631\u06cc\u06ba\u06d4<\/td>\n<\/tr>\n<tr>\n<td>2. \u0627\u067e\u0646\u06d2 \u0627\u0642\u062f\u0627\u0645 \u06a9\u06cc \u0645\u0646\u0635\u0648\u0628\u06c1 \u0628\u0646\u062f\u06cc \u06a9\u0631\u06cc\u06ba\u06d4<\/td>\n<td>7~9<\/td>\n<td>\u0627\u0633\u0627\u0626\u0646\u0645\u0646\u0679 \u067e\u0691\u06be\u06cc\u06ba\u060c \u0646\u0642\u0634\u06c1 \u0628\u0646\u0627\u0626\u06cc\u06ba \u06a9\u06c1 \u0622\u067e \u06a9\u06cc \u0627\u06cc\u067e \u06a9\u0633 \u0686\u06cc\u0632 \u067e\u0631 \u0645\u0646\u062d\u0635\u0631 \u06c1\u06d2\u060c \u0627\u0648\u0631 GCP \u0688\u06cc\u0632\u0627\u0626\u0646 \u067e\u0691\u06be\u06cc\u06ba\u06d4<\/td>\n<\/tr>\n<tr>\n<td>3. \u0679\u06cc\u0631\u0627\u0641\u0627\u0631\u0645 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u06af\u0648\u06af\u0644 \u06a9\u0644\u0627\u0624\u0688 \u0628\u0646\u0627\u0646\u0627<\/td>\n<td>10~11<\/td>\n<td>\u0622\u067e GCP \u06a9\u0648 \u0622\u0679\u06be Terraform \u0645\u0631\u0627\u062d\u0644 \u0645\u06cc\u06ba \u0628\u0646\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0627\u06cc\u06a9 \u0648\u0642\u062a \u0645\u06cc\u06ba \u0627\u06cc\u06a9\u06d4<\/td>\n<\/tr>\n<tr>\n<td>4. ClearPay \u06a9\u0648 GKE \u0633\u0679\u06cc\u062c\u0646\u06af \u0645\u06cc\u06ba \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/td>\n<td>12~15<\/td>\n<td>\u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 ClearPay \u06a9\u0648 GKE \u0633\u0679\u06cc\u062c\u0646\u06af \u0645\u06cc\u06ba \u0631\u06a9\u06be\u062a\u06cc \u06c1\u06d2 \u0627\u0648\u0631 \u067e\u0631\u0648\u0645\u0648\u0634\u0646 \u06af\u06cc\u0679 \u0627\u0633 \u06a9\u06cc \u062a\u0635\u062f\u06cc\u0642 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/td>\n<\/tr>\n<tr>\n<td>5. GKE \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062a\u06cc\u0627\u0631 \u06a9\u0631\u06cc\u06ba\u06d4<\/td>\n<td>16~18<\/td>\n<td>\u0633\u06cc\u06a9\u06cc\u0648\u0631\u0679\u06cc \u06a9\u0627 \u062c\u0627\u0626\u0632\u06c1 \u0644\u06cc\u06ba\u060c \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 \u0633\u06cc\u0679 \u06a9\u0631\u06cc\u06ba\u060c \u0627\u0648\u0631 \u062c\u0627\u0646 \u0628\u0648\u062c\u06be \u06a9\u0631 \u0633\u0679\u06cc\u062c\u0646\u06af \u06a9\u0648 \u062a\u0648\u0691 \u062f\u06cc\u06ba\u06d4<\/td>\n<\/tr>\n<tr>\n<td>6. \u0635\u0627\u0631\u0641\u06cc\u0646 \u06a9\u0648 GKE \u0645\u06cc\u06ba \u0645\u0646\u062a\u0642\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/td>\n<td>19~23<\/td>\n<td>\u067e\u06cc\u062f\u0627\u0648\u0627\u0631 \u06a9\u0648 \u062a\u0639\u06cc\u0646\u0627\u062a \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u0679\u0631\u06cc\u0641\u06a9 \u06a9\u0648 1% \u0633\u06d2 100% \u062a\u06a9 \u0644\u06d2 \u062c\u0627\u0626\u06cc\u06ba\u06d4<\/td>\n<\/tr>\n<tr>\n<td>7. \u06c1\u062c\u0631\u062a \u0645\u06a9\u0645\u0644<\/td>\n<td>24~28<\/td>\n<td>\u06a9\u0679 \u0627\u0648\u0648\u0631\u060c \u0688\u06cc\u06a9\u0645\u06cc\u0634\u0646 AWS\u060c \u0688\u06cc \u06a9\u0646\u0633\u0679\u0631\u06cc\u06a9\u0679 \u0627\u0648\u0631 \u0644\u0627\u06af \u06c1\u0631 \u0686\u06cc\u0632 \u06a9\u0648 \u062b\u0627\u0628\u062a \u06a9\u0631\u06cc\u06ba\u06d4<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h4 id=\"heading-if-something-doesnt-work\">\u0627\u06af\u0631 \u06a9\u0686\u06be \u06a9\u0627\u0645 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/h4>\n<p>\u0627\u0633 \u0628\u0627\u0628 \u0645\u06cc\u06ba \u0631\u06c1\u06cc\u06ba\u06d4 \u0627\u0633\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba <em>&quot;\u0627\u06af\u0631 \u0645\u06cc\u06ba \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648 \u062c\u0627\u0624\u06ba&#8221;<\/em> \u0642\u062f\u0645 \u0622\u06af\u06d2 \u0646\u06c1 \u0628\u0691\u06be\u06cc\u06ba\u06d4 \u0622\u06af\u06d2 \u0628\u0691\u06be\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u0645\u0633\u0627\u0626\u0644 \u06a9\u0648 \u062a\u0644\u0627\u0634 \u06a9\u0631\u0646\u0627 \u0645\u0634\u06a9\u0644 \u06c1\u0648 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u0627\u06af\u0644\u0627 \u0628\u0627\u0628 \u0645\u0633\u0626\u0644\u06c1 \u067e\u0631 \u0627\u06cc\u06a9 \u0627\u0648\u0631 \u0628\u0627\u062f\u0644 \u0688\u0627\u0644 \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u06a9\u0627\u0645 Kubernetes \u06cc\u0627 Terraform \u06a9\u0648 \u062d\u0641\u0638 \u06a9\u0631\u0646\u0627 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0627\u06cc\u06a9 \u062d\u0642\u06cc\u0642\u06cc \u0646\u0642\u0644 \u0645\u06a9\u0627\u0646\u06cc \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u06a9\u0627\u0645 \u06a9\u0631\u0646\u06d2 \u06a9\u0627 \u0637\u0631\u06cc\u0642\u06c1 \u0633\u06cc\u06a9\u06be\u0646\u06d2 \u06a9\u06d2 \u0628\u0627\u0631\u06d2 \u0645\u06cc\u06ba \u06c1\u06d2\u06d4 \u0633\u0645\u062c\u06be\u06cc\u06ba \u06a9\u06c1 \u06a9\u06cc\u0627 \u0686\u0644 \u0631\u06c1\u0627 \u06c1\u06d2\u060c \u062c\u0648 \u06a9\u0686\u06be \u0622\u067e \u06a9\u0648 \u0645\u0644\u062a\u0627 \u06c1\u06d2 \u0627\u0633 \u06a9\u06cc \u0628\u0646\u06cc\u0627\u062f \u067e\u0631 \u0641\u06cc\u0635\u0644\u06d2 \u06a9\u0631\u06cc\u06ba\u060c \u0646\u062a\u0627\u0626\u062c \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u060c \u0627\u0648\u0631 \u062c\u0627\u0646\u06cc\u06ba \u06a9\u06c1 \u0627\u06af\u0631 \u06a9\u0686\u06be \u063a\u0644\u0637 \u06c1\u0648 \u062c\u0627\u062a\u0627 \u06c1\u06d2 \u062a\u0648 \u06a9\u06cc\u0627 \u06a9\u0631\u0646\u0627 \u06c1\u06d2\u06d4<\/p>\n<h4 id=\"heading-how-long-this-takes\">\u0648\u0642\u062a \u0644\u06cc\u0627<\/h4>\n<p>\u0627\u0633 \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u062f\u0646 \u06cc\u0627 \u0627\u0633 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u0648\u0642\u062a \u0644\u06af \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u06af\u0631 \u0622\u067e \u0627\u06cc\u06a9 \u06cc\u0627 \u062f\u0648 \u062f\u0646 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u062f\u0648\u0631 \u0631\u06c1\u06cc\u06ba \u06af\u06d2\u060c \u062a\u0648 \u0627\u067e\u0646\u06d2 AWS \u0627\u0648\u0631 GCP \u0648\u0633\u0627\u0626\u0644 \u06a9\u0648 \u0636\u0627\u0626\u0639 \u06a9\u0631 \u062f\u06cc\u06ba \u062a\u0627\u06a9\u06c1 \u0627\u0646 \u06a9\u06d2 \u0628\u06cc\u06a9\u0627\u0631 \u06c1\u0648\u0646\u06d2 \u06a9\u06d2 \u062f\u0648\u0631\u0627\u0646 \u0628\u0644 \u0648\u0635\u0648\u0644 \u06c1\u0648\u0646\u06d2 \u0633\u06d2 \u0628\u0686 \u0633\u06a9\u06cc\u06ba\u06d4 \u06c1\u062f\u0627\u06cc\u0627\u062a \u0627\u0648\u067e\u0631 &quot;\u0627\u062e\u0631\u0627\u062c\u0627\u062a&#8221; \u06a9\u06d2 \u062a\u062d\u062a \u06c1\u06cc\u06ba\u06d4<\/p>\n<h3 id=\"heading-the-team\">\u0679\u06cc\u0645<\/h3>\n<p>\u06cc\u06c1 \u0644\u06cc\u0628 \u06c1\u0641\u062a\u06c1 1 \u0645\u06cc\u06ba ClearPay \u0679\u06cc\u0645 \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u062c\u0648\u0646\u06cc\u0626\u0631 DevOps \u0627\u0646\u062c\u06cc\u0646\u0626\u0631 Zee \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0634\u0631\u0648\u0639 \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u06d4 \u062a\u0645 \u0632\u06cc \u06a9\u06be\u06cc\u0644\u0648\u06d4<\/p>\n<ul>\n<li>\n<p>\u0645\u0627\u06cc\u0627 \u0627\u06cc\u06a9 \u0627\u0646\u062c\u06cc\u0646\u0626\u0631\u0646\u06af \u0645\u06cc\u0646\u06cc\u062c\u0631 \u06c1\u06d2\u06d4 \u0648\u06c1 \u062b\u0628\u0648\u062a \u0645\u0627\u0646\u06af\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0688\u06cc\u0646\u06cc\u0626\u0644 \u0627\u06cc\u06a9 \u0633\u06cc\u0646\u0626\u0631 \u0627\u0646\u062c\u06cc\u0646\u0626\u0631 \u06c1\u06d2\u06d4 \u0648\u06c1 \u0622\u067e \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0633\u0631\u0648\u0631\u0632\u060c \u06a9\u0648\u0628\u0631\u0646\u06cc\u0679\u0633 \u0627\u0648\u0631 \u0635\u0644\u0627\u062d\u06cc\u062a \u067e\u0631 \u062c\u0648\u0691\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0639\u0645\u0627\u0631\u06c1 \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc\u0648\u06ba \u06a9\u06d2 API \u06a9\u0648 \u0628\u0631\u0642\u0631\u0627\u0631 \u0631\u06a9\u06be\u062a\u06cc \u06c1\u06d2\u06d4 \u0648\u06c1 \u0635\u0631\u0641 \u0627\u06cc\u06a9 \u0686\u06cc\u0632 \u06a9\u0627 \u062e\u06cc\u0627\u0644 \u0631\u06a9\u06be\u062a\u06cc \u06c1\u06d2\u06d4 \u062e\u06cc\u0627\u0644 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u0635\u0627\u0631\u0641\u06cc\u0646 \u06a9\u0648 \u062f\u0648 \u0628\u0627\u0631 \u0628\u0644 \u0646\u06c1\u06cc\u06ba \u062f\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u06a9\u0631\u0633 \u06a9\u0633\u0679\u0645\u0631 \u0633\u067e\u0648\u0631\u0679 \u06a9\u0648 \u0633\u0646\u0628\u06be\u0627\u0644\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u06af\u0631 \u0679\u0631\u0627\u0646\u0633\u0645\u06cc\u0634\u0646 \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648\u062c\u0627\u062a\u06cc \u06c1\u06d2\u060c \u062a\u0648 \u0648\u06c1 \u067e\u06c1\u0644\u06d2 \u0633\u0646\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<\/ul>\n<p>\u0622\u067e \u06a9\u0627 \u06a9\u0627\u0645 \u0627\u0633 \u0628\u0627\u062a \u06a9\u0648 \u06cc\u0642\u06cc\u0646\u06cc \u0628\u0646\u0627\u0646\u0627 \u06c1\u06d2 \u06a9\u06c1 \u06a9\u0633\u0679\u0645\u0631\u0632 \u0627\u067e\u0646\u06d2 \u0628\u0644\u0646\u06af API \u06a9\u0648 AWS EC2 \u0633\u0631\u0648\u0631 \u0633\u06d2 \u0628\u063a\u06cc\u0631 \u06a9\u0633\u06cc \u0642\u0627\u0628\u0644 \u062a\u0648\u062c\u06c1 \u0631\u06a9\u0627\u0648\u0679 \u06a9\u06d2 GKE \u0645\u06cc\u06ba \u0645\u0646\u062a\u0642\u0644 \u06a9\u0631 \u0633\u06a9\u06cc\u06ba\u060c \u067e\u0648\u0633\u0679\u06af\u0631\u06cc \u0627\u06cc\u0633 \u06a9\u06cc\u0648 \u0627\u06cc\u0644 \u06a9\u0648 AWS \u067e\u0631 \u0631\u06a9\u06be\u062a\u06d2 \u06c1\u0648\u0626\u06d2\u06d4<\/p>\n<h2 id=\"heading-part-1-how-to-run-clearpay-and-put-it-on-aws\">\u062d\u0635\u06c1 1\u06d4 ClearPay \u06a9\u0648 \u06a9\u06cc\u0633\u06d2 \u062d\u0627\u0635\u0644 \u06a9\u06cc\u0627 \u062c\u0627\u0626\u06d2 \u0627\u0648\u0631 AWS \u067e\u0631 \u0686\u0644\u0627\u06cc\u0627 \u062c\u0627\u0626\u06d2\u06d4<\/h2>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/10\/1792188588_580_\u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0648\u06ba-\u06a9\u0648-AWS-\u0633\u06d2-GKE-\u0645\u06cc\u06ba-\u06a9\u06cc\u0633\u06d2-\u0645\u0646\u062a\u0642\u0644-\u06a9\u06cc\u0627-\u062c\u0627\u0626\u06d2\u06d4.png\" alt=\"\u0622\u06af\u06d2 \u06a9\u06cc\u0627 \u06c1\u06d2\u061f\" style=\"display: block;\" width=\"600\" height=\"400\" loading=\"lazy\" title=\"\"><\/p>\n<p>\u0646\u0642\u0644 \u0645\u06a9\u0627\u0646\u06cc \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u0642\u0627\u0628\u0644 \u0627\u0639\u062a\u0645\u0627\u062f \u0646\u0642\u0637\u06c1 \u0622\u063a\u0627\u0632 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u06d4 \u0627\u0633 \u062d\u0635\u06d2 \u0645\u06cc\u06ba\u060c \u06c1\u0645 \u0627\u067e\u0646\u06d2 \u0644\u06cc\u067e \u0679\u0627\u067e \u067e\u0631 ClearPay \u0686\u0644\u0627\u0626\u06cc\u06ba \u06af\u06d2\u060c \u0627\u0633\u06d2 AWS \u067e\u0631 \u0627\u0633 \u0637\u0631\u062d \u062a\u0639\u06cc\u0646\u0627\u062a \u06a9\u0631\u06cc\u06ba \u06af\u06d2 \u062c\u0633 \u0637\u0631\u062d \u06c1\u0645\u0627\u0631\u06cc \u06a9\u0645\u067e\u0646\u06cc \u0627\u0633\u06d2 \u0686\u0644\u0627\u062a\u06cc \u06c1\u06d2\u060c \u0627\u0648\u0631 \u0646\u0648\u0679 \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 \u06cc\u06c1 \u06a9\u062a\u0646\u06cc \u062a\u06cc\u0632 \u06c1\u06d2\u06d4 \u062a\u0645\u0627\u0645 \u0628\u0639\u062f \u06a9\u06d2 \u0627\u0628\u0648\u0627\u0628 \u0627\u0646 \u0627\u0639\u062f\u0627\u062f \u0648 \u0634\u0645\u0627\u0631 \u0633\u06d2 GKE \u06a9\u0627 \u0645\u0648\u0627\u0632\u0646\u06c1 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<h3 id=\"heading-chapter-1-run-clearpay-on-your-laptop\">\u0628\u0627\u0628 1\u06d4 \u0627\u067e\u0646\u06d2 \u0644\u06cc\u067e \u0679\u0627\u067e \u067e\u0631 \u06a9\u0644\u06cc\u0626\u0631 \u067e\u06d2 \u0686\u0644\u0627\u0626\u06cc\u06ba\u06d4<\/h3>\n<p><em>\u067e\u06c1\u0644\u0627 \u067e\u06cc\u0631\u060c \u0635\u0628\u062d 9:05 \u0628\u062c\u06d2<\/em><\/p>\n<p>\u0622\u067e \u06a9\u0627 \u0644\u06cc\u067e \u0679\u0627\u067e \u0646\u06cc\u0627 \u06c1\u06d2\u06d4 Wi-Fi \u067e\u0627\u0633 \u0648\u0631\u0688 \u0627\u06cc\u06a9 \u0686\u067e\u0686\u067e\u0627 \u0646\u0648\u0679 \u067e\u0631 \u06c1\u06d2\u06d4 \u0622\u067e \u06a9\u06d2 \u0627\u0646 \u0628\u0627\u06a9\u0633 \u0645\u06cc\u06ba \u067e\u06c1\u0644\u0627 \u067e\u06cc\u063a\u0627\u0645 \u0645\u062e\u062a\u0635\u0631 \u06c1\u06d2 \u0627\u0648\u0631 \u06c1\u0645\u0627\u0631\u06cc \u0627\u0646\u062c\u06cc\u0646\u0626\u0631\u0646\u06af \u0645\u06cc\u0646\u06cc\u062c\u0631 \u0645\u0627\u06cc\u0627 \u06a9\u06cc \u0637\u0631\u0641 \u0633\u06d2 \u06c1\u06d2\u06d4<\/p>\n<p>\u0645\u0627\u06cc\u0627: &quot;\u067e\u06c1\u0644\u06d2\u060c \u0627\u067e\u0646\u06d2 \u0644\u06cc\u067e \u0679\u0627\u067e \u067e\u0631 \u06a9\u0644\u06cc\u0626\u0631 \u067e\u06d2 \u0644\u0627\u0646\u0686 \u06a9\u0631\u06cc\u06ba\u06d4 \u0644\u0627\u06af \u0627\u0646 \u06a9\u0631\u06cc\u06ba\u060c \u0645\u062c\u06be\u06d2 $20 \u0628\u06be\u06cc\u062c\u06cc\u06ba\u060c \u0627\u0648\u0631 \u06c1\u0645 \u0622\u067e \u06a9\u06d2 API \u06a9\u0648 GKE \u0645\u06cc\u06ba \u0645\u0646\u062a\u0642\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0628\u0627\u0631\u06d2 \u0645\u06cc\u06ba \u0628\u0627\u062a \u06a9\u0631\u06cc\u06ba \u06af\u06d2\u06d4&#8221;<\/p>\n<p>\u06a9\u0648\u0688 \u0645\u062e\u0632\u0646 \u0645\u06cc\u06ba \u06c1\u06d2: <code>api\/<\/code>\u060c <code>ui\/<\/code>\u0627\u0648\u0631 <code>db\/<\/code>. \u0627\u0628\u06be\u06cc \u062a\u06a9 \u06a9\u0686\u06be \u0646\u06c1\u06cc\u06ba \u0686\u0644 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4<\/p>\n<h4 id=\"heading-why-this-matters\">\u06cc\u06c1 \u06a9\u06cc\u0648\u06ba \u0627\u06c1\u0645\u06cc\u062a \u0631\u06a9\u06be\u062a\u0627 \u06c1\u06d2\u06d4<\/h4>\n<p>\u0628\u0639\u062f \u06a9\u06d2 \u0627\u0628\u0648\u0627\u0628 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0622\u067e \u06a9\u0648 \u062f\u0631\u0633\u062a \u0644\u0627\u06af \u0627\u0646 \u062a\u0635\u0648\u06cc\u0631 \u0627\u0648\u0631 $20 \u06a9\u06cc \u0645\u0646\u062a\u0642\u0644\u06cc \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u06af\u06cc\u06d4 \u0627\u06af\u0631 \u0622\u067e \u06a9\u0648 AWS \u06cc\u0627 GKE \u06a9\u06d2 \u0633\u0627\u062a\u06be \u06a9\u0648\u0626\u06cc \u0645\u0633\u0626\u0644\u06c1 \u06c1\u06d2 \u062a\u0648 \u0627\u0633 \u06a9\u0627 \u0627\u0633 \u0633\u06d2 \u0645\u0648\u0627\u0632\u0646\u06c1 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<h4 id=\"heading-what-youre-about-to-run\">\u0622\u067e \u06a9\u06cc\u0627 \u0686\u0644\u0627\u0646\u0627 \u0686\u0627\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba<\/h4>\n<p>ClearPay \u062a\u06cc\u0646 \u062d\u0635\u0648\u06ba \u067e\u0631 \u0645\u0634\u062a\u0645\u0644 \u06c1\u06d2\u060c \u062c\u0646 \u0645\u06cc\u06ba \u0633\u06d2 \u06c1\u0631 \u0627\u06cc\u06a9 \u06a9\u0627 \u0627\u06cc\u06a9 \u06a9\u0627\u0645 \u06c1\u06d2\u06d4<\/p>\n<ul>\n<li>\n<p>\u06a9\u06c1 <strong>UI<\/strong> \u06af\u0627\u06c1\u06a9 \u062c\u0648 \u062f\u06cc\u06a9\u06be\u062a\u0627 \u0627\u0648\u0631 \u0679\u06cc\u067e \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u0648\u06c1 \u0644\u0627\u06af \u0627\u0646 \u0635\u0641\u062d\u06c1\u060c \u0628\u06cc\u0644\u0646\u0633 \u0627\u0648\u0631 \u0628\u06be\u06cc\u062c\u0646\u06d2 \u06a9\u0627 \u0628\u0679\u0646 \u06c1\u06d2\u06d4 UI \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u0635\u0627\u0631\u0641 \u0627\u0646\u0679\u0631\u0641\u06cc\u0633\u06d4<\/p>\n<\/li>\n<li>\n<p>\u06a9\u06c1 <strong>API<\/strong> \u06cc\u06c1 \u0648\u06c1 \u062d\u0635\u06c1 \u06c1\u06d2 \u062c\u0648 \u06a9\u0627\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u06a9\u0648\u0626\u06cc \u0633\u06a9\u0631\u06cc\u0646 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 UI \u0627\u06cc\u06a9 \u067e\u06cc\u063a\u0627\u0645 \u0628\u06be\u06cc\u062c\u062a\u0627 \u06c1\u06d2 \u062c\u06cc\u0633\u06d2 &quot;Bob \u06a9\u0648 $20 \u0628\u06be\u06cc\u062c\u06cc\u06ba\u06d4&#8221; API \u067e\u06cc\u063a\u0627\u0645 \u06a9\u0648 \u062a\u0633\u0644\u06cc\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u06a9\u0627\u0631\u0631\u0648\u0627\u0626\u06cc \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u062c\u0648\u0627\u0628 \u0648\u0627\u067e\u0633 \u0628\u06be\u06cc\u062c\u062a\u0627 \u06c1\u06d2 \u062c\u06cc\u0633\u06d2 &quot;\u06c1\u0648 \u06af\u06cc\u0627&#8221;\u06d4 API \u06a9\u0627 \u0645\u0637\u0644\u0628 \u0627\u06cc\u067e\u0644\u06cc \u06a9\u06cc\u0634\u0646 \u067e\u0631\u0648\u06af\u0631\u0627\u0645\u0646\u06af \u0627\u0646\u0679\u0631\u0641\u06cc\u0633 \u06c1\u06d2\u06d4 \u0627\u0633\u06d2 \u0627\u0635\u0648\u0644\u0648\u06ba \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0627\u06cc\u06a9 \u062f\u0631\u0648\u0627\u0632\u06c1 \u0633\u0645\u062c\u06be\u06cc\u06ba\u06d4 UI \u0627\u06cc\u06a9 \u0645\u0642\u0631\u0631\u06c1 \u0637\u0631\u06cc\u0642\u06d2 \u0633\u06d2 \u067e\u0648\u0686\u06be\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 API \u0627\u06cc\u06a9 \u0645\u0642\u0631\u0631\u06c1 \u0637\u0631\u06cc\u0642\u06d2 \u0633\u06d2 \u062c\u0648\u0627\u0628 \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u06a9\u06c1 <strong>\u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633<\/strong> \u06cc\u06c1 \u0648\u06c1 \u062c\u06af\u06c1 \u06c1\u06d2 \u062c\u06c1\u0627\u06ba ClearPay \u06c1\u0631 \u0686\u06cc\u0632 \u06a9\u0648 \u0631\u06cc\u06a9\u0627\u0631\u0688 \u06a9\u0631\u062a\u0627 \u06c1\u06d2: \u0622\u067e \u06a9\u06d2 \u062a\u0645\u0627\u0645 \u0627\u06a9\u0627\u0624\u0646\u0679\u0633\u060c \u0628\u06cc\u0644\u0646\u0633\u060c \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc\u0627\u06ba \u0627\u0648\u0631 \u0628\u06c1\u062a \u06a9\u0686\u06be\u06d4 PostgreSQL \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u067e\u0631\u0648\u06af\u0631\u0627\u0645 \u06c1\u06d2 \u062c\u0633\u06d2 ClearPay \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u06a9\u0648\u0626\u06cc \u0631\u0627\u0633\u062a\u06c1 \u0646\u06c1\u06cc\u06ba <strong>\u0633\u0631\u0648\u0631<\/strong> \u06cc\u06c1 \u0627\u06cc\u06a9 \u0627\u06cc\u0633\u0627 \u06a9\u0645\u067e\u06cc\u0648\u0679\u0631 \u06c1\u06d2 \u062c\u0648 \u0633\u0627\u0631\u0627 \u062f\u0646 \u0686\u0644\u062a\u0627 \u0631\u06c1\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0648\u06ba \u06a9\u0627 \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 API \u0627\u06cc\u06a9 \u067e\u0631 \u0686\u0644\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<\/ul>\n<p>\u06a9\u06cc\u0641\u06d2 \u0627\u0633\u06cc \u0637\u0631\u062d \u06a9\u0627\u0645 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0645\u06cc\u0646\u06cc\u0648 UI \u06c1\u06cc\u06ba\u06d4 \u0648\u06cc\u0679\u0631 \u0627\u06cc\u06a9 API \u06c1\u06d2\u06d4 \u06a9\u0686\u0646 \u0627\u0648\u0631 \u0627\u0633 \u06a9\u0627 \u0631\u06cc\u06a9\u0627\u0631\u0688 \u0627\u06cc\u06a9 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u06c1\u06d2\u06d4 \u06af\u0627\u06c1\u06a9 \u06a9\u0628\u06be\u06cc \u06a9\u0686\u0646 \u0645\u06cc\u06ba \u062f\u0627\u062e\u0644 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u062a\u06d2\u06d4 \u06af\u0627\u06c1\u06a9 \u0648\u06cc\u0679\u0631 \u06a9\u0648 \u0628\u062a\u0627\u062a\u06d2 \u06c1\u06cc\u06ba \u06a9\u06c1 \u0648\u06c1 \u06a9\u06cc\u0627 \u0686\u0627\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/10\/1792188588_908_\u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0648\u06ba-\u06a9\u0648-AWS-\u0633\u06d2-GKE-\u0645\u06cc\u06ba-\u06a9\u06cc\u0633\u06d2-\u0645\u0646\u062a\u0642\u0644-\u06a9\u06cc\u0627-\u062c\u0627\u0626\u06d2\u06d4.png\" alt=\"\u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u06d2 \u0628\u06c1\u0627\u0624 \u06a9\u0648 \u0638\u0627\u06c1\u0631 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u06cc \u062a\u0635\u0648\u06cc\u0631\" style=\"display: block;\" width=\"600\" height=\"400\" loading=\"lazy\" title=\"\"><\/p>\n<p>\u0627\u0633 \u0628\u0627\u0628 \u0645\u06cc\u06ba\u060c \u06c1\u0645 \u062a\u06cc\u0646\u0648\u06ba \u06a9\u0648 \u0627\u067e\u0646\u06d2 \u0644\u06cc\u067e \u0679\u0627\u067e \u067e\u0631 \u0686\u0644\u0627\u0626\u06cc\u06ba \u06af\u06d2\u06d4 \u0628\u0639\u062f \u06a9\u06d2 \u0627\u0628\u0648\u0627\u0628 \u0645\u06cc\u06ba\u060c \u06c1\u0645 UI \u0627\u0648\u0631 API \u06a9\u0648 Google Cloud \u0645\u06cc\u06ba \u0645\u0646\u062a\u0642\u0644 \u06a9\u0631\u06cc\u06ba \u06af\u06d2\u06d4 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 AWS \u0645\u06cc\u06ba \u0628\u0631\u0642\u0631\u0627\u0631 \u06c1\u06d2\u06d4<\/p>\n<h4 id=\"heading-steps\">\u0642\u062f\u0645<\/h4>\n<p>\u0688\u0648\u06a9\u0631 \u0688\u06cc\u0633\u06a9 \u0679\u0627\u067e \u0634\u0631\u0648\u0639 \u06a9\u0631\u06cc\u06ba\u06d4 \u0627\u0633 \u0628\u0627\u0628 \u0645\u06cc\u06ba \u0646\u0648\u0688 \u06cc\u0627 PostgreSQL \u0627\u0646\u0633\u0679\u0627\u0644 \u0646\u06c1 \u06a9\u0631\u06cc\u06ba\u06d4 \u06cc\u06c1 \u0627\u06cc\u06a9 \u06a9\u0646\u0679\u06cc\u0646\u0631 \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u0686\u0644\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0645\u062d\u0641\u0648\u0638 \u0634\u062f\u06c1 \u0641\u0648\u0644\u0688\u0631 \u0645\u06cc\u06ba <code>docker-compose.yml<\/code>:<\/p>\n<pre><code class=\"language-bash\">docker compose up --build\n<\/code><\/pre>\n<p>\u067e\u06c1\u0644\u06cc \u062a\u0639\u0645\u06cc\u0631 \u0645\u06cc\u06ba \u0686\u0646\u062f \u0645\u0646\u0679 \u0644\u06af\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u06cc\u06c1 \u0679\u0631\u0645\u06cc\u0646\u0644 \u0644\u0627\u06af \u06a9\u0648 \u067e\u0631\u0646\u0679 \u06a9\u0631\u0646\u0627 \u062c\u0627\u0631\u06cc \u0631\u06a9\u06be\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u062c\u0628 \u062a\u06a9 \u0622\u067e Ctrl+C \u0646\u06c1\u06cc\u06ba \u062f\u0628\u0627\u062a\u06d2 \u062a\u0628 \u062a\u06a9 \u067e\u06cc\u063a\u0627\u0645\u0627\u062a \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0638\u0627\u06c1\u0631 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0686\u0644\u062a\u06d2 \u0631\u06c1\u0646\u06d2 \u062f\u0648\u06d4<\/p>\n<p>\u062a\u06cc\u0646\u0648\u06ba \u0644\u0627\u0626\u0646\u0648\u06ba \u06a9\u06d2 \u0638\u0627\u06c1\u0631 \u06c1\u0648\u0646\u06d2 \u062a\u06a9 \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u0631\u06cc\u06ba\u06d4 \u0628\u0627\u0626\u06cc\u06ba \u0637\u0631\u0641 \u06a9\u0627 \u0646\u0627\u0645 \u0641\u0648\u0644\u0688\u0631 \u06a9\u06d2 \u0646\u0627\u0645 \u0633\u06d2 \u0634\u0631\u0648\u0639 \u06c1\u0648 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-plaintext\">Container <folder>-postgres-1 Healthy\napi-1       | {\"message\":\"api_started\", ...}\nui-1        |   \u279c  Local:   http:\/\/localhost:5173\/\n<\/folder><\/code><\/pre>\n<p><code>Healthy<\/code> \u0627\u0633 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u06a9\u06c1 \u067e\u0648\u0633\u0679\u06af\u0631\u06cc\u0633 \u06a9\u0627\u0645 \u06a9\u0631 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4 <code>api_started<\/code> \u0627\u0633 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u06a9\u06c1 API \u06a9\u0627\u0645 \u06a9\u0631 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4 \u06a9\u06c1 <code>localhost:5173<\/code> \u0644\u0627\u0626\u0646 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u06a9\u06c1 UI \u06a9\u0627\u0645 \u06a9\u0631 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u0633\u06cc \u0641\u0648\u0644\u0688\u0631 \u0645\u06cc\u06ba \u062f\u0648\u0633\u0631\u0627 \u0679\u0631\u0645\u06cc\u0646\u0644 \u06a9\u06be\u0648\u0644\u06cc\u06ba\u06d4 \u062f\u0648 \u0688\u06cc\u0645\u0648 \u0627\u06a9\u0627\u0624\u0646\u0679\u0633 \u0628\u0646\u0627\u0626\u06cc\u06ba:<\/p>\n<pre><code class=\"language-bash\">docker compose exec api node db\/seed.js\n<\/code><\/pre>\n<p>\u06cc\u06c1 \u0633\u06cc\u0688 \u0627\u0633\u06a9\u0631\u067e\u0679 \u06a9\u0648 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u0686\u0644\u0627\u0626\u06d2 \u06af\u0627\u06d4 API \u0627\u0645\u06cc\u062c \u0645\u06cc\u06ba \u062c\u0627\u0646 \u0628\u0648\u062c\u06be \u06a9\u0631 npm \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u0645\u062c\u06be\u06d2 \u0628\u0627\u0628 14 \u0645\u06cc\u06ba \u0633\u06cc\u06a9\u06cc\u0648\u0631\u0679\u06cc \u0686\u06cc\u06a9 \u0646\u06d2 \u062c\u06be\u0646\u0688\u0627 \u0644\u06af\u0627\u06cc\u0627 \u062a\u06be\u0627\u06d4<\/p>\n<p>\u0645\u062a\u0648\u0642\u0639 \u067e\u06cc\u062f\u0627\u0648\u0627\u0631:<\/p>\n<pre><code class=\"language-plaintext\">seeded: alice@clearpay.dev (password: password123)\nseeded: bob@clearpay.dev (password: password123)\n<\/code><\/pre>\n<p>\u0627\u06af\u0631 \u0622\u067e \u062f\u06cc\u06a9\u06be\u062a\u06d2 \u06c1\u06cc\u06ba <code>skip (already exists): alice@clearpay.dev<\/code>\u067e\u0686\u06be\u0644\u06d2 \u0631\u0646 \u0633\u06d2 \u0627\u06cc\u06a9 \u0627\u06a9\u0627\u0624\u0646\u0679 \u0645\u0648\u062c\u0648\u062f \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0679\u06be\u06cc\u06a9 \u06c1\u06d2<\/p>\n<p><strong>\u0641\u06cc \u0627\u0644\u062d\u0627\u0644 \u062c\u0648 \u0686\u0644 \u0631\u06c1\u0627 \u06c1\u06d2 \u0648\u06c1 \u06cc\u06c1 \u06c1\u06d2:<\/strong><\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/10\/1792188589_374_\u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0648\u06ba-\u06a9\u0648-AWS-\u0633\u06d2-GKE-\u0645\u06cc\u06ba-\u06a9\u06cc\u0633\u06d2-\u0645\u0646\u062a\u0642\u0644-\u06a9\u06cc\u0627-\u062c\u0627\u0626\u06d2\u06d4.png\" alt=\"\u0627\u0633 \u0648\u0642\u062a \u062c\u0648 \u0686\u0644 \u0631\u06c1\u0627 \u06c1\u06d2 \u0627\u0633 \u06a9\u0627 \u0641\u0644\u0648 \u0686\u0627\u0631\u0679: \u0628\u0631\u0627\u0624\u0632\u0631\u060c \u0631\u06cc \u0627\u06cc\u06a9\u0679 UI\u060c \u0627\u06cc\u06a9\u0633\u067e\u0631\u06cc\u0633 API\u060c \u0627\u0648\u0631 \u067e\u0648\u0633\u0679\u06af\u0631\u06cc\u0633\" style=\"display: block;\" width=\"600\" height=\"400\" loading=\"lazy\" title=\"\"><\/p>\n<h4 id=\"heading-check\">\u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba<\/h4>\n<p>\u062f\u0648\u0633\u0631\u06d2 \u0679\u0631\u0645\u06cc\u0646\u0644 \u0645\u06cc\u06ba:<\/p>\n<pre><code class=\"language-bash\">curl localhost:4000\/health\n<\/code><\/pre>\n<p>\u0645\u062a\u0648\u0642\u0639 \u0646\u062a\u0627\u0626\u062c \u06cc\u06c1 \u06c1\u06cc\u06ba: \u0622\u067e \u06a9\u06d2 <code>instance<\/code> \u0642\u062f\u0631 \u06a9\u0646\u0679\u06cc\u0646\u0631 ID \u06c1\u0648\u06af\u06cc\u06d4<\/p>\n<pre><code class=\"language-json\">{\"status\":\"ok\",\"served_by\":{\"platform\":\"aws\",\"version\":\"1.0.0\",\"instance\":\"14b8d5d767ea\",\"commit\":\"local\",\"rollback_active\":false}}\n<\/code><\/pre>\n<p><code>\"status\":\"ok\"<\/code> \u06cc\u06c1 \u0627\u06cc\u06a9 \u0686\u06cc\u06a9 \u06c1\u06d2\u06d4 <code>served_by<\/code> \u0627\u0633 \u067e\u0644\u06cc\u0679 \u0641\u0627\u0631\u0645 \u06a9\u0627 \u0646\u0627\u0645 \u0628\u062a\u0627\u062a\u0627 \u06c1\u06d2 \u062c\u0633 \u0646\u06d2 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u0627 \u062c\u0648\u0627\u0628 \u062f\u06cc\u0627\u06d4 \u06cc\u06c1 \u06a9\u06c1\u062a\u0627 \u06c1\u06d2 <code>aws<\/code> \u0622\u067e \u06a9\u06d2 \u0644\u06cc\u067e \u0679\u0627\u067e \u067e\u0631 <code>docker-compose.yml<\/code> \u0633\u06cc\u0679 <code>PLATFORM: aws<\/code>. \u0628\u0639\u062f \u0645\u06cc\u06ba GKE \u0627\u0633 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u062c\u0648\u0627\u0628 \u062f\u06cc\u062a\u0627 \u06c1\u06d2: <code>gke<\/code>\u0648\u06c1 \u0627\u06cc\u06a9 \u0641\u06cc\u0644\u0688 \u0622\u067e \u06a9\u0648 \u0628\u062a\u0627\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u06a9\u0633 \u0628\u0627\u062f\u0644 \u0646\u06d2 \u06c1\u0631 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u0648 \u0633\u0646\u0628\u06be\u0627\u0644\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u0628 http:\/\/localhost:5173 \u06a9\u06be\u0648\u0644\u06cc\u06ba \u0627\u0648\u0631 \u0644\u0627\u06af \u0627\u0646 \u06a9\u0631\u06cc\u06ba\u06d4 \u0627\u06cc\u0644\u0633 \u06a9\u0648 \u0631\u062c\u0633\u0679\u0631 \u0646\u06c1 \u06a9\u0631\u06cc\u06ba \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u0628\u06cc\u062c \u0627\u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u06c1\u06cc \u0628\u0646\u0627 \u0686\u06a9\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>$20 \u0628\u06be\u06cc\u062c\u06cc\u06ba\u06d4 <code>bob@clearpay.dev<\/code>. \u0622\u067e \u06a9\u06cc \u0645\u0646\u062a\u0642\u0644\u06cc \u062d\u0627\u0644\u06cc\u06c1 \u0633\u0631\u06af\u0631\u0645\u06cc \u06a9\u06d2 \u062a\u062d\u062a \u062f\u0631\u062c \u0630\u06cc\u0644 \u0638\u0627\u06c1\u0631 \u06c1\u0648\u06af\u06cc: <code>Sent<\/code> \u0645\u062b\u0627\u0644 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631\u060c \u0627\u06af\u0631 \u0622\u067e \u0645\u062e\u062a\u0635\u0631 ID \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba: <code>Sent \u00b7 a1b2c3d4<\/code>.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/10\/1792188589_91_\u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0648\u06ba-\u06a9\u0648-AWS-\u0633\u06d2-GKE-\u0645\u06cc\u06ba-\u06a9\u06cc\u0633\u06d2-\u0645\u0646\u062a\u0642\u0644-\u06a9\u06cc\u0627-\u062c\u0627\u0626\u06d2\u06d4.png\" alt=\"\u062a\u0635\u0648\u06cc\u0631 \u062c\u0648 \u06c1\u0645\u0627\u0631\u06cc \u0627\u06cc\u067e \u06a9\u0627 UI \u062f\u06a9\u06be\u0627 \u0631\u06c1\u06cc \u06c1\u06d2\u06d4\" style=\"display: block;\" width=\"600\" height=\"400\" loading=\"lazy\" title=\"\"><\/p>\n<p>\u0627\u0633 \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 \u067e\u0631 \u062f\u0648 \u062c\u06af\u06c1\u0648\u06ba \u067e\u0631 \u062f\u06cc\u06a9\u06be\u06cc\u06ba: \u06a9\u062a\u0627\u0628 \u06a9\u06d2 \u0628\u0642\u06cc\u06c1 \u062d\u0635\u06d2 \u0645\u06cc\u06ba\u060c \u0622\u067e \u062f\u06cc\u06a9\u06be\u06cc\u06ba \u06af\u06d2:<\/p>\n<ol>\n<li>\n<p>\u062d\u0627\u0644\u06cc\u06c1 \u0633\u0631\u06af\u0631\u0645\u06cc \u06a9\u06d2 \u062a\u062d\u062a \u06c1\u0631 \u0633\u0637\u0631 \u0627\u0633 \u067e\u0631 \u062e\u062a\u0645 \u06c1\u0648\u062a\u06cc \u06c1\u06d2: <code>served by aws\/1.0.0<\/code>. \u06cc\u06c1 API \u0639\u0645\u0644 \u06a9\u0627 \u067e\u0644\u06cc\u0679 \u0641\u0627\u0631\u0645 \u0627\u0648\u0631 \u0648\u0631\u0698\u0646 \u06c1\u06d2 \u062c\u0633 \u0646\u06d2 \u0679\u0631\u0627\u0646\u0633\u067e\u0648\u0631\u0679 \u06a9\u0648 \u062a\u062e\u0644\u06cc\u0642 \u06a9\u06cc\u0627\u06d4 \u06cc\u06c1 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u06a9\u06cc \u0645\u0646\u062a\u0642\u0644\u06cc \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0645\u062d\u0641\u0648\u0638 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0633\u0628 \u0633\u06d2 \u0627\u0648\u067e\u0631 \u06a9\u0627\u0644\u06cc \u0628\u0627\u0631 \u06a9\u06c1\u062a\u06cc \u06c1\u06d2: <code>All systems operational<\/code> \u062c\u0628 <code>\/health\/ready<\/code> \u06a9\u0627\u0645\u06cc\u0627\u0628\u06cc \u0627\u0633 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 API \u0639\u0645\u0644 \u0686\u0644 \u0633\u06a9\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 Postgres \u062a\u06a9 \u067e\u06c1\u0646\u0686 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0644\u0627\u06af \u0627\u0646 \u06c1\u0648\u0646\u06d2 \u06a9\u06d2 \u0628\u0627\u0631\u06d2 \u0645\u06cc\u06ba \u06a9\u0686\u06be \u0646\u06c1\u06cc\u06ba \u06a9\u06c1\u062a\u0627\u06d4 \u0627\u06af\u0631 \u067e\u0627\u0633 \u0648\u0631\u0688 \u063a\u0644\u0637 \u06c1\u06d2\u060c \u062a\u0648 \u0641\u0627\u0631\u0645 \u0627\u06cc\u06a9 \u0633\u0631\u062e \u063a\u0644\u0637\u06cc \u062f\u06a9\u06be\u0627\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0628\u0627\u0631 \u0645\u0646\u062f\u0631\u062c\u06c1 \u0630\u06cc\u0644 \u067e\u06cc\u063a\u0627\u0645 \u06a9\u0648 \u0638\u0627\u06c1\u0631 \u06a9\u0631\u062a\u0627 \u0631\u06c1\u062a\u0627 \u06c1\u06d2: <code>All systems operational<\/code>.<\/p>\n<\/li>\n<\/ol>\n<p>\u0628\u0627\u0628 5 \u06a9\u06d2 \u0628\u0639\u062f\u060c \u0622\u067e \u0627\u067e\u0646\u06d2 AWS \u0627\u06cc\u0688\u0631\u06cc\u0633 \u0633\u06d2 \u0648\u06c1\u06cc \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 \u06a9\u06be\u0648\u0644\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0627\u06cc\u06a9 \u06c1\u06cc \u0644\u0627\u06af \u0627\u0646\u060c \u0648\u06c1\u06cc \u062f\u0648 \u0645\u0642\u0627\u0645\u0627\u062a\u06d4<\/p>\n<h4 id=\"heading-if-it-fails\">\u0627\u06af\u0631 \u06cc\u06c1 \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648\u062c\u0627\u062a\u0627 \u06c1\u06d2:<\/h4>\n<ul>\n<li>\n<p><code>failed to connect to the docker API<\/code> \u06cc\u0627 <code>docker.sock<\/code>: Docker \u0688\u06cc\u0633\u06a9 \u0679\u0627\u067e \u0646\u06c1\u06cc\u06ba \u0686\u0644 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4 \u0627\u0633\u06d2 \u0634\u0631\u0648\u0639 \u06a9\u0631\u06cc\u06ba\u060c \u0627\u0633 \u06a9\u06d2 \u062a\u06cc\u0627\u0631 \u06c1\u0648\u0646\u06d2 \u062a\u06a9 \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u0631\u06cc\u06ba\u060c \u067e\u06be\u0631 \u0627\u0633\u06d2 \u0686\u0644\u0627\u0626\u06cc\u06ba\u06d4 <code>docker compose up --build<\/code> \u062f\u0648\u0628\u0627\u0631\u06c1<\/p>\n<\/li>\n<li>\n<p><code>email already registered<\/code> \u0631\u062c\u0633\u0679\u0631\u06cc\u0634\u0646 \u06a9\u06d2 \u0635\u0641\u062d\u06d2 \u067e\u0631: \u0627\u06cc\u0644\u0633 \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u0645\u0648\u062c\u0648\u062f \u06c1\u06d2\u06d4 \u0644\u0627\u06af \u0627\u0646 \u06a9\u0631\u0646\u06d2 \u067e\u0631 \u0648\u0627\u067e\u0633 \u062c\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p><code>invalid credentials<\/code>: \u067e\u0627\u0633 \u0648\u0631\u0688 \u067e\u0648\u0631\u06cc \u062a\u0627\u0631 \u06c1\u06d2\u06d4 <code>password123<\/code>. \u0627\u06af\u0631 \u06cc\u06c1 \u0627\u0628 \u0628\u06be\u06cc \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648 \u062c\u0627\u062a\u0627 \u06c1\u06d2 \u062a\u0648 \u0633\u06cc\u0688 \u06a9\u0645\u0627\u0646\u0688 \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0686\u0644\u0627\u0626\u06cc\u06ba\u06d4 \u06a9\u0648\u0626\u06cc \u0631\u0627\u0633\u062a\u06c1 \u0646\u06c1\u06cc\u06ba <code>skip (already exists)<\/code> \u0627\u06cc\u06a9 \u0644\u0627\u0626\u0646 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u06a9\u06c1 \u0622\u067e \u06a9\u0627 \u0627\u06a9\u0627\u0624\u0646\u0679 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><code>docker compose up<\/code> \u0641\u0648\u0631\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0628\u0627\u06c1\u0631 \u0646\u06a9\u0644\u06cc\u06ba: \u0686\u0644\u0627\u0626\u06cc\u06ba\u06d4 <code>docker compose logs api<\/code> \u062f\u0648\u0633\u0631\u06d2 \u0679\u0631\u0645\u06cc\u0646\u0644 \u0645\u06cc\u06ba\u06d4 \u0627\u06cc\u06a9 \u0633\u0633\u062a \u067e\u06c1\u0644\u06d2 \u0628\u0648\u0679 \u0645\u06cc\u06ba\u060c \u067e\u0648\u0633\u0679\u06af\u0631\u06cc\u0633 \u06a9\u06d2 \u06a9\u0646\u06a9\u0634\u0646 \u06a9\u0648 \u0642\u0628\u0648\u0644 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 API \u0634\u0631\u0648\u0639 \u06c1\u0648 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4 \u0686\u0644\u0627\u0626\u06cc\u06ba <code>docker compose up<\/code> \u062f\u0648\u0628\u0627\u0631\u06c1<\/p>\n<\/li>\n<li>\n<p>\u0628\u0646\u062f\u0631\u06af\u0627\u06c1 <code>4000<\/code> \u06cc\u0627 <code>5173<\/code> \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u0645\u06cc\u06ba \u06c1\u06d2: \u0622\u067e \u06a9\u06d2 \u06a9\u0645\u067e\u06cc\u0648\u0679\u0631 \u067e\u0631 \u0627\u06cc\u06a9 \u0627\u0648\u0631 \u067e\u0631\u0648\u06af\u0631\u0627\u0645 \u067e\u0648\u0631\u0679 \u06a9\u0627 \u0645\u0627\u0644\u06a9 \u06c1\u06d2\u06d4 \u0628\u0631\u0627\u06c1 \u06a9\u0631\u0645 \u067e\u0648\u0631\u0679 \u0645\u06cc\u067e\u0646\u06af \u06a9\u0648 \u0631\u0648\u06a9\u06cc\u06ba \u06cc\u0627 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 <code>docker-compose.yml<\/code>.<\/p>\n<\/li>\n<\/ul>\n<h4 id=\"heading-decision\">\u0641\u06cc\u0635\u0644\u06c1<\/h4>\n<p>\u0645\u0646\u062a\u0642\u0644\u06cc \u0645\u06a9\u0645\u0644 \u06c1\u0648\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f\u060c \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u0627\u0645 \u06a9\u0631\u06d2 \u06af\u06cc\u06d4 \u062c\u0627\u0631\u06cc \u0631\u06a9\u06be\u06cc\u06ba<\/p>\n<p>\u0627\u06af\u0631 \u0646\u06c1\u06cc\u06ba\u060c \u062a\u0648 \u0628\u0631\u0627\u06c1 \u06a9\u0631\u0645 \u0627\u0633\u06d2 \u06cc\u06c1\u0627\u06ba \u0627\u067e\u0646\u06cc \u0646\u0648\u0679 \u0628\u06a9 \u0645\u06cc\u06ba \u0679\u06be\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4 AWS \u0627\u0648\u0631 GKE \u06a9\u0648 \u0688\u06cc\u0628\u06af \u06a9\u0631\u0646\u0627 \u0632\u06cc\u0627\u062f\u06c1 \u0645\u0634\u06a9\u0644 \u06c1\u06d2\u06d4 \u0627\u0633 \u0645\u0634\u06cc\u0646 \u0645\u06cc\u06ba \u0635\u0631\u0641 \u0627\u06cc\u06a9 \u06c1\u06cc \u062c\u0648\u0627\u0628 \u06c1\u06d2\u06d4 <code>docker compose logs<\/code> \u0622\u0631\u0688\u0631 \u062f\u0648\u0631 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<h4 id=\"heading-done-when\">\u0645\u06a9\u0645\u0644 \u06c1\u0648\u0646\u06d2 \u067e\u0631:<\/h4>\n<ul>\n<li>\n<p><code>docker compose up<\/code> \u063a\u0644\u0637\u06cc \u06a9\u06d2 \u0628\u063a\u06cc\u0631 \u0686\u0644\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0628\u06cc\u062c \u062f\u0648 \u0627\u06a9\u0627\u0624\u0646\u0679\u0633 \u06a9\u06cc \u0631\u067e\u0648\u0631\u0679 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u062c\u0648 \u0628\u0646\u0627\u0626\u06d2 \u06af\u0626\u06d2 \u06cc\u0627 \u0686\u06be\u0648\u0691\u06d2 \u06af\u0626\u06d2 \u062a\u06be\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0645\u06cc\u06ba \u0646\u06d2 UI \u0633\u06d2 $20 \u0628\u06be\u06cc\u062c\u06d2 \u0627\u0648\u0631 \u0645\u06cc\u06ba \u0646\u06d2 \u0627\u0633\u06d2 \u0627\u067e\u0646\u06cc \u062d\u0627\u0644\u06cc\u06c1 \u0633\u0631\u06af\u0631\u0645\u06cc \u0645\u06cc\u06ba \u062f\u06cc\u06a9\u06be\u0627\u06d4<\/p>\n<\/li>\n<\/ul>\n<h3 id=\"heading-chapter-2-read-the-code-that-matters\">\u0628\u0627\u0628 2\u06d4 \u0627\u06c1\u0645 \u06a9\u0648\u0688 \u067e\u0691\u06be\u06cc\u06ba<\/h3>\n<p><em>\u067e\u06cc\u0631\u060c 11:30 AM<\/em><\/p>\n<p>$20 \u06af\u0632\u0631 \u06af\u0626\u06d2\u06d4 \u0622\u067e \u0627\u0628 \u0628\u06be\u06cc \u0679\u0631\u0627\u0646\u0633\u0641\u0631 \u0644\u0627\u0626\u0646 \u06a9\u0648 \u062f\u06cc\u06a9\u06be \u0631\u06c1\u06d2 \u06c1\u06cc\u06ba \u062c\u0628 \u0627\u06cc\u06a9 \u06a9\u0631\u0633\u06cc \u0622\u067e \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0644\u0691\u06be\u06a9\u062a\u06cc \u06c1\u06d2\u06d4 \u0627\u06af\u0644\u06cc \u0645\u06cc\u0632 \u067e\u0631 \u0686\u06cc\u0641 \u0627\u0646\u062c\u06cc\u0646\u0626\u0631 \u0688\u06cc\u0646\u06cc\u0626\u0644 \u0627\u067e\u0646\u06cc \u06a9\u0627\u0641\u06cc \u067e\u06cc\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u0633\u06d2 \u06a9\u0648\u0626\u06cc \u062c\u0644\u062f\u06cc \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4<\/p>\n<p>\u062f\u0627\u0646\u06cc\u0627\u0644 \u0627\u0633\u06a9\u0631\u06cc\u0646 \u06a9\u06cc \u0637\u0631\u0641 \u062f\u06cc\u06a9\u06be\u062a\u0627 \u06c1\u06d2\u06d4 &quot;\u0622\u067e \u06a9\u0648 \u06c1\u0631 \u0633\u0637\u0631 \u06a9\u0648 \u062d\u0641\u0638 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u06cc\u06c1 \u062c\u0627\u0646\u0646\u0627 \u06a9\u06c1 \u06a9\u0648\u0646 \u0633\u06cc \u0641\u0627\u0626\u0644\u06cc\u06ba \u06a9\u0631\u062a\u06cc \u06c1\u06cc\u06ba \u062c\u0648 \u0622\u067e \u06a9\u0648 \u0645\u0646\u062a\u0642\u0644\u06cc \u06a9\u06d2 \u062f\u0648\u0631\u0627\u0646 \u0627\u0646\u06c1\u06cc\u06ba \u062a\u06cc\u0632\u06cc \u0633\u06d2 \u06a9\u06be\u0648\u0644\u0646\u06d2 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u062f\u06cc\u062a\u06cc \u06c1\u06cc\u06ba\u06d4&#8221;<\/p>\n<h4 id=\"heading-why-this-matters\">\u06cc\u06c1 \u06a9\u06cc\u0648\u06ba \u0627\u06c1\u0645\u06cc\u062a \u0631\u06a9\u06be\u062a\u0627 \u06c1\u06d2\u06d4<\/h4>\n<p>\u0627\u0633 \u06a9\u06d2 \u0628\u0639\u062f \u06a9\u06d2 \u062a\u0645\u0627\u0645 \u0627\u0628\u0648\u0627\u0628 \u0627\u0646 \u0686\u0627\u0631 \u0641\u0627\u0626\u0644\u0648\u06ba \u0645\u06cc\u06ba \u0633\u06d2 \u0627\u06cc\u06a9 \u06a9\u0627 \u0627\u062d\u0627\u0637\u06c1 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0627\u0628\u06be\u06cc \u0635\u0631\u0641 5 \u0645\u0646\u0679 \u0646\u06a9\u0627\u0644\u06cc\u06ba \u0627\u0648\u0631 \u0622\u067e \u0628\u0639\u062f \u0645\u06cc\u06ba \u0627\u067e\u0646\u06d2 \u0622\u067e \u06a9\u0648 \u06c1\u0627\u0626\u06cc \u067e\u0631\u06cc\u0634\u0631 \u06a9\u06cc \u062a\u0644\u0627\u0634 \u06a9\u06d2 \u06af\u06be\u0646\u0679\u0648\u06ba \u06a9\u06cc \u0628\u0686\u062a \u06a9\u0631\u06cc\u06ba \u06af\u06d2\u06d4<\/p>\n<h4 id=\"heading-steps\">\u0642\u062f\u0645<\/h4>\n<p>\u0641\u0627\u0626\u0644\u0648\u06ba \u06a9\u0648 \u062f\u0631\u062c \u0630\u06cc\u0644 \u062a\u0631\u062a\u06cc\u0628 \u0645\u06cc\u06ba \u06a9\u06be\u0648\u0644\u06cc\u06ba:<\/p>\n<ol>\n<li>\n<p><code>api\/src\/index.js<\/code> API \u0634\u0631\u0648\u0639 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u062a\u0645\u0627\u0645 \u0631\u0627\u0633\u062a\u0648\u06ba \u06a9\u0648 \u062c\u0648\u0691\u06cc\u06ba: \u0627\u0633\u0679\u06cc\u0679\u0633 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4 <code>\/api\/info<\/code>\u0644\u0627\u06af \u0627\u0646 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u062a\u062c\u0627\u0631\u062a \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p><code>api\/src\/servedBy.js<\/code> \u06cc\u06c1 17 \u0644\u0627\u0626\u0646\u06cc\u06ba \u0644\u0645\u0628\u06cc \u06c1\u06d2\u06d4 \u06cc\u06c1 \u067e\u0691\u06be\u062a\u0627 \u06c1\u06d2 <code>PLATFORM<\/code>\u060c <code>APP_VERSION<\/code>\u0627\u0648\u0631 <code>ROLLBACK_ACTIVE<\/code> \u0645\u0627\u062d\u0648\u0644\u06cc\u0627\u062a\u06cc \u0645\u062a\u063a\u06cc\u0631\u0627\u062a \u0645\u06cc\u06ba\u06d4 \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 \u0627\u0633\u06d2 \u067e\u0631\u0646\u0679 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 <code>served by aws\/1.0.0<\/code>.<\/p>\n<\/li>\n<li>\n<p><code>api\/src\/routes\/transactions.js<\/code> \u062a\u0631\u0633\u06cc\u0644\u0627\u062a \u0632\u0631 \u067e\u0631 \u0639\u0645\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u062a\u0644\u0627\u0634 \u06a9\u0631\u06cc\u06ba\u06d4 <code>idempotency_key<\/code> \u0627\u0648\u067e\u0631 \u06a9\u06d2 \u0642\u0631\u06cc\u0628 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4 \u06cc\u06c1 \u06a9\u0633\u06cc \u0628\u06be\u06cc \u0686\u06cc\u0632 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0686\u0644\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><code>api\/src\/db.js<\/code> \u0627\u067e\u0646\u06d2 API \u06a9\u0648 Postgres \u0633\u06d2 \u0645\u0631\u0628\u0648\u0637 \u06a9\u0631\u06cc\u06ba\u06d4 \u062a\u0644\u0627\u0634 \u06a9\u0631\u06cc\u06ba <code>DB_POOL_SIZE || '10'<\/code>.<\/p>\n<\/li>\n<\/ol>\n<p>\u0688\u06cc\u0646\u06cc\u0626\u0644 \u0622\u067e \u06a9\u0648 \u0622\u062e\u0631\u06cc \u0641\u0627\u0626\u0644 \u067e\u0631 \u0631\u0648\u06a9\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>&quot;\u06a9\u0646\u06a9\u0634\u0646 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u06a9\u06be\u0644\u06cc \u0644\u0627\u0626\u0646 \u06c1\u06d2\u06d4 \u0627\u06cc\u06a9 API \u0639\u0645\u0644 \u0645\u06cc\u06ba \u0628\u06cc\u06a9 \u0648\u0642\u062a 10 \u0644\u0627\u0626\u0646\u06cc\u06ba \u06c1\u0648 \u0633\u06a9\u062a\u06cc \u06c1\u06cc\u06ba\u06d4 \u0627\u0633 \u0646\u0645\u0628\u0631 \u06a9\u0648 \u06cc\u0627\u062f \u0631\u06a9\u06be\u06cc\u06ba\u06d4&#8221;<\/p>\n<h4 id=\"heading-what-you-now-know\">\u0622\u067e \u0627\u0628 \u06a9\u06cc\u0627 \u062c\u0627\u0646\u062a\u06d2 \u06c1\u06cc\u06ba<\/h4>\n<pre><code class=\"language-plaintext\">index.js                 \u2192 starts the API and connects the routes\nservedBy.js              \u2192 says which cloud answered (aws or gke)\nroutes\/transactions.js   \u2192 sends money, checks the idempotency key first\ndb.js                    \u2192 talks to Postgres, up to 10 connections per process\n<\/code><\/pre>\n<p><code>servedBy.js<\/code> \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 \u0644\u0627\u0626\u0646\u0648\u06ba \u06a9\u0648 \u067e\u064f\u0631 \u06a9\u0631\u06cc\u06ba\u06d4 <code>served by aws\/1.0.0<\/code>. \u06cc\u06c1 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2 \u06a9\u06c1 \u06a9\u0633 \u0646\u06d2 \u0644\u0627\u06af \u0627\u0646 \u06a9\u06cc\u0627\u060c \u0644\u06cc\u06a9\u0646 \u06a9\u0633 \u0628\u0627\u062f\u0644 \u0646\u06d2 \u062c\u0648\u0627\u0628 \u062f\u06cc\u0627\u06d4<\/p>\n<p>\u0641\u06cc \u0627\u0644\u062d\u0627\u0644 \u0627\u06cc\u06a9 API \u0639\u0645\u0644 \u06c1\u06d2\u060c \u0644\u06c1\u0630\u0627 10 \u06a9\u0646\u06a9\u0634\u0646 \u06a9\u0644 \u067e\u0648\u0644 \u06c1\u06d2\u06d4 GKE \u0628\u06cc\u06a9 \u0648\u0642\u062a API \u06a9\u06cc \u0645\u062a\u0639\u062f\u062f \u06a9\u0627\u067e\u06cc\u0627\u06ba \u0686\u0644\u0627\u062a\u0627 \u06c1\u06d2\u06d4 Kubernetes \u06c1\u0631 \u0627\u06cc\u06a9 \u06a9\u0627\u067e\u06cc \u06a9\u0648 \u067e\u0648\u0688 \u06a9\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u06c1\u0631 \u067e\u0648\u0688 \u06a9\u0627 \u0627\u067e\u0646\u0627 10 \u067e\u0648\u0644 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u062a\u0645\u0627\u0645 \u067e\u0648\u0688 \u0627\u06cc\u06a9 \u06c1\u06cc \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u06a9\u0627 \u0627\u0634\u062a\u0631\u0627\u06a9 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0628\u0627\u0628 22 \u0627\u0633 \u0631\u06cc\u0627\u0636\u06cc \u0645\u06cc\u06ba \u0648\u0627\u067e\u0633 \u0622\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h4 id=\"heading-done-when\">\u0645\u06a9\u0645\u0644 \u06c1\u0648\u0646\u06d2 \u067e\u0631:<\/h4>\n<ul>\n<li>\u0622\u067e \u06cc\u06c1 \u062f\u06cc\u06a9\u06be\u06d2 \u0628\u063a\u06cc\u0631 \u0628\u062a\u0627 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba \u06a9\u06c1 \u06a9\u0648\u0646 \u0633\u06cc \u0641\u0627\u0626\u0644\u06cc\u06ba \u06a9\u0646\u06a9\u0634\u0646 \u06a9\u06cc \u062d\u062f\u06cc\u06ba \u0637\u06d2 \u06a9\u0631\u062a\u06cc \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u06a9\u0648\u0646 \u0633\u06cc \u0641\u0627\u0626\u0644\u06cc\u06ba \u067e\u0644\u06cc\u0679 \u0641\u0627\u0631\u0645 \u06a9\u06d2 \u0646\u0627\u0645 \u0628\u062a\u0627\u062a\u06cc \u06c1\u06cc\u06ba\u06d4<\/li>\n<\/ul>\n<h3 id=\"heading-chapter-3-prove-a-retry-never-charges-twice\">\u0628\u0627\u0628 3\u06d4 \u062b\u0627\u0628\u062a \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 \u062f\u0648\u0628\u0627\u0631\u06c1 \u06a9\u0648\u0634\u0634\u0648\u06ba \u06a9\u0627 \u062f\u0648 \u0628\u0627\u0631 \u0628\u0644 \u0646\u06c1\u06cc\u06ba \u062f\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/h3>\n<p><em>\u067e\u06cc\u0631 2:10 PM<\/em><\/p>\n<p>\u062f\u0648\u067e\u06c1\u0631 \u06a9\u06d2 \u06a9\u06be\u0627\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f\u060c \u0645\u062c\u06be\u06d2 \u06a9\u0633\u06cc \u0627\u06cc\u0633\u06d2 \u0634\u062e\u0635 \u06a9\u0627 \u067e\u06cc\u063a\u0627\u0645 \u0645\u0644\u062a\u0627 \u06c1\u06d2 \u062c\u0633 \u0633\u06d2 \u0645\u06cc\u06ba \u0627\u0628\u06be\u06cc \u062a\u06a9 \u0646\u06c1\u06cc\u06ba \u0645\u0644\u0627\u06d4 \u0639\u0645\u0627\u0631\u06c1 \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc\u0648\u06ba \u06a9\u06d2 API \u06a9\u0648 \u0628\u0631\u0642\u0631\u0627\u0631 \u0631\u06a9\u06be\u062a\u06cc \u06c1\u06d2\u06d4 \u0645\u0627\u06cc\u0627 \u0646\u06d2 \u0633\u0644\u0627\u0645 \u06a9\u0631\u0646\u0627 \u0686\u06be\u0648\u0691 \u062f\u06cc\u0627 \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u0627\u0633 \u0646\u06d2 \u06a9\u06c1\u0627 \u06a9\u06c1 \u0648\u06c1 \u0627\u067e\u0646\u06d2 \u0644\u06cc\u067e \u0679\u0627\u067e \u067e\u0631 ClearPay \u0686\u0644\u0627 \u0631\u06c1\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u0639\u0645\u0627\u0631\u06c1: &quot;\u0627\u06cc\u06a9 \u06c1\u06cc \u06a9\u0644\u06cc\u062f \u0633\u06d2 \u062f\u0648 \u0628\u0627\u0631 $20 \u0628\u06be\u06cc\u062c\u06cc\u06ba\u06d4 \u0627\u06cc\u0644\u0633 \u06a9\u0627 \u0628\u06cc\u0644\u0646\u0633 $20 \u06a9\u0645 \u06c1\u0648\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u060c $40 \u0646\u06c1\u06cc\u06ba\u06d4&#8221;<\/p>\n<h4 id=\"heading-why-this-matters\">\u06cc\u06c1 \u06a9\u06cc\u0648\u06ba \u0627\u06c1\u0645\u06cc\u062a \u0631\u06a9\u06be\u062a\u0627 \u06c1\u06d2\u06d4<\/h4>\n<p>\u0627\u06cc\u0644\u0633 \u0628\u0627\u0628 \u06a9\u0648 $20 \u0628\u06be\u06cc\u062c\u062a\u06cc \u06c1\u06d2\u06d4 \u062c\u0628 \u0645\u06cc\u06ba \u0628\u06be\u06cc\u062c\u06cc\u06ba \u067e\u0631 \u0679\u06cc\u067e \u06a9\u0631\u062a\u0627 \u06c1\u0648\u06ba\u060c \u0627\u0633\u06a9\u0631\u06cc\u0646 \u062c\u0645 \u062c\u0627\u062a\u06cc \u06c1\u06d2\u06d4 \u0645\u062c\u06be\u06d2 \u06cc\u0642\u06cc\u0646 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2 \u06a9\u06c1 \u0622\u06cc\u0627 \u0645\u06cc\u0631\u06cc \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u06c1\u0648 \u06af\u0626\u06cc\u060c \u0627\u0633 \u0644\u06cc\u06d2 \u0645\u06cc\u06ba \u062f\u0648\u0628\u0627\u0631\u06c1 \u0628\u06be\u06cc\u062c\u06cc\u06ba \u067e\u0631 \u0679\u06cc\u067e \u06a9\u0631\u062a\u0627 \u06c1\u0648\u06ba\u06d4<\/p>\n<p>\u062a\u062d\u0641\u0638 \u06a9\u06d2 \u0628\u063a\u06cc\u0631\u060c API \u062f\u0648 \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0648\u06ba \u06a9\u06cc \u062a\u0635\u062f\u06cc\u0642 \u06a9\u0631\u06d2 \u06af\u0627 \u0627\u0648\u0631 \u062f\u0648 \u0628\u0627\u0631 $20 \u0648\u0635\u0648\u0644 \u06a9\u0631\u06d2 \u06af\u0627\u06d4 \u0627\u06cc\u0644\u0633 \u0627\u06cc\u06a9 \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u0645\u06cc\u06ba $40 \u06a9\u06be\u0648 \u062f\u06cc\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u06a9\u06c1 <code>idempotency_key<\/code> \u06cc\u06c1 \u0628\u0646\u062f \u06a9\u0631\u0648\u06d4 &quot;Idempotent&#8221; \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u06a9\u06c1 \u0627\u0633\u06d2 \u062f\u06c1\u0631\u0627\u0646\u0627 \u0645\u062d\u0641\u0648\u0638 \u06c1\u06d2\u06d4 \u0627\u0633\u06d2 \u062f\u0648 \u0628\u0627\u0631 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u0648\u06c1\u06cc \u0646\u062a\u0627\u0626\u062c \u0645\u0644\u062a\u06d2 \u06c1\u06cc\u06ba \u062c\u06cc\u0633\u06d2 \u0627\u06cc\u06a9 \u0628\u0627\u0631 \u06a9\u0631\u0646\u06d2 \u0633\u06d2\u06d4<\/p>\n<p>\u06a9\u0644\u06cc\u062f \u0627\u06cc\u06a9 \u0644\u06cc\u0628\u0644 \u06c1\u06d2 \u062c\u0633\u06d2 \u0627\u06cc\u067e \u06c1\u0631 \u0628\u0627\u0631 \u062c\u0628 \u0622\u067e \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u0638\u0627\u06c1\u0631 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4 \u0645\u062b\u0627\u0644 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 <code>round-a<\/code>.<\/p>\n<ol>\n<li>\n<p>\u067e\u06c1\u0644\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0627\u06cc\u06a9 \u0644\u06cc\u0628\u0644 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0622\u062a\u06cc \u06c1\u06d2\u06d4 <code>round-a<\/code>. API \u0644\u06cc\u0628\u0644 \u06a9\u0648 \u0630\u062e\u06cc\u0631\u06c1 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 $20 \u0686\u0627\u0631\u062c \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u062f\u0648\u0633\u0631\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0627\u0633\u06cc \u0644\u06cc\u0628\u0644 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0622\u062a\u06cc \u06c1\u06d2\u06d4 API \u0645\u0646\u062f\u0631\u062c\u06c1 \u0630\u06cc\u0644 \u06c1\u06d2\u06d4 <code>round-a<\/code> \u062f\u0648\u0628\u0627\u0631\u06c1 \u0627\u0633 \u0645\u06cc\u06ba \u0622\u067e \u06a9\u0648 \u06a9\u0648\u0626\u06cc \u067e\u06cc\u0633\u06c1 \u0646\u06c1\u06cc\u06ba \u0644\u06af\u062a\u0627 \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u0622\u067e \u062c\u0627\u0646\u062a\u06d2 \u06c1\u06cc\u06ba \u06a9\u06c1 \u06cc\u06c1 \u0627\u06cc\u06a9 \u06c1\u06cc \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u06c1\u06d2\u06d4 \u067e\u06c1\u0644\u0627 \u0646\u062a\u06cc\u062c\u06c1 \u0648\u0627\u067e\u0633 \u0628\u06be\u06cc\u062c\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<\/ol>\n<p>\u0627\u06cc\u06a9 \u06c1\u06cc \u0644\u06cc\u0628\u0644 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u0627\u06cc\u06a9 \u06c1\u06cc \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u06c1\u062c\u0631\u062a \u06a9\u06d2 \u062f\u0648\u0631\u0627\u0646 \u06cc\u06c1 \u0627\u0648\u0631 \u0628\u06be\u06cc \u0627\u06c1\u0645 \u06c1\u06d2\u06d4 \u06a9\u0628\u06be\u06cc \u06a9\u0628\u06be\u06cc \u067e\u06c1\u0644\u0627 \u0679\u06cc\u0628 AWS \u067e\u0631 \u062c\u0627\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u062f\u0648\u0633\u0631\u06cc \u0628\u0627\u0631 \u062f\u0648\u0628\u0627\u0631\u06c1 \u06a9\u0648\u0634\u0634\u06cc\u06ba GKE \u067e\u0631 \u062c\u0627\u062a\u06cc \u06c1\u06cc\u06ba\u06d4 \u062f\u0648 \u0645\u062e\u062a\u0644\u0641 \u0633\u0631\u0648\u0631\u0632\u060c \u0644\u06cc\u06a9\u0646 \u0627\u06cc\u06a9 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2. GKE \u0627\u0633 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u06a9\u0648 \u062f\u06cc\u06a9\u06be\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0645\u0646\u062f\u0631\u062c\u06c1 \u0630\u06cc\u0644 \u062a\u0644\u0627\u0634 \u06a9\u0631\u062a\u0627 \u06c1\u06d2: <code>round-a<\/code>\u06cc\u06c1 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0686\u0627\u0631\u062c \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u06d2 \u06af\u0627\u06d4 \u0627\u06cc\u06a9 \u0645\u0634\u062a\u0631\u06a9\u06c1 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u0635\u0627\u0631\u0641\u06cc\u0646 \u06a9\u0648 \u062f\u0648\u0646\u0648\u06ba \u0628\u0627\u062f\u0644\u0648\u06ba \u0645\u06cc\u06ba \u0645\u062d\u0641\u0648\u0638 \u0631\u06a9\u06be\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba <code>curl<\/code> \u0627\u0633 \u0628\u0627\u0628 \u0645\u06cc\u06ba \u06a9\u0648\u0626\u06cc \u0679\u0631\u0627\u0646\u0633\u0641\u0631 \u0628\u0679\u0646 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 UI \u06c1\u0631 \u06a9\u0644\u06a9 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u0646\u0626\u06cc \u06a9\u0644\u06cc\u062f \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0644\u06c1\u0630\u0627 \u06c1\u0631 \u06a9\u0644\u06a9 \u06a9\u06d2 \u0646\u062a\u06cc\u062c\u06d2 \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u0646\u0626\u06cc \u0645\u0646\u062a\u0642\u0644\u06cc \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>idempotency \u06a9\u06d2 \u0628\u0627\u0631\u06d2 \u0645\u06cc\u06ba \u0645\u0632\u06cc\u062f \u0645\u0639\u0644\u0648\u0645\u0627\u062a \u06a9\u06d2 \u0644\u06cc\u06d2\u060c PayFlow \u062f\u06cc\u06a9\u06be\u06cc\u06ba: A Production-Grade FinTech System for Real-World DevOps Learning\u06d4<\/p>\n<h4 id=\"heading-steps\">\u0642\u062f\u0645<\/h4>\n<p>\u062f\u0648\u0633\u0631\u06d2 \u0679\u0631\u0645\u06cc\u0646\u0644 \u0645\u06cc\u06ba \u062f\u0631\u062c \u0630\u06cc\u0644 \u0641\u0648\u0644\u0688\u0631 \u0645\u06cc\u06ba \u0631\u06c1\u06cc\u06ba: <code>docker-compose.yml<\/code>. \u0627\u06cc\u06a9 \u0648\u0642\u062a \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u06a9\u0645\u0627\u0646\u0688 \u067e\u0631 \u0639\u0645\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u06af\u0644\u06cc \u06a9\u0645\u0627\u0646\u0688 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0622\u0624\u0679 \u067e\u0679 \u067e\u0691\u06be\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u06cc\u0644\u0633 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0644\u0627\u06af \u0627\u0646 \u06a9\u0631\u06cc\u06ba\u06d4 \u06cc\u06c1 \u0627\u0633 \u06a9\u06d2 \u0644\u0627\u06af \u0627\u0646 \u0679\u0648\u06a9\u0646 \u06a9\u0648 \u0634\u06cc\u0644 \u0645\u062a\u063a\u06cc\u0631 \u0645\u06cc\u06ba \u0645\u062d\u0641\u0648\u0638 \u06a9\u0631 \u062f\u06d2 \u06af\u0627\u06d4 <code>TOKEN<\/code>. \u0679\u0648\u06a9\u0646 \u0627\u0633 \u0628\u0627\u062a \u06a9\u0627 \u062b\u0628\u0648\u062a \u06c1\u06d2 \u06a9\u06c1 \u0627\u06cc\u0644\u0633 \u0646\u06d2 \u0644\u0627\u06af \u0627\u0646 \u06a9\u06cc\u0627\u06d4 <code>$TOKEN<\/code>.<\/p>\n<pre><code class=\"language-bash\">TOKEN=$(curl -s -X POST localhost:4000\/api\/auth\/login \n  -H \"Content-Type: application\/json\" \n  -d '{\"email\":\"alice@clearpay.dev\",\"password\":\"password123\"}' \n  | python3 -c \"import sys, json; print(json.load(sys.stdin)['token'])\")\n<\/code><\/pre>\n<p>\u0627\u06af\u0631 \u06cc\u06c1 \u06a9\u0627\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u062a\u0648\u060c \u06a9\u0686\u06be \u0628\u06be\u06cc \u067e\u0631\u0646\u0679 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u06d2 \u06af\u0627. \u0686\u0644\u0627\u0626\u06cc\u06ba <code>echo $TOKEN<\/code> \u062a\u0635\u062f\u06cc\u0642 \u06a9\u0631\u0646\u0627\u06d4 \u0622\u067e \u06a9\u0648 \u0627\u06cc\u06a9 \u0644\u0645\u0628\u06cc \u062a\u0627\u0631 \u062f\u06cc\u06a9\u06be\u0646\u0627 \u0686\u0627\u06c1\u0626\u06d2\u06d4<\/p>\n<p>\u067e\u06be\u0631 \u0627\u06cc\u0644\u0633 \u06a9\u06cc \u06a9\u06c1\u0627\u0646\u06cc \u067e\u0691\u06be\u06cc\u06ba\u06d4 \u0628\u0631\u0627\u0626\u06d2 \u0645\u06c1\u0631\u0628\u0627\u0646\u06cc \u062f\u0631\u062c \u0630\u06cc\u0644 \u062a\u062d\u0631\u06cc\u0631 \u06a9\u0631\u06cc\u06ba\u06d4 <code>balance_cents<\/code> \u0646\u0645\u0628\u0631<\/p>\n<pre><code class=\"language-bash\">curl -s localhost:4000\/api\/accounts\/me -H \"Authorization: Bearer $TOKEN\"\n<\/code><\/pre>\n<p>\u06cc\u06c1 \u062a\u0648\u0642\u0639 \u06a9\u06d2 \u0645\u0637\u0627\u0628\u0642 \u0644\u06af\u062a\u0627 \u06c1\u06d2\u06d4 \u0622\u067e \u06a9\u0627 \u0641\u0648\u0646 \u0646\u0645\u0628\u0631 \u0627\u0648\u0631 <code>id<\/code> \u06cc\u06c1 \u0645\u062e\u062a\u0644\u0641 \u06c1\u0648\u06af\u0627:<\/p>\n<pre><code class=\"language-json\">{\"account\":{\"id\":\"...\",\"balance_cents\":\"94000\",\"currency\":\"USD\"},\"served_by\":{\"platform\":\"aws\",\"version\":\"1.0.0\",\"instance\":\"...\",\"commit\":\"local\",\"rollback_active\":false}}\n<\/code><\/pre>\n<p><code>94000<\/code> \u0627\u0633 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 $940.00\u06d4 \u0627\u06af\u0631 \u0622\u067e \u0646\u06d2 \u0627\u0628\u06be\u06cc \u062a\u06a9 \u06a9\u0686\u06be \u0646\u06c1\u06cc\u06ba \u0628\u06be\u06cc\u062c\u0627 \u06c1\u06d2 \u062a\u0648 \u0622\u067e \u0627\u0633\u06d2 \u062f\u06cc\u06a9\u06be \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <code>100000<\/code> ($1,000.00)\u06d4 \u062d\u06a9\u0645 \u06a9\u06d2 \u0645\u0637\u0627\u0628\u0642 <code>missing_token<\/code> \u06cc\u0627 <code>invalid_token<\/code>\u0645\u0631\u062d\u0644\u06c1 1 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0686\u0644\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<p>\u0627\u0628 \u0627\u06cc\u06a9 \u0627\u06cc\u0633\u0627 \u0644\u06cc\u0628\u0644 \u0645\u0646\u062a\u062e\u0628 \u06a9\u0631\u06cc\u06ba \u062c\u0648 \u0622\u067e \u0646\u06d2 \u0627\u0628\u06be\u06cc \u062a\u06a9 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u0646\u06c1\u06cc\u06ba \u06a9\u06cc\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-bash\">LABEL=round-a\n<\/code><\/pre>\n<p>Bob $20 \u0628\u06be\u06cc\u062c\u06cc\u06ba\u06d4 <code>2000<\/code> \u06cc\u06c1 \u0633\u06cc\u0646\u0679 \u0645\u06cc\u06ba $20.00 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-bash\">curl -s -X POST localhost:4000\/api\/transactions \n  -H \"Authorization: Bearer $TOKEN\" -H \"Content-Type: application\/json\" \n  -d \"{\"to_email\":\"bob@clearpay.dev\",\"amount_cents\":2000,\"idempotency_key\":\"$LABEL\"}\"\n<\/code><\/pre>\n<p>\u0627\u0633\u06d2 \u062a\u0644\u0627\u0634 \u06a9\u0631\u06cc\u06ba\u06d4 <code>\"replayed\"<\/code> \u062c\u0648\u0627\u0628 \u0633\u06d2:<\/p>\n<ul>\n<li>\n<p><code>\"replayed\":false<\/code> \u0627\u0633 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u06a9\u06c1 \u0627\u0633 \u0645\u0646\u062a\u0642\u0644\u06cc \u06a9\u06cc \u0644\u0627\u06af\u062a $20 \u06c1\u06d2\u06d4 \u062c\u0627\u0631\u06cc \u0631\u06a9\u06be\u06cc\u06ba<\/p>\n<\/li>\n<li>\n<p><code>\"replayed\":true<\/code> \u0627\u0633 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u06a9\u06c1 \u06cc\u06c1 \u0644\u06cc\u0628\u0644 \u067e\u06c1\u0644\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06cc\u0627 \u062c\u0627 \u0686\u06a9\u0627 \u06c1\u06d2\u060c \u0645\u0645\u06a9\u0646\u06c1 \u0637\u0648\u0631 \u067e\u0631 \u067e\u0686\u06be\u0644\u06d2 \u0631\u0646 \u0645\u06cc\u06ba\u06d4 \u067e\u06cc\u0633\u06c1 \u0645\u0646\u062a\u0642\u0644 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u0627\u06d4 \u0633\u06cc\u0679 <code>LABEL=round-b<\/code> \u0627\u0648\u0631 \u0627\u0633\u06d2 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0628\u06be\u06cc\u062c\u06cc\u06ba \u062c\u0628 \u062a\u06a9 \u06a9\u06c1 \u0622\u067e \u0627\u0633\u06d2 \u0646\u06c1 \u062f\u06cc\u06a9\u06be\u06cc\u06ba <code>\"replayed\":false<\/code>.<\/p>\n<\/li>\n<\/ul>\n<p>\u0628\u0631\u0627\u06c1 \u06a9\u0631\u0645 \u0648\u06c1\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u062f\u0648\u0628\u0627\u0631\u06c1 \u0628\u06be\u06cc\u062c\u06cc\u06ba\u06d4 \u062a\u0628\u062f\u06cc\u0644 \u0646\u06c1 \u06a9\u0631\u0648 <code>LABEL<\/code>.<\/p>\n<pre><code class=\"language-bash\">curl -s -X POST localhost:4000\/api\/transactions \n  -H \"Authorization: Bearer $TOKEN\" -H \"Content-Type: application\/json\" \n  -d \"{\"to_email\":\"bob@clearpay.dev\",\"amount_cents\":2000,\"idempotency_key\":\"$LABEL\"}\"\n<\/code><\/pre>\n<p>\u0627\u0628 \u0622\u067e \u06a9\u0648 \u062f\u06cc\u06a9\u06be\u0646\u0627 \u0686\u0627\u06c1\u0626\u06d2 <code>\"replayed\":true<\/code>\u0627\u0648\u0631 \u0633\u0648\u062f\u0627 <code>id<\/code> \u067e\u06c1\u0644\u06cc \u0645\u0646\u062a\u0642\u0644\u06cc \u0633\u06d2 \u0645\u06cc\u0644 \u06a9\u06be\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u06a9\u0627\u0624\u0646\u0679 \u062f\u0648\u0628\u0627\u0631\u06c1 \u067e\u0691\u06be\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">curl -s localhost:4000\/api\/accounts\/me -H \"Authorization: Bearer $TOKEN\"\n<\/code><\/pre>\n<h4 id=\"heading-check\">\u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba<\/h4>\n<p><code>balance_cents<\/code> \u06cc\u06c1 4000 \u0633\u06d2 \u06a9\u0645 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u06cc\u06c1 \u0622\u067e \u06a9\u06d2 \u0644\u06a9\u06be\u06d2 \u06c1\u0648\u0626\u06d2 \u0646\u0645\u0628\u0631 \u0633\u06d2 2000 \u06a9\u0645 \u06c1\u06d2\u06d4 \u0627\u06af\u0631 \u0622\u067e \u0646\u06d2 \u0627\u06af\u0644\u06cc \u0628\u0627\u0631 \u0634\u0631\u0648\u0639 \u06a9\u06cc\u0627\u06d4 <code>94000<\/code>\u0627\u0628 \u0645\u06cc\u06ba \u0633\u0645\u062c\u06be \u06af\u06cc\u0627 \u06c1\u0648\u06ba\u06d4 <code>92000<\/code>.<\/p>\n<h4 id=\"heading-if-it-fails\">\u0627\u06af\u0631 \u06cc\u06c1 \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648\u062c\u0627\u062a\u0627 \u06c1\u06d2:<\/h4>\n<ul>\n<li>\n<p><code>echo $TOKEN<\/code> \u062e\u0627\u0644\u06cc: \u0644\u0627\u06af \u0627\u0646 \u06a9\u0645\u0627\u0646\u0688 \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0686\u0644\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>\u062f\u0648\u0633\u0631\u06cc \u0645\u0646\u062a\u0642\u0644\u06cc \u0638\u0627\u06c1\u0631 \u06c1\u0648\u062a\u06cc \u0631\u06c1\u062a\u06cc \u06c1\u06d2\u06d4 <code>\"replayed\":false<\/code>: <code>LABEL<\/code> \u062f\u0648 \u0679\u0631\u0627\u0646\u0633\u0645\u06cc\u0634\u0646 \u06a9\u06d2 \u062f\u0631\u0645\u06cc\u0627\u0646 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631 \u062f\u06cc\u0627 \u06af\u06cc\u0627. \u0686\u0644\u0627\u0626\u06cc\u06ba <code>echo $LABEL<\/code>\u067e\u06be\u0631 \u0627\u0633\u06d2 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0628\u06be\u06cc\u062c\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>\u062f\u0648\u0646\u0648\u06ba \u06a9\u06cc \u0645\u0646\u062a\u0642\u0644\u06cc \u0646\u0638\u0631 \u0622\u062a\u06cc \u06c1\u06d2\u06d4 <code>\"replayed\":true<\/code>: \u062a\u0648\u0627\u0632\u0646 \u062a\u0628\u062f\u06cc\u0644 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u06af\u0627\u06d4 \u06a9\u0686\u06be \u0646\u06cc\u0627 \u0645\u0646\u062a\u062e\u0628 \u06a9\u0631\u06cc\u06ba\u06d4 <code>LABEL<\/code> \u067e\u06be\u0631 \u0645\u0631\u062d\u0644\u06c1 3 \u0627\u0648\u0631 4 \u06a9\u0648 \u062f\u06c1\u0631\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<\/ul>\n<h4 id=\"heading-done-when\">\u0645\u06a9\u0645\u0644 \u06c1\u0648\u0646\u06d2 \u067e\u0631:<\/h4>\n<ul>\n<li>\n<p>\u0627\u06cc\u06a9 \u0679\u0631\u0627\u0646\u0633\u0641\u0631 \u0648\u0627\u067e\u0633 \u06a9\u0631 \u062f\u06cc\u0627 \u06af\u06cc\u0627\u06d4 <code>\"replayed\":false<\/code> \u0627\u0648\u0631 \u067e\u06be\u0631 \u0648\u0627\u067e\u0633 \u0622\u06af\u06cc\u0627 <code>\"replayed\":true<\/code> \u0627\u0633\u06cc \u0644\u06cc\u0628\u0644 \u06a9\u06d2 \u0644\u06cc\u06d2<\/p>\n<\/li>\n<li>\n<p><code>balance_cents<\/code> \u06cc\u06c1 4000 \u0646\u06c1\u06cc\u06ba \u0628\u0644\u06a9\u06c1 2000 \u062a\u06a9 \u06af\u0631 \u06af\u06cc\u0627\u06d4<\/p>\n<\/li>\n<\/ul>\n<h3 id=\"heading-chapter-4-build-the-aws-server-with-terraform\">\u0628\u0627\u0628 4. Terraform \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 AWS \u0633\u0631\u0648\u0631\u0632 \u0628\u0646\u0627\u0646\u0627<\/h3>\n<p><em>\u0645\u0646\u06af\u0644 9:15 AM<\/em><\/p>\n<p>\u0645\u0627\u06cc\u0627 \u0645\u06cc\u0679\u0646\u06af \u06a9\u06d2 \u0644\u06cc\u06d2 \u062c\u0627\u062a\u06d2 \u0648\u0642\u062a \u0622\u067e \u06a9\u06cc \u0645\u06cc\u0632 \u06a9\u06d2 \u067e\u0627\u0633 \u0631\u06a9 \u062c\u0627\u062a\u06cc \u06c1\u06d2\u06d4 \u06a9\u0644 \u0622\u067e \u0646\u06d2 \u06a9\u06c1\u0627 \u06a9\u06c1 ClearPay \u0622\u067e \u06a9\u06d2 \u0644\u06cc\u067e \u0679\u0627\u067e \u067e\u0631 \u0686\u0644\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u062f\u0648\u0628\u0627\u0631\u06c1 \u06a9\u0648\u0634\u0634 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u0635\u0631\u0641 \u0627\u06cc\u06a9 \u0628\u0627\u0631 \u0648\u0635\u0648\u0644 \u06a9\u06cc \u062c\u0627\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u0645\u0627\u06cc\u0627: &quot;\u0679\u06be\u06cc\u06a9 \u06c1\u06d2\u060c \u0627\u0628 \u0644\u0648\u06a9\u0644 \u06c1\u0648\u0633\u0679 \u06a9\u0627 \u0633\u0648\u0627\u0644 \u06c1\u06cc \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 AWS \u067e\u0631 ClearPay \u0627\u0646\u0633\u0679\u0627\u0644 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u062b\u0627\u0628\u062a \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 \u0622\u067e \u06a9\u06d2 \u0635\u0627\u0631\u0641\u06cc\u0646 \u0648\u06c1\u0627\u06ba \u0644\u06cc\u0646 \u062f\u06cc\u0646 \u0645\u06a9\u0645\u0644 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u067e\u06be\u0631 \u06c1\u0645 AWS \u0686\u06be\u0648\u0691\u0646\u06d2 \u06a9\u06d2 \u0628\u0627\u0631\u06d2 \u0645\u06cc\u06ba \u0628\u0627\u062a \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0688\u06cc\u0646\u06cc\u0644 \u0622\u067e \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0627\u0633 \u067e\u0631 \u06a9\u0627\u0645 \u06a9\u0631\u06cc\u06ba \u06af\u06d2\u06d4&#8221;<\/p>\n<p>\u0688\u06cc\u0646\u06cc\u0626\u0644 \u0627\u0633 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0648\u0627\u0644\u06cc \u0645\u06cc\u0632 \u0633\u06d2 \u0627\u067e\u0646\u06cc \u06a9\u0631\u0633\u06cc \u06af\u06be\u0645\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0688\u06cc\u0646\u06cc\u0644: &quot;\u06c1\u0645 \u0634\u0631\u0648\u0639 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2\u060c \u06cc\u06c1\u0627\u06ba \u0627\u06cc\u06a9 \u0627\u0635\u0648\u0644 \u06c1\u06d2: \u06a9\u0686\u06be \u0628\u06be\u06cc \u0646\u06c1 \u0686\u06be\u0648\u0691\u06cc\u06ba\u06d4 <code>terraform plan<\/code>&quot;<\/p>\n<h4 id=\"heading-why-this-matters\">\u06cc\u06c1 \u06a9\u06cc\u0648\u06ba \u0627\u06c1\u0645\u06cc\u062a \u0631\u06a9\u06be\u062a\u0627 \u06c1\u06d2\u06d4<\/h4>\n<p>\u06cc\u06c1 \u06a9\u062a\u0627\u0628 \u0627\u0633 \u0633\u06cc\u0679 \u0627\u067e \u0633\u06d2 \u0634\u0631\u0648\u0639 \u06c1\u0648\u062a\u06cc \u06c1\u06d2 \u062c\u0633\u06d2 \u0628\u06c1\u062a \u0633\u06cc \u0686\u06be\u0648\u0679\u06cc \u06a9\u0645\u067e\u0646\u06cc\u0627\u06ba \u0686\u0644\u0627\u062a\u06cc \u06c1\u06cc\u06ba: \u0688\u0648\u06a9\u0631 \u06a9\u06d2 \u0628\u063a\u06cc\u0631 \u0627\u06cc\u06a9 \u0644\u06cc\u0646\u06a9\u0633 \u0633\u0631\u0648\u0631\u06d4<\/p>\n<p>\u0633\u0633\u0679\u0645\u0688\u060c \u0644\u06cc\u0646\u06a9\u0633 \u0633\u0631\u0648\u0633 \u0645\u06cc\u0646\u06cc\u062c\u0631\u060c \u0633\u0631\u0648\u0631 \u06a9\u06d2 \u0628\u0648\u0679 \u06c1\u0648\u0646\u06d2 \u067e\u0631 \u0646\u0648\u0688 API \u0634\u0631\u0648\u0639 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 nginx \u0627\u0633 \u06a9\u06d2 \u0633\u0627\u0645\u0646\u06d2 \u0628\u06cc\u0679\u06be\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u067e\u0648\u0631\u0679 443 \u067e\u0631 HTTPS \u06a9\u0648 \u06c1\u06cc\u0646\u0688\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 PostgreSQL Amazon RDS \u067e\u0631 \u0686\u0644\u062a\u0627 \u06c1\u06d2\u060c \u0627\u06cc\u06a9 \u0645\u0646\u0638\u0645 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u0633\u0631\u0648\u0633\u06d4<\/p>\n<p>\u06a9\u0648\u0626\u06cc AWS \u0644\u0648\u0688 \u0628\u06cc\u0644\u0646\u0633 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u0627\u06cc\u06a9 \u0644\u0648\u0688 \u0628\u06cc\u0644\u0646\u0633\u0631 \u0679\u0631\u06cc\u0641\u06a9 \u06a9\u0648 \u0645\u062a\u0639\u062f\u062f \u0633\u0631\u0648\u0631\u0632 \u067e\u0631 \u062a\u0642\u0633\u06cc\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u0627\u0633 \u0633\u06cc\u0679 \u0627\u067e \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u06c1\u06d2\u06d4 \u0627\u06cc\u06a9 \u06a9\u0648 \u0634\u0627\u0645\u0644 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u0622\u067e \u06a9\u06d2 \u0641\u06cc \u06af\u06be\u0646\u0679\u06c1 \u06a9\u06d2 \u0628\u0644 \u0645\u06cc\u06ba \u06a9\u0648\u0626\u06cc \u0641\u0627\u0626\u062f\u06c1 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4 \u0646\u0645\u0628\u0631\u0632 \u067e\u0631 \u06c1\u06cc\u06ba\u06d4 <code>infra\/aws\/COST.md<\/code>.<\/p>\n<p>\u0641\u0627\u0626\u0644 <code>api\/Dockerfile<\/code> \u06cc\u06c1 \u0645\u0648\u062c\u0648\u062f \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u0645\u06cc\u06ba \u0627\u0633\u06d2 \u0635\u0631\u0641 \u0644\u06cc\u067e \u0679\u0627\u067e \u067e\u0631 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u0648\u06ba\u06d4 AWS \u0633\u0631\u0648\u0631\u0632 Docker \u0646\u06c1\u06cc\u06ba \u0686\u0644\u0627\u062a\u06d2\u06d4<\/p>\n<p>\u0688\u06cc\u0646\u06cc\u0626\u0644: &quot;EC2 \u0633\u0631\u0648\u0631 \u067e\u0631 \u06a9\u0648\u0626\u06cc Docker \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 systemd \u0628\u0648\u0679 \u06a9\u06d2 \u0648\u0642\u062a nginx \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0646\u0648\u0688 \u0634\u0631\u0648\u0639 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0648\u06c1 \u0633\u0631\u0648\u0631 \u06c1\u06d2 \u062c\u0633\u06d2 \u0622\u067e \u0648\u0631\u0627\u062b\u062a \u0645\u06cc\u06ba \u0644\u06d2 \u0631\u06c1\u06d2 \u06c1\u06cc\u06ba\u06d4&#8221;<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/10\/1792188589_211_\u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0648\u06ba-\u06a9\u0648-AWS-\u0633\u06d2-GKE-\u0645\u06cc\u06ba-\u06a9\u06cc\u0633\u06d2-\u0645\u0646\u062a\u0642\u0644-\u06a9\u06cc\u0627-\u062c\u0627\u0626\u06d2\u06d4.png\" alt=\"\u0622\u0631\u06a9\u06cc\u0679\u06cc\u06a9\u0686\u0631 \u0688\u0627\u06cc\u0627\u06af\u0631\u0627\u0645 \u062c\u0633 \u0645\u06cc\u06ba \u062f\u06a9\u06be\u0627\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2 \u06a9\u06c1 \u06a9\u0644\u06cc\u0626\u0631 \u067e\u06d2 AWS \u067e\u0631 \u0686\u0644 \u0631\u06c1\u0627 \u06c1\u06d2 \u0635\u0627\u0631\u0641\u06cc\u0646 \u0644\u0686\u06a9\u062f\u0627\u0631 IP \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 EC2 \u0633\u0631\u0648\u0631 \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u067e\u0648\u0631\u0679 443 \u067e\u0631 nginx \u0633\u06d2 \u062c\u0691\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 Nginx \u0641\u0631\u0646\u0679 \u0627\u06cc\u0646\u0688 \u0641\u0627\u0626\u0644\u0648\u06ba \u06a9\u0648 \u067e\u06cc\u0634 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u067e\u0648\u0631\u0679 4000 \u067e\u0631 systemd \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0646\u0638\u0645 \u06a9\u0631\u062f\u06c1 Node.js \u067e\u0631\u0648\u0633\u06cc\u0633 \u06a9\u0648 API \u06a9\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0648\u06ba \u06a9\u0648 \u0622\u06af\u06d2 \u0628\u06be\u06cc\u062c\u062a\u0627 \u06c1\u06d2\u06d4 API \u067e\u0628\u0644\u06a9 \u0627\u06cc\u0646\u0688 \u067e\u0648\u0627\u0626\u0646\u0679 \u06a9\u06d2 \u0628\u063a\u06cc\u0631 Amazon RDS \u067e\u0631 PostgreSQL 16 \u0633\u06d2 \u0645\u0646\u0633\u0644\u06a9 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4\" style=\"display: block;\" width=\"600\" height=\"400\" loading=\"lazy\" title=\"\"><\/p>\n<p>\u0627\u0648\u067e\u0631 \u062f\u06cc\u0627 \u06af\u06cc\u0627 \u062e\u0627\u06a9\u06c1 \u062f\u06a9\u06be\u0627\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u06a9\u0633\u0679\u0645\u0631 \u06a9\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u06cc\u06ba AWS \u0633\u06d2 ClearPay \u062a\u06a9 \u06a9\u06cc\u0633\u06d2 \u067e\u06c1\u0646\u0686\u062a\u06cc \u06c1\u06cc\u06ba\u06d4 \u0644\u0686\u06a9\u062f\u0627\u0631 IP \u0622\u067e \u06a9\u06d2 EC2 \u0633\u0631\u0648\u0631\u0632 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u0645\u0633\u062a\u062d\u06a9\u0645 \u0639\u0648\u0627\u0645\u06cc \u067e\u062a\u06c1 \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 Nginx \u067e\u0648\u0631\u0679 443 \u067e\u0631 HTTPS \u0679\u0631\u06cc\u0641\u06a9 \u06a9\u0648 \u06c1\u06cc\u0646\u0688\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0641\u0631\u0646\u0679 \u0627\u06cc\u0646\u0688 \u0641\u0627\u0626\u0644\u0648\u06ba \u06a9\u0648 \u067e\u06cc\u0634 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u067e\u0648\u0631\u0679 4000 \u067e\u0631 systemd \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0646\u0638\u0645 \u06a9\u0631\u062f\u06c1 Node.js \u0639\u0645\u0644 \u06a9\u0648 API \u06a9\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u06cc\u06ba \u0628\u06be\u06cc\u062c\u062a\u0627 \u06c1\u06d2\u06d4 API Amazon RDS \u067e\u0631 PostgreSQL \u0633\u06d2 \u0628\u0644\u0646\u06af \u0688\u06cc\u0679\u0627 \u067e\u0691\u06be\u062a\u0627 \u0627\u0648\u0631 \u0644\u06a9\u06be\u062a\u0627 \u06c1\u06d2\u060c \u062c\u0633 \u06a9\u0627 \u0627\u0633 \u0645\u0631\u062d\u0644\u06d2 \u067e\u0631 \u06a9\u0648\u0626\u06cc \u0639\u0648\u0627\u0645\u06cc \u0627\u062e\u062a\u062a\u0627\u0645\u06cc \u0646\u0642\u0637\u06c1 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u0633 \u0628\u0627\u0628 \u0645\u06cc\u06ba AWS \u06a9\u06cc \u062f\u0648 \u0627\u0635\u0637\u0644\u0627\u062d\u0627\u062a \u06c1\u06cc\u06ba:<\/p>\n<ul>\n<li>\n<p>VPC \u0627\u06cc\u06a9 \u0646\u062c\u06cc \u0646\u06cc\u0679 \u0648\u0631\u06a9 \u06c1\u06d2 \u062c\u06c1\u0627\u06ba \u0622\u067e \u06a9\u06d2 \u0633\u0631\u0648\u0631 \u0648\u0627\u0642\u0639 \u06c1\u06cc\u06ba\u06d4 AWS \u06c1\u0631 \u0627\u06a9\u0627\u0624\u0646\u0679 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0688\u06cc\u0641\u0627\u0644\u0679 \u0627\u06a9\u0627\u0624\u0646\u0679 \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u0633 \u0644\u06cc\u0628 \u0645\u06cc\u06ba \u06c1\u0645 \u0627\u0633\u06d2 \u062e\u0648\u062f \u0628\u0646\u0627\u0646\u06d2 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba \u06af\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0633\u06cc\u06a9\u0648\u0631\u0679\u06cc \u06af\u0631\u0648\u067e\u0633 AWS \u06a9\u06cc \u0641\u0627\u0626\u0631 \u0648\u0627\u0644\u0632 \u06c1\u06cc\u06ba\u06d4 \u0633\u0631\u0648\u0631 \u0633\u06d2 \u0645\u0631\u0628\u0648\u0637 \u06c1\u0648\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062f\u0633\u062a\u06cc\u0627\u0628 \u0628\u0646\u062f\u0631\u06af\u0627\u06c1\u06cc\u06ba \u062f\u0631\u062c \u06c1\u06cc\u06ba\u06d4 \u0627\u0633 \u0644\u06cc\u0628 \u06a9\u06d2 \u0644\u06cc\u06d2\u060c \u06c1\u0645 \u0635\u0631\u0641 IPs \u0633\u06d2 SSH\u060c \u06c1\u0631 \u062c\u06af\u06c1 \u0633\u06d2 HTTPS\u060c \u0627\u0648\u0631 API \u0633\u0631\u0648\u0631 \u0633\u06d2 \u0635\u0631\u0641 Postgres \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u062f\u06cc\u06ba \u06af\u06d2\u06d4<\/p>\n<\/li>\n<\/ul>\n<h4 id=\"heading-steps\">\u0642\u062f\u0645<\/h4>\n<p>\u0633\u0628 \u0633\u06d2 \u067e\u06c1\u0644\u06d2\u060c \u06cc\u0642\u06cc\u0646\u06cc \u0628\u0646\u0627\u0626\u06cc\u06ba \u06a9\u06c1 \u0622\u067e \u06a9\u0627 \u0644\u06cc\u067e \u0679\u0627\u067e \u062a\u06cc\u0627\u0631 \u06c1\u06d2\u06d4 \u0627\u0646 \u0645\u06cc\u06ba \u0633\u06d2 \u06c1\u0631 \u0627\u06cc\u06a9 \u06a9\u0648 \u06a9\u0627\u0645 \u06a9\u0631\u0646\u0627 \u0686\u0627\u06c1\u0626\u06d2\u06d4<\/p>\n<pre><code class=\"language-bash\">docker --version          # still needed later\naws sts get-caller-identity\nterraform version         # 1.5 or newer\nssh-keygen -t ed25519 -f ~\/.ssh\/clearpay-deployer -N \"\"\n<\/code><\/pre>\n<p><code>aws sts get-caller-identity<\/code> \u0627\u067e\u0646\u0627 AWS \u0627\u06a9\u0627\u0624\u0646\u0679 \u067e\u0631\u0646\u0679 \u06a9\u0631\u06cc\u06ba\u06d4 \u0627\u06af\u0631 \u06a9\u0648\u0626\u06cc \u063a\u0644\u0637\u06cc \u06c1\u0648 \u062c\u0627\u0626\u06d2 \u062a\u0648 \u0686\u0644\u0627\u0626\u06cc\u06ba\u06d4 <code>aws configure<\/code> IAM \u0635\u0627\u0631\u0641\u06cc\u0646 \u0633\u06d2 \u0631\u0633\u0627\u0626\u06cc \u06a9\u06cc \u0686\u0627\u0628\u06cc\u0627\u06ba \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba \u062c\u0648 EC2\u060c RDS\u060c VPC\u060c \u0627\u0648\u0631 CloudWatch \u06a9\u06d2 \u0627\u0644\u0627\u0631\u0645 \u0628\u0646\u0627 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0688\u0633\u067e\u0648\u0632\u0627\u06cc\u0628\u0644 \u0627\u06a9\u0627\u0624\u0646\u0679\u0633 \u06a9\u06d2 \u0645\u0646\u062a\u0638\u0645\u06cc\u0646 \u0628\u06be\u06cc \u06a9\u0627\u0645 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u0630\u062e\u06cc\u0631\u06c1 \u06a9\u06cc \u062c\u0691 \u0633\u06d2:<\/p>\n<pre><code class=\"language-bash\">cd infra\/aws\/terraform\ncp terraform.tfvars.example terraform.tfvars\n<\/code><\/pre>\n<p>\u06a9\u06be\u0644\u0627 <code>terraform.tfvars<\/code> \u062f\u0648 \u0642\u062f\u0631\u0648\u06ba \u06a9\u0648 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u06cc\u06ba:<\/p>\n<p>\u067e\u06be\u0631:<\/p>\n<pre><code class=\"language-bash\">terraform init\nterraform plan\nterraform apply\n<\/code><\/pre>\n<p>\u062f\u0627\u062e\u0644 \u06c1\u0648\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0645\u0646\u0635\u0648\u0628\u06c1 \u067e\u0691\u06be\u06cc\u06ba <code>yes<\/code>. \u0627\u0633 \u067e\u06c1\u0644\u06cc \u062f\u0648\u0691 \u06a9\u06d2 \u0644\u06cc\u06d2\u060c \u0622\u067e \u06a9\u0648 \u0635\u0631\u0641 EC2\u060c RDS\u060c \u0627\u0648\u0631 \u0633\u06cc\u06a9\u06cc\u0648\u0631\u0679\u06cc \u06af\u0631\u0648\u067e\u0633 \u0628\u0646\u0627\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2\u06d4 \u0627\u06af\u0631 \u0645\u0646\u0635\u0648\u0628\u06c1 \u06cc\u06c1 \u0628\u062a\u0627\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u06a9\u0686\u06be \u0628\u06be\u06cc \u062a\u0628\u0627\u06c1 \u06c1\u0648 \u062c\u0627\u0626\u06d2 \u06af\u0627\u060c \u062a\u0648 \u0631\u0648\u06a9\u06cc\u06ba \u0627\u0648\u0631 \u0644\u0627\u06af\u0648 \u0646\u06c1 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p>\u0679\u06cc\u0631\u0627\u0641\u0627\u0631\u0645 \u0627\u0633\u06cc \u06a9\u06d2 \u0644\u06cc\u06d2 \u0628\u0646\u0627\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4 \u0633\u0631\u0648\u0631 \u0628\u0627\u0628 5 \u062a\u06a9 \u062e\u0627\u0644\u06cc \u06c1\u06d2\u06d4<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/10\/1792188589_824_\u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0648\u06ba-\u06a9\u0648-AWS-\u0633\u06d2-GKE-\u0645\u06cc\u06ba-\u06a9\u06cc\u0633\u06d2-\u0645\u0646\u062a\u0642\u0644-\u06a9\u06cc\u0627-\u062c\u0627\u0626\u06d2\u06d4.png\" alt=\"AWS \u0627\u0646\u0641\u0631\u0627\u0633\u0679\u0631\u06a9\u0686\u0631 \u0688\u0627\u06cc\u0627\u06af\u0631\u0627\u0645 \u0627\u06cc\u06a9 \u0644\u0686\u06a9\u062f\u0627\u0631 IP \u062f\u06a9\u06be\u0627 \u0631\u06c1\u0627 \u06c1\u06d2 \u062c\u0648 \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u0637\u06d2 \u0634\u062f\u06c1 VPC \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u062e\u0627\u0644\u06cc EC2 Ubuntu \u0633\u0631\u0648\u0631 \u06a9\u06cc \u0637\u0631\u0641 \u0627\u0634\u0627\u0631\u06c1 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0633\u06cc\u06a9\u06cc\u0648\u0631\u0679\u06cc \u06af\u0631\u0648\u067e \u06a9\u0633\u06cc \u0628\u06be\u06cc \u062c\u06af\u06c1 \u0633\u06d2 \u0645\u062e\u0635\u0648\u0635 IP \u067e\u062a\u0648\u06ba \u0627\u0648\u0631 \u067e\u0648\u0631\u0679 80 \u0627\u0648\u0631 443 \u0633\u06d2 SSH \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4 CloudWatch \u0645\u062b\u0627\u0644 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0635\u062d\u062a \u06a9\u06cc \u0646\u06af\u0631\u0627\u0646\u06cc \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 RDS PostgreSQL 16 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u0635\u0631\u0641 EC2 \u0633\u0631\u0648\u0631 \u0633\u06cc\u06a9\u06cc\u0648\u0631\u0679\u06cc \u06af\u0631\u0648\u067e \u0633\u06d2 \u067e\u0648\u0631\u0679 5432 \u067e\u0631 \u06a9\u0646\u06a9\u0634\u0646 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4\" style=\"display: block;\" width=\"600\" height=\"400\" loading=\"lazy\" title=\"\"><\/p>\n<p>\u062e\u0627\u06a9\u06c1 AWS \u0627\u0646\u0641\u0631\u0627\u0633\u0679\u0631\u06a9\u0686\u0631 \u062f\u06a9\u06be\u0627\u062a\u0627 \u06c1\u06d2 \u062c\u0633\u06d2 Terraform \u062a\u062e\u0644\u06cc\u0642 \u06a9\u0631\u062a\u0627 \u06c1\u06d2: \u0644\u0686\u06a9\u062f\u0627\u0631 IP \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0627\u06cc\u06a9 EC2 Ubuntu \u0633\u0631\u0648\u0631\u060c SSH \u0627\u0648\u0631 HTTPS \u0631\u0633\u0627\u0626\u06cc \u06a9\u0648 \u06a9\u0646\u0679\u0631\u0648\u0644 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u0633\u06cc\u06a9\u06cc\u0648\u0631\u0679\u06cc \u06af\u0631\u0648\u067e\u0633\u060c \u0627\u06cc\u06a9 RDS PostgreSQL \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u062c\u0648 \u0635\u0631\u0641 API \u0633\u0631\u0648\u0631 \u0633\u06d2 \u0642\u0627\u0628\u0644 \u0631\u0633\u0627\u0626\u06cc \u06c1\u06d2\u060c \u0627\u0648\u0631 CloudWatch \u06c1\u06cc\u0644\u062a\u06be \u0686\u06cc\u06a9\u0633\u06d4 \u062f\u0648\u0646\u0648\u06ba \u0648\u0633\u0627\u0626\u0644 \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u0637\u06d2 \u0634\u062f\u06c1 VPC \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u06c1\u06cc\u06ba\u06d4 EC2 \u0633\u0631\u0648\u0631 \u0627\u0628 \u0628\u06be\u06cc \u062e\u0627\u0644\u06cc \u06c1\u06d2\u06d4 \u0628\u0627\u0628 5 ClearPay \u06a9\u0648 \u06cc\u06c1\u0627\u06ba \u062a\u0639\u06cc\u0646\u0627\u062a \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p><strong>\u0627\u062e\u0631\u0627\u062c\u0627\u062a \u067e\u0631 \u0646\u0648\u0679\u0633:<\/strong> \u0686\u0648\u0646\u06a9\u06c1 AWS \u062a\u0645\u0627\u0645 \u0639\u0648\u0627\u0645\u06cc IPv4 \u067e\u062a\u0648\u06ba (AWS \u0639\u0648\u0627\u0645\u06cc IPv4 \u06a9\u06cc \u0634\u0631\u062d\u0648\u06ba) \u06a9\u06d2 \u0644\u06cc\u06d2 \u0686\u0627\u0631\u062c \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0644\u0686\u06a9\u062f\u0627\u0631 IP \u06a9\u06cc \u0644\u0627\u06af\u062a \u062a\u0642\u0631\u06cc\u0628\u0627\u064b $0.12 \u0641\u06cc \u062f\u0646 \u06c1\u06d2\u060c \u06cc\u06c1\u0627\u06ba \u062a\u06a9 \u06a9\u06c1 \u062c\u0628 \u0633\u0631\u0648\u0631 \u0686\u0644 \u0631\u06c1\u0627 \u06c1\u0648\u06d4<\/p>\n<h4 id=\"heading-check\">\u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba<\/h4>\n<pre><code class=\"language-bash\">terraform output instance_public_ip\n<\/code><\/pre>\n<p>\u06cc\u06c1 \u0622\u067e \u06a9\u0627 \u0639\u0648\u0627\u0645\u06cc IPv4 \u0627\u06cc\u0688\u0631\u06cc\u0633 \u067e\u0631\u0646\u0679 \u06a9\u0631\u06d2 \u06af\u0627\u06d4 \u0627\u0633 \u0637\u0631\u062d \u06cc\u06c1 \u0633\u0631\u0648\u0631 \u062a\u06a9 \u067e\u06c1\u0646\u0686 \u062c\u0627\u062a\u0627 \u06c1\u06d2: \u0631\u0648\u0679 53 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u0646\u06c1\u06cc\u06ba \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2 \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u06a9\u0633\u06cc \u0688\u0648\u0645\u06cc\u0646 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u06d2 (<code>manage_dns = false<\/code>)\u06d4<\/p>\n<h4 id=\"heading-if-it-fails\">\u0627\u06af\u0631 \u06cc\u06c1 \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648\u062c\u0627\u062a\u0627 \u06c1\u06d2:<\/h4>\n<ul>\n<li>\n<p><code>Error: InvalidKeyPair.Duplicate<\/code>: \u0646\u0627\u0645\u0632\u062f \u06a9\u0644\u06cc\u062f\u06cc \u062c\u0648\u0691\u0627 <code>clearpay-deployer<\/code> \u06cc\u06c1 \u0627\u0633 AWS \u0631\u06cc\u062c\u0646 \u0645\u06cc\u06ba \u067e\u0686\u06be\u0644\u06cc \u06a9\u0648\u0634\u0634 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u06c1\u06cc \u0645\u0648\u062c\u0648\u062f \u06c1\u06d2\u06d4 AWS \u06a9\u0646\u0633\u0648\u0644 \u0645\u06cc\u06ba \u0627\u0633\u06d2 \u062d\u0630\u0641 \u06a9\u0631\u06cc\u06ba \u06cc\u0627 \u0627\u0633 \u06a9\u0627 \u0646\u0627\u0645 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 <code>infra\/aws\/terraform\/ec2.tf<\/code>.<\/p>\n<\/li>\n<li>\n<p><code>Error: UnauthorizedOperation<\/code>: AWS \u0635\u0627\u0631\u0641 \u06a9\u06d2 \u067e\u0627\u0633 \u0648\u0633\u0627\u0626\u0644 \u06a9\u06cc \u0627\u06cc\u06a9 \u0642\u0633\u0645 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u062e\u0631\u0627\u0628\u06cc \u06a9\u0627\u0631\u0631\u0648\u0627\u0626\u06cc \u06a9\u06d2 \u0646\u0627\u0645 \u06a9\u06cc \u0648\u0636\u0627\u062d\u062a \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4 \u0627\u06cc\u0688\u0645\u0646\u0633\u0679\u0631\u06cc\u0679\u0631 \u06a9\u0648 \u0645\u06a9\u0645\u0644 \u0631\u0633\u0627\u0626\u06cc \u062f\u06cc\u0646\u06d2 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2\u060c \u0648\u06c1 \u0627\u062c\u0627\u0632\u062a\u06cc\u06ba \u0634\u0627\u0645\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<\/ul>\n<h4 id=\"heading-decision\">\u0641\u06cc\u0635\u0644\u06c1<\/h4>\n<p>\u0627\u0646\u0641\u0631\u0627\u0633\u0679\u0631\u06a9\u0686\u0631 \u0645\u0648\u062c\u0648\u062f \u06c1\u06d2\u06d4 \u0627\u06cc\u06a9 \u0633\u0631\u0648\u0631 \u062c\u0633 \u067e\u0631 \u06a9\u0686\u06be \u0646\u06c1\u06cc\u06ba \u0686\u0644 \u0631\u06c1\u0627 \u06c1\u06d2 \u0648\u06c1 \u0627\u0628\u06be\u06cc \u062a\u06a9 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u0627 \u06c1\u06d2\u06d4 \u0628\u0627\u0628 5 \u067e\u0631 \u062c\u0627\u0631\u06cc \u0631\u06a9\u06be\u06cc\u06ba\u06d4<\/p>\n<h4 id=\"heading-done-when\">\u0645\u06a9\u0645\u0644 \u06c1\u0648\u0646\u06d2 \u067e\u0631:<\/h4>\n<h3 id=\"heading-chapter-5-deploy-clearpay-to-the-aws-server\">\u0628\u0627\u0628 5. AWS \u0633\u0631\u0648\u0631\u0632 \u067e\u0631 ClearPay \u062a\u0639\u06cc\u0646\u0627\u062a \u06a9\u0631\u06cc\u06ba\u06d4<\/h3>\n<p><em>\u0645\u0646\u06af\u0644 1:40 PM<\/em><\/p>\n<p>\u0679\u06cc\u0631\u0627\u0641\u0627\u0631\u0645 \u06a9\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u062f\u0648\u067e\u06c1\u0631 \u06a9\u06d2 \u06a9\u06be\u0627\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0645\u06a9\u0645\u0644 \u06a9\u0631 \u0644\u06cc \u06af\u0626\u06cc\u06d4 AWS \u0627\u0628 \u0633\u0631\u0648\u0631\u0632 \u0627\u0648\u0631 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u06a9\u06cc \u0641\u06c1\u0631\u0633\u062a \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u0627\u0628\u06be\u06cc \u062a\u06a9 \u0635\u0627\u0631\u0641\u06cc\u0646 \u06a9\u06cc \u062e\u062f\u0645\u062a \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u0686\u06be \u0628\u06be\u06cc \u062f\u0633\u062a\u06cc\u0627\u0628 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4<\/p>\n<p>\u0679\u06cc\u0631\u0627\u0641\u0627\u0631\u0645 \u0646\u06d2 \u0627\u06cc\u06a9 \u062e\u0627\u0644\u06cc \u0633\u0631\u0648\u0631 \u0627\u0648\u0631 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u0628\u0646\u0627\u06cc\u0627\u06d4 \u0635\u0627\u0631\u0641\u06cc\u0646 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0628\u06be\u06cc \u062a\u06a9 \u06a9\u0648\u0626\u06cc \u0633\u0631\u0648\u0633 \u062f\u0633\u062a\u06cc\u0627\u0628 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4<\/p>\n<p>\u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u0634\u0631\u0648\u0639 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2\u060c \u0627\u06cc\u06a9 \u0679\u0631\u0645\u06cc\u0646\u0644 \u06a9\u06be\u0648\u0644\u06cc\u06ba\u06d4 \u062f\u0627\u0646\u06cc\u0627\u0644 \u0627\u06cc\u06a9 \u06a9\u0631\u0633\u06cc \u06a9\u06be\u06cc\u0646\u0686 \u06a9\u0631 \u0622\u067e \u06a9\u06d2 \u067e\u0627\u0633 \u0628\u06cc\u0679\u06be \u06af\u06cc\u0627\u06d4<\/p>\n<p>\u0688\u06cc\u0646\u06cc\u0626\u0644: &quot;\u0679\u06cc\u0631\u0627\u0641\u0627\u0631\u0645 \u06a9\u0648 \u062d\u062a\u0645\u06cc \u0634\u06a9\u0644 \u062f\u06cc\u0646\u0627 \u0635\u0631\u0641 \u06c1\u0645\u06cc\u06ba \u0628\u062a\u0627\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0633\u0631\u0648\u0631 \u0645\u0648\u062c\u0648\u062f \u06c1\u06d2\u06d4 \u0622\u0626\u06cc\u06d2 \u0633\u0631\u0648\u0631 \u067e\u0631 \u0627\u06cc\u067e \u0627\u0646\u0633\u0679\u0627\u0644 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u0627\u0635\u0644 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0628\u06be\u06cc\u062c\u06cc\u06ba\u06d4&#8221;<\/p>\n<h4 id=\"heading-why-this-matters\">\u06cc\u06c1 \u06a9\u06cc\u0648\u06ba \u0627\u06c1\u0645\u06cc\u062a \u0631\u06a9\u06be\u062a\u0627 \u06c1\u06d2\u06d4<\/h4>\n<p>\u062e\u0627\u0644\u06cc \u0633\u0631\u0648\u0631 \u0645\u0646\u062a\u0642\u0644\u06cc \u06a9\u0627 \u0630\u0631\u06cc\u0639\u06c1 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u0628\u0627\u0628 6 \u067e\u0648\u0686\u06be\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0622\u06cc\u0627 \u062d\u0642\u06cc\u0642\u06cc \u06a9\u0633\u0679\u0645\u0631 \u06a9\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u06cc\u06ba AWS \u067e\u0631 \u06a9\u0627\u0645 \u06a9\u0631\u062a\u06cc \u06c1\u06cc\u06ba\u06d4 \u0627\u0633 \u0633\u0648\u0627\u0644 \u06a9\u0627 \u062c\u0648\u0627\u0628 \u0627\u0633 \u0648\u0642\u062a \u062a\u06a9 \u0646\u06c1\u06cc\u06ba \u062f\u06cc\u0627 \u062c\u0627\u0626\u06d2 \u06af\u0627 \u062c\u0628 \u062a\u06a9 \u0622\u067e \u0644\u0627\u06af \u0627\u0646 \u0635\u0641\u062d\u06c1 \u0627\u0648\u0631 API \u0646\u06c1\u06cc\u06ba \u062f\u06cc\u06a9\u06be\u062a\u06d2\u06d4<\/p>\n<h4 id=\"heading-steps\">\u0642\u062f\u0645<\/h4>\n<p>\u0630\u062e\u06cc\u0631\u06c1 \u06a9\u06cc \u062c\u0691 \u0633\u06d2 \u0634\u0631\u0648\u0639 \u06a9\u0631\u06cc\u06ba\u06d4 \u0627\u06af\u0631 \u0622\u067e \u0627\u0628 \u0628\u06be\u06cc \u0627\u0646\u062f\u0631 \u06c1\u06cc\u06ba\u06d4 <code>infra\/aws\/terraform<\/code>\u0686\u0644\u0627\u0626\u06cc\u06ba <code>cd ..\/..\/..<\/code> \u067e\u06c1\u0644\u06d2<\/p>\n<p>\u0627\u067e\u0646\u06d2 \u0633\u0631\u0648\u0631 \u067e\u0631 Node\u060c nginx\u060c \u0627\u0648\u0631 certbot \u0627\u0646\u0633\u0679\u0627\u0644 \u06a9\u0631\u06a9\u06d2 \u0634\u0631\u0648\u0639 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">cd infra\/aws\/deploy\nINSTANCE_IP=$(terraform -chdir=..\/terraform output -raw instance_public_ip)\necho \"$INSTANCE_IP\"\n# Write that IP down. A new terminal will not have INSTANCE_IP.\n\nssh -o StrictHostKeyChecking=accept-new \n  -i ~\/.ssh\/clearpay-deployer ubuntu@$INSTANCE_IP 'bash -s' < bootstrap.sh\n<\/code><\/pre>\n<p>\u0622\u067e \u06a9\u0648 \u062f\u06cc\u06a9\u06be\u0646\u0627 \u0686\u0627\u06c1\u0626\u06d2 <code>== ClearPay AWS bootstrap ==<\/code>\u0627\u0648\u0631 \u0686\u0646\u062f \u0645\u0646\u0679\u0648\u06ba \u06a9\u06d2 \u0628\u0639\u062f <code>apt-get<\/code> \u062d\u0633\u0627\u0628 bootstrap.sh \u0645\u062e\u062a\u0635\u0631 \u06c1\u06d2\u06d4 \u0628\u0631\u0627\u06c1 \u06a9\u0631\u0645 \u067e\u0691\u06be\u06cc\u06ba\u06d4<\/p>\n<p>\u0645\u0646\u062f\u0631\u062c\u06c1 \u0630\u06cc\u0644 \u0644\u0627\u0626\u0646 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0622\u0624\u0679 \u067e\u0679 \u062e\u062a\u0645 \u06c1\u0648\u0646\u06d2 \u067e\u0631 \u0627\u0642\u062f\u0627\u0645\u0627\u062a \u0646\u06d2 \u06a9\u0627\u0645 \u06a9\u06cc\u0627:<\/p>\n<pre><code class=\"language-plaintext\">== Bootstrap complete ==\nNode: v20.20.2\nSelf-signed TLS is in \/etc\/letsencrypt\/live\/clearpay, use curl -k.\n<\/code><\/pre>\n<p>\u0646\u0648\u0688 \u0648\u0631\u0698\u0646 \u0645\u062e\u062a\u0644\u0641 \u06c1\u0648 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0633\u06d2 \u0634\u0631\u0648\u0639 \u06c1\u0648\u0646\u06d2 \u0648\u0627\u0644\u06cc \u0644\u06a9\u06cc\u0631\u06cc\u06ba\u06d4 <code>debconf: unable to initialize frontend<\/code> \u06cc\u06c1 \u0628\u06d2 \u0636\u0631\u0631 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0638\u0627\u06c1\u0631 \u06c1\u0648\u062a\u0627 \u06c1\u06d2 \u06a9\u06cc\u0648\u0646\u06a9\u06c1 SSH \u0633\u06cc\u0634\u0646 \u0645\u06cc\u06ba \u06a9\u0648\u0626\u06cc \u0627\u0646\u0679\u0631\u0627\u06cc\u06a9\u0679\u0648 \u0627\u0633\u06a9\u0631\u06cc\u0646 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u0644\u0627\u0626\u0646 <code>+<\/code> \u0627\u0648\u0631 <code>*<\/code> OpenSSL \u0645\u06cc\u06ba \u062e\u0648\u062f \u062f\u0633\u062a\u062e\u0637 \u0634\u062f\u06c1 \u0633\u0631\u0679\u06cc\u0641\u06a9\u06cc\u0679 \u0628\u0646\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<p>\u0627\u06af\u0631 \u0622\u067e \u06a9\u0648 \u06a9\u0648\u0626\u06cc \u0622\u0624\u0679 \u067e\u0679 \u0628\u0627\u0644\u06a9\u0644 \u0646\u0638\u0631 \u0646\u06c1\u06cc\u06ba \u0622\u062a\u0627 \u06c1\u06d2\u060c \u062a\u0648 SSH \u0645\u0646\u0633\u0644\u06a9 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u06c1\u0648 \u0633\u06a9\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0622\u067e \u06a9\u06d2 \u06af\u06be\u0631 \u06a9\u0627 IP \u0628\u0627\u0628 4 \u0633\u06d2 \u0628\u062f\u0644 \u06af\u06cc\u0627 \u06c1\u0648\u060c \u0627\u0633 \u0644\u06cc\u06d2 \u0622\u067e \u06a9\u0627 \u0633\u06cc\u06a9\u06cc\u0648\u0631\u0679\u06cc \u06af\u0631\u0648\u067e \u0627\u0628 \u0628\u06be\u06cc \u0622\u067e \u06a9\u06d2 \u067e\u0631\u0627\u0646\u06d2 IP \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u062f\u06d2 \u06af\u0627\u06d4 \u0627\u067e\u0646\u0627 \u0622\u0626\u06cc \u067e\u06cc \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4 <code>curl -s ifconfig.me; echo<\/code>\u0627\u06cc\u06a9 \u067e\u0644\u0633 \u0688\u0627\u0644\u0648 <code>\/32<\/code> \u06a9\u0648 <code>terraform.tfvars<\/code> \u067e\u0633\u0646\u062f <code>ssh_allowed_cidr<\/code>\u0686\u0644\u0627\u0626\u06cc\u06ba <code>terraform apply<\/code> \u06a9\u0648 <code>infra\/aws\/terraform<\/code>\u0627\u0648\u0631 \u062f\u0648\u0628\u0627\u0631\u06c1 \u06a9\u0648\u0634\u0634 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p>\u0627\u06af\u0644\u0627 <code>.env<\/code> \u0627\u067e\u0646\u06cc API \u06a9\u06cc \u0636\u0631\u0648\u0631\u06cc\u0627\u062a \u062c\u0645\u0639 \u06a9\u0631\u0648\u0627\u0626\u06cc\u06ba \u0627\u0648\u0631 \u0627\u067e\u0646\u06cc \u0627\u06cc\u067e \u06a9\u0648 \u0645\u062a\u0639\u06cc\u0646 \u06a9\u0631\u06cc\u06ba\u06d4 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 URL Terraform \u0633\u06d2 \u0622\u062a\u0627 \u06c1\u06d2\u06d4 JWT \u062e\u0641\u06cc\u06c1 \u0644\u0627\u06af \u0627\u0646 \u0679\u0648\u06a9\u0646 \u067e\u0631 \u062f\u0633\u062a\u062e\u0637 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0646\u0626\u06d2 \u0633\u0631\u06d2 \u0633\u06d2 \u062a\u06cc\u0627\u0631 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-bash\">DATABASE_URL=$(terraform -chdir=..\/terraform output -raw database_url)\n\ncat > \/tmp\/clearpay.env <<eof database_url=\"$DATABASE_URL\" jwt_secret=\"$(openssl\" rand=\"\" platform=\"aws\" app_version=\"1.0.0\" git_commit=\"$(git\" rev-parse=\"\" head=\"\">\/dev\/null || echo local)\nROLLBACK_ACTIVE=false\nPORT=4000\nEOF\n\n.\/deploy.sh \"$INSTANCE_IP\" ~\/.ssh\/clearpay-deployer \/tmp\/clearpay.env\nrm \/tmp\/clearpay.env\n<\/eof><\/code><\/pre>\n<p><code>deploy.sh<\/code> React UI \u0628\u0646\u0627\u0626\u06cc\u06ba \u0627\u0648\u0631 \u0627\u0633\u06d2 \u062f\u0631\u062c \u0630\u06cc\u0644 \u0645\u0642\u0627\u0645 \u067e\u0631 \u06a9\u0627\u067e\u06cc \u06a9\u0631\u06cc\u06ba: <code>\/opt\/clearpay-ui<\/code>. API \u06a9\u0648 \u062f\u0631\u062c \u0630\u06cc\u0644 \u0645\u0642\u0627\u0645 \u067e\u0631 \u06a9\u0627\u067e\u06cc \u06a9\u0631\u06cc\u06ba: <code>\/opt\/clearpay-api<\/code>\u0627\u0646\u0633\u0679\u0627\u0644 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u067e\u06cc\u06a9\u06cc\u062c \u0644\u06a9\u06be\u06cc\u06ba\u06d4 <code>.env<\/code>\u0633\u0633\u0679\u0645\u0688 \u0633\u0631\u0648\u0633 \u0627\u0648\u0631 nginx \u06a9\u0646\u0641\u06cc\u06af\u0631\u06cc\u0634\u0646 \u0627\u0646\u0633\u0679\u0627\u0644 \u06a9\u0631\u06cc\u06ba \u06cc\u06c1\u0627\u06ba \u0633\u06d2: <code>infra\/aws\/deploy\/<\/code>\u062f\u0648\u0646\u0648\u06ba \u062f\u0648\u0628\u0627\u0631\u06c1 \u0634\u0631\u0648\u0639 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p>\u0627\u0628 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u0627\u0633\u06a9\u06cc\u0645\u0627 \u0627\u0648\u0631 \u0633\u06cc\u0688 \u0627\u06cc\u0644\u0633 \u0627\u0648\u0631 \u0628\u0627\u0628 \u06a9\u0648 \u0644\u0648\u0688 \u06a9\u0631\u06cc\u06ba\u06d4 \u06cc\u06c1 \u06a9\u0645\u0627\u0646\u0688 \u0622\u067e \u06a9\u06d2 \u0644\u06cc\u067e \u0679\u0627\u067e \u067e\u0631 \u0646\u06c1\u06cc\u06ba \u0628\u0644\u06a9\u06c1 \u0633\u0631\u0648\u0631 \u067e\u0631 \u0686\u0644\u062a\u06cc \u06c1\u06d2\u06d4 RDS \u06a9\u06d2 \u067e\u0627\u0633 \u0627\u0628\u06be\u06cc \u062a\u06a9 \u0639\u0648\u0627\u0645\u06cc \u0627\u062e\u062a\u062a\u0627\u0645\u06cc \u0646\u0642\u0637\u06c1 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2 (<code>publicly_accessible = false<\/code> \u06a9\u0648 <code>infra\/aws\/terraform\/rds.tf<\/code>)\u060c \u0644\u06c1\u0630\u0627 \u0622\u067e \u06a9\u0627 \u0644\u06cc\u067e \u0679\u0627\u067e \u0627\u0633 \u062a\u06a9 \u0631\u0633\u0627\u0626\u06cc \u062d\u0627\u0635\u0644 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u0633\u06a9\u062a\u0627\u06d4<\/p>\n<p>\u0644\u06cc\u067e \u0679\u0627\u067e \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u0633\u06d2 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u0646\u06c1\u06cc\u06ba \u062c\u0691 \u0633\u06a9\u062a\u0627\u06d4 \u06cc\u06c1 \u0627\u06cc\u06a9 EC2 \u0633\u0631\u0648\u0631 \u06a9\u0648 \u0628\u06cc\u0686\u0648\u0627\u0646 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/10\/1792188590_147_\u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0648\u06ba-\u06a9\u0648-AWS-\u0633\u06d2-GKE-\u0645\u06cc\u06ba-\u06a9\u06cc\u0633\u06d2-\u0645\u0646\u062a\u0642\u0644-\u06a9\u06cc\u0627-\u062c\u0627\u0626\u06d2\u06d4.png\" alt=\"\u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u062a\u06a9 \u0631\u0633\u0627\u0626\u06cc \u06a9\u06d2 \u0642\u0648\u0627\u0639\u062f \u06a9\u0648 \u0638\u0627\u06c1\u0631 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u0627 \u062f\u0648 \u062d\u0635\u0648\u06ba \u06a9\u0627 \u062e\u0627\u06a9\u06c1\u06d4 \u0627\u0648\u067e\u0631 \u0648\u0627\u0644\u0627 \u067e\u06cc\u0646\u0644 \u0622\u067e \u06a9\u06d2 \u0644\u06cc\u067e \u0679\u0627\u067e \u0633\u06d2 EC2 \u0633\u0631\u0648\u0631 \u062a\u06a9 SSH \u0631\u0633\u0627\u0626\u06cc \u062f\u06a9\u06be\u0627\u062a\u0627 \u06c1\u06d2\u060c \u062c\u0648 \u0627\u0633\u06cc \u0646\u062c\u06cc AWS \u0646\u06cc\u0679 \u0648\u0631\u06a9 \u06a9\u06d2 \u0627\u0646\u062f\u0631 RDS \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u0633\u06d2 \u062c\u0691 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4 \u0646\u06cc\u0686\u06d2 \u0648\u0627\u0644\u0627 \u067e\u06cc\u0646\u0644 \u0644\u06cc\u067e \u0679\u0627\u067e \u0633\u06d2 RDS \u0633\u06d2 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u06a9\u0646\u06a9\u0634\u0646 \u062f\u06a9\u06be\u0627\u062a\u0627 \u06c1\u06d2\u060c \u062c\u0633\u06d2 \u0633\u0631\u062e X \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0628\u0644\u0627\u06a9 \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4\" style=\"display: block;\" width=\"600\" height=\"400\" loading=\"lazy\" title=\"\"><\/p>\n<p>\u0627\u0648\u067e\u0631 \u062f\u06cc\u0627 \u06af\u06cc\u0627 \u062e\u0627\u06a9\u06c1 \u0638\u0627\u06c1\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u06a9\u06cc\u0648\u06ba \u0644\u06cc\u067e \u0679\u0627\u067e \u06a9\u0633\u06cc \u0646\u062c\u06cc RDS \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u0633\u06d2 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u0646\u06c1\u06cc\u06ba \u062c\u0691 \u0633\u06a9\u062a\u0627\u06d4 EC2 \u0633\u0631\u0648\u0631 \u062a\u06a9 SSH \u0631\u0633\u0627\u0626\u06cc \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u06c1\u06d2\u060c \u0627\u0648\u0631 \u0633\u0631\u0648\u0631 AWS \u0646\u06cc\u0679 \u0648\u0631\u06a9 \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u0633\u06d2 RDS \u0633\u06d2 \u062c\u0691 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4 \u0644\u06cc\u067e \u0679\u0627\u067e \u0633\u06d2 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u062a\u06a9 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u0631\u0633\u0627\u0626\u06cc \u0645\u0633\u062f\u0648\u062f \u06c1\u06d2\u06d4 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u062a\u06a9 \u0631\u0633\u0627\u0626\u06cc \u06a9\u06d2 \u0644\u06cc\u06d2 EC2 \u0633\u0631\u0648\u0631 \u06a9\u0648 \u0627\u0646\u0679\u0631\u06cc \u067e\u0648\u0627\u0626\u0646\u0679 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p>\u0630\u06cc\u0644 \u0645\u06cc\u06ba \u06c1\u0631 \u06a9\u0645\u0627\u0646\u0688 \u06a9\u0627 \u0622\u063a\u0627\u0632 \u0627\u0633 \u0633\u06d2 \u06c1\u0648\u062a\u0627 \u06c1\u06d2: <code>ssh ... ubuntu@$INSTANCE_IP \"...\"<\/code>. \u06cc\u0639\u0646\u06cc\u060c \u0627\u067e\u0646\u06d2 EC2 \u0633\u0631\u0648\u0631 \u0645\u06cc\u06ba \u0644\u0627\u06af \u0627\u0646 \u06c1\u0648\u06ba \u0627\u0648\u0631 \u0648\u06c1\u0627\u06ba \u0633\u06d2 \u062d\u0648\u0627\u0644\u06c1 \u062f\u06cc\u0627 \u06c1\u0648\u0627 \u062d\u0635\u06c1 \u0686\u0644\u0627\u0626\u06cc\u06ba\u06d4 \u062a\u0648 <code>psql<\/code> \u0628\u06cc\u062c EC2 \u067e\u0631 \u0686\u0644\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 EC2 RDS \u0633\u06d2 \u0628\u0627\u062a \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0622\u067e \u0646\u062a\u0627\u0626\u062c \u06a9\u0648 \u0628\u0639\u062f \u0645\u06cc\u06ba \u0627\u067e\u0646\u06d2 \u0628\u0631\u0627\u0624\u0632\u0631 \u0645\u06cc\u06ba \u062f\u06cc\u06a9\u06be \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u062c\u0628 \u0622\u067e \u0627\u06cc\u0644\u0633 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0644\u0627\u06af \u0627\u0646 \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0648 EC2 RDS \u0645\u06cc\u06ba \u0627\u06cc\u0644\u0633 \u06a9\u0627 \u0627\u06a9\u0627\u0624\u0646\u0679 \u067e\u0691\u06be\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-bash\">scp -i ~\/.ssh\/clearpay-deployer ..\/..\/..\/db\/schema.sql \n  ubuntu@$INSTANCE_IP:\/tmp\/schema.sql\n\nssh -i ~\/.ssh\/clearpay-deployer ubuntu@$INSTANCE_IP \n  \"sudo apt-get install -y postgresql-client -qq && psql '$DATABASE_URL' -f \/tmp\/schema.sql\"\n\nssh -i ~\/.ssh\/clearpay-deployer ubuntu@$INSTANCE_IP \n  \"cd \/opt\/clearpay-api && sudo -u clearpay npm run seed\"\n<\/code><\/pre>\n<p>\u0628\u06cc\u062c \u0627\u06cc\u06a9 \u062c\u06cc\u0633\u06cc \u0631\u0633\u0645 \u0627\u0644\u062e\u0637 \u06c1\u06d2\u06d4 \u0627\u0633 \u0628\u0627\u0631 \u0645\u06cc\u06ba RDS \u06a9\u0648 \u0644\u06a9\u06be \u0631\u06c1\u0627 \u06c1\u0648\u06ba\u06d4<\/p>\n<h4 id=\"heading-check\">\u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba<\/h4>\n<pre><code class=\"language-bash\">ssh -i ~\/.ssh\/clearpay-deployer ubuntu@$INSTANCE_IP 'sudo systemctl is-active clearpay-api'\n<\/code><\/pre>\n<p>\u0645\u062a\u0648\u0642\u0639 \u067e\u06cc\u062f\u0627\u0648\u0627\u0631: <code>active<\/code>.<\/p>\n<p>\u067e\u06be\u0631 \u0622\u067e \u06a9\u06d2 \u0644\u06cc\u067e \u0679\u0627\u067e \u067e\u0631:<\/p>\n<pre><code class=\"language-bash\">curl -k https:\/\/$INSTANCE_IP\/health\n<\/code><\/pre>\n<p>\u0627\u0633\u06d2 \u062a\u0644\u0627\u0634 \u06a9\u0631\u06cc\u06ba\u06d4 <code>\"status\":\"ok\"<\/code> \u0627\u0648\u0631 <code>\"platform\":\"aws\"<\/code>. \u06a9\u06c1 <code>-k<\/code> \u062c\u06be\u0646\u0688\u0627 curl \u06a9\u0648 \u062e\u0648\u062f \u062f\u0633\u062a\u062e\u0637 \u0634\u062f\u06c1 \u0633\u0631\u0679\u06cc\u0641\u06a9\u06cc\u0679 \u0642\u0628\u0648\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u0648 \u06a9\u06c1\u062a\u0627 \u06c1\u06d2\u06d4 <code>bootstrap.sh<\/code> \u0628\u0646\u0627\u06cc\u0627<\/p>\n<p>\u06a9\u06be\u0644\u0627 <code>https:\/\/<your instance=\"\" ip=\"\"\/><\/code> \u0622\u067e \u06a9\u06d2 \u0628\u0631\u0627\u0624\u0632\u0631 \u0645\u06cc\u06ba\u06d4 \"\u0645\u062d\u0641\u0648\u0638 \u0646\u06c1\u06cc\u06ba\" \u0648\u0627\u0631\u0646\u0646\u06af \u067e\u0631 \u06a9\u0644\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4 \u062a\u0646\u0628\u06cc\u06c1 \u062e\u0648\u062f \u062f\u0633\u062a\u062e\u0637 \u0634\u062f\u06c1 \u0633\u0631\u0679\u06cc\u0641\u06a9\u06cc\u0679\u0633 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u06d4 \u0622\u067e \u06a9\u0648 \u0648\u06c1\u06cc \u06a9\u0644\u06cc\u0626\u0631 \u067e\u06d2 \u0644\u0627\u06af \u0627\u0646 \u0646\u0638\u0631 \u0622\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2 \u062c\u0648 \u0622\u067e \u06a9\u06d2 \u0644\u06cc\u067e \u0679\u0627\u067e \u067e\u0631 \u06c1\u06d2\u06d4 \u062f\u0631\u062c \u0630\u06cc\u0644 \u0627\u06a9\u0627\u0624\u0646\u0679 \u0633\u06d2 \u0627\u06cc\u0644\u0633 \u06a9\u06d2 \u0628\u0637\u0648\u0631 \u0644\u0627\u06af \u0627\u0646 \u06c1\u0648\u06ba: <code>password123<\/code>. \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 \u0627\u0633 \u06a9\u0627 \u0628\u06cc\u0644\u0646\u0633 \u062f\u06a9\u06be\u0627\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 <code>served by aws\/1.0.0<\/code>.<\/p>\n<p>\u0688\u06cc\u0646\u06cc\u0626\u0644: \"\u0635\u062d\u062a \u06a9\u06cc \u062c\u0627\u0646\u0686 \u0645\u062c\u06be\u06d2 \u0635\u0631\u0641 \u06cc\u06c1 \u0628\u062a\u0627\u062a\u06cc \u06c1\u06d2 \u06a9\u06c1 \u0627\u06cc\u067e \u0686\u0644 \u0631\u06c1\u06cc \u06c1\u06d2\u06d4 \u0645\u06cc\u06ba \u0627\u0633 \u0628\u0627\u062a \u06a9\u0648 \u06cc\u0642\u06cc\u0646\u06cc \u0628\u0646\u0627\u0646\u0627 \u0686\u0627\u06c1\u062a\u0627 \u06c1\u0648\u06ba \u06a9\u06c1 \u0628\u06cc\u0633 \u0644\u0627\u0626\u0646 \u06a9\u0648 \u0644\u0627\u06af \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0627\u0633 \u0622\u0626\u06cc \u067e\u06cc \u0633\u06d2 \u0645\u0646\u062a\u0642\u0644\u06cc \u06c1\u0648 \u0631\u06c1\u06cc \u06c1\u06d2\u06d4\"<\/p>\n<p>\u0627\u067e\u0646\u06d2 \u0628\u0631\u0627\u0624\u0632\u0631 \u0633\u06d2 Bob \u06a9\u0648 $20 \u0628\u06be\u06cc\u062c\u06cc\u06ba\u06d4<\/p>\n<h4 id=\"heading-if-it-fails\">\u0627\u06af\u0631 \u06cc\u06c1 \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648\u062c\u0627\u062a\u0627 \u06c1\u06d2:<\/h4>\n<ul>\n<li>\n<p><code>systemctl is-active<\/code> \u0631\u067e\u0648\u0631\u0679 <code>failed<\/code>: SSH \u06a9\u0646\u06a9\u0634\u0646 \u0627\u0648\u0631 \u0639\u0645\u0644\u062f\u0631\u0622\u0645\u062f <code>sudo journalctl -u clearpay-api -n 50<\/code>. \u0639\u0627\u0645 \u0648\u062c\u0648\u06c1\u0627\u062a \u06c1\u06cc\u06ba\u06d4 <code>DATABASE_URL<\/code> RDS \u0633\u06d2 \u0645\u0645\u0627\u062b\u0644 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0645\u0648\u0627\u0632\u0646\u06c1 \u06a9\u0631\u06cc\u06ba\u06d4 <code>terraform output database_url<\/code>\u06a9\u0631\u062f\u0627\u0631 \u0633\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><code>seed_failed<\/code> \u06a9\u06d2 \u0633\u0627\u062a\u06be <code>SELF_SIGNED_CERT_IN_CHAIN<\/code>: <code>psql<\/code> \u0686\u0648\u0646\u06a9\u06c1 \u06cc\u06c1 \u067e\u06c1\u0644\u06d2 \u06c1\u06cc \u06a9\u0627\u0645 \u06a9\u0631 \u0686\u06a9\u0627 \u06c1\u06d2\u060c \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u0679\u06be\u06cc\u06a9 \u06c1\u06d2\u06d4 \u0646\u0648\u0688 \u06a9\u0627 \u062a\u0627\u0632\u06c1 \u062a\u0631\u06cc\u0646 \u0648\u0631\u0698\u0646 <code>pg<\/code> \u0644\u0627\u0626\u0628\u0631\u06cc\u0631\u06cc \u06a9\u06d2 \u0646\u0627\u0634\u062a\u06d2 <code>sslmode=require<\/code> \u0645\u06a9\u0645\u0644 \u0633\u0631\u0679\u06cc\u0641\u06a9\u06cc\u0679 \u06a9\u06cc \u062a\u0635\u062f\u06cc\u0642 \u06a9\u06d2 \u0633\u0627\u062a\u06be\u06d4 \u0645\u0648\u062c\u0648\u062f\u06c1 \u06a9\u0627\u067e\u06cc \u06a9\u0631\u06cc\u06ba\u06d4 <code>api\/src\/pgConfig.js<\/code>\u060c <code>api\/src\/db.js<\/code>\u0627\u0648\u0631 <code>api\/db\/seed.js<\/code> \u0633\u0631\u0648\u0631 \u067e\u0631 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0634\u0631\u0648\u0639 \u06a9\u0631\u06cc\u06ba <code>clearpay-api<\/code>\u067e\u06be\u0631 \u0635\u0631\u0641 \u0628\u06cc\u062c \u06a9\u0645\u0627\u0646\u0688 \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0686\u0644\u0627\u0626\u06cc\u06ba\u06d4 \u0645\u062a \u0628\u06be\u0627\u06af\u0648 <code>schema.sql<\/code> \u062f\u0648\u0628\u0627\u0631\u06c1<\/p>\n<\/li>\n<li>\n<p>nginx \u0648\u0627\u067e\u0633 \u0622 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4 <code>502 Bad Gateway<\/code>: nginx \u0686\u0644 \u0631\u06c1\u0627 \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u0627\u0633 \u06a9\u06d2 \u067e\u06cc\u0686\u06be\u06d2 API \u0646\u06c1\u06cc\u06ba \u0686\u0644 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4 \u0633\u0628 \u0633\u06d2 \u067e\u06c1\u0644\u06d2\u060c \u0627\u0648\u067e\u0631 \u0633\u0633\u0679\u0645\u0688 \u0627\u0633\u0679\u06cc\u0679\u0633 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>\u06cc\u06c1 \u0622\u067e \u06a9\u06d2 \u0628\u0631\u0627\u0624\u0632\u0631 \u0645\u06cc\u06ba \u0638\u0627\u06c1\u0631 \u06c1\u0648\u06af\u0627\u06d4 <code>Cannot GET \/<\/code>:nginx \u0645\u06cc\u06ba \u0627\u0628\u06be\u06cc \u0628\u06be\u06cc \u0635\u0631\u0641 API \u06a9\u06cc \u062a\u0631\u062a\u06cc\u0628 \u067e\u0631\u0627\u0646\u06cc \u06c1\u06d2\u06d4 \u0686\u0644\u0627\u0626\u06cc\u06ba <code>.\/deploy.sh \"$INSTANCE_IP\" ~\/.ssh\/clearpay-deployer<\/code> \u062a\u06cc\u0633\u0631\u0627 \u062f\u0639\u0648\u06cc\u0670 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u06a9\u06c1 <code>.env<\/code> \u06cc\u06c1 \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u06c1\u06cc \u0633\u0631\u0648\u0631 \u067e\u0631 \u06c1\u06d2\u06d4 \u062f\u0648\u0628\u0627\u0631\u06c1 \u06a9\u0628\u06be\u06cc \u0646\u06c1 \u0628\u0648\u0646\u0627\u06d4<\/p>\n<\/li>\n<li>\n<p><code>invalid credentials<\/code> \u0627\u06cc\u0644\u0633 \u06a9\u06d2 \u0644\u06cc\u06d2: \u0622\u067e \u06a9\u06d2 \u0628\u0631\u0627\u0624\u0632\u0631 \u0646\u06d2 \u0634\u0627\u06cc\u062f \u0645\u062d\u0641\u0648\u0638 \u06a9\u0631\u062f\u06c1 \u067e\u0627\u0633 \u0648\u0631\u0688 \u062f\u0631\u062c \u06a9\u06cc\u0627 \u06c1\u06d2\u06d4 \u0628\u0627\u06a9\u0633 \u06a9\u0648 \u0635\u0627\u0641 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u062f\u0627\u062e\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 <code>password123<\/code>\u0628\u0631\u0627\u06c1 \u06a9\u0631\u0645 \u062f\u0648\u0628\u0627\u0631\u06c1 \u06a9\u0648\u0634\u0634 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<\/ul>\n<h4 id=\"heading-done-when\">\u0645\u06a9\u0645\u0644 \u06c1\u0648\u0646\u06d2 \u067e\u0631:<\/h4>\n<ul>\n<li>\n<p><code>systemctl is-active clearpay-api<\/code> \u067e\u0631\u0646\u0679\u0633 <code>active<\/code><\/p>\n<\/li>\n<li>\n<p><code>curl -k https:\/\/$INSTANCE_IP\/health<\/code> \u0631\u067e\u0648\u0631\u0679 <code>\"status\":\"ok\"<\/code><\/p>\n<\/li>\n<li>\n<p>\u0645\u06cc\u06ba \u0646\u06d2 \u0627\u067e\u0646\u06d2 \u0628\u0631\u0627\u0624\u0632\u0631 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0627\u067e\u0646\u06d2 AWS \u067e\u062a\u06d2 \u067e\u0631 $20 \u0628\u06be\u06cc\u062c\u06d2\u06d4<\/p>\n<\/li>\n<\/ul>\n<h3 id=\"heading-chapter-6-record-the-aws-baseline\">\u0628\u0627\u0628 6\u06d4 AWS \u06a9\u06cc \u0628\u0646\u06cc\u0627\u062f\u06cc \u062a\u0627\u0631\u06cc\u062e<\/h3>\n<p><em>\u0628\u062f\u06be \u0635\u0628\u062d 10 \u0628\u062c\u06d2<\/em><\/p>\n<p>\u0645\u0627\u06cc\u0627 \u06a9\u0648 \u0627\u0633 \u0637\u0631\u062d \u06a9\u0627 \u067e\u06cc\u063a\u0627\u0645 \u0628\u06be\u06cc\u062c\u06cc\u06ba: \"\u0635\u062d\u062a \u0679\u06be\u06cc\u06a9 \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u06cc\u0644\u0633 \u0627\u06cc\u0644\u0627\u0633\u0679\u06a9 \u0622\u0626\u06cc \u067e\u06cc \u0645\u06cc\u06ba \u0644\u0627\u06af \u0627\u0646 \u06c1\u06d2\u06d4\" \u0627\u0633 \u06a9\u0627 \u062c\u0648\u0627\u0628 \u0627\u06cc\u06a9 \u0645\u0646\u0679 \u0633\u06d2 \u0628\u06be\u06cc \u06a9\u0645 \u0648\u0642\u062a \u0645\u06cc\u06ba \u0648\u0627\u067e\u0633 \u0622\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0645\u0627\u06cc\u0627: \"\u0679\u06be\u06cc\u06a9 \u06c1\u06d2\u06d4 \u0627\u0628 \u0627\u0633 \u0622\u0626\u06cc \u067e\u06cc \u067e\u0631 \u067e\u0627\u0646\u0686 \u0686\u06cc\u06a9 \u0686\u0644\u0627\u0626\u06cc\u06ba\u06d4 \u0628\u0631\u0627\u06c1 \u06a9\u0631\u0645 \u0645\u062c\u06be\u06d2 \u0679\u0631\u0645\u06cc\u0646\u0644 \u0622\u0624\u0679 \u067e\u0679 \u0628\u06be\u06cc\u062c\u06cc\u06ba\u060c \u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679 \u0646\u06c1\u06cc\u06ba\u06d4\"<\/p>\n<p>\u062f\u0648\u0633\u0631\u0627 \u067e\u06cc\u063a\u0627\u0645 \u06cc\u06c1 \u06c1\u06d2: \"\u067e\u06be\u0631 \u0679\u06cc\u0633\u0679 \u0644\u0648\u0688 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u0645\u062c\u06be\u06d2 p95 \u0628\u06be\u06cc\u062c\u06cc\u06ba\u06d4 \u0645\u06cc\u06ba GKE \u0633\u06d2 '\u06cc\u06c1 \u06a9\u0627\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2' \u06a9\u0627 \u0645\u0648\u0627\u0632\u0646\u06c1 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u0633\u06a9\u062a\u0627\u06d4\"<\/p>\n<h4 id=\"heading-why-this-matters\">\u06cc\u06c1 \u06a9\u06cc\u0648\u06ba \u0627\u06c1\u0645\u06cc\u062a \u0631\u06a9\u06be\u062a\u0627 \u06c1\u06d2\u06d4<\/h4>\n<p>\u06cc\u06c1 \u0628\u0627\u0628 \u062f\u0648 \u0686\u06cc\u0632\u06cc\u06ba \u067e\u06cc\u0634 \u06a9\u0631\u062a\u0627 \u06c1\u06d2: \u0622\u067e \u062f\u0648\u0646\u0648\u06ba \u06a9\u0648 \u067e\u0648\u0631\u06cc \u06a9\u062a\u0627\u0628 \u0645\u06cc\u06ba \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba \u06af\u06d2\u06d4<\/p>\n<p><strong>1. \u06cc\u06c1 \u067e\u0627\u0633 \u067e\u0631\u0648\u0645\u0648\u0634\u0646 \u06af\u06cc\u0679 \u0633\u06d2 \u06c1\u06d2\u06d4<\/strong> \u067e\u0631\u0648\u0645\u0648\u0634\u0646 \u06af\u06cc\u0679\u0633 \u0645\u062e\u062a\u0635\u0631 \u0627\u0633\u06a9\u0631\u067e\u0679 \u06c1\u06cc\u06ba\u06d4 \u067e\u0627\u0646\u0686 \u0686\u06cc\u0632\u0648\u06ba \u06a9\u06cc \u062c\u0627\u0646\u0686 \u06a9\u0631\u06cc\u06ba \u062c\u0648 \u06c1\u0631 \u067e\u06cc\u0645\u0646\u0679 \u0627\u06cc\u067e \u06a9\u0648 \u06a9\u0631\u0646\u06cc \u0686\u0627\u06c1\u06cc\u06d2: \u062c\u0627\u0646\u0686 \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 \u0627\u06cc\u067e \u0686\u0644 \u0631\u06c1\u06cc \u06c1\u06d2\u060c \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u0633\u06d2 \u0645\u0646\u0633\u0644\u06a9 \u06c1\u0648 \u0633\u06a9\u062a\u06cc \u06c1\u06d2\u060c \u06a9\u06cc\u0627 \u0635\u0627\u0631\u0641 \u0644\u0627\u06af \u0627\u0646 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0635\u0631\u0641 \u0627\u06cc\u06a9 \u0628\u0627\u0631 \u0628\u0627\u0631 \u0628\u0627\u0631 \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc\u0627\u06ba \u06a9\u0631 \u0631\u06c1\u06d2 \u06c1\u06cc\u06ba\u060c \u0627\u0648\u0631 \u0645\u0646\u0627\u0633\u0628 \u0631\u0642\u0645 \u0633\u06d2 \u0628\u06cc\u0644\u0646\u0633 \u06a9\u0648 \u06a9\u0645 \u06a9\u0631 \u0631\u06c1\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0627\u06af\u0631 \u0622\u067e \u062a\u0645\u0627\u0645 5 \u067e\u0627\u0633 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u062a\u0648 \u0627\u06cc\u067e \u06a9\u0627\u0645 \u06a9\u0631\u06d2 \u06af\u06cc\u06d4<\/p>\n<p>\u0628\u0627\u0628 15 \u0645\u06cc\u06ba\u060c \u06c1\u0645 \u0627\u0633\u06cc \u0627\u0633\u06a9\u0631\u067e\u0679 \u06a9\u0648 GKE \u067e\u0631 \u0686\u0644\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0627\u06af\u0631 GKE \u0648\u06c1\u06cc \u0679\u06cc\u0633\u0679 \u067e\u0627\u0633 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u062c\u0648 AWS \u067e\u0627\u0633 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u062a\u0648 GKE \u06a9\u0627\u0645 \u06a9\u0631\u06d2 \u06af\u0627\u06d4<\/p>\n<p><strong>2. \u0633\u06a9\u0648\u0631 \u06a9\u0627\u0631\u0688\u06d4<\/strong> \u0644\u0648\u0688 \u0679\u06cc\u0633\u0679\u0646\u06af \u0628\u06cc\u06a9 \u0648\u0642\u062a \u0628\u06c1\u062a \u0633\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u06cc\u06ba \u0628\u06be\u06cc\u062c\u062a\u06cc \u06c1\u06d2\u060c \u06af\u0648\u06cc\u0627 \u0627\u06cc\u06a9 \u06c1\u06cc \u0648\u0642\u062a \u0645\u06cc\u06ba \u0628\u06c1\u062a \u0633\u06d2 \u0635\u0627\u0631\u0641\u06cc\u0646 \u0622\u067e \u06a9\u06cc \u0627\u06cc\u067e \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631 \u0631\u06c1\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0627\u0633 \u06a9\u06d2 \u0628\u0639\u062f \u06cc\u06c1 \u0627\u06cc\u067e \u06a9\u06cc \u0631\u0633\u067e\u0627\u0646\u0633 \u0631\u06cc\u0679 \u0627\u0648\u0631 \u0646\u0627\u06a9\u0627\u0645 \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0648\u06ba \u06a9\u06cc \u062a\u0639\u062f\u0627\u062f \u06a9\u0648 \u0631\u06cc\u06a9\u0627\u0631\u0688 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0622\u062c AWS \u06a9\u06cc \u0631\u0641\u062a\u0627\u0631 \u06c1\u06d2\u06d4 \u0628\u0639\u062f \u0645\u06cc\u06ba\u060c \u06c1\u0645 GKE \u067e\u0631 \u0627\u06cc\u06a9 \u06c1\u06cc \u0679\u06cc\u0633\u0679 \u0686\u0644\u0627\u0626\u06cc\u06ba \u06af\u06d2 \u0627\u0648\u0631 \u062f\u0648\u0646\u0648\u06ba \u06a9\u0627 \u0645\u0648\u0627\u0632\u0646\u06c1 \u06a9\u0631\u06cc\u06ba \u06af\u06d2\u06d4<\/p>\n<p>\u062c\u0648\u062a\u06d2 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u06a9\u0633\u06cc \u0631\u0646\u0631 \u06a9\u06d2 \u0648\u0642\u062a \u06a9\u06d2 \u0628\u0627\u0631\u06d2 \u0645\u06cc\u06ba \u0633\u0648\u0686\u0626\u06d2\u06d4 \u062f\u0648\u0633\u0631\u06d2 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u067e\u06c1\u0644\u06d2 \u06a9\u06d2 \u0628\u063a\u06cc\u0631 \u06a9\u0686\u06be \u0646\u06c1\u06cc\u06ba\u06d4 \u06cc\u06c1 \u0628\u0627\u0628 \u067e\u06c1\u0644\u06cc \u0628\u0627\u0631 \u0644\u06a9\u06be\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u0633 \u0628\u0627\u0628 \u06a9\u0627 \u0627\u0633\u06a9\u0631\u067e\u0679 \u0622\u067e \u06a9\u06cc \u0646\u0648\u0679 \u0628\u06a9 \u0645\u06cc\u06ba \u0646\u0648\u0688 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 JSON \u06a9\u0648 \u067e\u0691\u06be\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u06af\u0631 \u0622\u067e \u0646\u06d2 \u0627\u0628\u06be\u06cc \u062a\u06a9 Node.js 20 \u06cc\u0627 \u0627\u0633 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u0627\u0646\u0633\u0679\u0627\u0644 \u0646\u06c1\u06cc\u06ba \u06a9\u06cc\u0627 \u06c1\u06d2 \u062a\u0648 \u0627\u0633\u06d2 \u0627\u0628\u06be\u06cc \u0627\u0646\u0633\u0679\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<h4 id=\"heading-steps\">\u0642\u062f\u0645<\/h4>\n<p>\u0630\u062e\u06cc\u0631\u06c1 \u06a9\u06cc \u062c\u0691 \u0633\u06d2 \u0634\u0631\u0648\u0639 \u06a9\u0631\u06cc\u06ba\u06d4 \u0627\u06af\u0631 \u0622\u067e \u0627\u0628 \u0628\u06be\u06cc \u0627\u0646\u062f\u0631 \u06c1\u06cc\u06ba\u06d4 <code>infra\/aws\/deploy<\/code>\u0686\u0644\u0627\u0626\u06cc\u06ba <code>cd ..\/..\/..<\/code> \u067e\u06c1\u0644\u06d2<\/p>\n<p>AWS \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u067e\u0631\u0648\u0645\u0648\u0634\u0646\u0644 \u06af\u06cc\u0679 \u0686\u0644\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">export INSTANCE_IP=$(terraform -chdir=infra\/aws\/terraform output -raw instance_public_ip)\n\n.\/scripts\/promotion-gate.sh https:\/\/$INSTANCE_IP \n  alice@clearpay.dev password123 bob@clearpay.dev\n<\/code><\/pre>\n<p>\u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba <code>https:\/\/<\/code>. \u06a9\u06d2 \u0633\u0627\u062a\u06be <code>http:\/\/<\/code>\u0627\u06cc\u0633\u0627 \u0644\u06af\u062a\u0627 \u06c1\u06d2 \u062c\u06cc\u0633\u06d2 nginx \u0631\u06cc \u0688\u0627\u0626\u0631\u06cc\u06a9\u0679 \u06c1\u0648\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u0633\u06a9\u0631\u067e\u0679 \u06c1\u06cc\u0646\u06af \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u06af\u06cc\u0679 \u062f\u0631\u062c \u0630\u06cc\u0644 \u067e\u0627\u0646\u0686 \u0686\u06cc\u0632\u0648\u06ba \u06a9\u0648 \u062a\u0631\u062a\u06cc\u0628 \u0633\u06d2 \u0686\u06cc\u06a9 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<ol>\n<li>\n<p>\u0639\u0645\u0644 \u0634\u0631\u0648\u0639 \u06c1\u0648 \u0686\u06a9\u0627 \u06c1\u06d2 (<code>\/health<\/code>)\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0622\u067e \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u062a\u06a9 \u0631\u0633\u0627\u0626\u06cc \u062d\u0627\u0635\u0644 \u06a9\u0631\u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba (<code>\/health\/ready<\/code>)\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0627\u06cc\u0644\u0633 \u0644\u0627\u06af \u0627\u0646 \u06a9\u0631 \u0633\u06a9\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0631\u06cc \u0633\u0627\u0626\u06cc\u06a9\u0644 \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u06a9\u06cc \u06a9\u0644\u06cc\u062f \u0648\u0627\u067e\u0633 \u0622 \u06af\u0626\u06cc \u06c1\u06d2\u06d4 <code>replayed=true<\/code>.<\/p>\n<\/li>\n<li>\n<p>\u0627\u06cc\u0644\u0633 \u06a9\u0627 \u062a\u0648\u0627\u0632\u0646 \u0627\u06cc\u06a9 \u0628\u0627\u0631 \u062e\u062a\u0645 \u06c1\u0648 \u06af\u06cc\u0627\u06d4<\/p>\n<\/li>\n<\/ol>\n<p>\u0645\u062a\u0648\u0642\u0639 \u067e\u06cc\u062f\u0627\u0648\u0627\u0631:<\/p>\n<pre><code class=\"language-plaintext\">PASS: health endpoint returns ok\nPASS: readiness endpoint confirms DB connectivity\nPASS: login succeeds and returns a token\nPASS: replaying an idempotency key returns replayed=true\nPASS: balance debited exactly once (100 cents), not twice\n\n5 passed, 0 failed\n\nGATE PASSED: safe to promote to production.\n<\/code><\/pre>\n<p>\u0622\u062e\u0631\u06cc \u0644\u0627\u0626\u0646 \u067e\u06cc\u062f\u0627\u0648\u0627\u0631 \u06a9\u06d2 \u0628\u0627\u0631\u06d2 \u0645\u06cc\u06ba \u0628\u0627\u062a \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4 \u0627\u0628\u06be\u06cc \u062a\u06a9 \u0641\u0631\u0648\u063a \u062f\u06cc\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u0648\u0626\u06cc \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0648\u06c1\u06cc \u0627\u0633\u06a9\u0631\u067e\u0679 \u06c1\u06d2 \u062c\u0633\u06d2 \u0622\u067e \u0628\u0639\u062f \u0645\u06cc\u06ba GKE \u067e\u0631 \u0686\u0644\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u06cc\u06c1\u0627\u06ba \u0644\u0627\u0626\u0646 \u0633\u06d2 \u0645\u0631\u0627\u062f \u0645\u0648\u0627\u062f \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u0628 \u0679\u06cc\u0633\u0679 AWS \u0644\u0648\u0688 \u06a9\u0631\u06cc\u06ba\u06d4 \u0627\u0633\u06a9\u0631\u067e\u0679 \u0644\u0627\u06af \u0627\u0646 \u06c1\u0648\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u0648\u067e\u0631 \u0646\u0638\u0631 \u0622\u062a\u0627 \u06c1\u06d2\u06d4 <code>\/api\/accounts\/me<\/code> \u0627\u0648\u0631 <code>\/api\/transactions<\/code>\u062f\u0648\u0646\u0648\u06ba \u067e\u0648\u0633\u0679\u06af\u0631\u06cc\u0633 \u0633\u06d2 \u0627\u0633\u062a\u0641\u0633\u0627\u0631 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0679\u06cc\u0633\u0679 \u0644\u0648\u0688 \u0646\u06c1 \u06a9\u0631\u06cc\u06ba\u06d4 <code>\/health<\/code>. API \u06a9\u06d2 \u062c\u0648\u0627\u0628\u0627\u062a <code>\/health<\/code> \u0628\u0627\u0644\u06a9\u0644 \u0627\u067e\u0646\u06d2 \u0637\u0648\u0631 \u067e\u0631\u06d4 \u06cc\u06c1 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u0633\u06d2 \u06a9\u0686\u06be \u0646\u06c1\u06cc\u06ba \u067e\u0648\u0686\u06be\u062a\u0627 \u06c1\u06d2\u06d4 \u062d\u0642\u06cc\u0642\u06cc \u06a9\u0633\u0679\u0645\u0631 \u06a9\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0648\u06ba \u06a9\u06d2 \u0644\u06cc\u06d2 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u0633\u06d2 \u0627\u0633\u062a\u0641\u0633\u0627\u0631 \u06a9\u0631\u0646\u06d2 \u0627\u0648\u0631 \u062c\u0648\u0627\u0628 \u06a9\u0627 \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u060c \u0627\u0648\u0631 \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u0627 \u0648\u0642\u062a \u0639\u0627\u0645 \u0637\u0648\u0631 \u067e\u0631 \u06c1\u0648\u062a\u0627 \u06c1\u06d2:<\/p>\n<pre><code class=\"language-plaintext\">\/health                  laptop \u2192 API \u2192 reply                    (fast, no database)\n\/api\/accounts\/me         laptop \u2192 API \u2192 database \u2192 API \u2192 reply   (the real work)\n<\/code><\/pre>\n<p>\u0644\u0648\u0688 \u0679\u06cc\u0633\u0679 <code>\/health<\/code> \u0648\u0642\u062a \u0635\u0631\u0641 \u0646\u0635\u0641 \u06c1\u06d2. \u0627\u0633\u0679\u0648\u0631 \u06a9\u06d2 \u0645\u0644\u0627\u0632\u0645 \u0633\u06d2 \u067e\u0648\u0686\u06be\u06cc\u06ba\u060c \"\u06a9\u06cc\u0627 \u0622\u067e \u06a9\u06be\u0644\u06d2 \u06c1\u06cc\u06ba\u061f\" \u0628\u0645\u0642\u0627\u0628\u0644\u06c1 \"\u06a9\u06cc\u0627 \u0622\u067e \u06a9\u06d2 \u067e\u0627\u0633 \u06cc\u06c1 \u062c\u0648\u062a\u06d2 42 \u0633\u0627\u0626\u0632 \u06a9\u06d2 \u06c1\u06cc\u06ba\u061f\" \u0635\u0631\u0641 \u062f\u0648\u0633\u0631\u0627 \u0633\u0648\u0627\u0644 \u0627\u0646\u06c1\u06cc\u06ba \u06af\u0648\u062f\u0627\u0645 \u062a\u06a9 \u0686\u0644\u0646\u06d2 \u067e\u0631 \u0645\u062c\u0628\u0648\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-bash\">.\/scripts\/load-test.sh https:\/\/$INSTANCE_IP \n  alice@clearpay.dev password123 10 30\n<\/code><\/pre>\n<p>\u0622\u062e\u0631\u06cc \u062f\u0648 \u0646\u0645\u0628\u0631 \u06a9\u0646\u06a9\u0631\u0646\u0633\u06cc (\u0627\u06cc\u06a9 \u0648\u0642\u062a \u0645\u06cc\u06ba 10 \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u06cc\u06ba) \u0627\u0648\u0631 \u062f\u0648\u0631\u0627\u0646\u06cc\u06c1 (30 \u0633\u06cc\u06a9\u0646\u0688) \u06c1\u06cc\u06ba\u06d4<\/p>\n<h4 id=\"heading-check\">\u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba<\/h4>\n<p>\u0627\u0633\u06a9\u0631\u067e\u0679 \u0627\u06cc\u06a9 \u0633\u06a9\u0648\u0631 \u06a9\u0627\u0631\u0688 \u067e\u0631\u0646\u0679 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0644\u06cc\u0628\u0627\u0631\u0679\u0631\u06cc \u0646\u06d2 \u062c\u0648 \u067e\u0631\u0646\u0679 \u06a9\u06cc\u0627 \u0648\u06c1 \u06cc\u06c1 \u06c1\u06d2:<\/p>\n<pre><code class=\"language-plaintext\">== DB load test: https:\/\/184.194.120.157  concurrency=10  duration=30s ==\nEndpoints: GET \/api\/accounts\/me  GET \/api\/transactions\n\n\nok=372  failed=0\n\nMigration Scorecard, this run\n\np50 latency:          673 ms\np95 latency:          745 ms\np99 latency:          1326 ms\nThroughput:           12.4 req\/s\n4xx rate:             0.0 %\n5xx rate:             0.0 %\nTransaction success:  100.0 %\n<\/code><\/pre>\n<p>\u0622\u067e \u06a9\u0627 \u0633\u06a9\u0648\u0631 \u06a9\u0627\u0631\u0688 \u0645\u062e\u062a\u0644\u0641 \u06c1\u0648\u06af\u0627\u06d4 \u0622\u067e \u06a9\u0627 IP \u067e\u062a\u06c1\u060c \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0648\u06ba \u06a9\u06cc \u062a\u0639\u062f\u0627\u062f\u060c \u0627\u0648\u0631 \u0645\u0644\u06cc \u0633\u06cc\u06a9\u0646\u0688\u0632 \u0622\u067e \u06a9\u06d2 \u0645\u0648\u062c\u0648\u062f\u06c1 \u0645\u0642\u0627\u0645 \u067e\u0631 \u0645\u0646\u062d\u0635\u0631 \u06c1\u06cc\u06ba\u06d4 \u0644\u0648\u0688 \u0679\u06cc\u0633\u0679 \u0644\u06cc\u067e \u0679\u0627\u067e \u067e\u0631 \u0686\u0644\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0644\u06c1\u0630\u0627 \u062a\u0645\u0627\u0645 \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u06cc\u06ba \u06af\u06be\u0631 \u0633\u06d2 AWS \u062a\u06a9 \u062c\u0627\u062a\u06cc \u06c1\u06cc\u06ba\u06d4 <code>us-east-1<\/code> \u0627\u0648\u0631 \u0648\u0627\u067e\u0633 \u0622\u06af\u06cc\u0627\u06d4<\/p>\n<p>\u062e\u0637\u06d2 \u06a9\u06d2 \u0642\u0631\u06cc\u0628 \u0642\u0627\u0631\u0626\u06cc\u0646 \u062f\u0648\u0633\u0631\u06d2 \u0628\u0631\u0627\u0639\u0638\u0645\u0648\u06ba \u06a9\u06d2 \u0645\u0642\u0627\u0628\u0644\u06d2 \u0645\u06cc\u06ba \u0628\u06c1\u062a \u06a9\u0645 \u062a\u0639\u062f\u0627\u062f \u062f\u06cc\u06a9\u06be\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u062f\u0648\u0646\u0648\u06ba \u063a\u0644\u0637 \u0646\u06c1\u06cc\u06ba \u06c1\u06cc\u06ba\u06d4 \u0627\u06c1\u0645 \u0628\u0627\u062a \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 GKE \u06a9\u0627 \u0645\u0648\u0627\u0632\u0646\u06c1 \u0627\u0633\u06cc \u0645\u0642\u0627\u0645 \u067e\u0631 \u0645\u0627\u067e\u06d2 \u06af\u0626\u06d2 \u0627\u0633\u06a9\u0648\u0631 \u06a9\u0627\u0631\u0688\u0632 \u0633\u06d2 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p>\u062f\u06cc\u06a9\u06be\u0648 \u062a\u0648 \u0628\u06be\u0627\u06af\u062a\u0627 \u06c1\u0648\u0627 \u06af\u0632\u0631 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 <code>failed=0<\/code>\u060c <code>5xx rate<\/code> \u06a9\u0648 <code>0.0 %<\/code>\u0627\u0648\u0631 <code>Transaction success<\/code> \u06a9\u0648 <code>100.0 %<\/code>.<\/p>\n<ul>\n<li>\n<p>p95 \u0645\u06cc\u06ba \u062a\u0627\u062e\u06cc\u0631 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u06a9\u06c1 95% \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u06cc\u06ba \u0627\u0633 \u0646\u0645\u0628\u0631 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u062a\u06cc\u0632\u06cc \u0633\u06d2 \u0645\u06a9\u0645\u0644 \u06c1\u0648 \u062c\u0627\u062a\u06cc \u06c1\u06cc\u06ba\u06d4 \u06cc\u06c1 \u0635\u0627\u0631\u0641\u06cc\u0646 \u06a9\u06d2 \u0633\u0633\u062a \u0627\u062d\u0633\u0627\u0633\u0627\u062a \u06a9\u0648 \u0638\u0627\u06c1\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u062c\u0648 \u0627\u0648\u0633\u0637 \u0686\u06be\u067e\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p><code>4xx<\/code> \u0627\u0633 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u06a9\u06c1 \u06a9\u0644\u0627\u0626\u0646\u0679 \u0646\u06d2 \u0627\u06cc\u06a9 \u063a\u0644\u0637 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0628\u06be\u06cc\u062c\u06cc \u06c1\u06d2\u060c \u062c\u06cc\u0633\u06d2 \u06a9\u06c1 \u06af\u0645\u0634\u062f\u06c1 \u0679\u0648\u06a9\u0646\u06d4<\/p>\n<\/li>\n<li>\n<p><code>5xx<\/code> \u0627\u0633 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u06a9\u06c1 \u0633\u0631\u0648\u0631 \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<\/ul>\n<p>\u0646\u0648\u0679 \u0641\u0627\u0626\u0644 \u0645\u06cc\u06ba \u067e\u0631\u0646\u0679 \u0634\u062f\u06c1 \u067e\u0648\u0631\u06d2 \u0633\u06a9\u0648\u0631 \u06a9\u0627\u0631\u0688 \u06a9\u0648 \u06a9\u0627\u067e\u06cc \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u0648\u06c1\u06cc \u0628\u0644\u0627\u06a9 \u0645\u0627\u06cc\u0627 \u06a9\u0648 \u0628\u06be\u06cc\u062c\u06cc\u06ba\u06d4 \u0627\u0633 \u06a9\u0627 \u062c\u0648\u0627\u0628 \u062c\u0644\u062f\u06cc \u0633\u06d2 \u0622\u06cc\u0627\u06d4 \"\u0686\u06cc\u0632\u0648\u06ba \u06a9\u0648 \u0632\u06cc\u0627\u062f\u06c1 \u0635\u0627\u0641 \u0633\u062a\u06be\u0631\u0627 \u0628\u0646\u0627\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06af\u0648\u0644 \u0646\u06c1 \u0628\u0646\u0627\u0626\u06cc\u06ba\u06d4 \u0622\u0626\u06cc\u06d2 \u0627\u0633 \u0635\u0641\u062d\u06c1 \u0633\u06d2 GKE \u06a9\u0627 \u0645\u0648\u0627\u0632\u0646\u06c1 \u06a9\u0631\u06cc\u06ba\u06d4\"<\/p>\n<h4 id=\"heading-set-your-limits-now\">\u0627\u0628\u06be\u06cc \u062d\u062f\u06cc\u06ba \u0637\u06d2 \u06a9\u0631\u06cc\u06ba\u06d4<\/h4>\n<p>\u0627\u067e\u0646\u06d2 \u0633\u06a9\u0648\u0631 \u06a9\u0627\u0631\u0688 \u06a9\u06d2 \u0646\u06cc\u0686\u06d2 \u0646\u0645\u0628\u0631\u0648\u06ba \u06a9\u06d2 \u0633\u0627\u062a\u06be \u062f\u0631\u062c \u0630\u06cc\u0644 \u062f\u0648 \u0644\u0627\u0626\u0646\u06cc\u06ba \u0644\u06a9\u06be\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-plaintext\">Outage:   5xx rate above 1 % for more than 2 minutes in a row\nFailure:  p95 more than 3 times your AWS p95 for more than 5 minutes in a row\n<\/code><\/pre>\n<p>\u0686\u0648\u0646\u06a9\u06c1 \u06c1\u0631 \u0642\u0627\u0631\u06cc \u06a9\u06d2 \u0645\u0639\u06cc\u0627\u0631\u0627\u062a \u0645\u062e\u062a\u0644\u0641 \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0627\u0633 \u0644\u06cc\u06d2 \u0646\u0627\u06a9\u0627\u0645\u06cc \u06a9\u06cc \u062d\u062f \u0627\u067e\u0646\u06cc AWS p95 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4 \u0627\u0633 \u0645\u0634\u0642 \u0645\u06cc\u06ba 745 ms \u067e\u0631\u060c \u062d\u062f \u062a\u0642\u0631\u06cc\u0628\u0627\u064b 2,235 ms \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0627\u06cc\u06a9 \u0645\u062b\u0627\u0644 \u06a9\u06cc \u062d\u062f \u06c1\u06d2\u06d4 \u0627\u067e\u0646\u0627 \u0686\u0646\u06cc\u06ba\u060c \u0644\u06cc\u06a9\u0646 GKE \u0645\u0648\u062c\u0648\u062f \u06c1\u0648\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0627\u0633\u06d2 \u0627\u0628\u06be\u06cc \u06a9\u0631\u06cc\u06ba\u06d4 GKE \u0646\u0645\u0628\u0631\u0632 \u06a9\u0648 \u062f\u06cc\u06a9\u06be\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f\u060c \u062c\u0648 \u062d\u062f\u0648\u062f \u06c1\u0645 \u0633\u06cc\u0679 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u0648\u06c1 \u062d\u062f\u06cc\u06ba \u06c1\u06cc\u06ba \u062c\u0648 \u06c1\u0645 \u0645\u0645\u0627\u062b\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0645\u0648\u0691\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u0627\u067e\u0646\u06cc \u0644\u0627\u06af\u062a \u06a9\u0627 \u0644\u06cc\u062c\u0631 \u0627\u06cc\u06a9 \u0644\u0627\u0626\u0646 \u0633\u06d2 \u0634\u0631\u0648\u0639 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-plaintext\">Cost ledger, entry 1:  AWS about $1.25\/day (infra\/aws\/COST.md)\n<\/code><\/pre>\n<h4 id=\"heading-if-it-fails\">\u0627\u06af\u0631 \u06cc\u06c1 \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648\u062c\u0627\u062a\u0627 \u06c1\u06d2:<\/h4>\n<p>\u062a\u0645\u0627\u0645 \u067e\u0627\u0646\u0686 \u0686\u06cc\u06a9 \u067e\u0627\u0633 \u06c1\u0648\u0646\u06d2 \u062a\u06a9 \u06cc\u06c1\u0627\u06ba \u0631\u06c1\u06cc\u06ba\u06d4 \u06c1\u062c\u0631\u062a \u06a9\u06d2 \u062f\u0648\u0631\u0627\u0646 \u062c\u0648 \u0645\u0633\u0627\u0626\u0644 \u067e\u06cc\u062f\u0627 \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba \u0627\u0646 \u0645\u06cc\u06ba \u0628\u0639\u062f \u0645\u06cc\u06ba \u062f\u0648 \u0628\u0627\u062f\u0644 \u0634\u0627\u0645\u0644 \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u0627\u0646\u06c1\u06cc\u06ba \u062a\u0644\u0627\u0634 \u06a9\u0631\u0646\u0627 \u0632\u06cc\u0627\u062f\u06c1 \u0645\u0634\u06a9\u0644 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h4 id=\"heading-decision\">\u0641\u06cc\u0635\u0644\u06c1<\/h4>\n<p>\u062f\u0631\u0648\u0627\u0632\u06c1 \u06af\u0632\u0631 \u0686\u06a9\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1 EC2 \u0633\u0631\u0648\u0631 \u0628\u0646\u06cc\u0627\u062f\u06cc \u0644\u0627\u0626\u0646 \u06c1\u06d2\u06d4 \u0627\u0633 \u06a9\u062a\u0627\u0628 \u0645\u06cc\u06ba GKE \u06a9\u06d2 \u062a\u0645\u0627\u0645 \u0627\u0639\u062f\u0627\u062f \u0648 \u0634\u0645\u0627\u0631 \u06a9\u0627 \u0645\u0648\u0627\u0632\u0646\u06c1 \u0627\u0633 \u0633\u06a9\u0648\u0631 \u06a9\u0627\u0631\u0688 \u0633\u06d2 \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u06cc\u06a9 \u0645\u0646\u0679 \u0628\u0639\u062f\u060c \u0645\u0627\u06cc\u0627 \u0646\u06d2 \u0627\u06cc\u06a9 \u0627\u0648\u0631 \u0644\u0627\u0626\u0646 \u06a9\u0627 \u0627\u0636\u0627\u0641\u06c1 \u06a9\u06cc\u0627\u06d4 \"\u0627\u0686\u06be\u0627\u06d4 \u0627\u0628 \u06cc\u06c1 \u0645\u06cc\u0631\u0627 \u0641\u0648\u0646 \u0646\u0645\u0628\u0631 \u06c1\u06d2\u06d4\"<\/p>\n<h4 id=\"heading-done-when\">\u0645\u06a9\u0645\u0644 \u06c1\u0648\u0646\u06d2 \u067e\u0631:<\/h4>\n<ul>\n<li>\n<p>\u06af\u06cc\u0679 \u067e\u0631\u0646\u0679 \u06c1\u06d2\u06d4 <code>5 passed, 0 failed<\/code> AWS IPs \u06a9\u06d2 \u0628\u0627\u0631\u06d2 \u0645\u06cc\u06ba<\/p>\n<\/li>\n<li>\n<p>\u0644\u0648\u0688 \u0679\u06cc\u0633\u0679 \u067e\u0631\u0646\u0679 \u06a9\u06cc\u0627 \u06af\u06cc\u0627\u06d4 <code>failed=0<\/code>\u0627\u0633\u06a9\u0648\u0631 \u06a9\u0627\u0631\u0688 \u0646\u0648\u0679\u0648\u06ba \u0645\u06cc\u06ba \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0688\u0627\u0624\u0646 \u0679\u0627\u0626\u0645 \u0627\u0648\u0631 \u0646\u0627\u06a9\u0627\u0645\u06cc \u06a9\u06cc \u062d\u062f\u06cc\u06ba \u0639\u062f\u062f\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0631\u06cc\u06a9\u0627\u0631\u0688 \u06a9\u06cc \u062c\u0627\u062a\u06cc \u06c1\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<\/ul>\n<h2 id=\"heading-part-2-how-to-plan-the-move\">\u062d\u0635\u06c1 2\u06d4 \u062d\u0631\u06a9\u062a \u06a9\u06cc \u0645\u0646\u0635\u0648\u0628\u06c1 \u0628\u0646\u062f\u06cc \u06a9\u06cc\u0633\u06d2 \u06a9\u0631\u06cc\u06ba\u06d4<\/h2>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/10\/1792188590_192_\u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0648\u06ba-\u06a9\u0648-AWS-\u0633\u06d2-GKE-\u0645\u06cc\u06ba-\u06a9\u06cc\u0633\u06d2-\u0645\u0646\u062a\u0642\u0644-\u06a9\u06cc\u0627-\u062c\u0627\u0626\u06d2\u06d4.png\" alt=\"23833564-68ec-469e-a404-cf2daca2d22c\" style=\"display: block;\" width=\"600\" height=\"400\" loading=\"lazy\" title=\"\"><\/p>\n<p>\u0645\u0627\u06cc\u0627 \u06a9\u0648 \u0628\u062a\u0627\u0624 \u06a9\u06c1 \u06af\u06cc\u0679 \u06af\u0632\u0631 \u06af\u06cc\u0627 \u0627\u0648\u0631 \u0627\u0633\u06d2 \u0627\u0633\u06a9\u0648\u0631 \u06a9\u0627\u0631\u0688 \u0628\u06be\u06cc\u062c \u062f\u0648\u06d4<\/p>\n<p>\u0648\u06c1 \u062c\u0648\u0627\u0628 \u062f\u06cc\u062a\u06cc \u06c1\u06d2: \"\u0627\u06af\u0644\u06cc \u0686\u06cc\u0632 GKE \u06c1\u06d2\u06d4 \u06c1\u0645\u06cc\u06ba \u0648\u06c1\u0627\u06ba \u0627\u067e\u0646\u06d2 APIs \u06a9\u0648 \u0686\u0644\u0627\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2\u060c \u0627\u0648\u0631 \u06c1\u0645\u0627\u0631\u06d2 \u0635\u0627\u0631\u0641\u06cc\u0646 \u06a9\u0648 \u0627\u0633 \u0648\u0642\u062a \u06c1\u0645\u06cc\u06ba \u0631\u0642\u0645 \u0628\u06be\u06cc\u062c\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2 \u062c\u0628 \u06c1\u0645 \u0686\u0644 \u0631\u06c1\u06d2 \u06c1\u0648\u06ba\u06d4 AWS \u067e\u0631 \u067e\u0648\u0633\u0679\u06af\u0631\u06cc\u0633 \u0686\u06be\u0648\u0691 \u062f\u06cc\u06ba\u06d4 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u0627\u0633 \u0686\u06cc\u0644\u0646\u062c \u06a9\u0627 \u062d\u0635\u06c1 \u0646\u06c1\u06cc\u06ba \u06c1\u06cc\u06ba\u06d4\"<\/p>\n<p>\u06a9\u0648\u0626\u06cc \u0628\u0627\u062f\u0644 \u0627\u0633 \u062d\u0635\u06d2 \u062a\u06a9 \u0646\u06c1\u06cc\u06ba \u067e\u06c1\u0646\u0686\u062a\u0627\u06d4 \u0622\u067e \u067e\u0691\u06be\u06cc\u06ba\u060c \u0622\u067e \u0646\u0642\u0634\u06c1 \u06a9\u0631\u06cc\u06ba\u060c \u0622\u067e \u0641\u06cc\u0635\u0644\u06c1 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<h3 id=\"heading-chapter-7-read-the-migration-assignment\">\u0628\u0627\u0628 7\u06d4 \u0646\u0642\u0644 \u0645\u06a9\u0627\u0646\u06cc \u06a9\u06d2 \u0686\u06cc\u0644\u0646\u062c\u0632 \u067e\u0691\u06be\u06cc\u06ba<\/h3>\n<p><em>\u0628\u062f\u06be \u0634\u0627\u0645 4 \u0628\u062c\u06d2<\/em><\/p>\n<p>\u0645\u0627\u06cc\u0627 \u0633\u0628 \u0633\u06d2 \u0627\u0648\u067e\u0631 \u0627\u06cc\u06a9 \u0644\u0627\u0626\u0646 \u0634\u0627\u0645\u0644 \u06a9\u0631\u06a9\u06d2 \u0686\u06cc\u0644\u0646\u062c \u06a9\u0627 \u0627\u0638\u06c1\u0627\u0631 \u06a9\u0631\u062a\u06cc \u06c1\u06d2: \"Terraform \u06a9\u06be\u0648\u0644\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0633\u0628 \u06a9\u0686\u06be \u067e\u0691\u06be\u06cc\u06ba\u06d4\"<\/p>\n<h4 id=\"heading-the-assignment-migrate-the-clearpay-api-from-aws-ec2-to-gke\">\u0686\u06cc\u0644\u0646\u062c: ClearPay API \u06a9\u0648 AWS EC2 \u0633\u06d2 GKE \u0645\u06cc\u06ba \u0645\u0646\u062a\u0642\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/h4>\n<p>ClearPay \u0627\u06cc\u06a9 EC2 \u0633\u0631\u0648\u0631 \u067e\u0631 \u0686\u0644\u062a\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u06a9\u0627\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u0627\u0633 \u0645\u06cc\u06ba \u0622\u0679\u0648 \u0627\u0633\u06a9\u06cc\u0644\u0646\u06af\u060c \u0645\u0631\u062d\u0644\u06c1 \u0648\u0627\u0631 \u0631\u0648\u0644 \u0622\u0624\u0679\u060c \u0627\u0648\u0631 \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u06a9\u06d2 \u0639\u0645\u0644 \u06a9\u0627 \u0641\u0642\u062f\u0627\u0646 \u06c1\u06d2 \u062c\u0648 \u0633\u0628 \u0627\u06cc\u06a9 \u0634\u062e\u0635 \u06a9\u06d2 \u0633\u0631 \u06c1\u06d2\u06d4 \u06c1\u0645 \u0646\u06d2 \u062e\u0648\u062f \u0639\u0645\u0644 \u06a9\u0648 \u0628\u0627\u0628 5 \u0645\u06cc\u06ba \u0686\u0644\u0627\u06cc\u0627\u060c \u062a\u0627\u06a9\u06c1 \u0622\u067e \u062f\u06cc\u06a9\u06be \u0633\u06a9\u06cc\u06ba \u06a9\u06c1 \u06a9\u06cc\u0627 \u063a\u0627\u0626\u0628 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u0646\u0679\u0631\u067e\u0631\u0627\u0626\u0632\u0632 \u06a9\u0648\u0628\u0631\u0646\u06cc\u0679\u0633 \u0645\u06cc\u06ba \u0627\u0633\u0679\u06cc\u062c\u0646\u06af \u0645\u0627\u062d\u0648\u0644\u060c \u062e\u0648\u062f\u06a9\u0627\u0631 \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc\u0627\u06ba\u060c \u0627\u0648\u0631 APIs \u06a9\u0648 \u0628\u0691\u06be\u0646\u06d2 \u06a9\u06cc \u06af\u0646\u062c\u0627\u0626\u0634 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0686\u0627\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0627\u06cc\u06a9 \u0628\u0627\u0631 \u067e\u06be\u0631\u060c \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u0627\u0633 \u0645\u062e\u062a\u0635 \u06a9\u0627 \u062d\u0635\u06c1 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4<\/p>\n<h4 id=\"heading-current-architecture\">\u0645\u0648\u062c\u0648\u062f\u06c1 \u0641\u0646 \u062a\u0639\u0645\u06cc\u0631<\/h4>\n<p>ClearPay \u0686\u0627\u0631 \u0688\u06cc\u0641\u0627\u0644\u0679 VPCs (\u0627\u06cc\u06a9 EC2 \u0633\u0631\u0648\u0631 \u0627\u0648\u0631 \u0627\u06cc\u06a9 RDS \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633) \u0645\u06cc\u06ba \u0627\u06cc\u06a9 AWS \u0627\u06a9\u0627\u0624\u0646\u0679 \u0645\u06cc\u06ba \u0631\u06c1\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h4 id=\"heading-what-cant-change\">\u0627\u06cc\u0633\u06cc \u0686\u06cc\u0632 \u062c\u0633\u06d2 \u062a\u0628\u062f\u06cc\u0644 \u0646\u06c1\u06cc\u06ba \u06a9\u06cc\u0627 \u062c\u0627 \u0633\u06a9\u062a\u0627<\/h4>\n<ul>\n<li>\n<p>\u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u067e\u0648\u0633\u0679\u06af\u0631\u06cc\u0633 \u0627\u0642\u062f\u0627\u0645 \u0645\u0633\u062a\u0642\u0628\u0644 \u06a9\u0627 \u0627\u06cc\u06a9 \u0627\u0644\u06af \u0645\u0646\u0635\u0648\u0628\u06c1 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>API \u0645\u0639\u0627\u06c1\u062f\u06c1\u06d4 \u0648\u06c1\u06cc \u0631\u0627\u0633\u062a\u06c1 \u0648\u06c1\u06cc JSON \u0644\u0648\u0679\u0627\u062a\u0627 \u06c1\u06d2\u06d4 <code>\/health<\/code>\u060c <code>\/api\/auth\/login<\/code>\u060c <code>\/api\/transactions<\/code>. \u06a9\u0648\u0626\u06cc \u0628\u06be\u06cc \u0628\u0631\u0627\u0624\u0632\u0631 \u06cc\u0627 \u0627\u0633\u06a9\u0631\u067e\u0679 \u062c\u0648 AWS \u067e\u0631 \u06a9\u0627\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u0627\u0633\u06d2 \u0628\u063a\u06cc\u0631 \u06a9\u0633\u06cc \u062a\u0628\u062f\u06cc\u0644\u06cc \u06a9\u06d2 GKE \u067e\u0631 \u06a9\u0627\u0645 \u06a9\u0631\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u06af\u0627\u06c1\u06a9 \u06a9\u0648 \u06a9\u0633\u06cc \u0628\u06be\u06cc \u0645\u0642\u0627\u0645 \u067e\u0631 \u06a9\u0633\u06cc \u0628\u06be\u06cc \u0645\u0633\u0644\u0633\u0644 \u0631\u06a9\u0627\u0648\u0679 \u06a9\u0627 \u0633\u0627\u0645\u0646\u0627 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u0646\u0627 \u067e\u0691\u06d2 \u06af\u0627\u06d4<\/p>\n<\/li>\n<\/ul>\n<h4 id=\"heading-acceptance-criteria\">\u0642\u0628\u0648\u0644\u06cc\u062a \u06a9\u0627 \u0645\u0639\u06cc\u0627\u0631<\/h4>\n<p>\u0645\u06a9\u0645\u0644 \u0645\u0637\u0644\u0628:<\/p>\n<ol>\n<li>\n<p>GKE \u062a\u0645\u0627\u0645 \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u0679\u0631\u06cc\u0641\u06a9 \u06a9\u0648 \u06c1\u06cc\u0646\u0688\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u0686\u06be\u0648\u062a \u0631\u06c1\u062a\u0627 \u06c1\u06d2\u06d4 \u063a\u0644\u0637\u06cc\u0627\u06ba \u0627\u0648\u0631 \u062a\u0627\u062e\u06cc\u0631 \u0628\u0627\u0628 6 \u0645\u06cc\u06ba \u0644\u06a9\u06be\u06cc \u06af\u0626\u06cc \u062d\u062f\u0648\u062f \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u06c1\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>\u062c\u0628 \u062a\u06a9 AWS \u0645\u0648\u062c\u0648\u062f \u06c1\u06d2 AWS \u0645\u06cc\u06ba \u0631\u0648\u0644 \u0628\u06cc\u06a9\u0633 \u06a9\u0627\u0645 \u06a9\u0631\u062a\u06d2 \u0631\u06c1\u06cc\u06ba \u06af\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u067e\u06be\u0631\u060c GKE \u062b\u0627\u0628\u062a \u06c1\u0648\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f\u060c \u06c1\u0645 \u0627\u0633\u06d2 AWS \u0633\u06d2 \u0631\u06cc\u0679\u0627\u0626\u0631 \u06a9\u0631 \u062f\u06cc\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<\/ol>\n<h4 id=\"heading-what-moves-and-what-stays\">\u06a9\u06cc\u0627 \u062d\u0631\u06a9\u062a \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u06a9\u06cc\u0627 \u0631\u06c1\u062a\u0627 \u06c1\u06d2:<\/h4>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/10\/1792188590_397_\u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0648\u06ba-\u06a9\u0648-AWS-\u0633\u06d2-GKE-\u0645\u06cc\u06ba-\u06a9\u06cc\u0633\u06d2-\u0645\u0646\u062a\u0642\u0644-\u06a9\u06cc\u0627-\u062c\u0627\u0626\u06d2\u06d4.png\" alt=\"\u0645\u0646\u062a\u0642\u0644\u06cc \u06a9\u0627 \u062e\u0627\u06a9\u06c1 ClearPay UI \u0627\u0648\u0631 API \u06a9\u0648 GCP \u067e\u0631 AWS EC2 \u0633\u0631\u0648\u0631\u0632 \u0633\u06d2 Google Kubernetes Engine (GKE) \u0645\u06cc\u06ba \u0645\u0646\u062a\u0642\u0644 \u06c1\u0648\u062a\u06d2 \u062f\u06a9\u06be\u0627 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4 GKE \u0627\u0633\u0679\u06cc\u062c\u0646\u06af \u0627\u0648\u0631 \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u06a9\u06cc \u0645\u06cc\u0632\u0628\u0627\u0646\u06cc \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 PostgreSQL AWS \u067e\u0631 Amazon RDS \u067e\u0631 \u0631\u06c1\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u062f\u0648\u0646\u0648\u06ba \u0645\u0627\u062d\u0648\u0644 \u06a9\u06d2 \u062f\u0631\u0645\u06cc\u0627\u0646 \u0645\u0634\u062a\u0631\u06a9\u06c1 \u06c1\u06d2\u06d4\" style=\"display: block;\" width=\"600\" height=\"400\" loading=\"lazy\" title=\"\"><\/p>\n<p>\u062e\u0627\u06a9\u06c1 AWS \u0633\u06d2 GCP \u0645\u06cc\u06ba \u0645\u0646\u062a\u0642\u0644\u06cc \u06a9\u0648 \u0638\u0627\u06c1\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 ClearPay UI \u0627\u0648\u0631 API Google Kubernetes Engine (GKE) \u0645\u06cc\u06ba \u0645\u0646\u062a\u0642\u0644 \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba \u062c\u0633 \u0645\u06cc\u06ba EC2 \u0633\u0631\u0648\u0631\u0632 \u067e\u0631 \u0627\u0633\u0679\u06cc\u062c\u0646\u06af \u0627\u0648\u0631 \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u0686\u0644\u062a\u06cc \u06c1\u06d2\u06d4 PostgreSQL AWS \u067e\u0631 Amazon RDS \u0645\u06cc\u06ba \u0631\u06c1\u062a\u0627 \u06c1\u06d2\u060c \u0644\u06c1\u0630\u0627 \u062f\u0648\u0646\u0648\u06ba \u0645\u0627\u062d\u0648\u0644 \u0645\u0646\u062a\u0642\u0644\u06cc \u06a9\u06d2 \u062f\u0648\u0631\u0627\u0646 \u0627\u06cc\u06a9 \u06c1\u06cc \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u067e\u0648\u0631\u06cc \u06a9\u062a\u0627\u0628 \u0627\u06cc\u06a9 \u06c1\u06cc \u0631\u0627\u0633\u062a\u06d2 \u067e\u0631 \u0686\u0644\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-plaintext\">AWS only  \u2192  AWS and GKE together  \u2192  GKE only, then EC2 gone\n<\/code><\/pre>\n<p>\u062f\u0631\u0645\u06cc\u0627\u0646\u06cc \u0645\u0631\u0627\u062d\u0644 \u0645\u06cc\u06ba\u060c \u06a9\u0627\u0645 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2. \u062f\u0648\u0646\u0648\u06ba \u06a9\u0644\u0627\u0624\u0688 \u0627\u06cc\u06a9 \u06c1\u06cc \u0627\u06cc\u067e\u0633 \u0686\u0644\u0627\u062a\u06d2 \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u0627\u06cc\u06a9 \u06c1\u06cc \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0628\u0627\u062a \u0686\u06cc\u062a \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0627\u0648\u0631 \u0679\u0631\u06cc\u0641\u06a9 \u0627\u0646 \u06a9\u06d2 \u062f\u0631\u0645\u06cc\u0627\u0646 \u0686\u06be\u0648\u0679\u06d2 \u0642\u062f\u0645\u0648\u06ba \u0645\u06cc\u06ba \u062d\u0631\u06a9\u062a \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<h4 id=\"heading-how-traffic-will-move\">\u0679\u0631\u06cc\u0641\u06a9 \u06a9\u06cc\u0633\u06d2 \u0686\u0644\u062a\u06cc \u06c1\u06d2\u06d4<\/h4>\n<p>\u0641\u06cc \u0627\u0644\u062d\u0627\u0644\u060c \u0635\u0627\u0631\u0641\u06cc\u0646 \u0627\u06cc\u06a9 \u0644\u0686\u06a9\u062f\u0627\u0631 IP \u062f\u0627\u062e\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u062a\u0645\u0627\u0645 \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u06cc\u06ba AWS \u06a9\u0648 \u062c\u0627\u062a\u06cc \u06c1\u06cc\u06ba\u06d4<\/p>\n<ol>\n<li>\n<p>\u0627\u06af\u0631 \u0622\u067e \u06af\u0648\u06af\u0644 \u0644\u0648\u0688 \u0628\u06cc\u0644\u0646\u0633\u0631 \u06a9\u0648 \u0633\u0627\u0645\u0646\u06d2 \u0631\u06a9\u06be\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u0622\u067e \u06a9\u06d2 \u06af\u0627\u06c1\u06a9 \u0627\u06cc\u06a9 \u0628\u0627\u0631 \u0627\u0633 \u067e\u062a\u06d2 \u067e\u0631 \u062c\u0627\u0626\u06cc\u06ba \u06af\u06d2\u06d4 \u0622\u067e \u0627\u0633 \u0627\u06cc\u0688\u0631\u06cc\u0633 \u06a9\u0648 \u0628\u0642\u06cc\u06c1 \u0645\u0646\u062a\u0642\u0644\u06cc \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u0631\u06c1\u06cc\u06ba \u06af\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0644\u0648\u0688 \u0628\u06cc\u0644\u0646\u0633\u0631 \u067e\u06be\u0631 \u06a9\u0686\u06be \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u06cc\u06ba AWS \u0627\u0648\u0631 \u062f\u06cc\u06af\u0631 \u06a9\u0648 GKE \u06a9\u0648 \u0628\u06be\u06cc\u062c\u062a\u0627 \u06c1\u06d2\u06d4 \u0633\u06d2 \u0634\u0631\u0648\u0639 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4 <strong>100% AWS \u0627\u0648\u0631 0% GKE<\/strong>.<\/p>\n<\/li>\n<li>\n<p>\u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 GKE \u0634\u06cc\u0626\u0631 \u0645\u06cc\u06ba \u0627\u0636\u0627\u0641\u06c1 \u06a9\u0631\u06cc\u06ba: <code>scripts\/shift-traffic.sh<\/code>\u0627\u06cc\u06a9 \u0648\u0642\u062a \u0645\u06cc\u06ba \u0686\u0646\u062f \u0642\u062f\u0645 \u0627\u0679\u06be\u0627\u0626\u06cc\u06ba\u060c \u06c1\u0631 \u0642\u062f\u0645 \u067e\u0631 \u0646\u0645\u0628\u0631 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0627\u06af\u0631 \u0622\u067e \u06a9\u0648 GKE \u0645\u06cc\u06ba \u067e\u0631\u06cc\u0634\u0627\u0646\u06cc \u06c1\u0648 \u0631\u06c1\u06cc \u06c1\u06d2 \u062a\u0648 \u0628\u06be\u06cc\u062c\u06cc\u06ba: <strong>100% \u0679\u0631\u06cc\u0641\u06a9 AWS \u067e\u0631 \u0648\u0627\u067e\u0633 \u0622\u062a\u06cc \u06c1\u06d2\u06d4<\/strong> \u06a9\u06d2 \u0633\u0627\u062a\u06be <code>shift-traffic.sh 100 0<\/code>. \u0631\u0648\u0644 \u0628\u06cc\u06a9 \u0645\u06cc\u06ba \u0686\u0646\u062f \u0633\u06cc\u06a9\u0646\u0688 \u0644\u06af\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<\/ol>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/10\/1792188590_289_\u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0648\u06ba-\u06a9\u0648-AWS-\u0633\u06d2-GKE-\u0645\u06cc\u06ba-\u06a9\u06cc\u0633\u06d2-\u0645\u0646\u062a\u0642\u0644-\u06a9\u06cc\u0627-\u062c\u0627\u0626\u06d2\u06d4.png\" alt=\"\u0622\u0631\u06a9\u06cc\u0679\u06cc\u06a9\u0686\u0631 \u0688\u0627\u06cc\u0627\u06af\u0631\u0627\u0645 \u062c\u0633 \u0645\u06cc\u06ba \u0635\u0627\u0631\u0641\u06cc\u0646 \u06a9\u0648 \u0627\u06cc\u06a9 \u0639\u0648\u0627\u0645\u06cc \u067e\u062a\u06d2 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 AWS \u0627\u0648\u0631 Google Kubernetes Engine (GKE) \u067e\u0631 \u0686\u0644\u0646\u06d2 \u0648\u0627\u0644\u06d2 ClearPay UI \u0627\u0648\u0631 API \u0633\u06d2 \u0645\u0646\u0633\u0644\u06a9 \u06c1\u0648\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u062f\u06a9\u06be\u0627\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4 \u062f\u0648\u0646\u0648\u06ba \u0645\u0627\u062d\u0648\u0644 AWS \u067e\u0631 Amazon RDS \u067e\u0631 \u0627\u06cc\u06a9 \u06c1\u06cc PostgreSQL \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u0633\u06d2 \u062c\u0691\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4\" style=\"display: block;\" width=\"600\" height=\"400\" loading=\"lazy\" title=\"\"><\/p>\n<p>\u0627\u0648\u067e\u0631 \u06a9\u0627 \u062e\u0627\u06a9\u06c1 \u062f\u06a9\u06be\u0627\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u06a9\u0633 \u0637\u0631\u062d \u06af\u0627\u06c1\u06a9 \u0645\u0646\u062a\u0642\u0644\u06cc \u06a9\u06d2 \u062f\u0648\u0631\u0627\u0646 \u0627\u06cc\u06a9 \u0639\u0648\u0627\u0645\u06cc \u067e\u062a\u06d2 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 ClearPay \u0633\u06d2 \u062c\u0691\u06cc\u06ba \u06af\u06d2 \u062c\u0628\u06a9\u06c1 UI \u0627\u0648\u0631 API AWS \u0627\u0648\u0631 GKE \u062f\u0648\u0646\u0648\u06ba \u067e\u0631 \u0686\u0644 \u0631\u06c1\u06d2 \u06c1\u06cc\u06ba\u06d4 \u062f\u0648\u0646\u0648\u06ba \u0645\u0627\u062d\u0648\u0644 AWS \u067e\u0631 Amazon RDS \u067e\u0631 \u0627\u06cc\u06a9 \u06c1\u06cc PostgreSQL \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u0633\u06d2 \u062c\u0691\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0627\u067e\u0646\u06d2 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u06a9\u0648 \u0627\u06cc\u06a9 \u062c\u06af\u06c1 \u067e\u0631 \u0631\u06a9\u06be\u0646\u0627 \u0622\u067e \u06a9\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u06a9\u06d2 \u0688\u06cc\u0679\u0627 \u06a9\u0648 \u0645\u0646\u062a\u0642\u0644 \u06c1\u0648\u0646\u06d2 \u0633\u06d2 \u0631\u0648\u06a9\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0679\u0631\u06cc\u0641\u06a9 \u06a9\u0648 \u062a\u0642\u0633\u06cc\u0645 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 DNS \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0628\u0627\u0631\u06d2 \u0645\u06cc\u06ba \u06a9\u06cc\u0627 \u062e\u06cc\u0627\u0644 \u06c1\u06d2\u061f DNS \u0627\u06cc\u06a9 \u062a\u0644\u0627\u0634 \u06c1\u06d2 \u062c\u0648 \u0646\u0627\u0645\u0648\u06ba \u06a9\u0648 IP \u067e\u062a\u0648\u06ba \u0645\u06cc\u06ba \u0628\u062f\u0644 \u062f\u06cc\u062a\u06cc \u06c1\u06d2\u06d4 \u0622\u067e \u06a9\u0627 \u0644\u06cc\u067e \u0679\u0627\u067e \u0627\u0648\u0631 \u0627\u0646\u0679\u0631\u0646\u06cc\u0679 \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0646\u0646\u062f\u06c1 \u062c\u0648\u0627\u0628\u0627\u062a \u06a9\u0648 \u06a9\u06cc\u0634 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>DNS \u0631\u06cc\u06a9\u0627\u0631\u0688\u0632 \u06a9\u0648 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f\u060c \u06a9\u0686\u06be \u0635\u0627\u0631\u0641\u06cc\u0646 \u0645\u0646\u0679\u0648\u06ba \u06cc\u0627 \u06af\u06be\u0646\u0679\u0648\u06ba \u062a\u06a9 \u067e\u0631\u0627\u0646\u06d2 \u0645\u0642\u0627\u0645 \u067e\u0631 \u062c\u0627\u062a\u06d2 \u0631\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0627\u06cc\u06a9 \u0631\u0648\u0644 \u0628\u06cc\u06a9 \u062c\u0633 \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u06af\u06be\u0646\u0679\u06c1 \u0644\u06af\u062a\u0627 \u06c1\u06d2 \u0648\u06c1 \u0631\u0648\u0644 \u0628\u06cc\u06a9 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u0644\u0648\u0688 \u0628\u06cc\u0644\u0646\u0633 \u0633\u06cc\u06a9\u0646\u0688\u0648\u06ba \u0645\u06cc\u06ba \u067e\u0627\u0631\u0679\u06cc\u0634\u0646\u0632 \u06a9\u0648 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h4 id=\"heading-rollback-requirement\">\u0631\u0648\u0644 \u0628\u06cc\u06a9 \u06a9\u06d2 \u062a\u0642\u0627\u0636\u06d2<\/h4>\n<p>\u0622\u067e \u06a9\u06cc \u0645\u0646\u062a\u0642\u0644\u06cc \u06a9\u06d2 \u06c1\u0631 \u0645\u0631\u062d\u0644\u06d2 \u067e\u0631\u060c 100% AWS \u067e\u0631 \u0648\u0627\u067e\u0633\u06cc \u062a\u06cc\u0632 \u0627\u0648\u0631 \u0645\u062d\u0641\u0648\u0638 \u06c1\u0648\u0646\u06cc \u0686\u0627\u06c1\u06cc\u06d2\u06d4 \u06cc\u06c1 \u062f\u0648\u0628\u0627\u0631\u06c1 \u062a\u0642\u0633\u06cc\u0645 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u06cc\u06c1 \u06a9\u0648\u0626\u06cc \u0688\u06cc \u0627\u06cc\u0646 \u0627\u06cc\u0633 \u062a\u0628\u062f\u06cc\u0644\u06cc \u0646\u06c1\u06cc\u06ba \u06c1\u06d2 \u062c\u0633 \u06a9\u0648 \u067e\u06be\u06cc\u0644\u0627\u0646\u06d2 \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u06af\u06be\u0646\u0679\u06c1 \u0644\u06af\u062a\u0627 \u06c1\u06d2\u06d4 \u0628\u0627\u0628 20 \u067e\u06c1\u0644\u06cc \u0634\u0641\u0679 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0628\u0627\u0644\u06a9\u0644 \u0627\u0633 \u06a9\u06cc \u062c\u0627\u0646\u0686 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h4 id=\"heading-what-zero-downtime-means-here\">\u06cc\u06c1\u0627\u06ba \"\u0632\u06cc\u0631\u0648 \u0688\u0627\u0624\u0646 \u0679\u0627\u0626\u0645\" \u06a9\u0627 \u06a9\u06cc\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2\u06d4<\/h4>\n<p>\u0627\u0633 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06cc\u06c1 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2 \u06a9\u06c1 \u06a9\u0648\u0626\u06cc \u0628\u06be\u06cc \u0646\u0627\u06a9\u0627\u0645 \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u06cc\u06ba \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u06ba \u06af\u06cc\u06d4 \u06a9\u0648\u0626\u06cc \u062d\u0642\u06cc\u0642\u06cc \u0646\u0638\u0627\u0645 \u0627\u0633 \u06a9\u0627 \u0648\u0639\u062f\u06c1 \u0646\u06c1\u06cc\u06ba \u06a9\u0631 \u0633\u06a9\u062a\u0627\u06d4<\/p>\n<p>\u0627\u0633 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u06a9\u06c1 \u06a9\u0633\u06cc \u0628\u06be\u06cc \u0635\u0627\u0631\u0641 \u06a9\u0648 \u062c\u0627\u0631\u06cc \u0628\u0646\u062f\u0634 \u06a9\u0627 \u0633\u0627\u0645\u0646\u0627 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u0646\u0627 \u067e\u0691\u06d2 \u06af\u0627\u06d4 \u0686\u0646\u062f \u0646\u0627\u06a9\u0627\u0645 \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0648\u06ba \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u06c1\u06d2 \u062c\u0628 \u062a\u06a9 \u06a9\u06c1 \u0648\u06c1 \u0628\u0627\u0628 6 \u0645\u06cc\u06ba \u0644\u06a9\u06be\u06cc \u06af\u0626\u06cc \u062d\u062f\u0648\u062f \u0645\u06cc\u06ba \u0631\u06c1\u06cc\u06ba\u06d4<\/p>\n<h4 id=\"heading-why-the-api-moves-first\">APIs \u067e\u06c1\u0644\u06d2 \u06a9\u06cc\u0648\u06ba \u0645\u0646\u062a\u0642\u0644 \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/h4>\n<p>\u0627\u06af\u0631 \u0622\u067e \u06a9\u0627 API \u0627\u0648\u0631 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u0627\u06cc\u06a9 \u0633\u0627\u062a\u06be \u0686\u0644\u062a\u06d2 \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u06a9\u0686\u06be \u063a\u0644\u0637 \u06c1\u0648 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u060c \u062a\u0648 \u063a\u0644\u0637\u06cc \u0627\u06cc\u06a9 \u06cc\u0627 \u062f\u0648\u0633\u0631\u06d2 \u0645\u06cc\u06ba \u06c1\u0648\u0633\u06a9\u062a\u06cc \u06c1\u06d2\u060c \u06cc\u0627 \u0627\u0646 \u06a9\u06d2 \u062a\u0639\u0627\u0645\u0644 \u06a9\u06d2 \u0637\u0631\u06cc\u0642\u06d2 \u0645\u06cc\u06ba\u06d4 \u0635\u0631\u0641 API \u06a9\u0648 \u0645\u0646\u062a\u0642\u0644 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u0633\u0648\u0627\u0644 \u0686\u06be\u0648\u0679\u0627 \u06c1\u0648\u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u06a9\u06cc\u0627 \u06cc\u06c1 API \u0635\u0627\u0631\u0641\u06cc\u0646 \u06a9\u0648 \u0646\u0642\u0635\u0627\u0646 \u067e\u06c1\u0646\u0686\u0627\u0626\u06d2 \u0628\u063a\u06cc\u0631 GKE \u067e\u0631 \u0686\u0644 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u061f<\/p>\n<p>\u06cc\u06c1 \u0627\u06cc\u06a9 \u0642\u0627\u0628\u0644 \u062c\u0648\u0627\u0628 \u0633\u0648\u0627\u0644 \u06c1\u06d2\u06d4 \"\u06a9\u06cc\u0627 \u06c1\u0645 \u0645\u062d\u0641\u0648\u0638 \u0637\u0631\u06cc\u0642\u06d2 \u0633\u06d2 \u0633\u0628 \u06a9\u0686\u06be \u0627\u06cc\u06a9 \u0633\u0627\u062a\u06be \u0645\u0646\u062a\u0642\u0644 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u061f\" \u062c\u0648\u0627\u0628 \u062f\u06cc\u0646\u0627 \u0628\u06c1\u062a \u0645\u0634\u06a9\u0644 \u06c1\u06d2 \u0627\u0648\u0631 \u0644\u0627\u0626\u06cc\u0648 \u0688\u06cc\u0628\u06af \u06a9\u0631\u0646\u0627 \u0628\u06c1\u062a \u0628\u0631\u0627 \u06c1\u06d2\u06d4<\/p>\n<h4 id=\"heading-why-the-database-stays-on-aws\">\u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u06a9\u0648 AWS \u067e\u0631 \u06a9\u06cc\u0648\u06ba \u0631\u06a9\u06be\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/h4>\n<p>\u0628\u0627\u0628 13 \u0638\u0627\u06c1\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u06a9\u0644\u0627\u0624\u0688 \u0679\u0648 \u06a9\u0644\u0627\u0624\u0688 \u06a9\u0646\u06cc\u06a9\u0679\u0648\u0679\u06cc \u06a9\u06cc\u0627 \u06c1\u06d2\u06d4 PostgreSQL \u0627\u0633 \u0648\u0642\u062a \u0627\u0633 \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u0633\u06d2 \u0622\u06af\u06d2 \u0646\u06c1\u06cc\u06ba \u0628\u0691\u06be \u0631\u06c1\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0645\u0633\u062a\u0642\u0628\u0644 \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u0627\u0644\u06af \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u0645\u0645\u06a9\u0646\u06c1 \u0637\u0648\u0631 \u067e\u0631 \u06af\u0648\u06af\u0644 \u06a9\u06cc \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u0645\u0627\u0626\u06cc\u06af\u0631\u06cc\u0634\u0646 \u0633\u0631\u0648\u0633\u060c \u0645\u0633\u0644\u0633\u0644 \u0646\u0642\u0644\u060c \u0627\u0648\u0631 \u0627\u0633 \u06a9\u06d2 \u0627\u067e\u0646\u06d2 \u06a9\u0679 \u0627\u0648\u0648\u0631 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0627\u0633 \u06a9\u0648 \u0633\u0646\u0628\u06be\u0627\u0644\u06d2 \u06af\u0627\u06d4 \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 GKE \u067e\u0631 \u0627\u06cc\u06a9 API \u0627\u0648\u0631 AWS \u067e\u0631 \u0627\u06cc\u06a9 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u062e\u062a\u0645 \u06c1\u0648\u06af\u0627\u06d4 \u06cc\u06c1 \u0627\u06cc\u06a9 \u0645\u0646\u0635\u0648\u0628\u06c1 \u06c1\u06d2\u060c \u0646\u0627\u0645\u06a9\u0645\u0644 \u0627\u062e\u062a\u062a\u0627\u0645 \u0646\u06c1\u06cc\u06ba\u06d4<\/p>\n<h4 id=\"heading-why-both-clouds-must-run-at-the-same-time\">\u062f\u0648 \u0628\u0627\u062f\u0644\u0648\u06ba \u06a9\u0648 \u0628\u06cc\u06a9 \u0648\u0642\u062a \u0686\u0644\u0627\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06a9\u06cc\u0648\u06ba\u061f<\/h4>\n<p>\u0622\u067e \u06a9\u0627 \u0631\u0648\u0644 \u0628\u06cc\u06a9 \u067e\u0644\u0627\u0646 \u0627\u0633 \u067e\u0631 \u0645\u0646\u062d\u0635\u0631 \u06c1\u0648\u06af\u0627\u06d4 \u06a9\u0686\u06be \u0679\u0631\u06cc\u0641\u06a9 GKE \u06a9\u0648 \u0628\u06be\u06cc\u062c\u06cc\u06ba \u0627\u0648\u0631 AWS \u06a9\u0648 \u062a\u06cc\u0627\u0631 \u0631\u06a9\u06be\u06cc\u06ba\u06d4 \u0627\u06af\u0631 GKE \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648\u062c\u0627\u062a\u0627 \u06c1\u06d2\u060c AWS \u06c1\u0631 \u0686\u06cc\u0632 \u06a9\u0627 \u062f\u0648\u0628\u0627\u0631\u06c1 \u062f\u0639\u0648\u06cc \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0635\u0631\u0641 \u0627\u0633 \u0648\u0642\u062a \u06a9\u0627\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u062c\u0628 AWS \u0645\u0648\u062c\u0648\u062f \u06c1\u0648\u06d4<\/p>\n<h4 id=\"heading-set-a-migration-budget-before-touching-gcp\">GCP \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0627\u067e\u0646\u0627 \u0645\u0627\u0626\u06cc\u06af\u0631\u06cc\u0634\u0646 \u0628\u062c\u0679 \u0633\u06cc\u0679 \u06a9\u0631\u06cc\u06ba\u06d4<\/h4>\n<p><strong>\u06cc\u06c1 \u0627\u0628 \u0628\u0627\u0628 9 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u06a9\u0631\u06cc\u06ba\u06d4<\/strong> \u0646\u0648\u0679 \u067e\u06cc\u0688 \u067e\u0631 \u0686\u0627\u0631 \u0646\u0645\u0628\u0631 \u0644\u06a9\u06be\u06cc\u06ba\u06d4 \u0648\u06c1 \u0641\u06cc\u0635\u0644\u06c1 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u06a9\u06c1 \u0627\u0633 \u06a9\u0627\u0631\u0631\u0648\u0627\u0626\u06cc \u067e\u0631 \u06a9\u062a\u0646\u06cc \u0644\u0627\u06af\u062a \u0622\u0626\u06d2 \u06af\u06cc\u06d4<\/p>\n<p>\u0627\u067e\u0646\u06d2 \u0627\u062e\u0631\u0627\u062c\u0627\u062a \u06a9\u06cc \u0645\u0646\u0635\u0648\u0628\u06c1 \u0628\u0646\u062f\u06cc \u062c\u0633 \u0637\u0631\u062d \u0633\u06d2 \u0622\u067e \u0627\u067e\u0646\u06d2 \u0633\u0641\u0631\u06cc \u0628\u062c\u0679 \u06a9\u06cc \u0645\u0646\u0635\u0648\u0628\u06c1 \u0628\u0646\u062f\u06cc \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<ol>\n<li>\n<p><strong>\u0641\u06cc \u0627\u0644\u062d\u0627\u0644 AWS \u06a9\u06cc \u0642\u06cc\u0645\u062a \u06a9\u062a\u0646\u06cc \u06c1\u06d2\u061f<\/strong> \u062a\u0642\u0631\u06cc\u0628\u0627\u064b $1.25 \u0641\u06cc \u062f\u0646 \u0633\u06d2 \u0634\u0631\u0648\u0639 \u06c1\u0648 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4 <code>infra\/aws\/COST.md<\/code>.<\/p>\n<\/li>\n<li>\n<p><strong>GCP \u06a9\u06cc \u0631\u0648\u0632\u0627\u0646\u06c1 \u06a9\u06cc \u0642\u06cc\u0645\u062a \u06a9\u06cc\u0627 \u06c1\u06d2\u061f<\/strong> \u062a\u0645 \u0627\u0628\u06be\u06cc \u062a\u06a9 \u0646\u06c1\u06cc\u06ba \u062c\u0627\u0646\u062a\u06d2\u06d4 \"TBD\" (TBD) \u0644\u06a9\u06be\u06cc\u06ba\u06d4 \u0628\u0627\u0628 9 \u0627\u0633 \u0633\u06d2 \u062e\u0637\u0627\u0628 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 <code>infra\/gcp\/COST.md<\/code> \u0627\u0633 \u06a9\u06cc \u0642\u06cc\u0645\u062a \u062a\u0642\u0631\u06cc\u0628\u0627\u064b $1.60 \u0633\u06d2 $5 \u0641\u06cc \u062f\u0646 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u062c\u0628 \u062f\u0648\u0646\u0648\u06ba \u0628\u0627\u062f\u0644 \u0686\u0644 \u0631\u06c1\u06d2 \u06c1\u06cc\u06ba \u062a\u0648 \u062d\u0631\u06a9\u062a \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0642\u06cc\u0645\u062a \u06a9\u06cc\u0627 \u06c1\u06d2\u061f<\/strong> \u0645\u0646\u062a\u0642\u0644 \u06a9\u0631\u062a\u06d2 \u0648\u0642\u062a AWS \u0627\u0648\u0631 GCP \u06a9\u06d2 \u0644\u06cc\u06d2 \u0628\u06cc\u06a9 \u0648\u0642\u062a \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u06a9\u0631\u06cc\u06ba\u06d4 \u0627\u0633 \u06a9\u06cc \u0644\u0627\u06af\u062a \u0631\u0648\u0632\u0627\u0646\u06c1 $1.25 \u06c1\u06d2\u060c \u0646\u06cc\u0632 GCP \u06cc\u0648\u0645\u06cc\u06c1 \u0644\u0627\u06af\u062a\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u0622\u067e \u06a9\u0627 \u0628\u062c\u0679.<\/strong> \u06cc\u06c1 \u0632\u06cc\u0627\u062f\u06c1 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u0631\u0642\u0645 \u06c1\u06d2 \u062c\u0648 \u0622\u067e \u067e\u0648\u0631\u06cc \u062d\u0631\u06a9\u062a \u067e\u0631 \u062e\u0631\u0686 \u06a9\u0631\u06cc\u06ba \u06af\u06d2\u06d4 \u0627\u067e\u0646\u06d2 \u067e\u06cc\u0633\u06d2 \u062e\u0631\u0686 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0627\u0628\u06be\u06cc \u0627\u067e\u0646\u0627 \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<\/ol>\n<p><strong>\u0627\u0633 \u0644\u06cc\u0628 \u06a9\u06d2 \u0627\u0639\u062f\u0627\u062f \u0648 \u0634\u0645\u0627\u0631:<\/strong><\/p>\n<pre><code class=\"language-plaintext\">Current AWS cost:   $1.25\/day\nExpected GCP cost:  about $3\/day (Chapter 9 checks this)\nDual-run cost:      $1.25 + $3 = $4.25\/day while both run\nMigration budget:   5 days \u00d7 $4.25 = about $21. Round up to $25.\n<\/code><\/pre>\n<p>\u0686\u0644\u062a\u06d2 \u0686\u0644\u062a\u06d2 \u0645\u062c\u0645\u0648\u0639\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0686\u0644\u062a\u06d2 \u0631\u06c1\u06cc\u06ba\u06d4 \u0627\u0628\u0648\u0627\u0628 19-25 \u0627\u0635\u0644 \u062f\u0648\u06c1\u0631\u06d2 \u0639\u0645\u0644\u062f\u0631\u0622\u0645\u062f \u06a9\u06cc \u062a\u0627\u0631\u06cc\u062e\u06cc\u06ba \u0634\u0627\u0645\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0628\u0627\u0628 28 \u0627\u06cc\u06a9 \u0633\u0648\u0627\u0644 \u067e\u0648\u0686\u06be\u062a\u0627 \u06c1\u06d2\u06d4 \u06a9\u06cc\u0627 \u0622\u067e \u06a9\u0627 \u0628\u062c\u0679 \u0632\u06cc\u0627\u062f\u06c1 \u06c1\u06d2\u061f \u0645\u062b\u0627\u0644 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631\u060c \u0627\u06af\u0631 \u0631\u0648\u0644 \u0628\u06cc\u06a9 \u06a9\u06cc \u0648\u062c\u06c1 \u0633\u06d2 \u06a9\u0633\u06cc \u0627\u0642\u062f\u0627\u0645 \u0645\u06cc\u06ba \u0632\u06cc\u0627\u062f\u06c1 \u0648\u0642\u062a \u0644\u06af\u062a\u0627 \u06c1\u06d2\u060c \u062a\u0648 \u06a9\u0644 \u0628\u0627\u0644\u06a9\u0644 \u0648\u06c1\u06cc \u0644\u0627\u06af\u062a \u0638\u0627\u06c1\u0631 \u06a9\u0631\u06d2 \u06af\u0627\u06d4<\/p>\n<h4 id=\"heading-migration-phases\">\u06c1\u062c\u0631\u062a \u06a9\u06d2 \u0645\u0631\u0627\u062d\u0644<\/h4>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/10\/1792188591_364_\u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0648\u06ba-\u06a9\u0648-AWS-\u0633\u06d2-GKE-\u0645\u06cc\u06ba-\u06a9\u06cc\u0633\u06d2-\u0645\u0646\u062a\u0642\u0644-\u06a9\u06cc\u0627-\u062c\u0627\u0626\u06d2\u06d4.png\" alt=\"\u0628\u06c1\u0627\u0624 \u06a9\u0627 \u062e\u0627\u06a9\u06c1 \u062a\u0631\u062a\u06cc\u0628 \u0645\u06cc\u06ba \u0645\u0646\u062a\u0642\u0644\u06cc \u06a9\u06d2 12 \u0645\u0631\u0627\u062d\u0644 \u06a9\u0648 \u062f\u06a9\u06be\u0627 \u0631\u06c1\u0627 \u06c1\u06d2: \u062a\u0641\u062a\u06cc\u0634\u060c \u0688\u06cc\u0632\u0627\u0626\u0646\u060c \u067e\u0631\u0648\u0648\u06cc\u0698\u0646\u0646\u06af\u060c \u06a9\u0646\u0679\u06cc\u0646\u0631\u0627\u0626\u0632\u06cc\u0634\u0646\u060c \u0627\u0633\u0679\u06cc\u062c\u0646\u06af \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc\u060c \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u0645\u06cc\u06ba \u0641\u0631\u0648\u063a\u060c \u062a\u0648\u062b\u06cc\u0642\u060c \u0628\u062a\u062f\u0631\u06cc\u062c \u0679\u0631\u06cc\u0641\u06a9 \u06a9\u06cc \u0646\u0642\u0644 \u0648 \u062d\u0631\u06a9\u062a\u060c \u062e\u0631\u0627\u0628\u06cc \u0633\u06d2 \u0646\u0645\u0679\u0646\u06d2\u060c \u06a9\u0679 \u0627\u0648\u0648\u0631 \u06a9\u06cc \u062a\u06a9\u0645\u06cc\u0644\u060c AWS \u06a9\u0648 \u062e\u062a\u0645 \u06a9\u0631\u0646\u0627\u060c \u0627\u0648\u0631 \u062c\u0627\u0626\u0632\u06c1\u06d4 \u062a\u06cc\u0631 \u062a\u06cc\u0646 \u0642\u0637\u0627\u0631\u0648\u06ba \u0645\u06cc\u06ba \u062a\u0631\u062a\u06cc\u0628 \u0633\u06d2 \u0645\u0631\u0627\u062d\u0644 \u06a9\u0648 \u062c\u0648\u0691\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4\" style=\"display: block;\" width=\"600\" height=\"400\" loading=\"lazy\" title=\"\"><\/p>\n<h4 id=\"heading-done-when\">\u0645\u06a9\u0645\u0644 \u06c1\u0648\u0646\u06d2 \u067e\u0631:<\/h4>\n<ul>\n<li>\u0622\u067e \u0645\u0627\u06cc\u0627 \u06a9\u0648 \u062f\u0648 \u062c\u0645\u0644\u0648\u06ba \u0645\u06cc\u06ba \u0633\u0645\u062c\u06be\u0627 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba \u06a9\u06c1 \u06a9\u06cc\u0627 \u062d\u0631\u06a9\u062a \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u06a9\u06cc\u0627 \u0631\u06c1\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u063a\u0644\u0637 \u0627\u0642\u062f\u0627\u0645\u0627\u062a \u06a9\u0648 \u06a9\u06cc\u0633\u06d2 \u06a9\u0627\u0644\u0639\u062f\u0645 \u06a9\u06cc\u0627 \u062c\u0627\u0626\u06d2\u06d4<\/li>\n<\/ul>\n<h3 id=\"heading-chapter-8-map-what-clearpay-depends-on\">\u0628\u0627\u0628 8\u06d4 \u062c\u0627\u0646\u06cc\u06ba \u06a9\u06c1 \u06a9\u0644\u06cc\u0626\u0631 \u067e\u06d2 \u06a9\u0633 \u0686\u06cc\u0632 \u067e\u0631 \u0627\u0646\u062d\u0635\u0627\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/h3>\n<p><em>\u062c\u0645\u0639\u0631\u0627\u062a \u0635\u0628\u062d 9 \u0628\u062c\u06d2<\/em><\/p>\n<p>\u0627\u0633 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u06a9\u06c1 \u06a9\u0648\u0626\u06cc \u0628\u06be\u06cc GKE \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0634\u0631\u0648\u0639 \u06a9\u0631\u06d2\u060c \u0679\u06cc\u0645 \u06a9\u0648 \u0627\u0633 \u0628\u0627\u0631\u06d2 \u0645\u06cc\u06ba \u062a\u062d\u0631\u06cc\u0631\u06cc \u0631\u06c1\u0646\u0645\u0627\u0626\u06cc \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2 \u06a9\u06c1 ClearPay \u06a9\u06cc\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0646\u0638\u0627\u0645 \u0645\u0646\u06af\u0644 \u0633\u06d2 \u062f\u0633\u062a\u06cc \u0637\u0648\u0631 \u067e\u0631 \u06a9\u0627\u0645 \u06a9\u0631 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4 \u06a9\u0627\u063a\u0630 \u06cc\u06c1 \u0646\u06c1\u06cc\u06ba \u062f\u06a9\u06be\u0627\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0622\u067e \u0686\u0644\u062a\u06d2 \u067e\u06be\u0631\u062a\u06d2 \u06a9\u0627\u0645 \u06a9\u0631\u062a\u06d2 \u0631\u06c1\u0646\u06d2 \u06a9\u06cc \u06a9\u06cc\u0627 \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2\u06d4<\/p>\n<p>\u0645\u0627\u06cc\u0627: \"\u0627\u0633 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u06a9\u06c1 \u0622\u067e \u0627\u06cc\u06a9 \u0627\u0648\u0631 \u0628\u0627\u062f\u0644 \u0628\u0646\u0627\u0626\u06cc\u06ba\u060c \u06cc\u06c1 \u0644\u06a9\u06be\u06cc\u06ba \u06a9\u06c1 \u06cc\u06c1 \u0646\u0638\u0627\u0645 \u06a9\u0633 \u0686\u06cc\u0632 \u067e\u0631 \u0645\u0646\u062d\u0635\u0631 \u06c1\u06d2\u06d4\"<\/p>\n<h4 id=\"heading-why-this-matters\">\u06cc\u06c1 \u06a9\u06cc\u0648\u06ba \u0627\u06c1\u0645\u06cc\u062a \u0631\u06a9\u06be\u062a\u0627 \u06c1\u06d2\u06d4<\/h4>\n<p>\u0631\u06c1\u0646\u0645\u0627\u0626\u06cc \u06a9\u06d2 \u0628\u063a\u06cc\u0631 \u06c1\u062c\u0631\u062a \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u063a\u0644\u0637 \u0686\u06cc\u0632\u0648\u06ba \u06a9\u0648 \u0645\u0646\u062a\u0642\u0644 \u06a9\u0631\u0646\u0627 \u06cc\u0627 \u062a\u0628\u062f\u06cc\u0644\u06cc \u06a9\u06d2 \u062f\u0646 \u0627\u06c1\u0645 \u0686\u06cc\u0632\u0648\u06ba \u06a9\u0648 \u063a\u0627\u0626\u0628 \u06a9\u0631\u0646\u0627\u06d4 \u0630\u06cc\u0644 \u0645\u06cc\u06ba \u06c1\u0631 \u0633\u0648\u0627\u0644 \u06a9\u0627 \u062c\u0648\u0627\u0628 \u0645\u06cc\u0645\u0648\u0631\u06cc \u06a9\u06cc \u0628\u062c\u0627\u0626\u06d2 \u0627\u0633\u0679\u0648\u0631\u06cc\u062c \u0633\u06d2 \u062f\u06cc\u06ba\u06d4<\/p>\n<h4 id=\"heading-1-is-the-app-ready-for-containers\">1. \u06a9\u06cc\u0627 \u0622\u067e \u06a9\u06cc \u0627\u06cc\u067e \u06a9\u0646\u0679\u06cc\u0646\u0631 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062a\u06cc\u0627\u0631 \u06c1\u06d2\u061f<\/h4>\n<p>\u06c1\u0627\u06ba <code>api\/Dockerfile<\/code> \u06c1\u0645 \u0628\u0627\u0628 1 \u0633\u06d2 \u0627\u0633 \u067e\u0631 \u06a9\u0627\u0645 \u06a9\u0631 \u0631\u06c1\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0622\u067e \u06a9\u0627 \u06a9\u0631\u062f\u0627\u0631 \u06a9\u06cc\u0633\u06d2 \u0628\u062f\u0644\u0627 \u06c1\u06d2\u061f \u06cc\u06c1 \u0645\u06cc\u0631\u06d2 \u0644\u06cc\u067e \u0679\u0627\u067e \u067e\u0631 \u0622\u0633\u0627\u0646 \u062a\u06be\u0627\u06d4 \u06cc\u06c1 \u0648\u06c1\u06cc \u06c1\u06d2 \u062c\u0648 GKE \u067e\u0631 \u067e\u06cc\u062f\u0627\u0648\u0627\u0631 \u0645\u06cc\u06ba \u0686\u0644\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h4 id=\"heading-2-where-do-the-secrets-live\">2. \u0631\u0627\u0632 \u06a9\u06c1\u0627\u06ba \u06c1\u06d2\u061f<\/h4>\n<p>\u06a9\u06be\u0644\u0627 <code>infra\/aws\/deploy\/systemd\/clearpay-api.service<\/code>. \u0644\u0648\u0688 \u06a9\u06cc\u0627 \u062c\u0627\u0626\u06d2 \u06af\u0627 <code>EnvironmentFile=\/opt\/clearpay-api\/.env<\/code>. \u0648\u06c1 \u0641\u0627\u0626\u0644 Git \u0645\u06cc\u06ba \u0645\u0648\u062c\u0648\u062f \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 EC2 \u0633\u0631\u0648\u0631 \u067e\u0631 \u0648\u0627\u0642\u0639 \u06c1\u06d2\u060c <code>deploy.sh<\/code> \u0628\u0627\u0628 5 \u0633\u06d2 \u0646\u0642\u0644 \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>API \u06a9\u0648 \u062f\u0631\u06a9\u0627\u0631 \u062a\u0645\u0627\u0645 \u0631\u0627\u0632 \u0627\u06cc\u06a9 \u0633\u0631\u0648\u0631 \u067e\u0631 \u0627\u06cc\u06a9 \u0633\u0627\u062f\u06c1 \u0679\u06cc\u06a9\u0633\u0679 \u0641\u0627\u0626\u0644 \u0645\u06cc\u06ba \u06c1\u06cc\u06ba\u06d4 \u0628\u0631\u0627\u06c1 \u06a9\u0631\u0645 \u0627\u0633 \u06a9\u0627 \u062d\u0648\u0627\u0644\u06c1 \u062f\u06cc\u06ba\u06d4 \u0686\u06be\u067e\u0646\u06d2 \u06a9\u06d2 \u0631\u0627\u0632 \u0646\u06c1 \u06a9\u06be\u0648\u0644\u06cc\u06ba\u06d4 \u0627\u0633 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2\u060c GKE \u06af\u0648\u06af\u0644 \u0633\u06cc\u06a9\u0631\u06cc\u0679 \u0645\u06cc\u0646\u06cc\u062c\u0631 \u0633\u06d2 \u0648\u06c1\u06cc \u0642\u062f\u0631 \u067e\u0691\u06be\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h4 id=\"heading-3-what-outside-systems-does-it-call\">3. \u0622\u067e \u06a9\u0646 \u0628\u06cc\u0631\u0648\u0646\u06cc \u0646\u0638\u0627\u0645\u0648\u06ba \u06a9\u0648 \u06a9\u0627\u0644 \u06a9\u0631 \u0631\u06c1\u06d2 \u06c1\u06cc\u06ba\u061f<\/h4>\n<p>\u0627\u06cc\u06a9: PostgreSQL\u06d4 \u06a9\u0646\u06a9\u0634\u0646 \u0622\u067e \u06a9\u06d2 AWS \u0688\u06cc\u0641\u0627\u0644\u0679 VPC \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u0631\u06c1\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 RDS \u06a9\u0627 \u06a9\u0648\u0626\u06cc \u0639\u0648\u0627\u0645\u06cc \u0627\u062e\u062a\u062a\u0627\u0645\u06cc \u0646\u0642\u0637\u06c1 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u06a9\u0648\u0626\u06cc \u062a\u06be\u0631\u0688 \u067e\u0627\u0631\u0679\u06cc APIs \u0646\u06c1\u06cc\u06ba \u06c1\u06cc\u06ba\u06d4 \u0628\u0631\u0627\u06c1 \u06a9\u0631\u0645 \u067e\u0691\u06be\u06cc\u06ba \u0627\u0648\u0631 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4 <code>api\/src\/<\/code>.<\/p>\n<h4 id=\"heading-4-does-the-server-remember-users-between-requests\">4. \u06a9\u06cc\u0627 \u0633\u0631\u0648\u0631 \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0648\u06ba \u06a9\u06d2 \u062f\u0631\u0645\u06cc\u0627\u0646 \u0635\u0627\u0631\u0641 \u06a9\u0648 \u06cc\u0627\u062f \u0631\u06a9\u06be\u062a\u0627 \u06c1\u06d2\u061f<\/h4>\n<p>\u0646\u06c1\u06cc\u06ba \u06a9\u06be\u0644\u0627 <code>api\/src\/index.js<\/code> \u0627\u0648\u0631 <code>api\/src\/routes\/transactions.js<\/code>. \u06c1\u0631 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u062f\u0633\u062a\u062e\u0637 \u0634\u062f\u06c1 \u0644\u0627\u06af \u0627\u0646 \u0679\u0648\u06a9\u0646 (JWT) \u06c1\u0648\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u06a9\u0627\u0624\u0646\u0679 \u06a9\u0627 \u062a\u0645\u0627\u0645 \u0688\u06cc\u0679\u0627 \u067e\u0648\u0633\u0679\u06af\u0631\u06cc\u0633 \u0645\u06cc\u06ba \u0631\u06c1\u062a\u0627 \u06c1\u06d2\u06d4 \u0633\u0631\u0648\u0631 \u0645\u06cc\u0645\u0648\u0631\u06cc \u0645\u06cc\u06ba \u06a9\u0686\u06be \u0646\u06c1\u06cc\u06ba \u0631\u06a9\u06be\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u06cc\u06c1\u06cc \u0648\u062c\u06c1 \u06c1\u06d2 \u06a9\u06c1 AWS \u0627\u0648\u0631 GKE \u0628\u0639\u062f \u0645\u06cc\u06ba \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u0648 \u062a\u0642\u0633\u06cc\u0645 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0686\u0648\u0646\u06a9\u06c1 \u062f\u0648\u0646\u0648\u06ba \u06a9\u0644\u0627\u0624\u0688\u0632 \u0627\u06cc\u06a9 \u06c1\u06cc \u0679\u0648\u06a9\u0646 \u067e\u0627\u0633 \u0648\u0631\u0688 \u06a9\u06cc \u062a\u0635\u062f\u06cc\u0642 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u0627\u06cc\u06a9 \u06c1\u06cc \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u06a9\u0648 \u067e\u0691\u06be\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0627\u0633 \u0644\u06cc\u06d2 \u0635\u0627\u0631\u0641 AWS \u0645\u06cc\u06ba \u0644\u0627\u06af \u0627\u0646 \u06a9\u0631 \u06a9\u06d2 GKE \u0645\u06cc\u06ba \u0631\u0642\u0645 \u0628\u06be\u06cc\u062c \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<h4 id=\"heading-5-can-a-retry-charge-twice\">5. \u06a9\u06cc\u0627 \u0645\u06cc\u06ba \u062f\u0648 \u0628\u0627\u0631 \u062f\u0648\u0628\u0627\u0631\u06c1 \u06a9\u0648\u0634\u0634 \u06a9\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u0631 \u0633\u06a9\u062a\u0627 \u06c1\u0648\u06ba\u061f<\/h4>\n<p>\u0646\u06c1\u06cc\u06ba \u0628\u0627\u0628 3 \u0646\u06d2 \u06cc\u06c1 \u062b\u0627\u0628\u062a \u06a9\u0631 \u062f\u06cc\u0627 \u06a9\u06c1 \u06cc\u06c1 \u0628\u0646\u06cc\u0627\u062f\u06cc \u06a9\u0627\u0645 \u06c1\u06d2\u06d4 \u0627\u0633\u06d2 \u062a\u0628 \u0628\u06be\u06cc \u06a9\u0627\u0645 \u06a9\u0631\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2 \u062c\u0628 \u067e\u06c1\u0644\u06cc \u06a9\u0648\u0634\u0634 AWS \u0633\u06d2 \u0679\u06a9\u0631\u0627 \u062c\u0627\u0626\u06d2 \u0627\u0648\u0631 \u062f\u0648\u0628\u0627\u0631\u06c1 \u06a9\u0648\u0634\u0634 GKE \u0633\u06d2 \u0679\u06a9\u0631\u0627 \u062c\u0627\u0626\u06d2\u06d4<\/p>\n<h4 id=\"heading-the-map\">\u0646\u0642\u0634\u06c1<\/h4>\n<p>\u0645\u0646\u062f\u0631\u062c\u06c1 \u0630\u06cc\u0644 \u067e\u0627\u0646\u0686 \u062c\u0648\u0627\u0628\u0627\u062a \u0627\u067e\u0646\u06d2 \u0646\u0648\u0679\u0633 \u0645\u06cc\u06ba \u0644\u06a9\u06be\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-plaintext\">Container ready:   yes, api\/Dockerfile\nSecrets:           one .env file on the EC2 server\nOutside systems:   PostgreSQL only\nServer state:      none, JWT + database\nRetry safety:      idempotency key, proven in Chapter 3\n<\/code><\/pre>\n<h4 id=\"heading-what-actually-needs-to-move\">\u0627\u0635\u0644 \u0645\u06cc\u06ba \u06a9\u06cc\u0627 \u0645\u0646\u062a\u0642\u0644 \u06a9\u0631\u0646\u0627 \u06c1\u06d2\u06d4<\/h4>\n<p>\u0635\u0631\u0641 UI \u0627\u0648\u0631 API: EC2 \u0633\u0631\u0648\u0631 \u0633\u06d2 GKE\u06d4 \u067e\u0648\u0633\u0679\u06af\u0631\u06cc\u0633 AWS \u067e\u0631 \u0628\u0627\u0642\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u0628\u0631\u0627\u0624\u0632\u0631 \u0627\u0648\u0631 \u0627\u0633\u06a9\u0631\u067e\u0679 \u0627\u0628 \u0628\u06be\u06cc \u0627\u06cc\u06a9 \u06c1\u06cc URL \u06a9\u0648 \u0645\u0627\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u0648\u06c1\u06cc JSON \u0648\u0627\u067e\u0633 \u062d\u0627\u0635\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u067e\u06be\u0631 \u0628\u06be\u06cc \u062f\u0648\u0628\u0627\u0631\u06c1 \u06a9\u0648\u0634\u0634 \u06a9\u0631\u0646\u0627 \u0622\u067e \u06a9\u0648 \u062f\u0648\u06af\u0646\u0627 \u062e\u0631\u0686 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u0646\u0627 \u0686\u0627\u06c1\u0626\u06d2\u06d4 \u0627\u0635\u0648\u0644 \u062a\u0628\u062f\u06cc\u0644 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u062a\u06d2\u06d4<\/p>\n<h4 id=\"heading-done-when\"><strong>\u06a9\u0628 \u0645\u06a9\u0645\u0644 \u06a9\u0631\u0646\u0627 \u06c1\u06d2\u06d4<\/strong><\/h4>\n<ul>\n<li>\u067e\u0627\u0646\u0686\u0648\u06ba \u062c\u0648\u0627\u0628\u0627\u062a \u0631\u06cc\u06a9\u0627\u0631\u0688 \u06a9\u06cc\u06d2 \u06af\u0626\u06d2 \u06c1\u06cc\u06ba\u060c \u06c1\u0631 \u0627\u06cc\u06a9 \u0641\u0627\u0626\u0644 \u06a9\u06cc \u0637\u0631\u0641 \u0627\u0634\u0627\u0631\u06c1 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/li>\n<\/ul>\n<h3 id=\"heading-chapter-9-understand-the-gcp-design\">\u0628\u0627\u0628 9\u06d4 \u062c\u06cc \u0633\u06cc \u067e\u06cc \u0688\u06cc\u0632\u0627\u0626\u0646 \u06a9\u0648 \u0633\u0645\u062c\u06be\u0646\u0627<\/h3>\n<p><em>\u062c\u0645\u0639\u0631\u0627\u062a 2:30 PM<\/em><\/p>\n<p>\u06af\u0648\u06af\u0644 \u06a9\u0644\u0627\u0624\u0688 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0679\u06cc\u0631\u0627\u0641\u0627\u0631\u0645 \u067e\u06c1\u0644\u06d2 \u06c1\u06cc \u0644\u06a9\u06be\u0627 \u062c\u0627 \u0686\u06a9\u0627 \u06c1\u06d2\u06d4 \u0622\u067e \u06a9\u06d2 \u0634\u0627\u0645\u0644 \u06c1\u0648\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u06a9\u0633\u06cc \u0646\u06d2 \u062f\u0648 \u0628\u0691\u06d2 \u0641\u06cc\u0635\u0644\u06d2 \u06a9\u06cc\u06d2 \u062a\u06be\u06d2\u06d4 \u0645\u0627\u06cc\u0627 \u062c\u0627\u0646\u0646\u0627 \u0686\u0627\u06c1\u062a\u06cc \u06c1\u06d2 \u06a9\u06c1 \u06a9\u06cc\u0627 \u0622\u067e \u0627\u0646 \u06a9\u0627 \u062f\u0641\u0627\u0639 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0648\u06c1 \u0679\u06cc\u0645 \u0686\u06cc\u0646\u0644 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0644\u06a9\u06be\u062a\u06cc \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u0645\u0627\u06cc\u0627: \"\u0627\u0633\u06d2 \u06a9\u06be\u0648\u0644\u0648\u06d4 <code>infra\/gcp\/COST.md<\/code> \u0627\u0648\u0631 <code>infra\/gcp\/terraform\/03-gke<\/code>. \u067e\u06be\u0631 \u0628\u0631\u0627\u06c1 \u06a9\u0631\u0645 \u0645\u062c\u06be\u06d2 \u0628\u062a\u0627\u0626\u06cc\u06ba \u06a9\u06c1 \u06cc\u06c1 \u0630\u062e\u06cc\u0631\u06c1 GKE \u0633\u0679\u06cc\u0646\u0688\u0631\u0688 \u06a9\u06cc\u0648\u06ba \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u0646\u06c1 \u06a9\u06c1 \u0622\u0679\u0648 \u067e\u0627\u0626\u0644\u0679\u06d4 \"\u0645\u062c\u06be\u06d2 \u0627\u06cc\u06a9 \u0648\u062c\u06c1 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2 \u062c\u0633 \u06a9\u0627 \u0645\u06cc\u06ba \u062f\u0641\u0627\u0639 \u06a9\u0631 \u0633\u06a9\u0648\u06ba\u06d4\"<\/p>\n<p>\u0688\u06cc\u0646\u06cc\u0644 \u0645\u06cc\u0631\u06d2 \u067e\u0627\u0633 \u0645\u06cc\u0632 \u067e\u0631 \u0628\u06cc\u0679\u06be\u0627 \u06c1\u06d2\u06d4 <code>infra\/gcp\/terraform\/03-gke\/main.tf<\/code> \u06a9\u06be\u0644\u0627 \u0648\u06c1 \u0627\u06cc\u06a9 \u0628\u0644\u0627\u06a9 \u06a9\u06cc \u0637\u0631\u0641 \u0627\u0634\u0627\u0631\u06c1 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u062c\u0633 \u067e\u0631 \u0627\u06cc\u06a9 \u0646\u0627\u0645 \u06c1\u06d2\u06d4 <code>primary<\/code>. \u0646\u0648\u0688 \u067e\u0648\u0644 \u0648\u0631\u0686\u0648\u0626\u0644 \u0645\u0634\u06cc\u0646\u0648\u06ba \u06a9\u0627 \u0627\u06cc\u06a9 \u06af\u0631\u0648\u067e \u06c1\u06d2 \u062c\u0633 \u067e\u0631 GKE \u0622\u067e \u06a9\u06cc \u0627\u06cc\u067e\u0633 \u0686\u0644\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u0633 \u0645\u06cc\u06ba 1 \u0633\u06d2 3 \u0679\u06a9\u0691\u06d2 \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <code>e2-medium<\/code> \u0645\u0634\u06cc\u0646<\/p>\n<p>\u0688\u06cc\u0646\u06cc\u0626\u0644: \"\u0627\u06af\u0631 \u0645\u06cc\u06ba \u0627\u0633 \u0645\u0634\u06cc\u0646 \u06a9\u0648 \u0631\u06a9\u06be\u062a\u0627 \u06c1\u0648\u06ba\u060c \u062a\u0648 \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u0648\u0642\u062a \u0645\u06cc\u06ba API \u06a9\u06cc \u06a9\u062a\u0646\u06cc \u06a9\u0627\u067e\u06cc\u0627\u06ba \u0686\u0644\u0627 \u0633\u06a9\u062a\u0627 \u06c1\u0648\u06ba\u061f\"<\/p>\n<p>\u06c1\u0645 \u0627\u0633 \u0628\u0627\u0628 \u0645\u06cc\u06ba Terraform \u0646\u06c1\u06cc\u06ba \u0686\u0644\u0627\u0626\u06cc\u06ba \u06af\u06d2\u06d4 \u0641\u0627\u0626\u0644 \u067e\u06c1\u0644\u06d2 \u06c1\u06cc \u0628\u0646 \u0686\u06a9\u06cc \u06c1\u06d2\u06d4 \u0622\u067e \u0646\u06d2 \u0641\u06cc\u0635\u0644\u06c1 \u067e\u0691\u06be \u0644\u06cc\u0627 \u06c1\u06d2\u06d4<\/p>\n<h4 id=\"heading-standard-or-autopilot\">\u0645\u0639\u06cc\u0627\u0631\u06cc \u06cc\u0627 \u0622\u0679\u0648 \u067e\u0627\u0626\u0644\u0679<\/h4>\n<p>GKE \u06af\u0648\u06af\u0644 \u06a9\u06d2 \u0632\u06cc\u0631 \u0627\u0646\u062a\u0638\u0627\u0645 Kubernetes \u06c1\u06d2\u06d4 \u06cc\u06c1 \u062f\u0648 \u0637\u0631\u06cc\u0642\u0648\u06ba \u0645\u06cc\u06ba \u0686\u0644\u062a\u0627 \u06c1\u06d2:<\/p>\n<ul>\n<li>\n<p><strong>\u0645\u0639\u06cc\u0627\u0631\u06cc<\/strong>: \u0646\u0648\u0688 \u067e\u0648\u0644 \u0645\u06cc\u06ba \u06af\u0631\u0648\u067e \u06a9\u0631\u062f\u06c1 \u0648\u0631\u0686\u0648\u0626\u0644 \u0645\u0634\u06cc\u0646\u06cc\u06ba \u0645\u0646\u062a\u062e\u0628 \u06a9\u0631\u06cc\u06ba\u06d4 \u06af\u0648\u06af\u0644 \u0622\u067e \u06a9\u06d2 \u06a9\u0645\u067e\u06cc\u0648\u0679\u0631 \u06a9\u0648 \u0686\u0627\u0631\u062c \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u0627\u0633 \u0633\u06d2 \u0642\u0637\u0639 \u0646\u0638\u0631 \u06a9\u06c1 \u0627\u06cc\u067e \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u0645\u06cc\u06ba \u06c1\u06d2 \u06cc\u0627 \u063a\u06cc\u0631 \u0641\u0639\u0627\u0644 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u0622\u0679\u0648 \u067e\u0627\u0626\u0644\u0679<\/strong>: \u06af\u0648\u06af\u0644 \u0627\u067e\u0646\u06cc \u0645\u0634\u06cc\u0646\u0648\u06ba \u06a9\u0648 \u0686\u06be\u067e\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u0622\u067e \u06c1\u0645\u06cc\u06ba \u0628\u062a\u0627\u062a\u06d2 \u06c1\u06cc\u06ba \u06a9\u06c1 \u0622\u067e \u06a9\u0648 \u06c1\u0631 \u06a9\u0646\u0679\u06cc\u0646\u0631 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u062a\u0646\u06d2 CPU \u0627\u0648\u0631 \u0645\u06cc\u0645\u0648\u0631\u06cc \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2\u060c \u0627\u0648\u0631 Google \u0622\u067e \u0633\u06d2 \u0648\u06c1 \u0631\u0642\u0645 \u0648\u0635\u0648\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<\/ul>\n<p>\u06cc\u06c1 \u0630\u062e\u06cc\u0631\u06c1 \u0645\u0639\u06cc\u0627\u0631\u0627\u062a \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0648\u062c\u06c1 \u0642\u06cc\u0645\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u0646\u0648\u0688 \u067e\u0648\u0644\u0632\u060c \u0645\u0634\u06cc\u0646 \u06a9\u06d2 \u0633\u0627\u0626\u0632\u060c \u0627\u0648\u0631 \u0622\u0679\u0648 \u0627\u0633\u06a9\u06cc\u0644\u0646\u06af \u0627\u0628 \u0628\u06be\u06cc \u0646\u0638\u0631 \u0622\u062a\u06d2 \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u06a9\u062a\u0627\u0628 \u0645\u06cc\u06ba \u0632\u06cc\u0631 \u0628\u062d\u062b \u06c1\u06cc\u06ba\u06d4 \u0622\u0679\u0648 \u067e\u0627\u0626\u0644\u0679 \u0627\u0646\u06c1\u06cc\u06ba \u0686\u06be\u067e\u0627\u0626\u06d2 \u06af\u0627\u06d4<\/p>\n<p>\u062f\u0648\u0646\u0648\u06ba \u0627\u062e\u0631\u0627\u062c\u0627\u062a \u062e\u0648\u062f \u067e\u0648\u0631\u0627 \u06a9\u0631\u06cc\u06ba\u06d4 \u0645\u0639\u06cc\u0627\u0631\u06cc \u0686\u0627\u0631\u062c \u0645\u0634\u06cc\u0646. \u0627\u06cc\u06a9 <code>e2-medium<\/code> \u0686\u0644\u0627\u0646\u06d2 \u06a9\u06d2 \u067e\u0648\u0631\u06d2 \u062f\u0646 \u06a9\u06cc \u0642\u06cc\u0645\u062a \u062a\u0642\u0631\u06cc\u0628\u0627\u064b $1.44 \u06c1\u06d2\u06d4 <code>infra\/gcp\/COST.md<\/code>Cloud NAT \u0628\u06be\u06cc \u0634\u0627\u0645\u0644 \u06c1\u06d2\u06d4<\/p>\n<p>CPU \u0627\u0648\u0631 \u0645\u06cc\u0645\u0648\u0631\u06cc \u06a9\u06d2 \u0644\u06cc\u06d2 \u0622\u0679\u0648 \u067e\u0627\u0626\u0644\u0679 \u0686\u0627\u0631\u062c\u0632 \u06c1\u0631 \u067e\u0648\u0688 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0645\u062d\u0641\u0648\u0638 \u06c1\u06cc\u06ba\u06d4 <code>k8s\/base\/deployment.yaml<\/code> \u0631\u06cc\u0632\u0631\u0648 \u0641\u0646\u0688 <code>250m<\/code> \u0633\u06cc \u067e\u06cc \u06cc\u0648 (1 \u0633\u06cc \u067e\u06cc \u06cc\u0648 \u06a9\u0648\u0631 \u06a9\u0627 1\/4) \u0627\u0648\u0631 <code>256Mi<\/code> \u0645\u06cc\u0645\u0648\u0631\u06cc \u0641\u06cc API \u067e\u0648\u0688\u06d4 \u0622\u0679\u0648 \u067e\u0627\u0626\u0644\u0679 \u0631\u06cc\u0679 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 <code>infra\/gcp\/COST.md<\/code>\u062a\u06cc\u0646 API \u067e\u0648\u0688\u0632 \u06a9\u06cc \u0642\u06cc\u0645\u062a \u062a\u0642\u0631\u06cc\u0628\u0627\u064b \u06c1\u06d2:<\/p>\n<pre><code class=\"language-plaintext\">0.25 vCPU \u00d7 3 \u00d7 $0.0445\/hour \u00d7 24  \u2248  $0.80 \/ day\n0.25 GiB  \u00d7 3 \u00d7 $0.0049\/hour \u00d7 24  \u2248  $0.09 \/ day\n<\/code><\/pre>\n<p>UI \u067e\u0648\u0688 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 3 API \u067e\u0648\u0688\u0632 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062a\u0642\u0631\u06cc\u0628\u0627\u064b $0.89 \u0641\u06cc \u062f\u0646\u06d4 \u0622\u0679\u0648 \u067e\u0627\u0626\u0644\u0679 \u06a9\u06cc \u0642\u06cc\u0645\u062a \u0627\u06cc\u06a9 \u0645\u0639\u06cc\u0627\u0631\u06cc \u0646\u0638\u0627\u0645 \u0633\u06d2 \u06a9\u0645 \u06c1\u0648 \u0633\u06a9\u062a\u06cc \u06c1\u06d2\u06d4 \u06c1\u0645\u0627\u0631\u06cc \u0644\u06cc\u0628 \u0645\u06cc\u06ba\u060c \u06c1\u0645 \u0627\u0628 \u0628\u06be\u06cc \u0645\u0639\u06cc\u0627\u0631\u06cc \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631 \u0631\u06c1\u06d2 \u06c1\u06cc\u06ba\u060c \u0644\u06c1\u0630\u0627 \u06c1\u0645 \u0646\u0648\u0688 \u067e\u0648\u0644\u0632 \u06a9\u0648 \u062f\u06cc\u06a9\u06be \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u067e\u0644\u06cc\u0632 \u0645\u0627\u06cc\u0627 \u06a9\u0648 \u0633\u0627\u0631\u06d2 \u0646\u0645\u0628\u0631 \u0628\u062a\u0627 \u062f\u06cc\u06ba \u0627\u0648\u0631 \u06a9\u06cc\u0648\u06ba\u061f<\/p>\n<h4 id=\"heading-how-many-api-processes\">API \u06a9\u06d2 \u0639\u0645\u0644 \u06a9\u06cc \u062a\u0639\u062f\u0627\u062f<\/h4>\n<p>AWS \u0627\u06cc\u06a9 API \u0639\u0645\u0644 \u0686\u0644\u0627\u062a\u0627 \u06c1\u06d2\u06d4 GKE \u0645\u06cc\u06ba\u060c HorizontalPodAutoscaler (HPA) CPU \u06a9\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06cc \u0628\u0646\u06cc\u0627\u062f \u067e\u0631 API Pods \u06a9\u0648 \u0634\u0627\u0645\u0644 \u06cc\u0627 \u06c1\u0679\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u06c1\u0631 \u067e\u0648\u0688 10 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u06a9\u0646\u06a9\u0634\u0646 \u06a9\u06d2 \u0627\u067e\u0646\u06d2 \u067e\u0648\u0644 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0627\u06cc\u06a9 API \u0639\u0645\u0644 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u0633 \u0644\u06cc\u0628 \u0645\u06cc\u06ba \u06a9\u0644\u0633\u0679\u0631\u0632 \u062a\u06cc\u0646 \u0686\u06be\u0648\u0679\u06d2 \u06a9\u0644\u0633\u0679\u0631\u0632 \u06c1\u06cc\u06ba\u06d4 <code>e2-medium<\/code> \u0645\u0634\u06cc\u0646 \u067e\u06cc\u062f\u0627\u0648\u0627\u0631 HPA <code>k8s\/overlays\/production\/patch-hpa.yaml<\/code> 1 \u0627\u0648\u0631 3 API pods \u06a9\u06d2 \u062f\u0631\u0645\u06cc\u0627\u0646 \u0686\u0644\u062a\u0627 \u06c1\u06d2\u06d4 \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u0627\u0633 \u0633\u0627\u0626\u0632 \u06a9\u06cc 3 \u0645\u0634\u06cc\u0646\u06cc\u06ba GKE \u06a9\u06d2 \u0627\u067e\u0646\u06d2 \u0633\u0633\u0679\u0645 \u067e\u0648\u0688 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0645\u0632\u06cc\u062f \u0641\u0679 \u0646\u06c1\u06cc\u06ba \u06c1\u0648 \u0633\u06a9\u062a\u06cc\u06ba\u06d4<\/p>\n<p>\u062f\u0627\u0646\u06cc\u0627\u0644 \u062c\u0648\u0627\u0628 \u062f\u0648\u06d4 \"\u0645\u06cc\u0631\u06d2 \u067e\u0627\u0633 GKE \u067e\u0631 1-3 API \u067e\u0648\u0688\u0632 \u06c1\u06cc\u06ba \u0627\u0648\u0631 1 AWS \u067e\u0631 \u062c\u0628\u06a9\u06c1 \u062f\u0648\u0646\u0648\u06ba \u0686\u0644 \u0631\u06c1\u06d2 \u06c1\u06cc\u06ba\u06d4 \u06c1\u0631 \u0627\u06cc\u06a9 \u06a9\u06d2 \u067e\u0627\u0633 10 \u06a9\u0646\u06a9\u0634\u0646 \u06a9\u06be\u0644\u06d2 \u06c1\u0648 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4\"<\/p>\n<p>\u0628\u0691\u06cc \u0645\u0634\u06cc\u0646\u0648\u06ba \u0648\u0627\u0644\u06cc \u06a9\u0645\u067e\u0646\u06cc\u0627\u06ba \u0632\u06cc\u0627\u062f\u06c1 \u062d\u062f\u06cc\u06ba \u0645\u0642\u0631\u0631 \u06a9\u0631\u062a\u06cc \u06c1\u06cc\u06ba\u060c \u062c\u06cc\u0633\u06d2 \u06a9\u06c1 \u062a\u06cc\u0646 \u0633\u06d2 \u0622\u0679\u06be \u067e\u0648\u0688\u0632\u06d4 \u0628\u0627\u0628 22 \u062f\u06a9\u06be\u0627\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0679\u0631\u06cc\u0641\u06a9 \u06a9\u0648 \u0645\u0646\u062a\u0642\u0644 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0622\u067e \u06a9\u0648 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u06a9\u06cc \u062d\u062f\u0648\u062f \u06a9\u06d2 \u062e\u0644\u0627\u0641 \u0627\u067e\u0646\u06cc \u062d\u062f\u0648\u062f \u06a9\u0648 \u06a9\u06cc\u0648\u06ba \u0686\u06cc\u06a9 \u06a9\u0631\u0646\u0627 \u0686\u0627\u06c1\u0626\u06d2\u06d4<\/p>\n<h4 id=\"heading-a-designed-network\">\u0688\u06cc\u0632\u0627\u0626\u0646 \u06a9\u0631\u062f\u06c1 \u0646\u06cc\u0679 \u0648\u0631\u06a9<\/h4>\n<p>AWS \u0645\u06cc\u06ba\u060c \u0627\u0633 \u0644\u06cc\u0628 \u0646\u06d2 AWS \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u062a\u062e\u0644\u06cc\u0642 \u06a9\u0631\u062f\u06c1 \u0688\u06cc\u0641\u0627\u0644\u0679 VPC \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06cc\u0627\u06d4 \u0627\u0633\u06d2 \u06a9\u0633\u06cc \u0646\u06d2 \u0688\u06cc\u0632\u0627\u0626\u0646 \u0646\u06c1\u06cc\u06ba \u06a9\u06cc\u0627\u06d4<\/p>\n<p>\u062c\u06cc \u0633\u06cc \u067e\u06cc \u0645\u06cc\u06ba <code>infra\/gcp\/terraform\/02-network<\/code> \u0646\u0627\u0645\u0632\u062f \u0633\u0628 \u0646\u06cc\u0679\u0633 \u0627\u0648\u0631 \u06a9\u0644\u0627\u0624\u0688 NAT \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0627\u067e\u0646\u0627 VPC \u0628\u0646\u0627\u0626\u06cc\u06ba\u06d4 \u06a9\u0644\u0633\u0679\u0631 \u0645\u06cc\u06ba \u0645\u0634\u06cc\u0646\u06cc\u06ba \u0635\u0631\u0641 \u0646\u062c\u06cc \u067e\u062a\u06d2 \u062d\u0627\u0635\u0644 \u06a9\u0631\u062a\u06cc \u06c1\u06cc\u06ba\u06d4 \u0648\u06c1 Cloud NAT \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0627\u0646\u0679\u0631\u0646\u06cc\u0679 \u0633\u06d2 \u0627\u0648\u0631 \u0628\u0639\u062f \u0645\u06cc\u06ba AWS \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u0633\u06d2 \u062c\u0691\u06d2 \u06c1\u0648\u0626\u06d2 \u06c1\u06cc\u06ba\u060c \u062c\u0633 \u0633\u06d2 \u06c1\u0631 \u0627\u06cc\u06a9 \u06a9\u0648 \u0627\u06cc\u06a9 \u0645\u0634\u062a\u0631\u06a9\u06c1 \u0639\u0648\u0627\u0645\u06cc IP \u0645\u0644\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h4 id=\"heading-region\">\u0639\u0644\u0627\u0642\u06c1<\/h4>\n<p><code>01-foundation\/variables.tf<\/code> \u0627\u067e\u0646\u06d2 \u0639\u0644\u0627\u0642\u06d2 \u06a9\u0648 \u0627\u0633 \u067e\u0631 \u0633\u06cc\u0679 \u06a9\u0631\u06cc\u06ba: <code>us-east4<\/code>AWS \u06a9\u06d2 \u0642\u0631\u06cc\u0628 \u062a\u0631\u06cc\u0646 \u06af\u0648\u06af\u0644 \u06a9\u0627 \u0639\u0644\u0627\u0642\u06c1 <code>us-east-1<\/code>. GKE \u0645\u06cc\u06ba \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u06a9\u06d2 \u062a\u0645\u0627\u0645 \u0633\u0648\u0627\u0644\u0627\u062a \u062f\u0648 \u0628\u0627\u062f\u0644\u0648\u06ba \u06a9\u06d2 \u062f\u0631\u0645\u06cc\u0627\u0646 \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0627\u0633 \u0644\u06cc\u06d2 \u06a9\u0645 \u0641\u0627\u0635\u0644\u06d2 \u06a9\u06d2 \u0646\u062a\u06cc\u062c\u06d2 \u0645\u06cc\u06ba \u0633\u0641\u0631 \u06a9\u0627 \u0648\u0642\u062a \u06a9\u0645 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u06af\u0631 \u0622\u067e \u06a9\u06cc AWS \u062a\u0631\u062a\u06cc\u0628\u0627\u062a \u0627\u0633 \u0645\u06cc\u06ba \u0645\u0648\u062c\u0648\u062f \u0646\u06c1\u06cc\u06ba \u06c1\u06cc\u06ba: <code>us-east-1<\/code>\u06a9\u0686\u06be \u0628\u06be\u06cc \u0628\u0646\u0627\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0627\u0633\u06d2 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<h4 id=\"heading-the-map\">\u0646\u0642\u0634\u06c1<\/h4>\n<p>\u0628\u0627\u0626\u06cc\u06ba \u0648\u06c1 \u06c1\u06d2 \u062c\u0648 \u0645\u0648\u062c\u0648\u062f \u06c1\u06d2\u06d4 \u062f\u0627\u0626\u06cc\u06ba \u0637\u0631\u0641 \u0648\u0627\u0644\u0627 \u062d\u0635\u06c1 \u062d\u0635\u06c1 3 \u0645\u06cc\u06ba \u0628\u0646\u0627\u06cc\u0627 \u06af\u06cc\u0627 \u062d\u0635\u06c1 \u06c1\u06d2\u06d4<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/10\/1792188591_117_\u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0648\u06ba-\u06a9\u0648-AWS-\u0633\u06d2-GKE-\u0645\u06cc\u06ba-\u06a9\u06cc\u0633\u06d2-\u0645\u0646\u062a\u0642\u0644-\u06a9\u06cc\u0627-\u062c\u0627\u0626\u06d2\u06d4.png\" alt=\"\u0645\u0627\u0626\u06cc\u06af\u0631\u06cc\u0634\u0646 \u0622\u0631\u06a9\u06cc\u0679\u06cc\u06a9\u0686\u0631 \u0688\u0627\u06cc\u0627\u06af\u0631\u0627\u0645 \u062c\u0633 \u0645\u06cc\u06ba \u0635\u0627\u0631\u0641\u06cc\u0646 \u06a9\u0648 GCP \u067e\u0631 \u0648\u0627\u062d\u062f \u067e\u0628\u0644\u06a9 \u0644\u0648\u0688 \u0628\u06cc\u0644\u0646\u0633\u0631 \u062a\u06a9 \u067e\u06c1\u0646\u0686\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u062f\u06a9\u06be\u0627\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2 \u062c\u0648 nginx\u060c UI\u060c \u0627\u0648\u0631 API \u0686\u0644\u0627\u0646\u06d2 \u0648\u0627\u0644\u06d2 AWS EC2 \u0633\u0631\u0648\u0631\u0632 \u0627\u0648\u0631 \u0646\u062c\u06cc \u0646\u0648\u0688\u0633 \u067e\u0631 GCP \u0686\u0644\u0627\u0646\u06d2 \u0648\u0627\u0644\u06d2 UI \u0627\u0648\u0631 API \u067e\u0648\u0688\u0632 \u067e\u0631 GKE \u06a9\u06d2 \u062f\u0631\u0645\u06cc\u0627\u0646 \u0679\u0631\u06cc\u0641\u06a9 \u062a\u0642\u0633\u06cc\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 Cloud NAT GKE \u0633\u06d2 \u0622\u0624\u0679 \u0628\u0627\u0624\u0646\u0688 \u0631\u0633\u0627\u0626\u06cc \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u062f\u0648\u0646\u0648\u06ba \u0645\u0627\u062d\u0648\u0644 AWS \u067e\u0631 \u0627\u06cc\u06a9 \u06c1\u06cc PostgreSQL 16 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u0633\u06d2 \u062c\u0691\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0679\u0631\u06cc\u0641\u06a9 \u0622\u06c1\u0633\u062a\u06c1 \u0622\u06c1\u0633\u062a\u06c1 AWS \u0633\u06d2 GKE \u06a9\u06cc \u0637\u0631\u0641 \u0628\u0691\u06be\u062a\u0627 \u06c1\u06d2\u06d4\" style=\"display: block;\" width=\"600\" height=\"400\" loading=\"lazy\" title=\"\"><\/p>\n<p>\u0645\u0646\u062f\u0631\u062c\u06c1 \u0628\u0627\u0644\u0627 \u062e\u0627\u06a9\u06c1 AWS \u0633\u06d2 GCP \u0645\u06cc\u06ba \u0645\u0646\u062a\u0642\u0644\u06cc \u06a9\u0627 \u0646\u0642\u0634\u06c1 \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u0635\u0627\u0631\u0641\u06cc\u0646 \u0627\u06cc\u06a9 \u0639\u0648\u0627\u0645\u06cc \u067e\u062a\u06c1 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u062c\u0633 \u06a9\u0627 \u0627\u0646\u062a\u0638\u0627\u0645 \u0627\u06cc\u06a9 GCP \u0644\u0648\u0688 \u0628\u06cc\u0644\u0646\u0633\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u062c\u0648 \u0645\u0648\u062c\u0648\u062f\u06c1 AWS EC2 \u0633\u0631\u0648\u0631\u0632 \u0627\u0648\u0631 GKE \u06a9\u06d2 \u062f\u0631\u0645\u06cc\u0627\u0646 \u0679\u0631\u06cc\u0641\u06a9 \u06a9\u0648 \u062a\u0642\u0633\u06cc\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 GKE \u0646\u062c\u06cc \u0646\u0648\u0688\u0633 \u067e\u0631 UI \u0627\u0648\u0631 API \u0686\u0644\u0627\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 Cloud NAT \u0622\u0624\u0679 \u0628\u0627\u0624\u0646\u0688 \u0627\u0646\u0679\u0631\u0646\u06cc\u0679 \u062a\u06a9 \u0631\u0633\u0627\u0626\u06cc \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u062f\u0648\u0646\u0648\u06ba \u0645\u0627\u062d\u0648\u0644 AWS \u067e\u0631 \u0627\u06cc\u06a9 \u06c1\u06cc PostgreSQL \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u0633\u06d2 \u062c\u0691\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0679\u0631\u06cc\u0641\u06a9 \u062f\u06be\u06cc\u0631\u06d2 \u062f\u06be\u06cc\u0631\u06d2 GKE \u0645\u06cc\u06ba \u0645\u0646\u062a\u0642\u0644 \u06c1\u0648\u062a\u0627 \u06c1\u06d2 \u062c\u0628\u06a9\u06c1 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u0628\u0631\u0642\u0631\u0627\u0631 \u0631\u06c1\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0622\u067e \u06a9\u0648 \u062f\u0631\u062c \u0630\u06cc\u0644 \u062a\u0631\u062a\u06cc\u0628 \u0645\u06cc\u06ba \u062a\u06cc\u0646 \u0639\u0648\u0627\u0645\u06cc IP \u067e\u062a\u0648\u06ba \u06a9\u0627 \u0633\u0627\u0645\u0646\u0627 \u06a9\u0631\u0646\u0627 \u067e\u0691\u06d2 \u06af\u0627:<\/p>\n<ol>\n<li>\n<p>\u0644\u0686\u06a9\u062f\u0627\u0631 IP \u06cc\u06c1 \u0627\u06cc\u06a9 EC2 \u0633\u0631\u0648\u0631 \u06c1\u06d2\u06d4 \u0622\u062c \u06a9\u0644 \u0635\u0627\u0631\u0641\u06cc\u0646 \u0627\u0633\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>GKE \u06af\u06cc\u0679 \u0648\u06d2 IP\u06d4 \u0644\u0648\u0688 \u0628\u06cc\u0644\u0646\u0633\u0631 GKE \u06a9\u06d2 \u0679\u0631\u06cc\u0641\u06a9 \u06a9\u06d2 \u062d\u0635\u06d2 \u06a9\u0648 \u0644\u0648\u0688 \u0628\u06cc\u0644\u0646\u0633\u0631 \u06a9\u06cc \u0637\u0631\u0641 \u0644\u06d2 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u06af\u0627\u06c1\u06a9 \u06a9\u0628\u06be\u06cc \u0628\u06be\u06cc \u06a9\u0686\u06be \u062f\u0627\u062e\u0644 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0644\u0648\u0688 \u0628\u06cc\u0644\u0646\u0633\u0631 IP <code>08-edge<\/code>. \u0627\u06cc\u06a9 \u0628\u0627\u0631 \u062c\u0628 \u06af\u0627\u06c1\u06a9 \u0627\u0633 \u067e\u062a\u06d2 \u067e\u0631 \u0686\u0644\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0633 \u06a9\u06d2 \u0628\u0639\u062f \u0679\u0631\u06cc\u0641\u06a9 \u06a9\u06cc \u062a\u0642\u0633\u06cc\u0645 \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<\/ol>\n<h4 id=\"heading-if-you-need-to-pause-aws\">AWS \u06a9\u0648 \u06a9\u0628 \u0631\u0648\u06a9\u0646\u0627 \u06c1\u06d2\u06d4<\/h4>\n<p>\u062d\u0635\u06c1 3 \u0645\u06cc\u06ba\u060c \u0622\u067e \u06a9\u0648 \u06c1\u0631 \u0645\u0646\u0679 AWS \u0686\u0644\u0627\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u0622\u067e \u06a9\u0648 \u0627\u0628\u0648\u0627\u0628 11 (\u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u06cc\u0648 \u0622\u0631 \u0627\u06cc\u0644 \u06a9\u0648 \u0633\u06cc\u06a9\u0631\u0679 \u0645\u06cc\u0646\u06cc\u062c\u0631 \u0645\u06cc\u06ba \u06a9\u0627\u067e\u06cc \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2) \u0627\u0648\u0631 \u0628\u0627\u0628 13 (\u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u06a9\u0648 GKE \u0645\u06cc\u06ba \u06a9\u06be\u0648\u0644\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2) \u0645\u06cc\u06ba \u062f\u0648\u0628\u0627\u0631\u06c1 AWS \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u06af\u06cc\u06d4<\/p>\n<p>EC2 \u0633\u0631\u0648\u0631 \u06a9\u0648 \u0646\u06c1 \u0631\u0648\u06a9\u06cc\u06ba\u060c RDS \u06a9\u0648 \u0686\u0644\u062a\u06d2 \u0631\u06c1\u0646\u06d2 \u062f\u06cc\u06ba\u06d4 RDS \u0622\u067e \u06a9\u06d2 \u06cc\u0648\u0645\u06cc\u06c1 AWS \u0628\u0644 \u06a9\u0627 \u0632\u06cc\u0627\u062f\u06c1 \u062a\u0631 \u062d\u0635\u06c1 \u0631\u06a9\u06be\u062a\u0627 \u06c1\u06d2\u060c \u0631\u0648\u06a9\u0627 \u06c1\u0648\u0627 RDS 7 \u062f\u0646\u0648\u06ba \u06a9\u06d2 \u0628\u0639\u062f \u062e\u0648\u062f \u0628\u062e\u0648\u062f \u062f\u0648\u0628\u0627\u0631\u06c1 \u0634\u0631\u0648\u0639 \u06c1\u0648 \u062c\u0627\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0644\u0686\u06a9\u062f\u0627\u0631 IPs \u06a9\u0627 \u0628\u0644 \u06a9\u0633\u06cc \u0628\u06be\u06cc \u0637\u0631\u062d \u0633\u06d2 \u0627\u062f\u0627 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u06af\u0631 \u0622\u067e \u0627\u06cc\u06a9 \u06cc\u0627 \u062f\u0648 \u062f\u0646 \u0645\u06cc\u06ba \u062c\u0627\u0631\u06cc \u0631\u06a9\u06be\u0646\u0627 \u0686\u0627\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba \u062a\u0648 AWS \u06a9\u0648 \u0627\u06a9\u06cc\u0644\u0627 \u0686\u06be\u0648\u0691 \u062f\u06cc\u06ba\u06d4 \u0627\u06af\u0631 \u06cc\u06c1 \u06a9\u0686\u06be \u062f\u0646 \u0631\u06a9 \u062c\u0627\u0626\u06d2 \u062a\u0648 \u0627\u0633\u06d2 \u062a\u0644\u0641 \u06a9\u0631 \u062f\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">cd infra\/aws\/terraform && terraform destroy\n<\/code><\/pre>\n<p>\u0648\u0627\u067e\u0633 \u0622\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062f\u0648\u0691\u0648 <code>terraform apply<\/code> \u0627\u0633\u06d2 \u0627\u0633 \u0641\u0648\u0644\u0688\u0631 \u0645\u06cc\u06ba \u0631\u06a9\u06be\u06cc\u06ba \u0627\u0648\u0631 \u0628\u0627\u0628 5 \u062f\u06c1\u0631\u0627\u0626\u06cc\u06ba\u06d4 \u0646\u0626\u06d2 \u0644\u0686\u06a9\u062f\u0627\u0631 IPs \u0627\u0648\u0631 \u0646\u0626\u06d2 <code>DATABASE_URL<\/code>. \u0622\u067e \u06a9\u06d2 \u0686\u06be \u06a9\u0627\u0631\u0688 \u06a9\u06d2 \u0627\u0633\u06a9\u0648\u0631 \u06a9\u0627\u0631\u0688 \u06a9\u0648 \u0627\u0628 \u0628\u06be\u06cc \u0628\u0646\u06cc\u0627\u062f\u06cc \u0644\u0627\u0626\u0646 \u0633\u0645\u062c\u06be\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h4 id=\"heading-done-when\">\u0645\u06a9\u0645\u0644 \u06c1\u0648\u0646\u06d2 \u067e\u0631:<\/h4>\n<ul>\n<li>\n<p>\u06c1\u0645 \u0646\u06d2 \u0645\u0627\u06cc\u0627 \u06a9\u0648 \u0645\u0639\u06cc\u0627\u0631\u06cc \u0627\u0648\u0631 \u0622\u0679\u0648 \u067e\u0627\u0626\u0644\u0679 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u067e\u0646\u06d2 \u0631\u0648\u0632\u0627\u0646\u06c1 \u0646\u0645\u0628\u0631 \u062f\u06cc\u06d2 \u0627\u0648\u0631 \u06c1\u0645 \u0627\u067e\u0646\u06cc \u0644\u06cc\u0628 \u0645\u06cc\u06ba \u0627\u0633\u0679\u06cc\u0646\u0688\u0631\u0688 \u06a9\u06cc\u0648\u06ba \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>\u06c1\u0645 \u0646\u06d2 \u0688\u06cc\u0646\u06cc\u0626\u0644 \u06a9\u0648 \u0628\u062a\u0627\u06cc\u0627 \u06a9\u06c1 \u0648\u06c1 \u06a9\u062a\u0646\u06d2 API \u0639\u0645\u0644 \u0686\u0644\u0627 \u0633\u06a9\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u06c1\u0631 \u0639\u0645\u0644 \u06a9\u062a\u0646\u06d2 \u06a9\u0646\u06a9\u0634\u0646 \u06a9\u06be\u0648\u0644 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<\/ul>\n<h2 id=\"heading-part-3-how-to-build-google-cloud-with-terraform\">\u062d\u0635\u06c1 3\u06d4 \u0679\u06cc\u0631\u0627\u0641\u0627\u0631\u0645 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u06af\u0648\u06af\u0644 \u06a9\u0644\u0627\u0624\u0688 \u06a9\u06cc\u0633\u06d2 \u0628\u0646\u0627\u06cc\u0627 \u062c\u0627\u0626\u06d2\u06d4<\/h2>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/10\/1792188591_485_\u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0648\u06ba-\u06a9\u0648-AWS-\u0633\u06d2-GKE-\u0645\u06cc\u06ba-\u06a9\u06cc\u0633\u06d2-\u0645\u0646\u062a\u0642\u0644-\u06a9\u06cc\u0627-\u062c\u0627\u0626\u06d2\u06d4.png\" alt=\"\u0648\u06c1 \u062a\u0635\u0627\u0648\u06cc\u0631 \u062c\u0648 \u06cc\u06c1 \u0628\u062a\u0627\u062a\u06cc \u06c1\u06cc\u06ba \u06a9\u06c1 \u06c1\u0645 \u0646\u06d2 \u06a9\u06cc\u0627 \u06a9\u06cc\u0627\u060c \u06c1\u0645 \u06a9\u06c1\u0627\u06ba \u06c1\u06cc\u06ba\u060c \u0627\u0648\u0631 \u0622\u06af\u06d2 \u06a9\u06cc\u0627 \u06c1\u06d2\u06d4\" style=\"display: block;\" width=\"600\" height=\"400\" loading=\"lazy\" title=\"\"><\/p>\n<p>\u0645\u06cc\u0631\u06d2 \u067e\u0627\u0633 \u06a9\u0627\u0645 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u06cc AWS \u0627\u06cc\u067e \u0627\u0648\u0631 \u0633\u06a9\u0648\u0631 \u06a9\u0627\u0631\u0688 \u06c1\u06d2\u06d4 \u06af\u0648\u06af\u0644 \u06a9\u0644\u0627\u0624\u0688 \u0627\u0628\u06be\u06cc \u062a\u06a9 \u0633\u06cc\u0679 \u0627\u067e \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u0627 \u06c1\u06d2\u06d4 \u06a9\u0648\u0626\u06cc \u0646\u06cc\u0679 \u0648\u0631\u06a9\u060c \u06a9\u0644\u0633\u0679\u0631\u060c \u06cc\u0627 \u0631\u062c\u0633\u0679\u0631\u06cc \u0646\u06c1\u06cc\u06ba \u06c1\u06d2 \u062c\u0628 \u062a\u06a9 \u06a9\u06c1 \u0622\u067e \u0627\u0633\u06d2 \u062a\u0639\u06cc\u0646\u0627\u062a \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>UI \u0627\u0648\u0631 API \u0628\u0639\u062f \u0645\u06cc\u06ba \u0627\u0633 \u06a9\u0644\u0633\u0679\u0631 \u067e\u0631 \u0686\u0644\u06cc\u06ba \u06af\u06d2\u06d4 \u067e\u0648\u0633\u0679\u06af\u0631\u06cc\u0633 AWS \u067e\u0631 \u0628\u0627\u0642\u06cc \u06c1\u06d2\u06d4<br \/>\u0644\u06c1\u0630\u0627 \u062a\u0631\u062a\u06cc\u0628 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u067e\u06c1\u0644\u06d2 GCP \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u062e\u0627\u0644\u06cc \u062c\u06af\u06c1 \u0628\u0646\u0627\u0626\u06cc\u06ba\u060c \u067e\u06be\u0631 \u0648\u06c1\u0627\u06ba \u0627\u067e\u0646\u06cc \u0627\u06cc\u067e \u0631\u06a9\u06be\u06cc\u06ba\u060c \u0627\u0648\u0631 \u067e\u06be\u0631 \u0627\u06cc\u067e \u06a9\u0648 \u0633\u06a9\u06be\u0627\u0626\u06cc\u06ba \u06a9\u06c1 \u0627\u0646\u0679\u0631\u0646\u06cc\u0679 \u067e\u0631 RDS \u0633\u06d2 \u06a9\u06cc\u0633\u06d2 \u062c\u0691\u0627 \u062c\u0627\u0626\u06d2\u06d4<\/p>\n<p>\u06cc\u06c1 \u062d\u0635\u06c1 \u0635\u0631\u0641 \u0627\u06cc\u06a9 \u062e\u0627\u0644\u06cc \u062c\u06af\u06c1 \u06c1\u06d2\u06d4 \u06af\u0627\u06c1\u06a9 \u0627\u0628\u06be\u06cc \u062a\u06a9 \u0645\u0646\u062a\u0642\u0644 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u0627 \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-chapter-10-set-up-gcloud-and-pick-your-project\">\u0628\u0627\u0628 10\u06d4 \u062a\u0631\u062a\u06cc\u0628 <code>gcloud<\/code> \u0627\u0648\u0631 \u0627\u06cc\u06a9 \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u0645\u0646\u062a\u062e\u0628 \u06a9\u0631\u06cc\u06ba\u06d4<\/h3>\n<p><em>\u062c\u0645\u0639\u06c1\u060c \u0635\u0628\u062d 8:45 \u0628\u062c\u06d2<\/em><\/p>\n<p>\u06af\u0648\u06af\u0644 \u06a9\u0644\u0627\u0624\u0688 \u0627\u06cc\u06a9 \u062e\u0627\u0644\u06cc \u0635\u0641\u062d\u06c1 \u06c1\u06d2\u06d4 \u0627\u0633 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u06a9\u06c1 \u0622\u067e \u06a9\u0686\u06be \u0628\u06be\u06cc \u0628\u0646\u0627 \u0633\u06a9\u06cc\u06ba\u060c \u0622\u067e \u06a9\u06d2 \u0644\u06cc\u067e \u0679\u0627\u067e \u06a9\u0648 \u06cc\u06c1 \u062c\u0627\u0646\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2 \u06a9\u06c1 \u0622\u067e \u06a9\u0648\u0646 \u0633\u0627 \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u0628\u0646\u0627 \u0631\u06c1\u06d2 \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u0622\u067e \u06a9\u0648\u0646 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u062d\u0627\u0635\u0644 \u06a9\u0631\u06cc\u06ba <code>gcloud<\/code>\u060c <code>kubectl<\/code>Terraform \u0646\u06d2 \u062f\u0639\u0648\u06cc \u06a9\u06d2 \u0633\u0627\u062a\u06be \u062f\u0631\u0633\u062a \u06af\u0648\u06af\u0644 \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u06a9\u06cc \u0637\u0631\u0641 \u0627\u0634\u0627\u0631\u06c1 \u06a9\u06cc\u0627\u06d4<\/p>\n<h4 id=\"heading-steps\">\u0642\u062f\u0645<\/h4>\n<p><code>gcloud<\/code> \u06af\u0648\u06af\u0644 \u06a9\u0644\u0627\u0624\u0688 \u06a9\u0645\u0627\u0646\u0688 \u0644\u0627\u0626\u0646 \u0679\u0648\u0644\u0632\u06d4 \u0627\u0646\u0633\u0679\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f\u060c \u0679\u0631\u0645\u06cc\u0646\u0644 \u0628\u0646\u062f \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u0646\u06cc\u0627 \u0679\u0631\u0645\u06cc\u0646\u0644 \u06a9\u06be\u0648\u0644\u06cc\u06ba\u06d4<\/p>\n<p>\u0645\u06cc\u06a9 \u06a9\u06d2 \u0644\u06cc\u06d2:<\/p>\n<pre><code class=\"language-bash\">brew install --cask google-cloud-sdk\n<\/code><\/pre>\n<p>Windows \u067e\u0631\u060c Install Google Cloud CLI \u0633\u06d2 \u0627\u0646\u0633\u0679\u0627\u0644\u0631 \u06a9\u0648 \u0688\u0627\u0624\u0646 \u0644\u0648\u0688 \u06a9\u0631\u0646\u06d2 \u0627\u0648\u0631 \u0634\u0627\u0645\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0628\u0627\u06a9\u0633 \u06a9\u0648 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4 <code>gcloud<\/code> \u0627\u067e\u0646\u06d2 PATH \u067e\u0631 \u062c\u0627\u0626\u06cc\u06ba \u0627\u0648\u0631 Git Bash \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u06a9\u06be\u0648\u0644\u06cc\u06ba\u06d4 \u0644\u06cc\u0646\u06a9\u0633 \u067e\u0631\u060c \u0627\u0633\u06cc \u0635\u0641\u062d\u06c1 \u067e\u0631 \u0644\u06cc\u0646\u06a9\u0633 \u0679\u06cc\u0628 \u06a9\u06cc \u067e\u06cc\u0631\u0648\u06cc \u06a9\u0631\u06cc\u06ba\u06d4 <code>gcloud version<\/code> \u0622\u067e \u06a9\u0648 \u0627\u06cc\u06a9 \u0648\u0631\u0698\u0646 \u067e\u0631\u0646\u0679 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u06af\u06cc\u06d4<\/p>\n<p>\u0627\u06af\u0631 <code>kubectl version --client<\/code> \u06a9\u06d2 \u0628\u0639\u062f \u0646\u0627\u06a9\u0627\u0645 <code>gcloud<\/code> \u0622\u067e\u0631\u06cc\u0634\u0646\u060c \u062a\u0646\u0635\u06cc\u0628 <code>kubectl<\/code> GKE \u0645\u06cc\u06ba \u0644\u0627\u06af \u0627\u0646 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06c1\u0648\u0646\u06d2 \u0648\u0627\u0644\u0627 \u067e\u0644\u06af \u0627\u0646:<\/p>\n<pre><code class=\"language-bash\">gcloud components install kubectl\ngcloud components install gke-gcloud-auth-plugin\n<\/code><\/pre>\n<p>\u067e\u0644\u06af \u0627\u0646 \u0622\u067e \u06a9\u06d2 PATH \u0645\u06cc\u06ba \u06c1\u0648\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u06d4 \u0628\u0639\u062f \u0645\u06cc\u06ba <code>kubectl get nodes<\/code> \u06a9\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba <code>gke-gcloud-auth-plugin not found<\/code>\u0627\u0633\u06d2 \u0686\u0644\u0627\u0626\u06cc\u06ba \u0627\u0648\u0631 \u0627\u06cc\u06a9 \u0646\u06cc\u0627 \u0679\u0631\u0645\u06cc\u0646\u0644 \u06a9\u06be\u0648\u0644\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">echo 'export PATH=\"$(gcloud info --format=\"value(installation.sdk_root)\")\/bin:$PATH\"' >> ~\/.zshrc\n<\/code><\/pre>\n<p>\u0648\u06c1 \u0644\u0627\u0626\u0646 zsh \u06a9\u06d2 \u0644\u06cc\u06d2 \u06c1\u06d2\u060c \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u0637\u06d2 \u0634\u062f\u06c1 \u0645\u06cc\u06a9 \u0634\u06cc\u0644\u06d4 \u0628\u0627\u0634 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u0644\u06cc\u0646\u06a9\u0633 \u067e\u0631\u060c \u062f\u0631\u062c \u0630\u06cc\u0644 \u06a9\u0648 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u06cc\u06ba: <code>~\/.zshrc<\/code> \u06a9\u0648 <code>~\/.bashrc<\/code>. \u0648\u0646\u0688\u0648\u0632 \u067e\u0631\u060c \u0627\u0646\u0633\u0679\u0627\u0644\u0631 \u0639\u0627\u0645 \u0637\u0648\u0631 \u067e\u0631 \u0622\u067e \u06a9\u06d2 \u0644\u06cc\u06d2 PATH \u06a9\u0648 \u06c1\u06cc\u0646\u0688\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u0646\u0633\u0679\u0627\u0644\u06cc\u0634\u0646 \u06a9\u06d2 \u0628\u0639\u062f \u06af\u0679 \u0628\u0627\u0634 \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u06a9\u06be\u0648\u0644\u06cc\u06ba\u06d4<\/p>\n<p>\u0627\u0628 \u0644\u0627\u06af \u0627\u0646 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u0627\u067e\u0646\u0627 \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u0645\u0646\u062a\u062e\u0628 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">gcloud auth login --update-adc\ngcloud projects list\ngcloud config set project YOUR_PROJECT_ID\ngcloud billing projects describe YOUR_PROJECT_ID\nterraform version\nkubectl version --client\n<\/code><\/pre>\n<p><code>--update-adc<\/code> \u06cc\u06c1 \u0636\u0631\u0648\u0631\u06cc \u06c1\u06d2\u06d4 \u0635\u0627\u0641 <code>gcloud auth login<\/code> \u0635\u0631\u0641 <code>gcloud<\/code> \u0628\u0631\u0627\u06c1 \u06a9\u0631\u0645 \u0627\u067e\u0646\u0627 \u0627\u06a9\u0627\u0624\u0646\u0679 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 \u0679\u06cc\u0631\u0627\u0641\u0627\u0631\u0645 \u0627\u06cc\u06a9 \u0627\u0644\u06af \u067e\u0631\u0648\u06af\u0631\u0627\u0645 \u06c1\u06d2 \u062c\u0648 \u0627\u06cc\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u0688\u06cc\u0641\u0627\u0644\u0679 \u0627\u0633\u0646\u0627\u062f \u0646\u0627\u0645\u06cc \u0641\u0627\u0626\u0644 \u06a9\u0648 \u062a\u0644\u0627\u0634 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u062c\u06be\u0646\u0688\u0627 \u0627\u0633 \u0641\u0627\u0626\u0644 \u06a9\u0648 \u0627\u0633\u06cc \u0628\u0631\u0627\u0624\u0632\u0631 \u0644\u0627\u06af \u0627\u0646 \u067e\u0631 \u0644\u06a9\u06be\u062a\u0627 \u06c1\u06d2\u06d4 \u06af\u0648\u06af\u0644 \u067e\u06cc\u062c \u067e\u0631 \u0627\u062c\u0627\u0632\u062a \u062f\u06cc\u06ba \u067e\u0631 \u06a9\u0644\u06a9 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u0679\u06cc\u0628 \u06a9\u0648 \u062c\u0644\u062f \u0628\u0646\u062f \u0646\u06c1 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<h4 id=\"heading-which-id-to-use\">\u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 ID<\/h4>\n<p><code>gcloud projects list<\/code> \u062f\u0648 \u06a9\u0627\u0644\u0645 \u067e\u0631\u0646\u0679 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u062c\u0648 \u0627\u06cc\u06a9 \u062c\u06cc\u0633\u06d2 \u0646\u0638\u0631 \u0622\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<ul>\n<li>\n<p><code>NAME<\/code> \u06cc\u06c1 \u0627\u06cc\u06a9 \u0644\u06cc\u0628\u0644 \u06c1\u06d2 \u0627\u0648\u0631 \u0628\u06c1\u062a \u0633\u06d2 \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679\u0633 \u0688\u06cc\u0641\u0627\u0644\u0679 \u0644\u06cc\u0628\u0644 \u06a9\u0627 \u0627\u0634\u062a\u0631\u0627\u06a9 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <code>My First Project<\/code>.<\/p>\n<\/li>\n<li>\n<p><code>PROJECT_ID<\/code> \u0645\u062b\u0627\u0644 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631\u060c \u06cc\u06c1 \u0645\u0646\u0641\u0631\u062f \u06c1\u06d2. <code>my-first-project-123456<\/code>.<\/p>\n<\/li>\n<\/ul>\n<p>\u06a9\u0627\u067e\u06cc <code>PROJECT_ID<\/code>\u06cc\u06c1 \u0646\u0627\u0645 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u0627\u0633\u06d2 \u0686\u0633\u067e\u0627\u06ba \u06a9\u0631\u06cc\u06ba \u062c\u06c1\u0627\u06ba \u06a9\u0645\u0627\u0646\u0688 \u06a9\u06c1\u062a\u0627 \u06c1\u06d2\u06d4 <code>YOUR_PROJECT_ID<\/code>.<\/p>\n<p>\u0627\u06af\u0631 \u0622\u067e \u06a9\u06d2 \u067e\u0627\u0633 \u0645\u062a\u0639\u062f\u062f \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u0628\u0631\u0627\u06c1 \u06a9\u0631\u0645 \u0627\u06cc\u06a9 \u06a9\u0648 \u0645\u0646\u062a\u062e\u0628 \u06a9\u0631\u06cc\u06ba \u062c\u0633 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0622\u067e \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0686\u0644\u0627\u0626\u06cc\u06ba <code>gcloud billing projects describe<\/code> \u06c1\u0631 ID \u06a9\u06d2 \u0633\u0627\u062a\u06be \u062c\u0628 \u062a\u06a9 \u06a9\u06c1 \u0622\u0624\u0679 \u067e\u0679 \u067e\u0631 \u0645\u0634\u062a\u0645\u0644 \u0646\u06c1 \u06c1\u0648: <code>billingEnabled: true<\/code>.<\/p>\n<p>\u0622\u067e Google Cloud Console \u0645\u06cc\u06ba \u0628\u06be\u06cc \u0627\u067e\u0646\u06cc ID \u062a\u0644\u0627\u0634 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0635\u0641\u062d\u06c1 \u06a9\u06d2 \u0627\u0648\u067e\u0631\u06cc \u062d\u0635\u06d2 \u0645\u06cc\u06ba \u0627\u067e\u0646\u06d2 \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u06a9\u06d2 \u0646\u0627\u0645 \u067e\u0631 \u06a9\u0644\u06a9 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 ID \u06a9\u0627\u0644\u0645 \u067e\u0691\u06be\u06cc\u06ba\u06d4<\/p>\n<h4 id=\"heading-check\">\u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba<\/h4>\n<pre><code class=\"language-bash\">gcloud config get-value project\n<\/code><\/pre>\n<p>\u06cc\u06c1 \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 ID \u067e\u0631\u0646\u0679 \u06a9\u0631\u06d2 \u06af\u0627\u06d4 \u062c\u0628 \u0686\u06be\u067e\u06cc <code>[None]<\/code>\u067e\u06be\u0627\u0646\u0633\u06cc <code>gcloud config set project<\/code> \u062f\u0648\u0628\u0627\u0631\u06c1 \u0622\u0631\u0688\u0631 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<h4 id=\"heading-if-it-fails\">\u0627\u06af\u0631 \u06cc\u06c1 \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648\u062c\u0627\u062a\u0627 \u06c1\u06d2:<\/h4>\n<ul>\n<li>Terraform \u0628\u0639\u062f \u0645\u06cc\u06ba \u06a9\u06c1\u062a\u0627 \u06c1\u06d2: <code>could not find default credentials<\/code>: \u0622\u067e \u0628\u063a\u06cc\u0631 \u06a9\u0633\u06cc \u062c\u06be\u0646\u0688\u06d2 \u06a9\u06d2 \u0644\u0627\u06af \u0627\u0646 \u06c1\u0648\u0626\u06d2\u06d4 \u0686\u0644\u0627\u0626\u06cc\u06ba:<\/li>\n<\/ul>\n<pre><code class=\"language-bash\">gcloud auth application-default login\n<\/code><\/pre>\n<ul>\n<li>\u062d\u06a9\u0645 \u06a9\u06c1\u062a\u0627 \u06c1\u06d2\u06d4 <code>cloud-platform scope is required but not consented<\/code>: \u0622\u067e \u06a9\u06d2 \u0628\u0631\u0627\u0624\u0632\u0631 \u06a9\u0648 \u0627\u062c\u0627\u0632\u062a \u062f\u06cc\u0646\u06d2 \u067e\u0631 \u06a9\u0644\u06a9 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0628\u0646\u062f \u06a9\u0631 \u062f\u06cc\u0627 \u06af\u06cc\u0627 \u062a\u06be\u0627\u06d4 \u0686\u0644\u0627\u0626\u06cc\u06ba <code>gcloud auth login --update-adc<\/code> \u062f\u0648\u0628\u0627\u0631\u06c1 \u06a9\u0644\u06a9 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u0627\u062c\u0627\u0632\u062a \u067e\u0631 \u06a9\u0644\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4<\/li>\n<\/ul>\n<p>\u0622\u062c \u0635\u0631\u0641 \u06c1\u06d2 <code>gcloud<\/code> \u0644\u0627\u06af \u0627\u0646 \u06a9\u0631\u06cc\u06ba\u06d4 \u0646\u0627\u0645 <code>api.clearpay.test<\/code> \u0622\u067e \u0627\u0633\u06d2 \u0628\u0639\u062f \u0645\u06cc\u06ba \u062f\u06cc\u06a9\u06be\u06cc\u06ba \u06af\u06d2 \u062c\u0628 \u0622\u067e \u0645\u0631\u062d\u0644\u06c1 8 \u0645\u06cc\u06ba \u0644\u0648\u0688 \u0628\u06cc\u0644\u0646\u0633\u0631 \u0628\u0646\u0627\u0626\u06cc\u06ba \u06af\u06d2\u06d4 \u062a\u0628 \u062a\u06a9\u060c \u0627\u0633\u06d2 \u0686\u06be\u0648\u0691 \u062f\u06cc\u06ba\u06d4<\/p>\n<h4 id=\"heading-done-when\">\u0645\u06a9\u0645\u0644 \u06c1\u0648\u0646\u06d2 \u067e\u0631:<\/h4>\n<ul>\n<li>\n<p><code>gcloud config get-value project<\/code> \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 ID \u067e\u0631\u0646\u0679 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p><code>gcloud billing projects describe<\/code> \u062f\u06a9\u06be\u0627\u0626\u06cc\u06ba <code>billingEnabled: true<\/code><\/p>\n<\/li>\n<li>\n<p><code>kubectl version --client<\/code> \u067e\u0631\u0646\u0679 \u0648\u0631\u0698\u0646<\/p>\n<\/li>\n<\/ul>\n<p>\u0645\u0627\u06cc\u0627 \u067e\u06cc\u063a\u0627\u0645: \"\u062c\u06cc \u06a9\u0644\u0627\u0624\u0688 \u0644\u0627\u06af \u0627\u0646 \u06c1\u06d2\u06d4 \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u0633\u06cc\u0679 \u06a9\u0631 \u062f\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4 \u0628\u0644\u0646\u06af \u0634\u0631\u0648\u0639 \u06a9\u0631 \u062f\u06cc \u06af\u0626\u06cc \u06c1\u06d2\u06d4 \u062c\u06cc \u0633\u06cc \u067e\u06cc \u0634\u0631\u0648\u0639 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062a\u06cc\u0627\u0631 \u06c1\u06d2\u06d4\"<\/p>\n<p>\u0645\u0627\u06cc\u0627: \"\u0627\u06cc\u06a9 \u0648\u0642\u062a \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u0627\u0633\u0679\u06cc\u062c \u0628\u0646\u0627\u0626\u06cc\u06ba\u06d4 \u0645\u062c\u06be\u06d2 \u0628\u062a\u0627\u0626\u06cc\u06ba \u06a9\u06c1 \u062c\u0628 \u06c1\u0631 \u0627\u0633\u0679\u06cc\u062c \u06a9\u06cc \u062a\u0635\u062f\u06cc\u0642 \u06c1\u0648\u062c\u0627\u0626\u06d2\u06d4 \u0627\u06af\u0631 \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u06c1\u06cc \u0648\u0642\u062a \u0645\u06cc\u06ba \u0622\u0679\u06be\u0648\u06ba \u06a9\u0648 \u0686\u0644\u0627\u062a\u06cc \u06c1\u0648\u06ba \u0627\u0648\u0631 \u062a\u06cc\u0633\u0631\u0627 \u0627\u0633\u0679\u06cc\u062c \u0679\u0648\u0679 \u062c\u0627\u062a\u0627 \u06c1\u06d2 \u062a\u0648 \u0645\u062c\u06be\u06d2 \u0646\u06c1\u06cc\u06ba \u0645\u0639\u0644\u0648\u0645 \u06a9\u06c1 \u06a9\u0648\u0646 \u0633\u0627 \u0627\u0633\u0679\u06cc\u062c \u0679\u06be\u06cc\u06a9 \u06a9\u0631\u0646\u0627 \u06c1\u06d2\u06d4\"<\/p>\n<h3 id=\"heading-chapter-11-build-gcp-in-eight-terraform-stages\">\u0628\u0627\u0628 11\u06d4 8 \u0679\u06cc\u0631\u0627\u0641\u0627\u0631\u0645 \u0645\u0631\u0627\u062d\u0644 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u062c\u06cc \u0633\u06cc \u067e\u06cc \u06a9\u06cc \u062a\u0639\u0645\u06cc\u0631<\/h3>\n<p><em>\u0635\u0628\u062d 10:30 \u0628\u062c\u06d2 \u062c\u0645\u0639\u06c1 \u0633\u06d2 \u0645\u06c1\u06cc\u0646\u06d2 \u06a9\u06d2 \u062f\u0648\u0633\u0631\u06d2 \u067e\u06cc\u0631 \u062a\u06a9<\/em><\/p>\n<p>GCP \u0622\u0679\u06be \u0679\u06cc\u0631\u0627\u0641\u0627\u0631\u0645 \u0645\u0631\u0627\u062d\u0644 \u0645\u06cc\u06ba \u0628\u0646\u0627\u06cc\u0627 \u06af\u06cc\u0627 \u062a\u06be\u0627\u06d4 \u06c1\u0631 \u0642\u062f\u0645 \u06c1\u062f\u0641 \u06a9\u06d2 \u0645\u0627\u062d\u0648\u0644 \u06a9\u06cc \u0627\u06cc\u06a9 \u062a\u06c1\u06c1 \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u0646\u06c1\u06cc\u06ba \u062a\u0631\u062a\u06cc\u0628 \u0633\u06d2 \u0686\u0644\u0627\u0626\u06cc\u06ba\u06d4 \u06c1\u0631 \u0642\u062f\u0645 \u06a9\u06d2 \u0628\u0639\u062f\u060c \u0627\u06af\u0644\u06d2 \u0645\u0631\u062d\u0644\u06d2 \u067e\u0631 \u062c\u0627\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0646\u062a\u0627\u0626\u062c \u06a9\u0648 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p>\u0645\u0627\u0626\u06cc\u06af\u0631\u06cc\u0634\u0646 \u06a9\u06d2 \u06af\u0648\u06af\u0644 \u0633\u0627\u0626\u06cc\u0688 \u06a9\u0648 \u0628\u0646\u0627\u0646\u0627: APIs\u060c \u0646\u06cc\u0679 \u0648\u0631\u06a9\u0633\u060c \u06a9\u0644\u0633\u0679\u0631\u0632\u060c \u0627\u0645\u06cc\u062c \u0631\u062c\u0633\u0679\u0631\u06cc\u0632\u060c \u0634\u0646\u0627\u062e\u062a\u060c \u0631\u0627\u0632\u060c \u0627\u06cc\u0631\u0631 \u0627\u0644\u0631\u0679\u0633\u060c \u067e\u0628\u0644\u06a9 \u0644\u0648\u0688 \u0628\u06cc\u0644\u0646\u0633\u0631\u0632\u06d4<\/p>\n<h4 id=\"heading-why-eight-stages\">\u06a9\u06cc\u0648\u06ba \u0645\u0631\u062d\u0644\u06c1 8\u061f<\/h4>\n<p>Terraform 8 \u0641\u0648\u0644\u0688\u0631\u0632 \u0645\u06cc\u06ba \u0648\u0627\u0642\u0639 \u06c1\u06d2\u06d4 <code>01-foundation<\/code> \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 <code>08-edge<\/code>. \u06c1\u0631 \u0641\u0648\u0644\u0688\u0631 \u06a9\u06cc \u0627\u067e\u0646\u06cc \u0627\u0633\u0679\u06cc\u0679 \u0641\u0627\u0626\u0644 \u06c1\u0648\u062a\u06cc \u06c1\u06d2 \u0627\u0648\u0631 \u0635\u0631\u0641 \u067e\u0686\u06be\u0644\u06d2 \u0645\u0631\u0627\u062d\u0644 \u06a9\u0648 \u067e\u0691\u06be\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u06af\u0631 <code>03-gke<\/code> \u0627\u06af\u0631 \u06cc\u06c1 \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648\u062c\u0627\u062a\u0627 \u06c1\u06d2\u060c \u062a\u0648 \u0645\u0633\u0626\u0644\u06c1 \u06a9\u0644\u0633\u0679\u0631 \u0645\u06cc\u06ba \u06c1\u06d2\u060c \u06a9\u06c1\u06cc\u06ba 1500 \u0644\u0627\u0626\u0646 \u0641\u0627\u0626\u0644 \u0645\u06cc\u06ba \u0646\u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u06cc\u06c1 \"Terraform 8 \u0628\u0627\u0631 \u0686\u0644\u0627\u0626\u06cc\u06ba\" \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u06a9\u0627\u0645 \u0622\u0679\u06be \u0686\u06cc\u0632\u0648\u06ba \u06a9\u0648 \u0628\u0646\u0627\u0646\u0627 \u0627\u0648\u0631 \u062b\u0627\u0628\u062a \u06a9\u0631\u0646\u0627 \u06c1\u06d2 \u06a9\u06c1 \u06c1\u0631 \u0627\u06cc\u06a9 \u0645\u0648\u062c\u0648\u062f \u06c1\u06d2 \u0627\u0633 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u06a9\u06c1 \u0627\u06af\u0644\u06cc \u0686\u06cc\u0632 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u06d4<\/p>\n<p>\u0631\u06cc\u0627\u0633\u062a \u0627\u0633\u06d2 \u0644\u06cc\u067e \u0679\u0627\u067e \u067e\u0631 \u0645\u0642\u0627\u0645\u06cc \u0631\u06a9\u06be\u062a\u06cc \u06c1\u06d2\u060c \u0644\u06c1\u0630\u0627 \u06cc\u06c1 \u0627\u06cc\u06a9 \u0634\u062e\u0635 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0679\u06be\u06cc\u06a9 \u06c1\u06d2\u06d4 \u0679\u06cc\u0645 \u06c1\u0631 \u0642\u062f\u0645 \u06a9\u06cc \u062d\u06cc\u062b\u06cc\u062a \u06a9\u0648 \u06af\u0648\u06af\u0644 \u06a9\u0644\u0627\u0624\u0688 \u0627\u0633\u0679\u0648\u0631\u06cc\u062c \u0628\u0627\u0644\u0679\u06cc \u0645\u06cc\u06ba \u0645\u0646\u062a\u0642\u0644 \u06a9\u0631\u062a\u06cc \u06c1\u06d2 \u0627\u0633 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u06a9\u06c1 \u06a9\u0648\u0626\u06cc \u062f\u0648\u0633\u0631\u0627 \u0634\u062e\u0635 \u0627\u0633 \u067e\u0631 \u0639\u0645\u0644 \u06a9\u0631\u06d2\u06d4 <code>apply<\/code>.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/10\/1792188591_693_\u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0648\u06ba-\u06a9\u0648-AWS-\u0633\u06d2-GKE-\u0645\u06cc\u06ba-\u06a9\u06cc\u0633\u06d2-\u0645\u0646\u062a\u0642\u0644-\u06a9\u06cc\u0627-\u062c\u0627\u0626\u06d2\u06d4.png\" alt=\"\u0627\u06cc\u06a9 GCP \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u0622\u0679\u06be Terraform \u0645\u0631\u0627\u062d\u0644 \u06a9\u0627 \u062e\u0627\u06a9\u06c1 \u0645\u0631\u062d\u0644\u06c1 1 API \u06a9\u0648 \u0641\u0639\u0627\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0645\u0631\u062d\u0644\u06c1 2 \u0646\u06cc\u0679 \u0648\u0631\u06a9 \u0627\u0648\u0631 \u0633\u0628 \u0646\u06cc\u0679 \u062a\u062e\u0644\u06cc\u0642 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0645\u0631\u062d\u0644\u06c1 3 \u0645\u06cc\u06ba\u060c \u0622\u067e NAT IP \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u0627\u06cc\u06a9 \u0646\u062c\u06cc GKE \u06a9\u0644\u0633\u0679\u0631 \u0627\u0648\u0631 Cloud NAT \u0628\u0646\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0645\u0631\u062d\u0644\u06c1 4 \u0627\u0645\u06cc\u062c \u0631\u062c\u0633\u0679\u0631\u06cc \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u0645\u0631\u062d\u0644\u06c1 5 \u0634\u0646\u0627\u062e\u062a \u06a9\u0648 \u062a\u0631\u062a\u06cc\u0628 \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4 \u0645\u0631\u062d\u0644\u06c1 6 \u0631\u0627\u0632 \u06a9\u0648 \u062a\u0631\u062a\u06cc\u0628 \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4 \u0645\u0631\u062d\u0644\u06c1 7 \u063a\u0644\u0637\u06cc \u06a9\u06cc \u067e\u06cc\u0645\u0627\u0626\u0634 \u0627\u0648\u0631 \u0627\u0646\u062a\u0628\u0627\u06c1\u0627\u062a \u0645\u0631\u062a\u0628 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0645\u0631\u062d\u0644\u06c1 8 \u067e\u0628\u0644\u06a9 \u0644\u0648\u0688 \u0628\u06cc\u0644\u0646\u0633\u0631 \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u0646\u06cc\u0679 \u0648\u0631\u06a9 \u0627\u0646\u0679\u0631\u0646\u06cc\u0679 \u062a\u06a9 \u0631\u0633\u0627\u0626\u06cc \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0628\u0639\u062f \u0645\u06cc\u06ba AWS RDS \u0633\u06d2 \u062c\u0691 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4\" style=\"display: block;\" width=\"600\" height=\"400\" loading=\"lazy\" title=\"\"><\/p>\n<p>\u0627\u0648\u067e\u0631 \u0648\u0627\u0644\u0627 \u062e\u0627\u06a9\u06c1 \u062f\u06a9\u06be\u0627\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u06a9\u0633 \u0637\u0631\u062d Terraform \u0622\u0679\u06be \u0645\u0631\u0627\u062d\u0644 \u0645\u06cc\u06ba GCP \u0627\u0646\u0641\u0631\u0627\u0633\u0679\u0631\u06a9\u0686\u0631 \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u0645\u0637\u0644\u0648\u0628\u06c1 APIs \u06a9\u0648 \u0641\u0639\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u060c Cloud NAT \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0627\u06cc\u06a9 \u0646\u06cc\u0679 \u0648\u0631\u06a9 \u0627\u0648\u0631 \u0646\u062c\u06cc GKE \u06a9\u0644\u0633\u0679\u0631 \u0628\u0646\u0627\u0626\u06cc\u06ba\u060c \u067e\u06be\u0631 \u0627\u06cc\u06a9 \u062a\u0635\u0648\u06cc\u0631\u06cc \u0631\u062c\u0633\u0679\u0631\u06cc\u060c \u0634\u0646\u0627\u062e\u062a\u060c \u062e\u0641\u06cc\u06c1\u060c \u063a\u0644\u0637\u06cc \u06a9\u06cc \u0646\u06af\u0631\u0627\u0646\u06cc\u060c \u0627\u0648\u0631 \u0627\u06cc\u06a9 \u067e\u0628\u0644\u06a9 \u0644\u0648\u0688 \u0628\u06cc\u0644\u0646\u0633 \u0633\u06cc\u0679 \u0627\u067e \u06a9\u0631\u06cc\u06ba\u06d4 \u06a9\u0644\u0627\u0624\u0688 NAT \u0622\u067e \u06a9\u06d2 \u0646\u062c\u06cc \u0646\u0648\u0688\u0633 \u06a9\u0648 \u0622\u0624\u0679 \u0628\u0627\u0624\u0646\u0688 \u06a9\u0646\u06cc\u06a9\u0679\u06cc\u0648\u06cc\u0679\u06cc \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0628\u0634\u0645\u0648\u0644 \u0628\u0639\u062f \u0645\u06cc\u06ba \u0645\u0646\u062a\u0642\u0644\u06cc \u06a9\u06d2 \u062f\u0648\u0631\u0627\u0646 AWS RDS \u062a\u06a9 \u0631\u0633\u0627\u0626\u06cc\u06d4<\/p>\n<h4 id=\"heading-how-every-stage-runs\">\u06c1\u0631 \u0642\u062f\u0645 \u067e\u0631 \u06a9\u06cc\u0633\u06d2 \u0639\u0645\u0644 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/h4>\n<p>\u06c1\u0631 \u0642\u062f\u0645 \u0627\u0633 \u0641\u0648\u0644\u0688\u0631 \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u06c1\u06cc \u062a\u06cc\u0646 \u06a9\u0645\u0627\u0646\u0688\u0632 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-bash\">terraform init\nterraform plan\nterraform apply\n<\/code><\/pre>\n<p>\u062f\u0631\u062e\u0648\u0627\u0633\u062a \u062f\u06cc\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0645\u0646\u0635\u0648\u0628\u06c1 \u067e\u0691\u06be\u06cc\u06ba\u06d4 \u0646\u06cc\u0686\u06d2 \u062f\u06cc\u0626\u06d2 \u06af\u0626\u06d2 \u062a\u0645\u0627\u0645 \u0627\u0642\u062f\u0627\u0645\u0627\u062a \u0645\u0646\u0635\u0648\u0628\u0648\u06ba \u06a9\u06cc \u0645\u062a\u0648\u0642\u0639 \u062a\u0639\u062f\u0627\u062f \u06a9\u06cc \u0641\u06c1\u0631\u0633\u062a \u062f\u06cc\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0645\u062b\u0627\u0644 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 <code>Plan: 7 to add, 0 to change, 0 to destroy<\/code>. \u0627\u06af\u0631 \u0622\u067e \u06a9\u06cc \u062a\u0639\u062f\u0627\u062f \u0645\u062e\u062a\u0644\u0641 \u06c1\u06d2 \u06cc\u0627 \u0622\u067e \u0627\u067e\u0646\u06d2 \u0645\u0646\u0635\u0648\u0628\u0648\u06ba \u0645\u06cc\u06ba \u06a9\u0633\u06cc \u0686\u06cc\u0632 \u06a9\u0648 \u062a\u0628\u0627\u06c1 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u06a9\u0648\u0634\u0634 \u06a9\u0631 \u0631\u06c1\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u062f\u0627\u062e\u0644 \u06c1\u0648\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0631\u06a9\u06cc\u06ba \u0627\u0648\u0631 \u067e\u0691\u06be\u06cc\u06ba\u06d4 <code>yes<\/code>.<\/p>\n<p><code>terraform apply<\/code> \u067e\u0648\u0686\u06be\u0646\u0627 <code>Do you want to perform these actions?<\/code>. \u0632\u0645\u0631\u06c1 <code>yes<\/code> \u0627\u0646\u0679\u0631 \u062f\u0628\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<p>\u0630\u06cc\u0644 \u0645\u06cc\u06ba \u0641\u0648\u0644\u0688\u0631 \u06a9\u06d2 \u0631\u0627\u0633\u062a\u06d2 \u0631\u06cc\u067e\u0648\u0632\u0679\u0631\u06cc \u0631\u0648\u0679 \u0633\u06d2 \u0634\u0631\u0648\u0639 \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0627\u06af\u0631 \u0622\u067e \u067e\u06c1\u0644\u06d2 \u06c1\u06cc \u0627\u0646\u062f\u0631 \u06c1\u06cc\u06ba\u06d4 <code>infra\/gcp\/terraform\/0X-...<\/code>\u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba <code>cd ..\/0Y-...<\/code> \u0627\u06af\u0644\u06d2 \u0645\u0631\u062d\u0644\u06d2 \u067e\u0631 \u062c\u0627\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2\u06d4<\/p>\n<p>\u062a\u0635\u062f\u06cc\u0642 \u06a9\u06d2 \u0644\u06cc\u06d2 \"\u06a9\u0646\u0633\u0648\u0644 \u0645\u06cc\u06ba\": \u0635\u0641\u062d\u06c1 \u06a9\u06d2 \u0627\u0648\u067e\u0631\u06cc \u062d\u0635\u06d2 \u0645\u06cc\u06ba \u0627\u067e\u0646\u0627 \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u0645\u0646\u062a\u062e\u0628 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u0631\u06cc\u062c\u0646 \u06a9\u0648 \u0627\u0633 \u067e\u0631 \u0633\u06cc\u0679 \u06a9\u0631\u06cc\u06ba: <code>us-east4<\/code> \u0627\u06af\u0631 \u0622\u067e \u06a9\u06d2 \u0635\u0641\u062d\u06c1 \u0645\u06cc\u06ba \u0645\u0642\u0627\u0645\u06cc \u0645\u06cc\u0646\u0648 \u06c1\u06d2\u060c \u062a\u0648 \u0627\u06a9\u062b\u0631 \u062e\u0627\u0644\u06cc \u0641\u06c1\u0631\u0633\u062a \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u06a9\u06c1 \u0645\u06cc\u0646\u0648 \u0627\u0628\u06be\u06cc \u0628\u06be\u06cc \u0622\u0646 \u06c1\u06d2\u06d4 <code>us-central1<\/code>.<\/p>\n<h4 id=\"heading-stage-1-turn-on-the-google-apis-01-foundation\">\u0645\u0631\u062d\u0644\u06c1 1: \u06af\u0648\u06af\u0644 API \u06a9\u0648 \u0686\u0627\u0644\u0648 \u06a9\u0631\u06cc\u06ba (<code>01-foundation<\/code>)<\/h4>\n<p>\u06af\u0648\u06af\u0644 \u06a9\u0644\u0627\u0624\u0688 \u0633\u0631\u0648\u0633\u0632 \u0646\u0626\u06d2 \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679\u0633 \u0645\u06cc\u06ba \u0628\u0637\u0648\u0631 \u0688\u06cc\u0641\u0627\u0644\u0679 \u0628\u0646\u062f \u06c1\u06cc\u06ba\u06d4 \u06cc\u06c1 \u0645\u0631\u062d\u0644\u06c1 10 \u062e\u0635\u0648\u0635\u06cc\u0627\u062a \u06a9\u0648 \u0642\u0627\u0628\u0644 \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2\u060c \u0628\u0634\u0645\u0648\u0644 GKE\u060c \u0622\u0631\u0679\u0641\u06cc\u06a9\u0679 \u0631\u062c\u0633\u0679\u0631\u06cc\u060c \u0633\u06cc\u06a9\u0631\u0679 \u0645\u06cc\u0646\u06cc\u062c\u0631\u060c IAM\u060c \u0627\u0648\u0631 \u0644\u0627\u06af\u0646\u06af\u06d4 \u0627\u06af\u0631 \u0622\u067e \u0627\u0633\u06d2 \u0686\u06be\u0648\u0691 \u062f\u06cc\u062a\u06d2 \u06c1\u06cc\u06ba\u060c <code>03-gke<\/code> \u06cc\u06c1 \u0628\u0639\u062f \u0645\u06cc\u06ba \u0627\u062c\u0627\u0632\u062a \u06a9\u06cc \u063a\u0644\u0637\u06cc \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648 \u062c\u0627\u0626\u06d2 \u06af\u0627 \u062c\u0648 \u0645\u0641\u06cc\u062f \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-bash\">cd infra\/gcp\/terraform\/01-foundation\ncp terraform.tfvars.example terraform.tfvars\n<\/code><\/pre>\n<p>\u0627\u06af\u0631 <code>terraform.tfvars<\/code> \u0627\u06af\u0631 \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 ID \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u0645\u0648\u062c\u0648\u062f \u06c1\u06d2 \u062a\u0648 \u0627\u0633\u06d2 \u06a9\u0627\u067e\u06cc \u06a9\u0631\u0646\u0627 \u0686\u06be\u0648\u0691 \u062f\u06cc\u06ba\u06d4 \u062f\u0648\u0633\u0631\u06cc \u06a9\u0627\u067e\u06cc \u0622\u067e \u06a9\u06cc \u062a\u0631\u0627\u0645\u06cc\u0645 \u06a9\u0648 \u0627\u0648\u0648\u0631 \u0631\u0627\u0626\u0679 \u06a9\u0631 \u062f\u06cc\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u06a9\u06be\u0644\u0627 <code>terraform.tfvars<\/code> \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 <code>clearpay-migration-demo<\/code> \u0622\u067e \u06a9\u06d2 \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 ID \u06a9\u06d2 \u0633\u0627\u062a\u06be\u06d4 \u067e\u06be\u0631 \u0686\u0644\u0627\u0626\u06cc\u06ba:<\/p>\n<pre><code class=\"language-bash\">terraform init\nterraform plan\nterraform apply\n<\/code><\/pre>\n<p>\u0645\u062a\u0648\u0642\u0639 \u0645\u0646\u0635\u0648\u0628\u06c1: <code>google_project_service<\/code> \u0646\u0645\u0628\u0631 10 \u0627\u0648\u0631 \u06a9\u0648\u0626\u06cc \u06a9\u0644\u0633\u0679\u0631 \u0646\u06c1\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-plaintext\">Plan: 10 to add, 0 to change, 0 to destroy.\n\nChanges to Outputs:\n  + project_id = \"YOUR_PROJECT_ID\"\n  + region     = \"us-east4\"\n<\/code><\/pre>\n<p>\u0627\u06af\u0631 \u0645\u0646\u0635\u0648\u0628\u06c1 \u0686\u06be\u067e\u0627 \u06c1\u0648\u0627 \u06c1\u06d2\u06d4 <code>clearpay-migration-demo<\/code>\u0679\u06be\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba <code>terraform.tfvars<\/code> \u067e\u06c1\u0644\u06d2 \u062e\u0641\u06cc\u06c1 \u0645\u06cc\u0646\u06cc\u062c\u0631 \u0627\u0648\u0631 \u0633\u0631\u0648\u0633 \u0646\u06cc\u0679 \u0648\u0631\u06a9\u0646\u06af \u0645\u0645\u06a9\u0646 \u06c1\u06d2\u06d4 <code>Still creating<\/code> \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u06d2 \u062f\u0648\u0631\u0627\u0646 \u062a\u0642\u0631\u06cc\u0628\u0627 30 \u0645\u0646\u0679\u06d4<\/p>\n<p>\u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba:<\/p>\n<pre><code class=\"language-bash\">gcloud services list --enabled --filter=\"config.name:container.googleapis.com\"\n<\/code><\/pre>\n<pre><code class=\"language-plaintext\">NAME                      TITLE\ncontainer.googleapis.com  Kubernetes Engine API\n<\/code><\/pre>\n<p>\u0627\u06af\u0631 \u06a9\u0686\u06be \u0628\u06be\u06cc \u067e\u0631\u0646\u0679 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u062a\u0627 \u06c1\u06d2 \u062a\u0648\u060c \u0622\u067e \u06a9\u06d2 \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u06a9\u06d2 \u0644\u06cc\u06d2 API \u06a9\u0648 \u0641\u0639\u0627\u0644 \u0646\u06c1\u06cc\u06ba \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4 <code>gcloud<\/code> \u0627\u0628\u06be\u06cc \u062a\u06a9 \u0645\u0631\u062d\u0644\u06c1 2 \u067e\u0631 \u0646\u06c1 \u062c\u0627\u0626\u06cc\u06ba \u062f\u0631\u062c \u0630\u06cc\u0644 \u062a\u06cc\u0646 \u0648\u062c\u0648\u06c1\u0627\u062a \u06a9\u0648 \u062a\u0631\u062a\u06cc\u0628 \u0633\u06d2 \u062f\u06cc\u06a9\u06be\u06cc\u06ba:<\/p>\n<ol>\n<li>\n<p><code>gcloud<\/code> <strong>\u0627\u06cc\u06a9 \u0627\u0648\u0631 \u0645\u0646\u0635\u0648\u0628\u06d2 \u06a9\u06cc \u0637\u0631\u0641 \u0627\u0634\u0627\u0631\u06c1 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/strong> \u0686\u0644\u0627\u0626\u06cc\u06ba <code>gcloud config get-value project<\/code>. \u0627\u0633\u06d2 \u0648\u06c1\u06cc \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 ID \u067e\u0631\u0646\u0679 \u06a9\u0631\u0646\u0627 \u0686\u0627\u06c1\u0626\u06d2 \u062c\u0648 \u0622\u067e \u0646\u06d2 \u062f\u0631\u062c \u06a9\u06cc\u0627 \u06c1\u06d2\u06d4 <code>terraform.tfvars<\/code>. \u0627\u06af\u0631 \u0646\u06c1\u06cc\u06ba \u062a\u0648 \u0686\u0644\u0627\u0626\u06cc\u06ba: <code>gcloud config set project YOUR_PROJECT_ID<\/code> \u0627\u0648\u0631 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u0622\u067e \u06a9\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0645\u06a9\u0645\u0644 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u0626\u06cc \u06c1\u06d2\u06d4<\/strong> \u0686\u0644\u0627\u0626\u06cc\u06ba <code>terraform plan<\/code> \u06a9\u0648 <code>01-foundation<\/code> \u062f\u0648\u0628\u0627\u0631\u06c1 \u0627\u0633\u0679\u06cc\u062c \u067e\u0631\u0646\u0679 \u0645\u06a9\u0645\u0644 <code>No changes<\/code>. \u0627\u06af\u0631 \u0622\u067e \u0627\u0628 \u0628\u06be\u06cc \u0627\u067e\u0646\u06d2 \u067e\u0644\u0627\u0646 \u0645\u06cc\u06ba \u0648\u0633\u0627\u0626\u0644 \u0634\u0627\u0645\u0644 \u06a9\u0631\u0646\u0627 \u0686\u0627\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba \u062a\u0648 \u0686\u0644\u0627\u0626\u06cc\u06ba: <code>terraform apply<\/code> \u0627\u0648\u0631 \u0679\u0627\u0626\u067e \u06a9\u0631\u06cc\u06ba\u06d4 <code>yes<\/code>.<\/p>\n<\/li>\n<li>\n<p><strong>\u06af\u0648\u06af\u0644 \u0646\u06d2 \u0627\u0628\u06be\u06cc \u062a\u06a9 \u0646\u06c1\u06cc\u06ba \u067e\u06a9\u0691\u0627 \u06c1\u06d2\u06d4<\/strong> \u0622\u067e \u06a9\u06d2 \u0646\u0626\u06d2 \u0641\u0639\u0627\u0644 API \u06a9\u0648 \u0641\u06c1\u0631\u0633\u062a \u0645\u06cc\u06ba \u0638\u0627\u06c1\u0631 \u06c1\u0648\u0646\u06d2 \u0645\u06cc\u06ba \u0686\u0646\u062f \u0645\u0646\u0679 \u0644\u06af \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0627\u06cc\u06a9 \u0645\u0646\u0679 \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u062a\u0635\u062f\u06cc\u0642 \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0686\u0644\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<\/ol>\n<p>\u0645\u0627\u06cc\u0627 \u067e\u06cc\u063a\u0627\u0645: \"\u067e\u06c1\u0644\u0627 \u0645\u0631\u062d\u0644\u06c1 \u0644\u0627\u06af\u0648 \u06c1\u0648 \u06af\u06cc\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u06cc\u0633\u0627 \u0644\u06af\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 Kubernetes Engine API \u0641\u0639\u0627\u0644 \u06c1\u0648 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4\"<\/p>\n<p>\u0645\u0627\u06cc\u0627: \"\u0679\u06be\u06cc\u06a9 \u06c1\u06d2\u06d4 \u0627\u06af\u0644\u0627 \u0646\u06cc\u0679 \u0648\u0631\u06a9 \u06c1\u06d2\u06d4 \u0627\u0648\u0631 \u06a9\u0686\u06be \u0646\u06c1\u06cc\u06ba\u06d4\"<\/p>\n<h4 id=\"heading-stage-2-build-the-network-02-network\">\u0645\u0631\u062d\u0644\u06c1 2: \u0627\u067e\u0646\u0627 \u0646\u06cc\u0679 \u0648\u0631\u06a9 \u0628\u0646\u0627\u0626\u06cc\u06ba (<code>02-network<\/code>)<\/h4>\n<p>VPC \u06af\u0648\u06af\u0644 \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u0627\u06cc\u06a9 \u0646\u062c\u06cc \u0646\u06cc\u0679 \u0648\u0631\u06a9 \u06c1\u06d2\u06d4 \u0627\u0646 \u06a9\u06d2 \u0628\u0627\u0631\u06d2 \u0645\u06cc\u06ba \u0627\u0646 \u0645\u062d\u0644\u0648\u06ba \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0633\u0648\u0686\u06cc\u06ba \u062c\u0646 \u0645\u06cc\u06ba \u0622\u067e \u06a9\u0627 \u06a9\u0644\u0633\u0679\u0631 \u0631\u06c1\u06d2 \u06af\u0627\u060c \u0627\u0648\u0631 \u0627\u067e\u0646\u06d2 \u06a9\u0644\u0633\u0679\u0631 \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u0633\u0628 \u0646\u06cc\u0679 \u06a9\u0648 \u0627\u06cc\u06a9 \u06af\u0644\u06cc \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0633\u0648\u0686\u06cc\u06ba\u06d4 \u06cc\u06c1 \u0642\u062f\u0645 \u067e\u06cc\u062f\u0627 \u06a9\u0631\u062a\u0627 \u06c1\u06d2:<\/p>\n<ul>\n<li>\n<p><code>clearpay-vpc<\/code>\u0646\u062c\u06cc \u0646\u06cc\u0679 \u0648\u0631\u06a9<\/p>\n<\/li>\n<li>\n<p><code>clearpay-gke-subnet<\/code>\u06a9\u0644\u0633\u0679\u0631 \u0645\u06cc\u06ba \u0645\u0634\u06cc\u0646\u0648\u06ba \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06c1\u0648\u0646\u06d2 \u0648\u0627\u0644\u06cc \u0627\u06cc\u0688\u0631\u06cc\u0633 \u0631\u06cc\u0646\u062c\u0632 (\u0628\u0634\u0645\u0648\u0644 \u062f\u0648 \u0627\u0636\u0627\u0641\u06cc \u0646\u0627\u0645\u0632\u062f \u0631\u06cc\u0646\u062c\u0632) <code>pods<\/code> \u0627\u0648\u0631 <code>services<\/code> \u0627\u0633\u0679\u06cc\u062c 3 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0645\u062e\u0635\u0648\u0635 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><code>clearpay-router<\/code> \u0627\u0648\u0631 <code>clearpay-nat<\/code>\u06a9\u0644\u0627\u0624\u0688 NAT \u06a9\u06cc \u062a\u0631\u062a\u06cc\u0628\u0627\u062a<\/p>\n<\/li>\n<li>\n<p><code>clearpay-nat-ip<\/code>\u06a9\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u0648\u0642\u062a \u062a\u0645\u0627\u0645 \u06a9\u0644\u0633\u0679\u0631 \u0633\u0633\u0679\u0645\u0632 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0627\u06cc\u06a9 \u0639\u0648\u0627\u0645\u06cc IP \u06a9\u0627 \u0627\u0634\u062a\u0631\u0627\u06a9 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0641\u0627\u0626\u0631 \u0648\u0627\u0644 \u06a9\u06d2 \u062f\u0648 \u0627\u0635\u0648\u0644 \u0627\u0646\u062f\u0631\u0648\u0646\u06cc \u0645\u0634\u06cc\u0646\u0648\u06ba \u06a9\u0648 \u0627\u06cc\u06a9 \u062f\u0648\u0633\u0631\u06d2 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0628\u0627\u062a \u0686\u06cc\u062a \u06a9\u0631\u0646\u06d2 \u0627\u0648\u0631 \u06af\u0648\u06af\u0644 \u06a9\u06d2 \u06c1\u06cc\u0644\u062a\u06be \u0686\u06cc\u06a9\u0633 \u062a\u06a9 \u067e\u06c1\u0646\u0686\u0646\u06d2 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u062f\u06cc\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<\/ul>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/10\/1792188592_386_\u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0648\u06ba-\u06a9\u0648-AWS-\u0633\u06d2-GKE-\u0645\u06cc\u06ba-\u06a9\u06cc\u0633\u06d2-\u0645\u0646\u062a\u0642\u0644-\u06a9\u06cc\u0627-\u062c\u0627\u0626\u06d2\u06d4.png\" alt=\"\u062e\u0627\u06a9\u06c1 GCP \u0646\u06cc\u0679 \u0648\u0631\u06a9 \u0633\u06cc\u0679 \u0627\u067e \u062f\u06a9\u06be\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u0646\u062c\u06cc \u0645\u0634\u06cc\u0646\u06cc\u06ba \u0633\u0628 \u0646\u06cc\u0679 \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u0686\u0644\u062a\u06cc \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u0627\u0646 \u06a9\u06d2 \u0639\u0648\u0627\u0645\u06cc IP \u067e\u062a\u06d2 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 Cloud NAT \u062c\u0627\u0645\u062f IP \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0622\u0624\u0679 \u0628\u0627\u0624\u0646\u0688 \u0627\u0646\u0679\u0631\u0646\u06cc\u0679 \u062a\u06a9 \u0631\u0633\u0627\u0626\u06cc \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0646\u06cc\u0679 \u0648\u0631\u06a9 \u0628\u0639\u062f \u0645\u06cc\u06ba \u0645\u0646\u062a\u0642\u0644\u06cc \u06a9\u06d2 \u062f\u0648\u0631\u0627\u0646 AWS RDS \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u0633\u06d2 \u06a9\u0646\u06cc\u06a9\u0679\u06cc\u0648\u06cc\u0679\u06cc \u06a9\u0648 \u0628\u06be\u06cc \u0633\u067e\u0648\u0631\u0679 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4\" style=\"display: block;\" width=\"600\" height=\"400\" loading=\"lazy\" title=\"\"><\/p>\n<p>\u0627\u0633 \u0641\u0648\u0644\u0688\u0631 \u0645\u06cc\u06ba <code>terraform.tfvars<\/code>. \u0645\u0631\u062d\u0644\u06c1 1 \u0627\u0633\u0679\u06cc\u0679\u0633 \u0641\u0627\u0626\u0644 \u0633\u06d2 \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u0622\u0626\u06cc \u0688\u06cc \u067e\u0691\u06be\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">cd infra\/gcp\/terraform\/02-network\n<\/code><\/pre>\n<p>\u0686\u0644\u0627\u0626\u06cc\u06ba:<\/p>\n<pre><code class=\"language-bash\">terraform init\nterraform plan\nterraform apply\n<\/code><\/pre>\n<p>\u0645\u062a\u0648\u0642\u0639 \u0645\u0646\u0635\u0648\u0628\u06c1:<\/p>\n<pre><code class=\"language-plaintext\">Plan: 7 to add, 0 to change, 0 to destroy.\n<\/code><\/pre>\n<p>\u06a9\u0648\u0631\u06cc\u062c \u06a9\u0627 \u0645\u062a\u0648\u0642\u0639 \u0627\u062e\u062a\u062a\u0627\u0645:<\/p>\n<pre><code class=\"language-plaintext\">Apply complete! Resources: 7 added, 0 changed, 0 destroyed.\n\nOutputs:\n\nnat_ip_address = \"x.x.x.x\"\nnetwork_name = \"clearpay-vpc\"\nsubnet_name = \"clearpay-gke-subnet\"\n<\/code><\/pre>\n<p>\u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba:<\/p>\n<pre><code class=\"language-bash\">gcloud compute networks describe clearpay-vpc\nterraform output nat_ip_address\n<\/code><\/pre>\n<p>\u0627\u0633\u06d2 \u062a\u0644\u0627\u0634 \u06a9\u0631\u06cc\u06ba\u06d4 <code>name: clearpay-vpc<\/code>\u060c <code>subnetworks<\/code> \u06a9\u06d2 \u0633\u0627\u062a\u06be \u062e\u062a\u0645 \u06c1\u0648\u0646\u06d2 \u0648\u0627\u0644\u06cc \u0644\u0627\u0626\u0646 <code>clearpay-gke-subnet<\/code>\u0627\u0648\u0631 <code>autoCreateSubnetworks: false<\/code>. \u0622\u062e\u0631\u06cc \u0644\u0627\u0626\u0646 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u06a9\u06c1 \u06cc\u06c1 \u0646\u06cc\u0679 \u0648\u0631\u06a9 \u0688\u06cc\u0632\u0627\u0626\u0646 \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u062a\u06be\u0627\u060c \u062a\u062e\u0644\u06cc\u0642 \u0646\u06c1\u06cc\u06ba \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u062a\u06be\u0627\u06d4<\/p>\n<p>NAT IP \u0644\u06a9\u06be\u06cc\u06ba\u06d4 \u0628\u0627\u0628 13 \u0628\u0627\u0644\u06a9\u0644 \u0627\u0633\u06cc \u0627\u06cc\u0688\u0631\u06cc\u0633 \u06a9\u06d2 \u0644\u06cc\u06d2 AWS \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u06a9\u0648 \u06a9\u06be\u0648\u0644\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u06a9\u0646\u0633\u0648\u0644 \u0645\u06cc\u06ba: \u0622\u067e \u06a9\u0648 \u0627\u067e\u0646\u0627 VPC \u0646\u06cc\u0679 \u0648\u0631\u06a9 \u062f\u06cc\u06a9\u06be\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u06d4 <code>clearpay-vpc<\/code>. \u06a9\u0644\u0627\u0624\u0688 NAT \u0634\u0648 <code>clearpay-nat<\/code> \u06a9\u0648 <code>clearpay-router<\/code>. \u0622\u067e \u06a9\u0627 IP \u067e\u062a\u06c1 \u062f\u06a9\u06be\u0627\u06cc\u0627 \u062c\u0627\u0626\u06d2 \u06af\u0627\u06d4 <code>clearpay-nat-ip<\/code>.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/10\/1792188592_971_\u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0648\u06ba-\u06a9\u0648-AWS-\u0633\u06d2-GKE-\u0645\u06cc\u06ba-\u06a9\u06cc\u0633\u06d2-\u0645\u0646\u062a\u0642\u0644-\u06a9\u06cc\u0627-\u062c\u0627\u0626\u06d2\u06d4.png\" alt=\"Gcp \u06a9\u0646\u0633\u0648\u0644 \u0645\u06cc\u06ba \u06a9\u0644\u0627\u0624\u0688 NAT \u062f\u06a9\u06be\u0627\u062a\u06cc \u062a\u0635\u0648\u06cc\u0631\" style=\"display: block;\" width=\"600\" height=\"400\" loading=\"lazy\" title=\"\"><\/p>\n<p>\u0627\u06af\u0631 \u0645\u0646\u0635\u0648\u0628\u06c1 \u0646\u0627\u062c\u0627\u0626\u0632 \u06c1\u06d2\u06d4 <code>..\/01-foundation\/terraform.tfstate<\/code>\u0641\u06cc\u0632 1 \u0645\u06a9\u0645\u0644 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4<\/p>\n<p>\u0645\u0627\u06cc\u0627 \u067e\u06cc\u063a\u0627\u0645: \"<code>clearpay-vpc<\/code> \u0627\u0648\u0631 Cloud NAT \u0645\u0648\u062c\u0648\u062f \u06c1\u06d2\u06d4 NAT IP \u0646\u0648\u0679\u0648\u06ba \u0645\u06cc\u06ba \u06c1\u06d2\u06d4\"<\/p>\n<p>\u0688\u06cc\u0646\u06cc\u0626\u0644 \u0627\u067e\u0646\u06d2 \u0646\u0648\u0679\u0648\u06ba \u0645\u06cc\u06ba NAT IP \u0686\u06cc\u06a9 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0688\u06cc\u0646\u06cc\u0626\u0644: \"\u06c1\u0645\u0627\u0631\u06cc \u067e\u0648\u0688 \u0628\u06cc\u0631\u0648\u0646\u06cc \u062f\u0646\u06cc\u0627 \u06a9\u0648 \u06a9\u06cc \u062c\u0627\u0646\u06d2 \u0648\u0627\u0644\u06cc \u06c1\u0631 \u06a9\u0627\u0644 \u0627\u0633 \u0627\u06cc\u0688\u0631\u06cc\u0633 \u0633\u06d2 \u0622\u062a\u06cc \u06c1\u06d2\u06d4 \u0627\u0633 \u0645\u06cc\u06ba AWS \u0645\u06cc\u06ba \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u06a9\u0648 \u06a9\u0627\u0644\u0632 \u0634\u0627\u0645\u0644 \u06c1\u06cc\u06ba\u06d4 \u0628\u0639\u062f \u0645\u06cc\u06ba\u060c \u06c1\u0645 \u0627\u067e\u0646\u06d2 AWS \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u0633\u06d2 \u06a9\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba \u06a9\u06c1 \u0627\u0633 \u0627\u06cc\u0688\u0631\u06cc\u0633 \u0633\u06d2 \u06a9\u0646\u06a9\u0634\u0646 \u0642\u0628\u0648\u0644 \u06a9\u0631\u06cc\u06ba \u0646\u06c1 \u06a9\u06c1 \u06a9\u0633\u06cc \u062f\u0648\u0633\u0631\u06d2 \u0627\u06cc\u0688\u0631\u06cc\u0633 \u0633\u06d2\u06d4\"<\/p>\n<p>\u0627\u0633 \u06a9\u06cc \u0648\u0636\u0627\u062d\u062a \u0628\u0627\u0628 13 \u0645\u06cc\u06ba \u06a9\u06cc \u06af\u0626\u06cc \u06c1\u06d2\u06d4 \u062a\u0628 \u062a\u06a9\u060c \u0627\u067e\u0646\u06d2 NAT IP \u06a9\u0648 \u0646\u0648\u0679 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<h4 id=\"heading-stage-3-create-the-gke-cluster-03-gke\">\u0645\u0631\u062d\u0644\u06c1 3: \u0627\u06cc\u06a9 GKE \u06a9\u0644\u0633\u0679\u0631 \u0628\u0646\u0627\u0626\u06cc\u06ba (<code>03-gke<\/code>)<\/h4>\n<p>\u06cc\u06c1 \u0645\u0631\u062d\u0644\u06c1 \u062f\u0631\u062c \u0630\u06cc\u0644 \u0645\u0639\u06cc\u0627\u0631\u06cc \u06a9\u0644\u0633\u0679\u0631 \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2: <code>clearpay<\/code> \u0639\u0644\u0627\u0642\u06d2 \u0645\u06cc\u06ba <code>us-east4-a<\/code>\u0646\u0627\u0645\u0632\u062f \u0646\u0648\u0688 \u067e\u0648\u0644\u0632 \u067e\u0631 \u0645\u0634\u062a\u0645\u0644 \u06c1\u06d2\u06d4 <code>primary<\/code> \u0627\u06cc\u06a9 \u0633\u06d2 \u062a\u06cc\u0646 \u062a\u06a9 <code>e2-medium<\/code> \u0645\u0634\u06cc\u0646 \u0645\u0634\u06cc\u0646\u0648\u06ba \u0645\u06cc\u06ba \u0635\u0631\u0641 \u067e\u0631\u0627\u0626\u06cc\u0648\u06cc\u0679 IPs \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba \u0627\u0648\u0631 Cloud NAT \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u062c\u0691 \u062c\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u06a9\u0646\u0679\u0631\u0648\u0644 \u06c1\u0648\u0627\u0626\u06cc \u062c\u06c1\u0627\u0632\u060c \u06a9\u0644\u0633\u0679\u0631\u0632 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06af\u0648\u06af\u0644 \u06a9\u0627 \u0646\u0638\u0645 \u06a9\u0631\u062f\u06c1 API \u0633\u0631\u0648\u0631\u060c \u06a9\u0627 \u0627\u06cc\u06a9 \u0639\u0648\u0627\u0645\u06cc \u0627\u062e\u062a\u062a\u0627\u0645\u06cc \u0646\u0642\u0637\u06c1 \u06c1\u06d2\u060c \u0644\u06c1\u0630\u0627 <code>kubectl<\/code> \u0622\u067e \u0627\u067e\u0646\u06d2 \u0644\u06cc\u067e \u0679\u0627\u067e \u0633\u06d2 \u062c\u0691 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>GKE \u067e\u06c1\u0644\u06d2 \u0688\u06cc\u0641\u0627\u0644\u0679 \u0646\u0648\u0688 \u067e\u0648\u0644 \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2\u060c \u067e\u06be\u0631 Terraform \u0627\u0633\u06d2 \u062d\u0630\u0641 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 <code>primary<\/code>\u0622\u067e \u06a9\u0646\u0679\u0631\u0648\u0644 \u0645\u06cc\u06ba \u06c1\u06cc\u06ba.<\/p>\n<pre><code class=\"language-bash\">cd infra\/gcp\/terraform\/03-gke\n<\/code><\/pre>\n<p>\u0686\u0644\u0627\u0626\u06cc\u06ba:<\/p>\n<pre><code class=\"language-bash\">terraform init\nterraform plan\nterraform apply\n<\/code><\/pre>\n<p>\u0645\u062a\u0648\u0642\u0639 \u0645\u0646\u0635\u0648\u0628\u06c1: \u06a9\u0644\u0633\u0679\u0631 \u0627\u0648\u0631 <code>primary<\/code> \u0646\u0648\u0688 \u067e\u0648\u0644\u06d4<\/p>\n<pre><code class=\"language-plaintext\">Plan: 2 to add, 0 to change, 0 to destroy.\n<\/code><\/pre>\n<p>\u0644\u0627\u06af\u0648 \u06c1\u0648\u062a\u0627 \u06c1\u06d2: <code>Still creating<\/code> 7-10 \u0645\u0646\u0679 \u062a\u06a9\u06d4 Ctrl+C \u0646\u06c1 \u062f\u0628\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-plaintext\">Apply complete! Resources: 2 added, 0 changed, 0 destroyed.\n\nOutputs:\n\ncluster_name = \"clearpay\"\nget_credentials_command = \"gcloud container clusters get-credentials clearpay --zone us-east4-a --project YOUR_PROJECT_ID\"\n<\/code><\/pre>\n<p><code>cluster_endpoint<\/code> \u067e\u0631\u0646\u0679\u0633 <code><sensitive\/><\/code>. \u0622\u067e \u06a9\u0648 \u0627\u0633 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u0634\u0627\u0631\u06c1 \u06a9\u0631\u06cc\u06ba <code>kubectl<\/code> \u0646\u0626\u06d2 \u06a9\u0644\u0633\u0679\u0631 \u0645\u06cc\u06ba:<\/p>\n<pre><code class=\"language-bash\">$(terraform output -raw get_credentials_command)\n<\/code><\/pre>\n<p>\u0627\u0686\u06be\u0627 \u0686\u0644 \u0631\u06c1\u0627 \u067e\u0631\u0646\u0679 <code>kubeconfig entry generated for clearpay<\/code>.<\/p>\n<p>\u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba:<\/p>\n<pre><code class=\"language-bash\">kubectl get nodes\n<\/code><\/pre>\n<pre><code class=\"language-plaintext\">NAME                                 STATUS   ROLES    AGE   VERSION\ngke-clearpay-primary-........        Ready    <none>   2m    v1.xx\n<\/none><\/code><\/pre>\n<p><code>Ready<\/code> \u0627\u0633 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u06a9\u06c1 \u0645\u0634\u06cc\u0646 \u0622\u0646 \u06c1\u0648 \u06af\u0626\u06cc \u06c1\u06d2 \u0627\u0648\u0631 \u06a9\u0644\u0633\u0679\u0631 \u0645\u06cc\u06ba \u0634\u0627\u0645\u0644 \u06c1\u0648 \u06af\u0626\u06cc \u06c1\u06d2\u06d4 ClearPay \u0627\u0628\u06be\u06cc \u062a\u06a9 \u062a\u0639\u0627\u0648\u0646 \u06cc\u0627\u0641\u062a\u06c1 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u06af\u0631 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0645\u06cc\u06ba \u0630\u06a9\u0631 \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4 <code>container.googleapis.com<\/code>\u0645\u0631\u062d\u0644\u06c1 1 \u067e\u0631 \u0648\u0627\u067e\u0633 \u062c\u0627\u0626\u06cc\u06ba\u06d4 \u0633\u0628 \u0646\u06cc\u0679 \u06cc\u0627 <code>pods<\/code> \u06cc\u0627 <code>services<\/code> \u0631\u06cc\u0646\u062c \u0628\u062a\u0627\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0645\u0631\u062d\u0644\u06c1 2 \u067e\u0631 \u0648\u0627\u067e\u0633 \u062c\u0627\u0626\u06cc\u06ba\u06d4 \u0627\u0633 \u0645\u06cc\u06ba \u062a\u0631\u0645\u06cc\u0645 \u0646\u06c1 \u06a9\u0631\u06cc\u06ba\u06d4 <code>03-gke<\/code> \u0627\u0633 \u063a\u0644\u0637\u06cc \u06a9\u0648 \u0686\u06be\u067e\u0627\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2\u06d4<\/p>\n<p>\u0627\u06af\u0631 <code>kubectl<\/code> \u06a9\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba <code>gke-gcloud-auth-plugin not found<\/code>\u06a9\u0644\u0633\u0679\u0631\u0632 \u0679\u06be\u06cc\u06a9 \u06c1\u06cc\u06ba\u06d4 \u0627\u0633\u06d2 \u062a\u0628\u0627\u06c1 \u0646\u06c1 \u06a9\u0631\u06cc\u06ba\u06d4 \u067e\u0644\u06af \u0627\u0646 \u0627\u0646\u0633\u0679\u0627\u0644 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u0627\u0633 \u0679\u0631\u0645\u06cc\u0646\u0644 \u06a9\u06d2 PATH \u0645\u06cc\u06ba \u062a\u0631\u0645\u06cc\u0645 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">gcloud components install gke-gcloud-auth-plugin\nexport PATH=\"$(gcloud info --format=\"value(installation.sdk_root)\")\/bin:$PATH\"\nkubectl get nodes\n<\/code><\/pre>\n<p>\u06a9\u0646\u0633\u0648\u0644 \u0645\u06cc\u06ba: \u0622\u067e \u06a9\u0648 \u0627\u067e\u0646\u0627 Kubernetes \u06a9\u0644\u0633\u0679\u0631 \u062f\u06cc\u06a9\u06be\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u06d4 <code>clearpay<\/code> \u0686\u0644 \u0631\u06c1\u0627 \u06c1\u06d2 VM \u0645\u062b\u0627\u0644 \u06c1\u06d2\u06d4 <code>gke-clearpay-primary-<\/code> \u0627\u06cc\u06a9 \u0645\u0634\u06cc\u0646 \u062c\u0633 \u06a9\u0627 \u0627\u0646\u062f\u0631\u0648\u0646\u06cc IP \u06c1\u06d2 \u0644\u06cc\u06a9\u0646 \u06a9\u0648\u0626\u06cc \u0628\u06cc\u0631\u0648\u0646\u06cc IP \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/10\/1792188592_800_\u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0648\u06ba-\u06a9\u0648-AWS-\u0633\u06d2-GKE-\u0645\u06cc\u06ba-\u06a9\u06cc\u0633\u06d2-\u0645\u0646\u062a\u0642\u0644-\u06a9\u06cc\u0627-\u062c\u0627\u0626\u06d2\u06d4.png\" alt=\"\u06a9\u0646\u0633\u0648\u0644 \u0645\u06cc\u06ba \u0628\u0646\u0627\u0626\u06cc \u06af\u0626\u06cc GKE \u06a9\u0648 \u0638\u0627\u06c1\u0631 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u06cc \u062a\u0635\u0648\u06cc\u0631\" style=\"display: block;\" width=\"600\" height=\"400\" loading=\"lazy\" title=\"\"><\/p>\n<p>\u0645\u0627\u06cc\u0627 \u067e\u06cc\u063a\u0627\u0645: \"\u06a9\u0644\u0633\u0679\u0631 \u062a\u06cc\u0627\u0631 \u06c1\u06d2\u06d4 \u0627\u06cc\u06a9 \u0646\u0648\u0688 \u062a\u06cc\u0627\u0631 \u06c1\u06d2\u06d4 \u0627\u0628\u06be\u06cc \u062a\u06a9 \u06a9\u0648\u0626\u06cc \u0646\u0648\u0688 \u0646\u06c1\u06cc\u06ba \u0686\u0644 \u0631\u06c1\u06d2 \u06c1\u06cc\u06ba\u06d4\"<\/p>\n<p>\u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0645\u06cc\u06ba 9 \u0645\u0646\u0679 \u0644\u06af\u06d2\u06d4 \u0622\u067e \u0646\u06d2 \u0627\u0646 \u0633\u0628 \u06a9\u0648 \u062f\u06cc\u06a9\u06be\u0627 \u06c1\u06d2\u06d4<\/p>\n<h4 id=\"heading-stage-4-create-the-image-registry-04-registry\">\u0645\u0631\u062d\u0644\u06c1 4: \u0627\u06cc\u06a9 \u062a\u0635\u0648\u06cc\u0631\u06cc \u0631\u062c\u0633\u0679\u0631\u06cc \u0628\u0646\u0627\u0626\u06cc\u06ba (<code>04-registry<\/code>)<\/h4>\n<p>\u06a9\u0646\u0679\u06cc\u0646\u0631 \u06a9\u06cc \u062a\u0635\u0648\u06cc\u0631 \u0622\u067e \u06a9\u06cc \u0627\u06cc\u067e \u06a9\u06cc \u067e\u06cc\u06a9 \u0634\u062f\u06c1 \u06a9\u0627\u067e\u06cc \u06c1\u06d2\u06d4 GKE \u0631\u062c\u0633\u0679\u0631\u06cc \u0633\u06d2 \u062a\u0635\u0627\u0648\u06cc\u0631 \u0688\u0627\u0624\u0646 \u0644\u0648\u0688 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u0633 \u0645\u0631\u062d\u0644\u06d2 \u0645\u06cc\u06ba\u060c \u0622\u067e \u0622\u0631\u0679\u0641\u06cc\u06a9\u0679 \u0631\u062c\u0633\u0679\u0631\u06cc \u0645\u06cc\u06ba \u062f\u0631\u062c \u0630\u06cc\u0644 \u0646\u062c\u06cc \u0688\u0648\u06a9\u0631 \u0631\u062c\u0633\u0679\u0631\u06cc \u0628\u0646\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <code>clearpay<\/code>\u0645\u06cc\u06ba <code>us-east4<\/code>. \u06cc\u06c1 \u0627\u0633 \u0648\u0642\u062a \u062a\u06a9 \u062e\u0627\u0644\u06cc \u0631\u06c1\u06d2 \u06af\u0627 \u062c\u0628 \u062a\u06a9 \u06a9\u06c1 \u0628\u0627\u0628 14 \u0645\u06cc\u06ba \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u06a9\u0648 \u0622\u06af\u06d2 \u0646\u06c1\u06cc\u06ba \u0628\u0691\u06be\u0627\u06cc\u0627 \u062c\u0627\u062a\u0627\u06d4<\/p>\n<pre><code class=\"language-bash\">cd infra\/gcp\/terraform\/04-registry\n<\/code><\/pre>\n<p>\u0686\u0644\u0627\u0626\u06cc\u06ba:<\/p>\n<pre><code class=\"language-bash\">terraform init\nterraform plan\nterraform apply\n<\/code><\/pre>\n<p>\u062f\u0648 \u0648\u0633\u0627\u0626\u0644 \u0627\u06cc\u06a9 \u0631\u062c\u0633\u0679\u0631\u06cc \u0627\u0648\u0631 \u0642\u0648\u0627\u0639\u062f \u06c1\u06cc\u06ba \u062c\u0648 \u06a9\u0644\u0633\u0679\u0631 \u0645\u06cc\u06ba \u0645\u0648\u062c\u0648\u062f \u0645\u0634\u06cc\u0646\u0648\u06ba \u06a9\u0648 \u0631\u062c\u0633\u0679\u0631\u06cc \u0633\u06d2 \u062a\u0635\u0627\u0648\u06cc\u0631 \u06a9\u06be\u06cc\u0646\u0686\u0646\u06d2 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u062f\u06cc\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-plaintext\">Plan: 2 to add, 0 to change, 0 to destroy.\n<\/code><\/pre>\n<pre><code class=\"language-plaintext\">Apply complete! Resources: 2 added, 0 changed, 0 destroyed.\n\nOutputs:\n\nrepository_url = \"us-east4-docker.pkg.dev\/YOUR_PROJECT_ID\/clearpay\"\n<\/code><\/pre>\n<p>\u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba:<\/p>\n<pre><code class=\"language-bash\">gcloud artifacts repositories describe clearpay --location=us-east4\n<\/code><\/pre>\n<p>\u0627\u0633\u06d2 \u062a\u0644\u0627\u0634 \u06a9\u0631\u06cc\u06ba\u06d4 <code>format: DOCKER<\/code>\u060c <code>name<\/code> \u06a9\u06d2 \u0633\u0627\u062a\u06be \u062e\u062a\u0645 <code>\/repositories\/clearpay<\/code>\u0627\u0648\u0631 <code>Repository Size: 0.000MB<\/code>. \u0622\u062c \u06cc\u06c1 \u0627\u06cc\u06a9 \u062e\u0627\u0644\u06cc \u0631\u062c\u0633\u0679\u0631\u06cc \u06c1\u06d2\u06d4 \u0622\u067e \u0628\u06be\u06cc \u062f\u06cc\u06a9\u06be \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba <code>SCANNING_DISABLED<\/code>. \u0627\u0633 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u0628\u0627\u0628 14 \u0645\u06cc\u06ba \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u062a\u0635\u0648\u06cc\u0631 \u06a9\u0648 \u0627\u0633\u06a9\u06cc\u0646 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 Trivy \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u0645\u0627\u06cc\u0627 \u067e\u06cc\u063a\u0627\u0645: \"\u062a\u0635\u0648\u06cc\u0631\u06cc \u0631\u062c\u0633\u0679\u0631\u06cc \u0645\u0648\u062c\u0648\u062f \u06c1\u06d2\u06d4 \u06cc\u06c1 \u062e\u0627\u0644\u06cc \u06c1\u06d2\u06d4\"<\/p>\n<h4 id=\"heading-stage-5-create-identities-with-no-key-files-05-identity\">\u0645\u0631\u062d\u0644\u06c1 5: \u06a9\u0644\u06cc\u062f\u06cc \u0641\u0627\u0626\u0644 \u06a9\u06d2 \u0628\u063a\u06cc\u0631 ID \u0628\u0646\u0627\u0626\u06cc\u06ba (<code>05-identity<\/code>)<\/h4>\n<p>\u0622\u067e \u06a9\u0648 \u0628\u0639\u062f \u0645\u06cc\u06ba \u062f\u0648 \u0686\u06cc\u0632\u0648\u06ba \u06a9\u06d2 \u0644\u06cc\u06d2 \u06af\u0648\u06af\u0644 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u062f\u0631\u06a9\u0627\u0631 \u06c1\u0648\u06af\u06cc\u06d4 GKE \u067e\u0631 ClearPay \u067e\u0648\u0688\u0632 \u0627\u0648\u0631 \u0627\u0645\u06cc\u062c\u0632 \u06a9\u0648 \u0622\u06af\u06d2 \u0628\u0691\u06be\u0627\u062a\u06d2 \u0627\u0648\u0631 \u062a\u0639\u06cc\u0646\u0627\u062a \u06a9\u0631\u062a\u06d2 \u0648\u0642\u062a GitHub \u0627\u06cc\u06a9\u0634\u0646\u0632\u06d4<\/p>\n<p>\u0631\u0648\u0627\u06cc\u062a\u06cc \u0637\u0631\u06cc\u0642\u06c1 \u0633\u0631\u0648\u0633 \u0627\u06a9\u0627\u0624\u0646\u0679 \u06a9\u06cc \u0641\u0627\u0626\u0644 \u06a9\u0648 \u0688\u0627\u0624\u0646 \u0644\u0648\u0688 \u06a9\u0631\u0646\u0627 \u06c1\u06d2\u06d4 \u06a9\u0644\u06cc\u062f\u06cc \u0641\u0627\u0626\u0644 \u0688\u0633\u06a9 \u06a9\u0627 \u067e\u0627\u0633 \u0648\u0631\u0688 \u06c1\u06d2\u06d4 \u0627\u06af\u0631 \u06cc\u06c1 \u0644\u06cc\u06a9 \u06c1\u0648 \u062c\u0627\u0626\u06d2 \u062a\u0648 \u06a9\u0648\u0626\u06cc \u0628\u06be\u06cc \u0627\u0633\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4 \u06c1\u0645 \u0627\u0633 \u0644\u06cc\u0628 \u0645\u06cc\u06ba \u06a9\u0628\u06be\u06cc \u0646\u06c1\u06cc\u06ba \u0628\u0646\u0627\u0626\u06cc\u06ba \u06af\u06d2\u06d4<\/p>\n<p>\u0627\u0633 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2\u060c \u06cc\u06c1 \u0642\u062f\u0645 \u062a\u06cc\u0646 Google \u0633\u0631\u0648\u0633 \u0627\u06a9\u0627\u0624\u0646\u0679\u0633 (\u0645\u0631\u0627\u0639\u0627\u062a \u06cc\u0627\u0641\u062a\u06c1 \u0634\u0646\u0627\u062e\u062a) \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0646\u0627\u0645\u0632\u062f \u06a9\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u0648\u06ba \u06a9\u0648 \u0645\u062e\u062a\u0635\u0631 \u0645\u062f\u062a \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0646\u06c1\u06cc\u06ba \u0627\u062f\u06be\u0627\u0631 \u0644\u06cc\u0646\u06d2 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<ul>\n<li>\n<p><code>clearpay-api-staging<\/code>\u0641\u0648\u0631\u0688 \u0633\u06d2 \u0627\u062f\u06be\u0627\u0631 \u0644\u06cc\u0627 <code>staging<\/code> \u0646\u0627\u0645 \u06a9\u06cc \u062c\u06af\u06c1<\/p>\n<\/li>\n<li>\n<p><code>clearpay-api-production<\/code>\u0641\u0648\u0631\u0688 \u0633\u06d2 \u0627\u062f\u06be\u0627\u0631 \u0644\u06cc\u0627 <code>production<\/code> \u0646\u0627\u0645 \u06a9\u06cc \u062c\u06af\u06c1<\/p>\n<\/li>\n<li>\n<p><code>clearpay-ci<\/code>GitHub \u0627\u06cc\u06a9\u0634\u0646\u0632 \u0633\u06d2 \u0648\u0631\u06a9 \u0644\u0648\u0688 \u0634\u0646\u0627\u062e\u062a\u06cc \u067e\u0648\u0644 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u06a9\u0631\u0627\u0626\u06d2 \u067e\u0631 \u0644\u06cc\u0627 \u06af\u06cc\u0627\u06d4 <code>clearpay-github-pool<\/code><\/p>\n<\/li>\n<\/ul>\n<p>\u0648\u0631\u06a9 \u0644\u0648\u0688 \u0622\u0626\u06cc\u0688\u06cc\u0646\u0679\u06cc \u0627\u06cc\u06a9 \u06af\u0648\u06af\u0644 \u06a9\u06cc \u062e\u0635\u0648\u0635\u06cc\u062a \u06c1\u06d2 \u062c\u0648 \u06a9\u0633\u06cc \u06a9\u0648\u0628\u0631\u0646\u06cc\u0679\u0633 \u0633\u0631\u0648\u0633 \u0627\u06a9\u0627\u0624\u0646\u0679 \u06cc\u0627 GitHub \u0631\u06cc\u067e\u0648\u0632\u0679\u0631\u06cc \u06a9\u0648 \u0628\u063a\u06cc\u0631 \u06a9\u0644\u06cc\u062f \u06a9\u06d2 \u06af\u0648\u06af\u0644 \u0633\u0631\u0648\u0633 \u0627\u06a9\u0627\u0624\u0646\u0679 \u0633\u06d2 \u062c\u0648\u0691\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u06c1\u0631 \u0633\u0631\u0648\u0633 \u0627\u06a9\u0627\u0624\u0646\u0679 \u06a9\u0648 \u0627\u06cc\u06a9 \u0628\u06cc\u062c \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0633\u0648\u0686\u06cc\u06ba\u06d4 \u0622\u062c \u06a9\u0686\u06be \u0628\u06be\u06cc \u0646\u06c1\u06cc\u06ba \u0644\u06af\u0627\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4 \u0628\u0639\u062f \u0645\u06cc\u06ba \u06af\u0648\u06af\u0644 \u0646\u0627\u0645\u06cc \u067e\u0648\u0688\u0632 \u06cc\u0627 \u0646\u0627\u0645\u06cc \u0630\u062e\u06cc\u0631\u0648\u06ba \u06a9\u0648 \u0645\u062e\u062a\u0635\u0631 \u0645\u062f\u062a \u06a9\u06d2 \u0644\u06cc\u06d2 \u067e\u06c1\u0646\u0646\u06d2 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u062f\u06cc\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u06a9\u0644\u06cc\u062f\u06cc \u0641\u0627\u0626\u0644 \u0645\u0648\u062c\u0648\u062f \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4<\/p>\n<p>\u0646\u0627\u0645 \u06a9\u06cc \u062c\u06af\u06c1 \u06a9\u0644\u0633\u0679\u0631 \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u0627\u06cc\u06a9 \u0627\u0644\u06af \u0639\u0644\u0627\u0642\u06c1 \u06c1\u06d2\u06d4 \u0627\u0633\u0679\u06cc\u062c\u0646\u06af \u0627\u0648\u0631 \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u0645\u0634\u06cc\u0646\u06cc\u06ba \u06a9\u0644\u0633\u0679\u0631 \u0645\u06cc\u06ba \u0634\u06cc\u0626\u0631 \u06a9\u0631\u062a\u06cc \u06c1\u06cc\u06ba\u060c \u0644\u06cc\u06a9\u0646 \u0622\u0626\u06cc \u0688\u06cc \u0646\u06c1\u06cc\u06ba\u060c \u0627\u0633 \u0644\u06cc\u06d2 \u0633\u0679\u06cc\u062c\u0646\u06af \u067e\u0648\u0688\u0632 \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u06a9\u06d2 \u0631\u0627\u0632 \u0646\u06c1\u06cc\u06ba \u067e\u0691\u06be \u0633\u06a9\u062a\u06d2\u06d4 \u062d\u0642\u06cc\u0642\u06cc \u062f\u0646\u06cc\u0627 \u06a9\u06cc \u06a9\u0645\u067e\u0646\u06cc\u0627\u06ba \u0639\u0627\u0645 \u0637\u0648\u0631 \u067e\u0631 \u0627\u0644\u06af \u0627\u0644\u06af \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679\u0633 \u067e\u0631 \u0627\u0644\u06af \u06a9\u0644\u0633\u0679\u0631 \u0686\u0644\u0627\u062a\u06cc \u06c1\u06cc\u06ba\u06d4 \u0627\u0633 \u0644\u06cc\u0628 \u0645\u06cc\u06ba\u060c \u06c1\u0645 \u0627\u062e\u0631\u0627\u062c\u0627\u062a \u06a9\u0648 \u06a9\u0645 \u0631\u06a9\u06be\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u06a9\u0644\u0633\u0679\u0631 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/10\/1792188593_468_\u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0648\u06ba-\u06a9\u0648-AWS-\u0633\u06d2-GKE-\u0645\u06cc\u06ba-\u06a9\u06cc\u0633\u06d2-\u0645\u0646\u062a\u0642\u0644-\u06a9\u06cc\u0627-\u062c\u0627\u0626\u06d2\u06d4.png\" alt=\"\u062e\u0627\u06a9\u06c1 \u062f\u06a9\u06be\u0627 \u0631\u06c1\u0627 \u06c1\u06d2 \u0627\u06cc\u06a9 GKE \u06a9\u0644\u0633\u0679\u0631 \u062c\u0633 \u06a9\u0627 \u0646\u0627\u0645 \u0627\u0644\u06af \u0633\u0679\u06cc\u062c\u0646\u06af \u0627\u0648\u0631 \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u0646\u0627\u0645 \u06a9\u06cc \u062c\u06af\u06c1\u0648\u06ba \u06a9\u06d2 \u0633\u0627\u062a\u06be \u06c1\u06d2\u06d4 \u0633\u0679\u06cc\u062c\u0646\u06af \u0627\u06cc\u06a9 \u0633\u0631\u0648\u0633 \u0627\u06a9\u0627\u0624\u0646\u0679 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u0627\u06cc\u06a9 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 GitHub \u0627\u06cc\u06a9\u0634\u0646\u0632 CI\/CD \u0622\u067e\u0631\u06cc\u0634\u0646\u0632 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0639\u0644\u06cc\u062d\u062f\u06c1 \u0633\u0631\u0648\u0633 \u0627\u06a9\u0627\u0624\u0646\u0679 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4\" style=\"display: block;\" width=\"600\" height=\"400\" loading=\"lazy\" title=\"\"><\/p>\n<pre><code class=\"language-bash\">cd infra\/gcp\/terraform\/05-identity\ncp terraform.tfvars.example terraform.tfvars\n<\/code><\/pre>\n<p>\u0641\u0627\u0626\u0644 \u0645\u06cc\u06ba \u0635\u0631\u0641 \u0627\u0642\u062f\u0627\u0631 \u06c1\u06cc\u06ba: <code>github_repo<\/code>. \u0627\u06af\u0631 \u0622\u067e \u06a9\u06d2 \u067e\u0627\u0633 \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u06c1\u06cc \u0627\u0633 \u0630\u062e\u06cc\u0631\u06c1 \u06a9\u06cc GitHub \u06a9\u0627\u067e\u06cc \u06c1\u06d2 \u062a\u0648 \u0627\u0633\u06d2 \u0688\u0627\u0624\u0646 \u0644\u0648\u0688 \u06a9\u0631\u06cc\u06ba\u06d4 <code>owner\/name<\/code> \u0627\u0628 \u0648\u06c1\u0627\u06ba\u060c \u06a9\u0686\u06be \u0628\u06be\u06cc \u0646\u06c1\u06cc\u06ba <code>.git<\/code> \u0622\u062e\u0631 \u0645\u06cc\u06ba\u06d4 \u0627\u06af\u0631 \u0646\u06c1\u06cc\u06ba \u062a\u0648 \u0686\u06be\u0648\u0691 \u062f\u0648\u06d4 <code>YOUR_GITHUB_USER\/YOUR_REPO<\/code>. \u0628\u0627\u0628 14 \u0648\u0636\u0627\u062d\u062a \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0627\u0633\u06d2 \u06a9\u0628 \u062a\u0631\u062a\u06cc\u0628 \u062f\u06cc\u0646\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u0646 \u0645\u0631\u0627\u062d\u0644 \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0644\u0627\u06af\u0648 \u06a9\u0631\u0646\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0686\u0644\u0627\u0626\u06cc\u06ba:<\/p>\n<pre><code class=\"language-bash\">terraform init\nterraform plan\nterraform apply\n<\/code><\/pre>\n<p>\u0645\u062a\u0648\u0642\u0639 \u0645\u0646\u0635\u0648\u0628\u06c1:<\/p>\n<pre><code class=\"language-plaintext\">Plan: 10 to add, 0 to change, 0 to destroy.\n<\/code><\/pre>\n<p>10 \u062a\u06cc\u0646 \u0633\u0631\u0648\u0633 \u0627\u06a9\u0627\u0624\u0646\u0679\u0633 \u06c1\u06cc\u06ba\u060c \u0627\u06cc\u06a9 GitHub \u067e\u0648\u0644 \u0627\u0648\u0631 \u0627\u0633 \u06a9\u0627 \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0646\u0646\u062f\u06c1\u060c \u0627\u0648\u0631 \u0627\u0646 \u06a9\u06d2 \u062f\u0631\u0645\u06cc\u0627\u0646 \u0627\u062c\u0627\u0632\u062a \u06a9\u06d2 \u0644\u0646\u06a9\u0633\u06d4<\/p>\n<pre><code class=\"language-plaintext\">Apply complete! Resources: 10 added, 0 changed, 0 destroyed.\n\nOutputs:\n\nci_service_account_email = \"clearpay-ci@YOUR_PROJECT_ID.iam.gserviceaccount.com\"\nservice_account_emails = {\n  \"production\" = \"clearpay-api-production@YOUR_PROJECT_ID.iam.gserviceaccount.com\"\n  \"staging\" = \"clearpay-api-staging@YOUR_PROJECT_ID.iam.gserviceaccount.com\"\n}\n<\/code><\/pre>\n<p>\u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba:<\/p>\n<pre><code class=\"language-bash\">gcloud iam service-accounts list --filter=\"email~clearpay-\"\n<\/code><\/pre>\n<p>\u062a\u06cc\u0646 \u0627\u06cc \u0645\u06cc\u0644\u0632 \u062a\u0644\u0627\u0634 \u06a9\u0631\u06cc\u06ba: <code>clearpay-api-staging<\/code>\u060c <code>clearpay-api-production<\/code>\u0627\u0648\u0631 <code>clearpay-ci<\/code>.<\/p>\n<p>\u06a9\u0646\u0633\u0648\u0644: \u0633\u0631\u0648\u0633 \u0627\u06a9\u0627\u0624\u0646\u0679\u0633 \u06a9\u06d2 \u062a\u062d\u062a \u062a\u06cc\u0646 \u062f\u0631\u062c \u06c1\u06cc\u06ba\u06d4 \u06a9\u0627\u0645 \u06a9\u06d2 \u0628\u0648\u062c\u06be \u06a9\u06cc \u0634\u0646\u0627\u062e\u062a \u0633\u06d2 \u0648\u0627\u0628\u0633\u062a\u06af\u06cc \u062f\u06a9\u06be\u0627\u0626\u06cc\u06ba\u06d4 <code>clearpay-github-pool<\/code> \u0633\u067e\u0644\u0627\u0626\u0631 \u06a9\u06d2 \u0633\u0627\u062a\u06be <code>clearpay-github-provider<\/code>.<\/p>\n<p><strong>\u0627\u06af\u0631 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648\u062c\u0627\u062a\u06cc \u06c1\u06d2\u06d4<\/strong> \u06a9\u06d2 \u0633\u0627\u062a\u06be <code>Error 409: Requested entity already exists<\/code> \u067e\u0648\u0644 \u0645\u06cc\u06ba\u060c \u0622\u067e \u0627\u0646 \u0645\u0631\u0627\u062d\u0644 \u06a9\u0648 \u067e\u06c1\u0644\u06d2 \u0686\u0644\u0627 \u0686\u06a9\u06d2 \u06c1\u06cc\u06ba\u06d4 \u06af\u0648\u06af\u0644 \u0688\u06cc\u0644\u06cc\u0679 \u06a9\u06cc\u06d2 \u06af\u0626\u06d2 \u067e\u0648\u0644\u0632 \u06a9\u0648 30 \u062f\u0646\u0648\u06ba \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u067e\u0646\u06d2 \u067e\u0627\u0633 \u0631\u06a9\u06be\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u0646 \u06a9\u06d2 \u0646\u0627\u0645 \u0628\u0644\u0627\u06a9 \u06a9\u0631 \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u0633 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0628\u062d\u0627\u0644 \u06a9\u0631\u06cc\u06ba: <code>gcloud iam workload-identity-pools undelete clearpay-github-pool --location=global<\/code>\u060c<br \/>\u067e\u06be\u0631 \u0628\u06be\u0627\u06af\u0648 <code>terraform import google_iam_workload_identity_pool.github projects\/YOUR_PROJECT_ID\/locations\/global\/workloadIdentityPools\/clearpay-github-pool<\/code> \u0627\u0648\u0631 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0627\u067e\u0644\u0627\u0626\u06cc \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p>\u0627\u06af\u0631 \u0622\u067e \u06a9\u0648 \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0646\u0646\u062f\u06c1 \u06a9\u06d2 \u0646\u0627\u0645 \u06a9\u06cc \u0648\u0636\u0627\u062d\u062a \u06a9\u0631\u0646\u06d2 \u0645\u06cc\u06ba \u0648\u06c1\u06cc \u063a\u0644\u0637\u06cc \u0645\u0644\u062a\u06cc \u06c1\u06d2\u060c \u062a\u0648 \u0627\u0633\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06a9\u06d2 \u0628\u062d\u0627\u0644 \u06a9\u0631\u06cc\u06ba: <code>gcloud iam workload-identity-pools providers undelete clearpay-github-provider --workload-identity-pool=clearpay-github-pool --location=global<\/code>\u060c<br \/>\u067e\u06be\u0631 \u0628\u06be\u0627\u06af\u0648 <code>terraform import google_iam_workload_identity_pool_provider.github projects\/YOUR_PROJECT_ID\/locations\/global\/workloadIdentityPools\/clearpay-github-pool\/providers\/clearpay-github-provider<\/code> \u0627\u0648\u0631 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0627\u067e\u0644\u0627\u0626\u06cc \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p>\u0645\u0627\u06cc\u0627 \u067e\u06cc\u063a\u0627\u0645: \"\u062a\u06cc\u0646 \u0633\u0631\u0648\u0633 \u0627\u06a9\u0627\u0624\u0646\u0679\u0633 \u06c1\u06cc\u06ba\u06d4 \u0627\u0628\u06be\u06cc \u062a\u06a9 \u06a9\u0648\u0626\u06cc \u0627\u06a9\u0627\u0624\u0646\u0679 \u0627\u0646\u06c1\u06cc\u06ba \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u0646\u06c1\u06cc\u06ba \u06a9\u0631 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4\"<\/p>\n<p>\u0645\u0627\u06cc\u0627: \"\u06a9\u06cc\u0627 \u0622\u067e \u06a9\u06d2 \u067e\u0627\u0633 \u06a9\u0644\u06cc\u062f\u06cc \u0641\u0627\u0626\u0644 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u061f\"<\/p>\n<p>\"\u0645\u0648\u062c\u0648\u062f \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4\"<\/p>\n<h4 id=\"heading-stage-6-create-the-secrets-06-secrets\">\u0645\u0631\u062d\u0644\u06c1 6: \u0631\u0627\u0632 \u0628\u0646\u0627\u0626\u06cc\u06ba (<code>06-secrets<\/code>)<\/h4>\n<p>GKE \u067e\u0631 ClearPay \u06a9\u0648 \u062f\u0648 \u0631\u0627\u0632 \u062f\u0631\u06a9\u0627\u0631 \u06c1\u06cc\u06ba: \u0627\u06cc\u06a9 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u06cc\u0648 \u0622\u0631 \u0627\u06cc\u0644 \u0627\u0648\u0631 \u0627\u06cc\u06a9 JWT \u0633\u0627\u0626\u0646\u0646\u06af \u06a9\u0644\u06cc\u062f\u06d4 \u062f\u0648\u0646\u0648\u06ba AWS \u067e\u0631 \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u0645\u0648\u062c\u0648\u062f \u06c1\u06cc\u06ba\u06d4 \u0627\u0633 \u0645\u0631\u062d\u0644\u06d2 \u0645\u06cc\u06ba\u060c \u0622\u067e \u0633\u06cc\u06a9\u0631\u0679 \u0645\u06cc\u0646\u06cc\u062c\u0631 \u0645\u06cc\u06ba \u0686\u0627\u0631 \u0631\u0627\u0632 \u0628\u0646\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0627\u06cc\u06a9 \u062c\u0648\u0691\u0627 \u0641\u06cc \u0646\u0627\u0645 \u06a9\u06cc \u062c\u06af\u06c1\u06d4<\/p>\n<ul>\n<li>\n<p><code>clearpay-staging-jwt-secret<\/code><\/p>\n<\/li>\n<li>\n<p><code>clearpay-staging-database-url<\/code><\/p>\n<\/li>\n<li>\n<p><code>clearpay-production-jwt-secret<\/code><\/p>\n<\/li>\n<li>\n<p><code>clearpay-production-database-url<\/code><\/p>\n<\/li>\n<\/ul>\n<p>\u0633\u0679\u06cc\u062c\u0646\u06af \u0633\u0631\u0648\u0633 \u0627\u06a9\u0627\u0624\u0646\u0679 \u0635\u0631\u0641 \u0633\u0679\u06cc\u062c\u0646\u06af \u062c\u0648\u0691\u0648\u06ba \u06a9\u0648 \u067e\u0691\u06be \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4 \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u0633\u0631\u0648\u0633 \u0627\u06a9\u0627\u0624\u0646\u0679 \u0635\u0631\u0641 \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u062c\u0648\u0691\u06d2 \u067e\u0691\u06be \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u06c1\u0631 \u0631\u0627\u0632 \u06a9\u0648 \u0627\u06cc\u06a9 \u0645\u0642\u0641\u0644 \u062f\u0631\u0627\u0632 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0633\u0648\u0686\u06cc\u06ba\u06d4 \u0644\u06cc\u0648\u0644 5 \u0645\u06cc\u06ba \u06c1\u0631 \u0628\u06cc\u062c \u0635\u0631\u0641 \u0627\u067e\u0646\u06d2 \u0645\u062a\u0639\u0644\u0642\u06c1 \u062f\u0631\u0627\u0632 \u06a9\u0648 \u06a9\u06be\u0648\u0644\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u0633 \u0645\u0634\u0642 \u06a9\u06d2 \u0644\u06cc\u06d2\u060c \u0622\u067e \u062f\u0648\u0646\u0648\u06ba \u062c\u0648\u0691\u0648\u06ba \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u062c\u06cc\u0633\u06cc \u0627\u0642\u062f\u0627\u0631 \u062f\u0631\u062c \u06a9\u0631\u06cc\u06ba \u06af\u06d2\u06d4 \u062f\u0648\u0646\u0648\u06ba \u0645\u0627\u062d\u0648\u0644 \u0627\u06cc\u06a9 \u06c1\u06cc RDS \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0627\u0648\u0631 \u0622\u067e \u06a9\u0627 AWS \u0644\u0627\u06af \u0627\u0646 \u062a\u0628 \u0628\u06be\u06cc \u06a9\u0627\u0645 \u06a9\u0631\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2 \u062c\u0628 \u0627\u06af\u0644\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a GKE \u0633\u06d2 \u0679\u06a9\u0631\u0627\u0626\u06d2\u06d4 \u062d\u0642\u06cc\u0642\u06cc \u06a9\u0645\u067e\u0646\u06cc\u0627\u06ba \u06c1\u0631 \u0645\u0627\u062d\u0648\u0644 \u0645\u06cc\u06ba \u0645\u0646\u0641\u0631\u062f \u0642\u062f\u0631 \u0644\u0627\u062a\u06cc \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u0679\u06cc\u0631\u0627\u0641\u0627\u0631\u0645 \u0631\u0627\u0632 \u067e\u06cc\u062f\u0627 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u067e\u0644\u06cc\u0633 \u06c1\u0648\u0644\u0688\u0631 \u0627\u0642\u062f\u0627\u0631 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 <code>REPLACE_ME<\/code>. Terraform \u0631\u0627\u0632 \u067e\u06cc\u062f\u0627 \u06a9\u0631 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u0627\u0633\u06d2 \u0627\u067e\u0646\u06cc \u0627\u0642\u062f\u0627\u0631 \u06a9\u0648 \u062a\u06cc\u0627\u0631 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u0644\u06c1\u0670\u0630\u0627 \u062d\u06a9\u0645 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u067e\u06c1\u0644\u06d2 \u0627\u0633 \u06a9\u0627 \u0627\u0637\u0644\u0627\u0642 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u067e\u06be\u0631 \u0627\u0635\u0644 \u0642\u06cc\u0645\u062a \u06a9\u0648 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u0646\u0642\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">cd infra\/gcp\/terraform\/06-secrets\n<\/code><\/pre>\n<p>\u0686\u0644\u0627\u0626\u06cc\u06ba:<\/p>\n<pre><code class=\"language-bash\">terraform init\nterraform plan\nterraform apply\n<\/code><\/pre>\n<p>Terraform 14 \u0648\u0633\u0627\u0626\u0644 \u062a\u062e\u0644\u06cc\u0642 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-plaintext\">Plan: 14 to add, 0 to change, 0 to destroy.\n<\/code><\/pre>\n<pre><code class=\"language-plaintext\">Apply complete! Resources: 14 added, 0 changed, 0 destroyed.\n<\/code><\/pre>\n<p>\u0627\u0628 AWS \u0648\u06cc\u0644\u06cc\u0648 \u06a9\u0627\u067e\u06cc \u06a9\u0631\u06cc\u06ba\u06d4 AWS \u0686\u0644\u0646\u0627 \u0636\u0631\u0648\u0631\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u0633\u06d2 \u0631\u06cc\u067e\u0648\u0632\u0679\u0631\u06cc \u0631\u0648\u0679 \u0633\u06d2 \u0686\u0644\u0627\u0626\u06cc\u06ba\u060c \u062c\u0648 \u0622\u067e \u06a9\u06d2 \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u06a9\u0627 \u0679\u0627\u067e \u0644\u06cc\u0648\u0644 \u0641\u0648\u0644\u0688\u0631 \u06c1\u06d2\u06d4 <code>06-secrets<\/code> \u0627\u0648\u0631 \u0633\u06d2 \u0646\u06c1\u06cc\u06ba\u06d4 <code>infra\/aws\/terraform<\/code>. \u0622\u067e \u0627\u0628\u06be\u06cc \u062a\u06a9 \u0627\u0646\u062f\u0631 \u06c1\u06cc\u06ba <code>06-secrets<\/code>\u067e\u06c1\u0644\u06d2 \u0686\u0627\u0631 \u0641\u0648\u0644\u0688\u0631\u0632 \u067e\u0631 \u062c\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">cd ..\/..\/..\/..\n<\/code><\/pre>\n<p><code>ls<\/code> \u0627\u0628 \u0645\u062c\u06be\u06d2 \u062f\u06a9\u06be\u0627\u0646\u0627 \u06c1\u06d2\u06d4 <code>api<\/code>\u060c <code>infra<\/code>\u060c <code>k8s<\/code>\u0627\u0648\u0631 <code>scripts<\/code>.<\/p>\n<p>\u0622\u067e \u06a9\u0648 AWS \u0641\u0648\u0644\u0688\u0631 \u0645\u06cc\u06ba \u062c\u0627\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 <code>terraform -chdir=infra\/aws\/terraform<\/code> \u062c\u06c1\u0627\u06ba \u0622\u067e \u06a9\u06be\u0691\u06d2 \u06c1\u06cc\u06ba \u0648\u06c1\u0627\u06ba \u0633\u06d2 AWS \u0648\u06cc\u0644\u06cc\u0648\u0632 \u067e\u0691\u06be\u06cc\u06ba\u06d4 \u06c1\u0631 \u06a9\u0645\u0627\u0646\u0688 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u0633\u06cc\u06a9\u0631\u0679 \u0645\u06cc\u0646\u06cc\u062c\u0631 \u06a9\u0648 \u0627\u06cc\u06a9 \u0642\u062f\u0631 \u0628\u06be\u06cc\u062c\u062a\u0627 \u06c1\u06d2\u060c \u0644\u06c1\u0630\u0627 \u0627\u0633\u06a9\u0631\u06cc\u0646 \u067e\u0631 \u06a9\u0686\u06be \u0628\u06be\u06cc \u067e\u0631\u0646\u0679 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u06cc\u0648 \u0622\u0631 \u0627\u06cc\u0644\u060c \u06c1\u0631 \u0627\u06cc\u06a9 \u0646\u0627\u0645 \u06a9\u06cc \u062c\u06af\u06c1 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u0628\u0627\u0631:<\/p>\n<pre><code class=\"language-bash\">terraform -chdir=infra\/aws\/terraform output -raw database_url \n  | gcloud secrets versions add clearpay-staging-database-url --data-file=-\nterraform -chdir=infra\/aws\/terraform output -raw database_url \n  | gcloud secrets versions add clearpay-production-database-url --data-file=-\n<\/code><\/pre>\n<p>\u0627\u0686\u06be\u0627 \u0686\u0644 \u0631\u06c1\u0627 \u067e\u0631\u0646\u0679 <code>Created version [2]<\/code> URL \u067e\u0631\u0646\u0679 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>JWT \u0631\u0627\u0632 \u0633\u06d2 \u067e\u0691\u06be\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2: <code>.env<\/code> AWS \u0633\u0631\u0648\u0631\u0632 \u067e\u0631 \u0641\u0627\u0626\u0644\u06cc\u06ba:<\/p>\n<pre><code class=\"language-bash\">INSTANCE_IP=$(terraform -chdir=infra\/aws\/terraform output -raw instance_public_ip)\nssh -i ~\/.ssh\/clearpay-deployer ubuntu@$INSTANCE_IP \n  \"sudo grep '^JWT_SECRET=' \/opt\/clearpay-api\/.env | cut -d= -f2-\" \n  | gcloud secrets versions add clearpay-staging-jwt-secret --data-file=-\nssh -i ~\/.ssh\/clearpay-deployer ubuntu@$INSTANCE_IP \n  \"sudo grep '^JWT_SECRET=' \/opt\/clearpay-api\/.env | cut -d= -f2-\" \n  | gcloud secrets versions add clearpay-production-jwt-secret --data-file=-\n<\/code><\/pre>\n<p>\u0628\u0639\u062f \u0645\u06cc\u06ba <code>terraform apply<\/code> \u0627\u0633\u06d2 \u0627\u0633 \u0641\u0648\u0644\u0688\u0631 \u0645\u06cc\u06ba \u0645\u062a \u0688\u0627\u0644\u06cc\u06ba\u06d4 <code>REPLACE_ME<\/code> \u067e\u06cc\u0686\u06be\u06d2 \u0645\u06cc\u06ba\u06d4 Terraform \u0641\u0627\u0626\u0644 \u06c1\u0645\u06cc\u06ba \u067e\u06c1\u0644\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u06d2 \u0628\u0639\u062f \u0627\u0642\u062f\u0627\u0631 \u06a9\u0648 \u0686\u06be\u0648\u0691\u0646\u06d2 \u06a9\u06cc \u06c1\u062f\u0627\u06cc\u062a \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba:<\/p>\n<pre><code class=\"language-bash\">gcloud secrets list --filter=\"name~clearpay-\"\n<\/code><\/pre>\n<p>\u067e\u06be\u0631 \u062b\u0627\u0628\u062a \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 \u06a9\u0648\u0626\u06cc \u0631\u0627\u0632 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2 \u062c\u0648 \u0627\u0628 \u0628\u06be\u06cc \u067e\u0644\u06cc\u0633 \u06c1\u0648\u0644\u0688\u0631 \u06a9\u0648 \u0628\u0631\u0642\u0631\u0627\u0631 \u0631\u06a9\u06be\u062a\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0644\u0648\u067e \u067e\u0631\u0646\u0679 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2. <code>ok<\/code> \u06cc\u0627 <code>STILL_PLACEHOLDER<\/code> \u0631\u0627\u0632 \u0646\u06c1\u06cc\u06ba \u0686\u06be\u0627\u067e\u062a\u0627\u06d4<\/p>\n<pre><code class=\"language-bash\">for s in clearpay-staging-database-url clearpay-staging-jwt-secret \n         clearpay-production-database-url clearpay-production-jwt-secret; do\n  val=$(gcloud secrets versions access latest --secret=\"$s\")\n  if [ \"$val\" = \"REPLACE_ME\" ]; then echo \"STILL_PLACEHOLDER $s\"; else echo \"ok $s\"; fi\ndone\n<\/code><\/pre>\n<p>4 \u062a\u0644\u0627\u0634 \u06a9\u0631\u06cc\u06ba\u06d4 <code>ok<\/code> \u0633\u0645\u0648\u0686 \u0627\u06af\u0631 \u06a9\u0648\u0626\u06cc \u06a9\u06c1\u06d2\u06d4 <code>STILL_PLACEHOLDER<\/code>\u06a9\u0627\u067e\u06cc \u06a9\u0645\u0627\u0646\u0688 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0686\u0644\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<p>\u06a9\u0646\u0633\u0648\u0644 \u0645\u06cc\u06ba: \u0633\u06cc\u06a9\u0631\u0679 \u0645\u06cc\u0646\u06cc\u062c\u0631 \u0686\u0627\u0631 \u0631\u0627\u0632\u0648\u06ba \u06a9\u06cc \u0641\u06c1\u0631\u0633\u062a \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u060c \u06c1\u0631 \u0627\u06cc\u06a9 \u062a\u0627\u0632\u06c1 \u062a\u0631\u06cc\u0646 \u0648\u0631\u0698\u0646 2 \u06a9\u06d2 \u0633\u0627\u062a\u06be\u06d4 \u0634\u06cc\u0626\u0631\u0646\u06af \u0627\u0633\u06a9\u0631\u06cc\u0646 \u067e\u0631 \"\u062e\u0641\u06cc\u06c1 \u0642\u062f\u0631 \u062f\u06a9\u06be\u0627\u0626\u06cc\u06ba\" \u067e\u0631 \u06a9\u0644\u06a9 \u0646\u06c1 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/10\/1792188593_933_\u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0648\u06ba-\u06a9\u0648-AWS-\u0633\u06d2-GKE-\u0645\u06cc\u06ba-\u06a9\u06cc\u0633\u06d2-\u0645\u0646\u062a\u0642\u0644-\u06a9\u06cc\u0627-\u062c\u0627\u0626\u06d2\u06d4.png\" alt=\"\u062a\u0635\u0648\u06cc\u0631 GCP \u06a9\u0646\u0633\u0648\u0644 \u0645\u06cc\u06ba \u0628\u0646\u0627\u0626\u06d2 \u06af\u0626\u06d2 \u0631\u0627\u0632\u0648\u06ba \u06a9\u06cc \u0641\u06c1\u0631\u0633\u062a \u062f\u06a9\u06be\u0627 \u0631\u06c1\u06cc \u06c1\u06d2\u06d4\" style=\"display: block;\" width=\"600\" height=\"400\" loading=\"lazy\" title=\"\"><\/p>\n<p>\u0645\u0627\u06cc\u0627 \u067e\u06cc\u063a\u0627\u0645: \"\u0686\u0627\u0631 \u0631\u0627\u0632\u0648\u06ba \u0645\u06cc\u06ba AWS \u0648\u06cc\u0644\u06cc\u0648 \u0634\u0627\u0645\u0644 \u06c1\u06d2\u06d4 \u0633\u06a9\u0631\u06cc\u0646 \u067e\u0631 \u06a9\u0686\u06be \u0628\u06be\u06cc \u067e\u0631\u0646\u0679 \u06cc\u0627 \u0686\u06cc\u0679 \u0645\u06cc\u06ba \u0686\u0633\u067e\u0627\u06ba \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u062a\u0627\u06d4\"<\/p>\n<h4 id=\"heading-stage-7-count-api-errors-07-observability\">\u0645\u0631\u062d\u0644\u06c1 7: API \u06a9\u06cc \u063a\u0644\u0637\u06cc\u0648\u06ba \u06a9\u0627 \u062d\u0633\u0627\u0628 \u0644\u06af\u0627\u0626\u06cc\u06ba (<code>07-observability<\/code>)<\/h4>\n<p>\u062c\u0628 \u0628\u06be\u06cc API \u0645\u06cc\u06ba \u06a9\u0686\u06be \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u060c \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u0645\u062e\u062a\u0635\u0631 \u0646\u0648\u0679 \u0644\u06a9\u06be\u062a\u0627 \u06c1\u0648\u06ba \u062c\u0633\u06d2 \u0644\u0627\u06af \u0644\u0627\u0626\u0646 \u06a9\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0627\u06cc\u06a9 \u0644\u0627\u06af \u0627\u0646 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 \u0627\u06cc\u06a9 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u06a9\u0631\u06cc\u06ba\u06d4 \u0627\u06af\u0631 \u06a9\u0686\u06be \u063a\u0644\u0637 \u06c1\u0648 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u060c \u062a\u0648 \u0646\u0648\u0679 \u06a9\u0686\u06be \u0627\u0633 \u0637\u0631\u062d \u06a9\u06c1\u06cc\u06ba \u06af\u06d2: <code>\"level\":\"error\"<\/code>. \u0646\u0627\u06a9\u0627\u0645 \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc\u0627\u06ba \u062f\u0631\u062c \u0630\u06cc\u0644 \u06c1\u06cc\u06ba:<\/p>\n<pre><code class=\"language-plaintext\">{\"level\":\"error\",\"message\":\"transaction_failed\",\"timestamp\":\"2026-09-29T10:15:02.000Z\",\"error\":\"...\"}\n<\/code><\/pre>\n<p>GKE \u067e\u0631\u060c \u06af\u0648\u06af\u0644 \u06a9\u0644\u0627\u0624\u0688 \u0627\u0646 \u062a\u0645\u0627\u0645 \u0646\u0648\u0679\u0648\u06ba \u06a9\u0648 \u062c\u0645\u0639 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0642\u062f\u0645 \u0627\u0633 \u06a9\u06d2 \u0627\u0648\u067e\u0631 \u062f\u0648 \u0686\u06cc\u0632\u06cc\u06ba \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<ol>\n<li>\n<p><strong>\u0628\u0627\u0631<\/strong>\u0646\u0627\u0645\u0632\u062f <code>clearpay-api-error-count<\/code>. \u06c1\u0631 \u0628\u0627\u0631 \u062c\u0628 \u063a\u0644\u0637\u06cc \u06a9\u0627 \u0646\u0648\u0679 \u0638\u0627\u06c1\u0631 \u06c1\u0648\u062a\u0627 \u06c1\u06d2 \u062a\u0648 \u0627\u0633 \u0645\u06cc\u06ba 1 \u06a9\u0627 \u0627\u0636\u0627\u0641\u06c1 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u0627\u0644\u0627\u0631\u0645<\/strong>\u0646\u0627\u0645\u0632\u062f <code>ClearPay API - elevated error rate<\/code>. \u062c\u0628 \u06a9\u0627\u0624\u0646\u0679\u0631 5 \u0645\u0646\u0679 \u06a9\u06d2 \u0627\u0646\u062f\u0631 5 \u0628\u0627\u0631 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u0628\u0691\u06be\u062a\u0627 \u06c1\u06d2 \u062a\u0648 \u06cc\u06c1 \u0622\u0646 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u06cc\u06a9 \u063a\u0644\u0637\u06cc \u0628\u062f \u0646\u0635\u06cc\u0628\u06cc \u06c1\u0648 \u0633\u06a9\u062a\u06cc \u06c1\u06d2\u06d4 5 \u0645\u06cc\u06ba \u0633\u06d2 5 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u06a9\u0686\u06be \u0679\u0648\u0679 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<\/ol>\n<p>\u0627\u0644\u0627\u0631\u0645 \u0645\u06cc\u06ba \u0627\u0628\u06be\u06cc \u062a\u06a9 \u06a9\u0648\u0626\u06cc \u0641\u0648\u0646 \u0646\u0645\u0628\u0631 \u06cc\u0627 \u0627\u06cc \u0645\u06cc\u0644 \u0645\u0646\u0633\u0644\u06a9 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u062c\u0628 \u0645\u06cc\u06ba \u0627\u0633\u06d2 \u0622\u0646 \u06a9\u0631\u062a\u0627 \u06c1\u0648\u06ba\u060c \u062a\u0648 \u06cc\u06c1 \u06af\u0648\u06af\u0644 \u06a9\u0644\u0627\u0624\u0688 \u06a9\u0646\u0633\u0648\u0644 \u0645\u06cc\u06ba \u0638\u0627\u06c1\u0631 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u06a9\u0633\u06cc \u06a9\u0648 \u06a9\u0648\u0626\u06cc \u067e\u06cc\u063a\u0627\u0645 \u0646\u06c1\u06cc\u06ba \u0645\u0644\u062a\u0627 \u06c1\u06d2\u06d4 \u0622\u067e \u0627\u067e\u0646\u0627 \u0627\u06cc \u0645\u06cc\u0644 \u0628\u0639\u062f \u0645\u06cc\u06ba \u06a9\u0646\u0633\u0648\u0644 \u0645\u06cc\u06ba \u0634\u0627\u0645\u0644 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u06a9\u0627\u0624\u0646\u0679\u0631 \u0641\u06cc \u0627\u0644\u062d\u0627\u0644 0 \u067e\u0631 \u06c1\u06d2 \u06a9\u06cc\u0648\u0646\u06a9\u06c1 ClearPay \u0627\u0628\u06be\u06cc \u062a\u06a9 GKE \u067e\u0631 \u0646\u06c1\u06cc\u06ba \u0686\u0644 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4 \u0622\u062c\u060c 0 \u062f\u0631\u0633\u062a \u0646\u062a\u06cc\u062c\u06c1 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-bash\">cd infra\/gcp\/terraform\/07-observability\n<\/code><\/pre>\n<p>\u0686\u0644\u0627\u0626\u06cc\u06ba:<\/p>\n<pre><code class=\"language-bash\">terraform init\nterraform plan\nterraform apply\n<\/code><\/pre>\n<p>\u0645\u062a\u0648\u0642\u0639 \u0645\u0646\u0635\u0648\u0628\u06c1:<\/p>\n<pre><code class=\"language-plaintext\">Plan: 2 to add, 0 to change, 0 to destroy.\n<\/code><\/pre>\n<pre><code class=\"language-plaintext\">Apply complete! Resources: 2 added, 0 changed, 0 destroyed.\n\nOutputs:\n\nlog_metric_name = \"clearpay-api-error-count\"\n<\/code><\/pre>\n<p>\u062c\u0628 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0631\u06a9 \u062c\u0627\u062a\u06cc \u06c1\u06d2\u06d4 <code>Error 404: Cannot find metric(s) that match type<\/code>\u06a9\u0686\u06be \u0646\u06c1\u06cc\u06ba \u0679\u0648\u0679\u0627 \u062a\u06be\u0627\u06d4 \u06af\u0648\u06af\u0644 \u06a9\u0648 \u062e\u0637\u0631\u06d2 \u06a9\u06cc \u06af\u06be\u0646\u0679\u06cc \u0628\u062c\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0646\u0626\u06d2 \u06a9\u0627\u0624\u0646\u0679\u0631 \u06a9\u0648 \u0631\u062c\u0633\u0679\u0631 \u06a9\u0631\u0646\u06d2 \u0645\u06cc\u06ba \u0686\u0646\u062f \u0645\u0646\u0679 \u0644\u06af\u06cc\u06ba \u06af\u06d2\u06d4 \u0627\u06cc\u06a9 \u06a9\u0627\u0624\u0646\u0679\u0631 \u0628\u0646\u0627\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4 5 \u0645\u0646\u0679 \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u0686\u0644\u0627\u0626\u06cc\u06ba\u06d4 <code>terraform apply<\/code> \u062f\u0648\u0628\u0627\u0631\u06c1 \u0627\u0633 \u0628\u0627\u0631 \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u0645\u0646\u0635\u0648\u0628\u06c1 \u062f\u06cc\u06a9\u06be \u0631\u06c1\u0627 \u06c1\u0648\u06ba\u06d4 <code>1 to add<\/code>\u0635\u0631\u0641 \u0627\u0644\u0627\u0631\u0645\u06d4<\/p>\n<p>\u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba:<\/p>\n<pre><code class=\"language-bash\">gcloud logging metrics describe clearpay-api-error-count\n<\/code><\/pre>\n<p>\u0627\u0633\u06d2 \u062a\u0644\u0627\u0634 \u06a9\u0631\u06cc\u06ba\u06d4 <code>name: clearpay-api-error-count<\/code> \u0627\u0648\u0631 \u0627\u06cc\u06a9 \u0641\u0644\u0679\u0631 \u062c\u0633 \u06a9\u0627 \u062a\u0630\u06a9\u0631\u06c1 \u06c1\u06d2: <code>clearpay-api<\/code> \u0627\u0648\u0631 <code>jsonPayload.level=\"error\"<\/code>.<\/p>\n<p>\u0645\u0627\u06cc\u0627 \u067e\u06cc\u063a\u0627\u0645: \"\u062e\u0631\u0627\u0628\u06cc \u06a9\u0627\u0624\u0646\u0679\u0631 \u0645\u0648\u062c\u0648\u062f \u06c1\u06d2 \u0627\u0648\u0631 0 \u062f\u06a9\u06be\u0627\u062a\u0627 \u06c1\u06d2\u06d4 GKE \u067e\u0631 \u0627\u0628\u06be\u06cc \u062a\u06a9 \u06a9\u0648\u0626\u06cc \u0627\u06cc\u067e \u0646\u06c1\u06cc\u06ba \u0686\u0644 \u0631\u06c1\u06cc \u06c1\u06d2\u06d4\"<\/p>\n<p>\u0645\u0627\u06cc\u0627: \"\u06cc\u06c1 \u0622\u062e\u0631\u06cc \u067e\u062a\u06c1 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0648\u06c1 \u067e\u062a\u06c1 \u06c1\u06d2 \u062c\u0633\u06d2 \u06c1\u0645\u0627\u0631\u06d2 \u0635\u0627\u0631\u0641\u06cc\u0646 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba \u06af\u06d2\u060c \u0644\u06c1\u0630\u0627 \u0627\u067e\u0646\u0627 \u0648\u0642\u062a \u0646\u06a9\u0627\u0644\u06cc\u06ba\u06d4\"<\/p>\n<h4 id=\"heading-stage-8-build-the-public-load-balancer-08-edge\">\u0645\u0631\u062d\u0644\u06c1 8. \u067e\u0628\u0644\u06a9 \u0644\u0648\u0688 \u0628\u06cc\u0644\u0646\u0633\u0631 \u0628\u0646\u0627\u0646\u0627 (<code>08-edge<\/code>)<\/h4>\n<p>\u06af\u06be\u0631 1 \u0633\u06d2 7 \u062a\u06a9 \u06a9\u06d2 \u0645\u0631\u0627\u062d\u0644 \u062a\u06a9 \u0628\u0646\u0627\u06cc\u0627 \u06af\u06cc\u0627 \u062a\u06be\u0627\u06d4 \u06cc\u06c1 \u0645\u0631\u062d\u0644\u06c1 \u0633\u0627\u0645\u0646\u06d2 \u06a9\u0627 \u062f\u0631\u0648\u0627\u0632\u06c1 \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2\u060c \u062c\u0648 \u0648\u06c1 \u067e\u062a\u06c1 \u06c1\u0648\u062a\u0627 \u06c1\u06d2 \u062c\u0648 \u06af\u0627\u06c1\u06a9 \u0628\u0642\u06cc\u06c1 \u0645\u0646\u062a\u0642\u0644\u06cc \u06a9\u06d2 \u0644\u06cc\u06d2 \u0631\u06a9\u06be\u062a\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u06af\u0648\u06af\u0644 \u06a9\u0627 \u06af\u0644\u0648\u0628\u0644 \u0644\u0648\u0688 \u0628\u06cc\u0644\u0646\u0633\u0631 \u06c1\u06d2 \u062c\u0633 \u06a9\u06d2 \u067e\u06cc\u0686\u06be\u06d2 \u0679\u0631\u06cc\u0641\u06a9 \u0688\u0627\u0626\u0644 \u06c1\u06d2\u06d4 \u0627\u06cc\u06a9 \u0641\u06cc\u0635\u062f AWS \u06a9\u0648 \u062f\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0628\u0627\u0642\u06cc GKE \u06a9\u0648 \u062f\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u0622\u062c\u060c 100% AWS \u06a9\u0648 \u0645\u0646\u062a\u0642\u0644 \u06a9\u0631 \u062f\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u06cc\u06c1 \u0642\u062f\u0645 \u067e\u06cc\u062f\u0627 \u06a9\u0631\u062a\u0627 \u06c1\u06d2:<\/p>\n<ul>\n<li>\n<p><code>clearpay-api-ip<\/code>\u0635\u0627\u0631\u0641\u06cc\u0646 \u06a9\u06d2 \u0632\u06cc\u0631 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u062a\u0645\u0627\u0645 \u0639\u0645\u0627\u0631\u062a\u0648\u06ba \u06a9\u0627 \u067e\u062a\u06c1<\/p>\n<\/li>\n<li>\n<p>HTTPS \u06a9\u06d2 \u06a9\u0627\u0645 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062e\u0648\u062f \u062f\u0633\u062a\u062e\u0637 \u0634\u062f\u06c1 \u0633\u0631\u0679\u06cc\u0641\u06a9\u06cc\u0679<\/p>\n<\/li>\n<li>\n<p>\u0679\u0631\u06cc\u0641\u06a9 \u06a9\u06cc \u062a\u0642\u0633\u06cc\u0645 AWS 100\u060c GKE 0 \u067e\u0631 \u0633\u06cc\u0679 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><code>clearpay-gke-edge-ip<\/code>\u06cc\u06c1 GKE \u06a9\u06cc \u0637\u0631\u0641 \u062f\u0648\u0633\u0631\u0627 IP \u06c1\u06d2\u06d4 \u0644\u0648\u0688 \u0628\u06cc\u0644\u0646\u0633\u0631\u0632 \u0627\u0633\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u06af\u0627\u06c1\u06a9 \u0627\u06cc\u0633\u0627 \u06a9\u0628\u06be\u06cc \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u06d2\u06d4<\/p>\n<\/li>\n<\/ul>\n<p>\u0646\u06cc\u0686\u06d2 \u062f\u06cc\u0627 \u06af\u06cc\u0627 \u062e\u0627\u06a9\u06c1 \u062f\u06a9\u06be\u0627\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u06a9\u0633 \u0637\u0631\u062d GCP \u0644\u0648\u0688 \u0628\u06cc\u0644\u0646\u0633 \u06a9\u0646\u0641\u06cc\u06af\u0631 \u0627\u06cc\u0628\u0644 \u0679\u0631\u06cc\u0641\u06a9 \u0631\u06cc\u0679\u0633 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 AWS \u0627\u0648\u0631 GKE \u06a9\u06d2 \u062f\u0631\u0645\u06cc\u0627\u0646 \u06a9\u0633\u0679\u0645\u0631 \u0679\u0631\u06cc\u0641\u06a9 \u06a9\u0648 \u0688\u0627\u0626\u0631\u06cc\u06a9\u0679 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0635\u0627\u0631\u0641\u06cc\u0646 \u0627\u06cc\u06a9 \u0639\u0648\u0627\u0645\u06cc IP \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u062c\u0691\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 AWS \u06a9\u0648 \u0644\u0686\u06a9\u062f\u0627\u0631 IPs \u067e\u0631 \u0679\u0631\u06cc\u0641\u06a9 \u0645\u0648\u0635\u0648\u0644 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u060c \u062c\u0628\u06a9\u06c1 GKE \u06a9\u0648 \u0639\u0644\u06cc\u062d\u062f\u06c1 \u06a9\u0646\u0627\u0631\u06d2 \u0648\u0627\u0644\u06d2 IPs \u067e\u0631 \u0679\u0631\u06cc\u0641\u06a9 \u0645\u0648\u0635\u0648\u0644 \u06c1\u0648\u062a\u0627 \u06c1\u06d2 \u062c\u0646 \u062a\u06a9 \u0635\u0627\u0631\u0641\u06cc\u0646 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u0631\u0633\u0627\u0626\u06cc \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u06d2\u06d4 \u062f\u0648\u0646\u0648\u06ba \u0645\u0627\u062d\u0648\u0644 AWS \u067e\u0631 \u0627\u06cc\u06a9 \u06c1\u06cc PostgreSQL \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u0633\u06d2 \u062c\u0691\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0627\u0633 \u0645\u0631\u062d\u0644\u06d2 \u067e\u0631\u060c \u0622\u067e \u06a9\u0627 GKE \u06a9\u0644\u0633\u0679\u0631 \u062e\u0627\u0644\u06cc \u06c1\u06d2\u06d4<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/10\/1792188593_73_\u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0648\u06ba-\u06a9\u0648-AWS-\u0633\u06d2-GKE-\u0645\u06cc\u06ba-\u06a9\u06cc\u0633\u06d2-\u0645\u0646\u062a\u0642\u0644-\u06a9\u06cc\u0627-\u062c\u0627\u0626\u06d2\u06d4.png\" alt=\"\u0622\u0631\u06a9\u06cc\u0679\u06cc\u06a9\u0686\u0631 \u0688\u0627\u06cc\u0627\u06af\u0631\u0627\u0645 \u0627\u06cc\u06a9 \u06af\u0627\u06c1\u06a9 \u06a9\u0648 \u062f\u06a9\u06be\u0627 \u0631\u06c1\u0627 \u06c1\u06d2 \u062c\u0648 \u0627\u06cc\u06a9 \u0648\u0627\u062d\u062f \u0639\u0648\u0627\u0645\u06cc IP \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 GCP \u0644\u0648\u0688 \u0628\u06cc\u0644\u0646\u0633\u0631 \u0633\u06d2 \u0645\u0646\u0633\u0644\u06a9 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4 \u0644\u0648\u0688 \u0628\u06cc\u0644\u0646\u0633\u0631 \u0627\u0644\u06af \u0627\u0644\u06af GCP \u06a9\u0646\u0627\u0631\u06d2 IPs \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0645\u0646\u0633\u0644\u06a9 \u0644\u0686\u06a9\u062f\u0627\u0631 IPs \u0627\u0648\u0631 GKE \u06a9\u0644\u0633\u0679\u0631\u0632 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0645\u0646\u0633\u0644\u06a9 AWS EC2 \u0633\u0631\u0648\u0631\u0632 \u06a9\u06d2 \u062f\u0631\u0645\u06cc\u0627\u0646 \u0679\u0631\u06cc\u0641\u06a9 \u06a9\u0648 \u062a\u0642\u0633\u06cc\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u062f\u0648\u0646\u0648\u06ba \u0645\u0627\u062d\u0648\u0644 AWS \u067e\u0631 \u0627\u06cc\u06a9 \u06c1\u06cc PostgreSQL \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u0633\u06d2 \u062c\u0691\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0627\u0633 \u0645\u0631\u062d\u0644\u06d2 \u067e\u0631\u060c \u0622\u067e \u06a9\u0627 GKE \u06a9\u0644\u0633\u0679\u0631 \u062e\u0627\u0644\u06cc \u06c1\u06d2\u06d4\" style=\"display: block;\" width=\"600\" height=\"400\" loading=\"lazy\" title=\"\"><\/p>\n<pre><code class=\"language-bash\">cd infra\/gcp\/terraform\/08-edge\ncp terraform.tfvars.example terraform.tfvars\n<\/code><\/pre>\n<p>\u0627\u06af\u0631 \u0641\u0627\u0626\u0644 \u0645\u0648\u062c\u0648\u062f \u06c1\u06d2 \u062a\u0648 \u06a9\u0627\u067e\u06cc \u0686\u06be\u0648\u0691 \u062f\u06cc \u062c\u0627\u062a\u06cc \u06c1\u06d2\u06d4 \u0628\u0631\u0627\u06c1 \u06a9\u0631\u0645 \u0627\u067e\u0646\u0627 \u0644\u0686\u06a9\u062f\u0627\u0631 IP \u062f\u0631\u062c \u06a9\u0631\u06cc\u06ba\u06d4 <code>aws_backend_ip<\/code>. \u0627\u0633\u06d2 \u0627\u067e\u0646\u06d2 \u0630\u062e\u06cc\u0631\u06d2 \u06a9\u06cc \u062c\u0691 \u0645\u06cc\u06ba \u062f\u0648\u0633\u0631\u06d2 \u0679\u0631\u0645\u06cc\u0646\u0644 \u0633\u06d2 \u062d\u0627\u0635\u0644 \u06a9\u0631\u06cc\u06ba:<\/p>\n<pre><code class=\"language-bash\">terraform -chdir=infra\/aws\/terraform output -raw instance_public_ip\n<\/code><\/pre>\n<p>\u0648\u0632\u0646 \u06a9\u0648 100 \u0627\u0648\u0631 0 \u067e\u0631 \u0686\u06be\u0648\u0691 \u062f\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-plaintext\">aws_traffic_weight = 100\ngke_traffic_weight = 0\n<\/code><\/pre>\n<p>\u0686\u0644\u0627\u0626\u06cc\u06ba:<\/p>\n<pre><code class=\"language-bash\">terraform init\nterraform plan\nterraform apply\n<\/code><\/pre>\n<p>\u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0645\u06cc\u06ba \u062a\u0642\u0631\u06cc\u0628\u0627\u064b 2 \u0645\u0646\u0679 \u0644\u06af\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-plaintext\">Plan: 17 to add, 0 to change, 0 to destroy.\n<\/code><\/pre>\n<pre><code class=\"language-plaintext\">Apply complete! Resources: 17 added, 0 changed, 0 destroyed.\n\nOutputs:\n\ncurrent_traffic_split = \"AWS: 100% \/ GKE: 0%\"\nstatic_ip_address = \"x.x.x.x\"\ngke_edge_ip_address = \"y.y.y.y\"\nhosts_file_line = \"x.x.x.x api.clearpay.test\"\n<\/code><\/pre>\n<p>\u062f\u0648\u0646\u0648\u06ba IPs \u0644\u06a9\u06be\u06cc\u06ba\u06d4 <code>static_ip_address<\/code> \u06af\u0627\u06c1\u06a9 \u06a9\u0627 \u067e\u062a\u06c1\u06d4 <code>gke_edge_ip_address<\/code> \u06cc\u06c1 \u0633\u0686 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4<\/p>\n<h4 id=\"heading-give-the-address-a-name\">\u0627\u067e\u0646\u0627 \u067e\u062a\u06c1 \u0627\u06cc\u06a9 \u0646\u0627\u0645 \u062f\u06cc\u06ba\u06d4<\/h4>\n<p>\u0645\u06cc\u06ba \u0688\u0648\u0645\u06cc\u0646 \u06a9\u0627 \u0645\u0627\u0644\u06a9 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u06ba\u060c \u0627\u0633 \u0644\u06cc\u06d2 \u0645\u06cc\u06ba \u0646\u0627\u0645 \u06a9\u06cc \u0637\u0631\u0641 \u0627\u0634\u0627\u0631\u06c1 \u06a9\u0631\u062a\u0627 \u06c1\u0648\u06ba\u06d4 <code>api.clearpay.test<\/code> \u0622\u067e \u06a9\u06d2 \u06a9\u0645\u067e\u06cc\u0648\u0679\u0631 \u06a9\u06cc \u0645\u06cc\u0632\u0628\u0627\u0646 \u0641\u0627\u0626\u0644 \u0645\u06cc\u06ba \u0644\u0648\u0688 \u0628\u06cc\u0644\u0646\u0633\u0631 \u0633\u06d2\u06d4<\/p>\n<p>\u0622\u067e \u067e\u06c1\u0644\u06d2 \u06c1\u06cc \u0634\u0631\u06a9\u062a \u06a9\u0631 \u0631\u06c1\u06d2 \u06c1\u06cc\u06ba\u06d4 <code>08-edge<\/code> \u06cc\u06c1 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u06d2 \u0628\u0639\u062f \u06c1\u06d2\u060c \u0644\u06c1\u0630\u0627 \u0627\u0633\u06d2 \u0686\u06be\u0648\u0691 \u062f\u06cc\u06ba\u06d4 <code>cd<\/code> \u0646\u06cc\u0686\u06d2 \u0644\u0627\u0626\u0646. \u0627\u0633\u06d2 \u0635\u0631\u0641 \u0627\u0633 \u0635\u0648\u0631\u062a \u0645\u06cc\u06ba \u0686\u0644\u0627\u0626\u06cc\u06ba \u062c\u0628 \u0622\u067e \u06a9\u06d2 \u067e\u0627\u0633 \u0631\u06cc\u067e\u0648\u0632\u0679\u0631\u06cc \u0631\u0648\u0679 \u0645\u06cc\u06ba \u0646\u06cc\u0627 \u0679\u0631\u0645\u06cc\u0646\u0644 \u06a9\u06be\u0644\u0627 \u06c1\u0648\u06d4<\/p>\n<pre><code class=\"language-bash\">cd infra\/gcp\/terraform\/08-edge\nLINE=$(terraform output -raw hosts_file_line)\necho \"LINE is: [$LINE]\"\n<\/code><\/pre>\n<p>\u0627\u06af\u0631 <code>LINE<\/code> \u06cc\u06c1 \u062e\u0627\u0644\u06cc \u06c1\u06d2\u06d4 \u0627\u0633\u06d2 \u0631\u0648\u06a9\u0648\u06d4 \u0627\u06af\u0631 \u06cc\u06c1 \u0627\u0633 \u0637\u0631\u062d \u0644\u06af\u062a\u0627 \u06c1\u06d2: <code>x.x.x.x api.clearpay.test<\/code>\u0627\u0633\u06d2 \u0627\u067e\u0646\u06cc \u0645\u06cc\u0632\u0628\u0627\u0646 \u0641\u0627\u0626\u0644 \u0645\u06cc\u06ba \u0634\u0627\u0645\u0644 \u06a9\u0631\u06cc\u06ba:<\/p>\n<p>\u0645\u06cc\u06a9 \u06a9\u06d2 \u0644\u06cc\u06d2:<\/p>\n<pre><code class=\"language-bash\">echo \"$LINE\" | sudo tee -a \/etc\/hosts\nsudo dscacheutil -flushcache\nsudo killall -HUP mDNSResponder\n<\/code><\/pre>\n<p>\u0644\u06cc\u0646\u06a9\u0633 \u067e\u0631\u060c \u0635\u0631\u0641 \u067e\u06c1\u0644\u06cc \u0644\u0627\u0626\u0646 \u0686\u0644\u0627\u0626\u06cc\u06ba\u06d4 \u0648\u0646\u0688\u0648\u0632 \u0645\u06cc\u06ba\u060c \u0627\u06cc\u06a9 \u06c1\u06cc IP \u0627\u0648\u0631 \u0634\u0627\u0645\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 <code>api.clearpay.test<\/code> \u06a9\u0648 <code>C:WindowsSystem32driversetchosts<\/code> \u0627\u06cc\u0688\u0645\u0646\u0633\u0679\u0631\u06cc\u0679\u0631 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u06a9\u06be\u0648\u0644\u06d2 \u06af\u0626\u06d2 \u0627\u06cc\u0688\u06cc\u0679\u0631 \u0645\u06cc\u06ba\u06d4<\/p>\n<p>\u0645\u062a \u0628\u06be\u0627\u06af\u0648 <code>sudo cd<\/code>. <code>cd<\/code> \u0686\u0648\u0646\u06a9\u06c1 \u06cc\u06c1 \u0634\u06cc\u0644 \u0645\u06cc\u06ba \u0628\u0646\u0627 \u06c1\u0648\u0627 \u06c1\u06d2\u06d4 <code>sudo<\/code> \u0641\u0648\u0644\u0688\u0631 \u06a9\u0648 \u062a\u0628\u062f\u06cc\u0644 \u0646\u06c1\u06cc\u06ba \u06a9\u06cc\u0627 \u062c\u0627 \u0633\u06a9\u062a\u0627\u06d4<\/p>\n<p>\u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 \u0622\u06cc\u0627 \u0648\u06c1 \u0644\u0627\u0626\u0646 \u0645\u0648\u062c\u0648\u062f \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-bash\">grep api.clearpay.test \/etc\/hosts\n<\/code><\/pre>\n<p>\u0646\u0627\u0645 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u062e\u062a\u0645 \u06c1\u0648\u062a\u0627 \u06c1\u06d2: <code>.test<\/code> \u0645\u0642\u0635\u062f \u067e\u0631 <code>.test<\/code> \u062c\u0627\u0646\u0686 \u06a9\u06d2 \u0645\u0642\u0627\u0635\u062f \u06a9\u06d2 \u0644\u06cc\u06d2 \u0645\u062d\u0641\u0648\u0638\u060c \u0622\u067e \u06a9\u0631\u0648\u0645 \u0645\u06cc\u06ba \u062e\u0648\u062f \u062f\u0633\u062a\u062e\u0637 \u0634\u062f\u06c1 \u0633\u0631\u0679\u06cc\u0641\u06a9\u06cc\u0679 \u06a9\u06cc \u0648\u0627\u0631\u0646\u0646\u06af \u0627\u0633 \u067e\u0631 \u06a9\u0644\u06a9 \u06a9\u0631 \u06a9\u06d2 \u062f\u06cc\u06a9\u06be \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u062a\u0628\u062f\u06cc\u0644 \u0646\u06c1 \u06a9\u0631\u0648 <code>lab_hostname<\/code> \u06a9\u0648 <code>.dev<\/code> \u0646\u0627\u0645 \u06a9\u0631\u0648\u0645 \u06c1\u0631 \u0686\u06cc\u0632 \u067e\u0631 \u0633\u062e\u062a HTTPS \u0646\u0627\u0641\u0630 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 <code>.dev<\/code> \u062c\u0627\u0631\u06cc \u0631\u06a9\u06be\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0628\u0679\u0646 \u06a9\u0648 \u0686\u06be\u067e\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<h4 id=\"heading-check\">\u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba<\/h4>\n<pre><code class=\"language-bash\">curl -k https:\/\/api.clearpay.test\/health\n<\/code><\/pre>\n<p>\u0645\u062a\u0648\u0642\u0639 \u067e\u06cc\u062f\u0627\u0648\u0627\u0631:<\/p>\n<pre><code class=\"language-plaintext\">{\"status\":\"ok\",\"served_by\":{\"platform\":\"aws\",\"version\":\"1.0.0\",\"instance\":\"ip-172-31-64-73\",\"commit\":\"504e0cd\",\"rollback_active\":false}}\n<\/code><\/pre>\n<p>\u0622\u067e \u06a9\u0627 <code>instance<\/code> \u0627\u0648\u0631 <code>commit<\/code> \u0622\u067e \u06a9\u06cc \u0642\u062f\u0631\u06cc\u06ba \u0628\u062f\u0644 \u062c\u0627\u0626\u06cc\u06ba \u06af\u06cc\u06d4 <code>\"platform\":\"aws\"<\/code> \u06cc\u06c1 \u0627\u06cc\u06a9 \u0686\u06cc\u06a9 \u06c1\u06d2\u06d4 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0646\u0626\u06d2 \u06af\u0648\u06af\u0644 \u0627\u06cc\u0688\u0631\u06cc\u0633 \u067e\u0631 \u06af\u0626\u06cc\u060c \u0627\u0648\u0631 \u0686\u0648\u0646\u06a9\u06c1 \u0648\u0632\u0646 100 \u0627\u0648\u0631 0 \u062a\u06be\u06d2\u060c \u0644\u0648\u0688 \u0628\u06cc\u0644\u0646\u0633\u0631 \u0646\u06d2 \u0627\u0633\u06d2 AWS \u06a9\u0648 \u0628\u06be\u06cc\u062c \u062f\u06cc\u0627\u06d4<\/p>\n<p>\u0622\u067e \u06a9\u06d2 \u0646\u0626\u06d2 Google \u0644\u0648\u0688 \u0628\u06cc\u0644\u0646\u0633 \u06a9\u0648 \u0634\u0631\u0648\u0639 \u06c1\u0648\u0646\u06d2 \u0645\u06cc\u06ba \u0686\u0646\u062f \u0645\u0646\u0679 \u0644\u06af \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0627\u06af\u0631 \u0622\u067e \u06a9\u0648 \u0627\u0628\u06be\u06cc \u062a\u06a9 JSON \u0646\u0638\u0631 \u0646\u06c1\u06cc\u06ba \u0622\u062a\u0627 \u06c1\u06d2\u060c \u062a\u0648 \u0622\u067e \u06a9\u0648 \u067e\u06c1\u0644\u06d2 \u062f\u0631\u062c \u0630\u06cc\u0644 \u0645\u06cc\u06ba \u0633\u06d2 \u06a9\u0648\u0626\u06cc \u0627\u06cc\u06a9 \u0646\u0638\u0631 \u0622 \u0633\u06a9\u062a\u0627 \u06c1\u06d2:<\/p>\n<ul>\n<li>\n<p><code>Connection reset<\/code>. \u0644\u0648\u0688 \u0628\u06cc\u0644\u0646\u0633 \u0627\u0628 \u0628\u06be\u06cc \u0634\u0631\u0648\u0639 \u06c1\u0648 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4 \u0627\u06cc\u06a9 \u0644\u0645\u062d\u06c1 \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u0648\u06c1\u06cc \u06a9\u0631\u0644 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0686\u0644\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0639\u0646\u0648\u0627\u0646 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06af\u0648\u06af\u0644 \u0635\u0641\u062d\u06c1 <code>404 Not Found<\/code>. \u0644\u0648\u0688 \u0628\u06cc\u0644\u0646\u0633 \u0646\u06d2 \u062c\u0648\u0627\u0628 \u062f\u06cc\u0627\u060c \u0644\u06cc\u06a9\u0646 \u06cc\u06c1 \u0627\u0628\u06be\u06cc \u062a\u06a9 AWS \u062a\u06a9 \u0646\u06c1\u06cc\u06ba \u067e\u06c1\u0646\u0686\u0627 \u06c1\u06d2\u06d4 \u062a\u0635\u062f\u06cc\u0642 \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 AWS \u062e\u0648\u062f \u062a\u06cc\u0627\u0631 \u0627\u0648\u0631 \u0686\u0644 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"language-bash\">curl -k https:\/\/YOUR_ELASTIC_IP\/health\n<\/code><\/pre>\n<p>\u0627\u06af\u0631 AWS \u062c\u0648\u0627\u0628 \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u060c \u062a\u0648 \u0686\u0646\u062f \u0645\u0646\u0679 \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u062f\u0648\u0628\u0627\u0631\u06c1 \u06a9\u0648\u0634\u0634 \u06a9\u0631\u06cc\u06ba\u06d4 <code>api.clearpay.test<\/code> \u062f\u0648\u0628\u0627\u0631\u06c1 \u0645\u0631\u062d\u0644\u06c1 8 \u0645\u06a9\u0645\u0644 \u06c1\u0648 \u062c\u0627\u0626\u06d2 \u06af\u0627\u060c \u0627\u06af\u0631\u0686\u06c1 \u0627\u0628 \u0628\u06be\u06cc \u0622\u06c1\u0633\u062a\u06c1 \u0622\u06c1\u0633\u062a\u06c1. \u0628\u0627\u0628 20 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0627\u0633 \u06a9\u06cc \u062a\u0635\u062f\u06cc\u0642 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>JSON \u0638\u0627\u06c1\u0631 \u06c1\u0648\u0646\u06d2 \u067e\u0631\u060c \u0627\u067e\u0646\u06d2 \u0628\u0631\u0627\u0624\u0632\u0631 \u0645\u06cc\u06ba https:\/\/api.clearpay.test \u06a9\u06be\u0648\u0644\u06cc\u06ba\u06d4 \u06a9\u0631\u0648\u0645 \u0645\u06cc\u06ba\u060c \u0627\u06cc\u0688\u0648\u0627\u0646\u0633\u0688 \u067e\u0631 \u06a9\u0644\u06a9 \u06a9\u0631\u06cc\u06ba\u060c \u067e\u06be\u0631 \"api.clearpay.test \u067e\u0631 \u0622\u06af\u06d2 \u0628\u0691\u06be\u06cc\u06ba (\u0645\u062d\u0641\u0648\u0638 \u0646\u06c1\u06cc\u06ba)\" \u067e\u0631 \u06a9\u0644\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4 \u0622\u067e \u0627\u067e\u0646\u06d2 \u0646\u0626\u06d2 \u067e\u062a\u06d2 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 AWS \u06a9\u06cc \u0637\u0631\u0641 \u0633\u06d2 \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u062f\u06c1 ClearPay \u0644\u0627\u06af \u0627\u0646 \u062f\u06cc\u06a9\u06be\u06cc\u06ba \u06af\u06d2\u06d4 \u0627\u06af\u0631 \u0622\u067e \u06a9\u0627 \u0628\u0631\u0627\u0624\u0632\u0631 \u06a9\u06c1\u062a\u0627 \u06c1\u06d2: <code>NXDOMAIN<\/code>\u0645\u06cc\u0632\u0628\u0627\u0646 \u0644\u0627\u0626\u0646 \u063a\u0627\u0626\u0628 \u06c1\u06d2 \u06cc\u0627 \u06a9\u06cc\u0634\u06d2 \u06a9\u0648 \u0641\u0644\u0634 \u0646\u06c1\u06cc\u06ba \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4<\/p>\n<p><strong>\u06a9\u0646\u0633\u0648\u0644 \u0633\u06d2:<\/strong> \u0622\u067e \u06a9\u0627 IP \u067e\u062a\u06c1 \u062f\u06a9\u06be\u0627\u06cc\u0627 \u062c\u0627\u0626\u06d2 \u06af\u0627\u06d4 <code>clearpay-api-ip<\/code> \u0627\u0648\u0631 <code>clearpay-gke-edge-ip<\/code>. \u0644\u0648\u0688 \u0628\u06cc\u0644\u0646\u0633 \u0634\u0648 <code>clearpay-migration-forwarding-rule<\/code> \u06cc\u06c1 \u0644\u0686\u06a9\u062f\u0627\u0631 IP \u06a9\u0648 \u067e\u0633\u062f\u06cc\u062f \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/10\/1792188593_248_\u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0648\u06ba-\u06a9\u0648-AWS-\u0633\u06d2-GKE-\u0645\u06cc\u06ba-\u06a9\u06cc\u0633\u06d2-\u0645\u0646\u062a\u0642\u0644-\u06a9\u06cc\u0627-\u062c\u0627\u0626\u06d2\u06d4.png\" alt=\"\u062a\u0635\u0648\u06cc\u0631 GCP \u0645\u06cc\u06ba \u0644\u0648\u0688 \u0628\u06cc\u0644\u0646\u0633 \u06a9\u0627 \u0646\u0642\u0634\u06c1 \u062f\u06a9\u06be\u0627 \u0631\u06c1\u06cc \u06c1\u06d2\u06d4\" style=\"display: block;\" width=\"600\" height=\"400\" loading=\"lazy\" title=\"\"><\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/10\/1792188594_188_\u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0648\u06ba-\u06a9\u0648-AWS-\u0633\u06d2-GKE-\u0645\u06cc\u06ba-\u06a9\u06cc\u0633\u06d2-\u0645\u0646\u062a\u0642\u0644-\u06a9\u06cc\u0627-\u062c\u0627\u0626\u06d2\u06d4.png\" alt=\"\u062a\u0635\u0648\u06cc\u0631 Gcp \u06a9\u0646\u0633\u0648\u0644 \u06a9\u0627 IP \u067e\u062a\u06c1 \u062f\u06a9\u06be\u0627 \u0631\u06c1\u06cc \u06c1\u06d2\u06d4\" style=\"display: block;\" width=\"600\" height=\"400\" loading=\"lazy\" title=\"\"><\/p>\n<h4 id=\"heading-done-when\">\u0645\u06a9\u0645\u0644 \u06c1\u0648\u0646\u06d2 \u067e\u0631:<\/h4>\n<ul>\n<li>\n<p>\u0645\u0631\u062d\u0644\u06c1 1: <code>container.googleapis.com<\/code> \u0686\u0627\u0644\u0648 \u06a9\u0631 \u062f\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2<\/p>\n<\/li>\n<li>\n<p>\u0645\u0631\u062d\u0644\u06c1 2: <code>terraform output nat_ip_address<\/code> \u0645\u06cc\u06ba \u0646\u06d2 \u0622\u0626\u06cc \u067e\u06cc \u06a9\u0648 \u067e\u0631\u0646\u0679 \u06a9\u06cc\u0627 \u0627\u0648\u0631 \u0627\u0633\u06d2 \u0644\u06a9\u06be \u062f\u06cc\u0627\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0645\u0631\u062d\u0644\u06c1 3: <code>kubectl get nodes<\/code> \u06a9\u0645 \u0627\u0632 \u06a9\u0645 \u0627\u06cc\u06a9 \u062f\u06a9\u06be\u0627\u062a\u0627 \u06c1\u06d2\u06d4 <code>Ready<\/code> \u0644\u0641\u0638<\/p>\n<\/li>\n<li>\n<p>\u0645\u0631\u062d\u0644\u06c1 4: <code>clearpay<\/code> \u0631\u062c\u0633\u0679\u0631\u06cc \u0645\u0648\u062c\u0648\u062f \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0645\u0631\u062d\u0644\u06c1 5:3 <code>clearpay-<\/code> \u0633\u0631\u0648\u0633 \u0627\u06a9\u0627\u0624\u0646\u0679 \u0645\u0648\u062c\u0648\u062f \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0645\u0631\u062d\u0644\u06c1 6: 4 \u0644\u0648\u067e\u0633 \u067e\u0631\u0646\u0679 \u06a9\u0631\u06cc\u06ba\u06d4 <code>ok<\/code> \u0633\u0645\u0648\u0686<\/p>\n<\/li>\n<li>\n<p>\u0645\u0631\u062d\u0644\u06c1 7: \u0627\u06cc\u0631\u0631 \u0645\u06cc\u0679\u0631\u06a9\u0633 \u0645\u0648\u062c\u0648\u062f \u06c1\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0645\u0631\u062d\u0644\u06c1 8: <code>\/etc\/hosts<\/code> \u06c1\u06d2 <code>api.clearpay.test<\/code>\u0648\u0632\u0646 100\/0 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<\/ul>\n<p>\u0645\u0627\u06cc\u0627 \u06a9\u0648 \u0628\u062a\u0627\u0626\u06cc\u06ba\u060c \"\u062a\u0645\u0627\u0645 \u0622\u0679\u06be \u0645\u0631\u0627\u062d\u0644 \u06a9\u06cc \u062a\u0635\u062f\u06cc\u0642 \u06c1\u0648 \u0686\u06a9\u06cc \u06c1\u06d2\u06d4 \u0648\u0632\u0646 100 \u0627\u0648\u0631 0 \u06c1\u06d2\u06d4 GKE \u067e\u0631 \u0627\u0628\u06be\u06cc \u062a\u06a9 \u06a9\u0686\u06be \u0646\u06c1\u06cc\u06ba \u0686\u0644\u0627 \u06c1\u06d2\u06d4\"<\/p>\n<p>\u0688\u06cc\u0646\u06cc\u0626\u0644: \"\u06a9\u0644\u0633\u0679\u0631 \u062e\u0627\u0644\u06cc \u06c1\u06d2\u06d4 \u0627\u06af\u0644\u0627\u060c \u06c1\u0645 \u06cc\u06c1\u0627\u06ba \u06a9\u0644\u06cc\u0626\u0631 \u067e\u06d2 \u062a\u0639\u06cc\u0646\u0627\u062a \u06a9\u0631\u06cc\u06ba \u06af\u06d2\u06d4\"<\/p>\n<h2 id=\"heading-part-4-how-to-get-clearpay-onto-gke-staging\">\u062d\u0635\u06c1 4\u06d4 ClearPay \u06a9\u0648 GKE \u0633\u0679\u06cc\u062c\u0646\u06af \u0645\u06cc\u06ba \u06a9\u06cc\u0633\u06d2 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/h2>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/10\/1792188594_145_\u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0648\u06ba-\u06a9\u0648-AWS-\u0633\u06d2-GKE-\u0645\u06cc\u06ba-\u06a9\u06cc\u0633\u06d2-\u0645\u0646\u062a\u0642\u0644-\u06a9\u06cc\u0627-\u062c\u0627\u0626\u06d2\u06d4.png\" alt=\"4a852432-a65f-4e7d-ad72-18f628051930\" style=\"display: block;\" width=\"600\" height=\"400\" loading=\"lazy\" title=\"\"><\/p>\n<p>\u0645\u0627\u06cc\u0627 \u0627\u067e\u0646\u06d2 \u0628\u0631\u0627\u0624\u0632\u0631 \u0645\u06cc\u06ba \u0646\u06cc\u0627 \u067e\u062a\u06c1 \u0686\u06cc\u06a9 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0631\u06a9\u062a\u06cc \u06c1\u06d2\u06d4 \u0648\u06c1 \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 \u06a9\u06cc \u0644\u0627\u0626\u0646\u06cc\u06ba \u067e\u0691\u06be\u062a\u06cc \u06c1\u06d2 \u0627\u0648\u0631 \u0645\u0633\u06a9\u0631\u0627\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u0645\u0627\u06cc\u0627: \"\u0633\u0627\u0645\u0646\u06d2 \u062f\u0631\u0648\u0627\u0632\u06d2 \u067e\u0631 \u0627\u0686\u06be\u0627 \u06a9\u0627\u0645\u06d4 \u0644\u06cc\u06a9\u0646 \u062f\u06cc\u06a9\u06be\u0648\u060c \u06cc\u06c1 \u0627\u0628 \u0628\u06be\u06cc \u06cc\u06c1\u06cc \u06a9\u06c1\u062a\u0627 \u06c1\u06d2\u06d4 <code>aws<\/code>. \u0635\u0627\u0631\u0641\u06cc\u0646 \u0646\u0626\u06d2 \u0627\u06cc\u0688\u0631\u06cc\u0633 \u0633\u06d2 \u062c\u0691 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u062a\u0645\u0627\u0645 \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u06cc\u06ba \u0627\u0628 \u0628\u06be\u06cc \u067e\u0631\u0627\u0646\u06d2 \u0633\u0631\u0648\u0631 \u067e\u0631 \u0628\u06be\u06cc\u062c\u06cc \u062c\u0627\u0626\u06cc\u06ba \u06af\u06cc\u06d4 \"GKE \u067e\u0631 \u06a9\u0644\u0633\u0679\u0631 \u062e\u0627\u0644\u06cc \u06c1\u06d2\u060c \u0627\u0633 \u0644\u06cc\u06d2 \u0627\u0628\u06be\u06cc \u062a\u06a9 \u06a9\u0648\u0626\u06cc \u0628\u06be\u06cc \u0648\u06c1\u0627\u06ba $20 \u0646\u06c1\u06cc\u06ba \u0628\u06be\u06cc\u062c \u0633\u06a9\u062a\u0627\u06d4\"<\/p>\n<p>\u0648\u06c1 \u0622\u067e \u06a9\u06d2 \u0679\u0631\u0645\u06cc\u0646\u0644 \u06a9\u06cc \u0637\u0631\u0641 \u0627\u0634\u0627\u0631\u06c1 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u0645\u0627\u06cc\u0627: \"\u0627\u06af\u0644\u0627 \u0645\u0631\u062d\u0644\u06c1 \u0627\u0633 \u06a9\u0644\u0633\u0679\u0631 \u067e\u0631 ClearPay \u06a9\u0648 \u0627\u0646\u0633\u0679\u0627\u0644 \u06a9\u0631\u0646\u0627 \u06c1\u06d2\u06d4 \u0627\u06cc\u06a9 \u0686\u06cc\u0632 \u062c\u0633 \u0645\u06cc\u06ba \u0645\u06cc\u06ba \u062f\u0644\u0686\u0633\u067e\u06cc \u0631\u06a9\u06be\u062a\u0627 \u06c1\u0648\u06ba \u06a9\u06c1 \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u06a9\u0648 \u06cc\u06c1 \u06a9\u0631\u0646\u0627 \u06c1\u06d2\u060c \u0628\u062c\u0627\u0626\u06d2 \u0627\u0633 \u06a9\u06d2 \u06a9\u06c1 \u06a9\u0633\u06cc \u0634\u062e\u0635 \u06a9\u0648 \u06a9\u0645\u0627\u0646\u0688\u0632 \u0679\u0627\u0626\u067e \u06a9\u0631\u06d2\u06d4 \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u0627\u0633\u06d2 \u06c1\u0631 \u0628\u0627\u0631 \u0627\u0633\u06cc \u0637\u0631\u062d \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u060c \u0627\u0648\u0631 \u06c1\u0645 \u0628\u0627\u0644\u06a9\u0644 \u062f\u06cc\u06a9\u06be \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba \u06a9\u06c1 \u0627\u0633 \u0646\u06d2 \u06a9\u06cc\u0627 \u06a9\u06cc\u0627\u06d4\"<\/p>\n<p><code>https:\/\/api.clearpay.test<\/code> \u06cc\u06c1 \u0633\u0648\u0686\u0646\u0627 \u0622\u0633\u0627\u0646 \u06c1\u06d2 \u06a9\u06c1 ClearPay GKE \u067e\u0631 \u06c1\u06d2 \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u06cc\u06c1 \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u06c1\u06cc \u0628\u0631\u0627\u0624\u0632\u0631 \u0645\u06cc\u06ba \u06a9\u0627\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0633\u0686 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u0648\u06c1 \u067e\u062a\u06c1 \u06af\u0648\u06af\u0644 \u06a9\u0627 \u0646\u06cc\u0627 \u0641\u0631\u0646\u0679 \u0688\u0648\u0631\u060c \u0644\u06cc\u0648\u0644 8 \u0644\u0648\u0688 \u0628\u06cc\u0644\u0646\u0633\u0631 \u06c1\u06d2\u06d4 \u0627\u06af\u0631 \u0648\u0632\u0646 100 \u0627\u0648\u0631 0 \u06c1\u06d2 \u062a\u0648 \u0633\u0627\u0645\u0646\u06d2 \u06a9\u0627 \u062f\u0631\u0648\u0627\u0632\u06c1 AWS \u06a9\u0648 \u062a\u0645\u0627\u0645 \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u06cc\u06ba \u0628\u06be\u06cc\u062c\u062a\u0627 \u06c1\u06d2\u06d4 \u06a9\u06c1 <code>served by aws\/1.0.0<\/code> \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 \u067e\u0631 \u0644\u06a9\u06cc\u0631\u06cc\u06ba \u0627\u0633 \u0628\u0627\u062a \u06a9\u0648 \u062b\u0627\u0628\u062a \u06a9\u0631\u062a\u06cc \u06c1\u06cc\u06ba\u06d4 GKE \u06a9\u0644\u0633\u0679\u0631 \u062e\u0648\u062f \u0627\u0628 \u0628\u06be\u06cc \u062e\u0627\u0644\u06cc \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-plaintext\">Browser \u2192 api.clearpay.test (Google load balancer) \u2192 100% \u2192 AWS EC2 \u2192 RDS\n                                                  \u2192   0% \u2192 GKE (empty)\n<\/code><\/pre>\n<p>\u0627\u0633 \u062d\u0635\u06d2 \u0645\u06cc\u06ba\u060c \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 ClearPay \u06a9\u0648 GKE \u0633\u0679\u06cc\u062c\u0646\u06af \u0645\u06cc\u06ba \u0631\u06a9\u06be\u062a\u06cc \u06c1\u06d2\u060c \u0627\u0648\u0631 \u0628\u0627\u0628 6 \u0645\u06cc\u06ba \u067e\u0631\u0648\u0645\u0648\u0634\u0646 \u06af\u06cc\u0679 \u0637\u06d2 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0622\u06cc\u0627 \u0633\u0679\u06cc\u062c\u0646\u06af \u06a9\u0627\u0641\u06cc \u06c1\u06d2\u06d4 \u0627\u0633\u0679\u06cc\u062c\u0646\u06af \u06a9\u0644\u0633\u0679\u0631 \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u0622\u067e \u06a9\u06cc \u0627\u06cc\u067e \u06a9\u06cc \u0646\u062c\u06cc \u06a9\u0627\u067e\u06cc \u06c1\u06d2\u06d4 \u06af\u0627\u06c1\u06a9 \u0622\u067e \u062a\u06a9 \u0646\u06c1\u06cc\u06ba \u067e\u06c1\u0646\u0686\u062a\u06d2\u06d4<\/p>\n<h3 id=\"heading-chapter-12-check-the-api-image\">\u0628\u0627\u0628 12\u06d4 API \u062a\u0635\u0648\u06cc\u0631 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4<\/h3>\n<p><em>\u062f\u0648\u0633\u0631\u0627 \u0645\u0646\u06af\u0644 \u0635\u0628\u062d 9 \u0628\u062c\u06d2<\/em><\/p>\n<p>\u06a9\u0644\u0633\u0679\u0631 \u0628\u0646 \u0686\u06a9\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u062e\u0627\u0644\u06cc \u06c1\u06d2\u06d4 \u06a9\u0686\u06be \u06c1\u0648\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2\u060c \u0688\u06cc\u0646\u06cc\u0644 API Dockerfile \u06a9\u0648 \u0627\u0633\u06a9\u0631\u06cc\u0646 \u067e\u0631 \u062f\u06a9\u06be\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0688\u06cc\u0646\u06cc\u0626\u0644: \"\u0645\u06cc\u06ba \u0627\u0633\u06d2 \u0627\u06cc\u06a9 \u06a9\u0644\u0633\u0679\u0631 \u067e\u0631 \u062a\u0639\u06cc\u0646\u0627\u062a \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u06a9\u0648\u0634\u0634 \u06a9\u0631 \u0631\u06c1\u0627 \u06c1\u0648\u06ba\u06d4 \u0645\u062c\u06be\u06d2 \u062f\u06a9\u06be\u0627\u0626\u06cc\u06ba \u06a9\u06c1 \u06a9\u0646\u0679\u06cc\u0646\u0631 \u0631\u0648\u0679 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0646\u06c1\u06cc\u06ba \u0686\u0644 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4\"<\/p>\n<p>\u062b\u0627\u0628\u062a \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 \u0622\u067e \u06a9\u06cc API \u062a\u0635\u0648\u06cc\u0631 \u0686\u06be\u0648\u0679\u06cc \u06c1\u06d2\u060c \u062e\u0641\u06cc\u06c1 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u0627\u0633 \u0637\u0631\u062d \u0646\u06c1\u06cc\u06ba \u0686\u0644\u062a\u06cc \u06c1\u06d2: <code>root<\/code>.<\/p>\n<h4 id=\"heading-why-this-matters\">\u06cc\u06c1 \u06a9\u06cc\u0648\u06ba \u0627\u06c1\u0645\u06cc\u062a \u0631\u06a9\u06be\u062a\u0627 \u06c1\u06d2\u06d4<\/h4>\n<p>\u0627\u06cc\u06a9 \u0639\u0645\u0644 \u062c\u0648 \u0645\u0646\u062f\u0631\u062c\u06c1 \u0630\u06cc\u0644 \u0637\u0648\u0631 \u067e\u0631 \u0686\u0644\u062a\u0627 \u06c1\u06d2: <code>root<\/code> \u06a9\u0646\u0679\u06cc\u0646\u0631 \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u0627\u0633 \u0633\u06d2 \u06a9\u06c1\u06cc\u06ba \u0632\u06cc\u0627\u062f\u06c1 \u0637\u0627\u0642\u062a \u06c1\u0648\u062a\u06cc \u06c1\u06d2 \u062c\u0633 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u062a\u06cc \u06c1\u06d2 \u0627\u06af\u0631 \u062d\u0645\u0644\u06c1 \u0622\u0648\u0631 \u0627\u0646\u062f\u0631 \u062f\u0627\u062e\u0644 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4 \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u0627\u0645\u06cc\u062c\u0632 \u06a9\u0648 \u0627\u06cc\u06a9 \u0639\u0627\u0645 \u0635\u0627\u0631\u0641 \u06a9\u06cc \u0637\u0631\u062d \u0686\u0644\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u06d4<\/p>\n<h4 id=\"heading-steps\">\u0642\u062f\u0645<\/h4>\n<p>\u06a9\u06be\u0644\u0627 <code>api\/Dockerfile<\/code>. \u0627\u0633 \u06a9\u06d2 \u062f\u0648 \u0645\u0631\u0627\u062d\u0644 \u06c1\u06cc\u06ba:<\/p>\n<ol>\n<li>\n<p>\u067e\u06c1\u0644\u0627 \u0642\u062f\u0645\u060c <code>FROM node:22-slim AS deps<\/code>\u0635\u0631\u0641 \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u067e\u06cc\u06a9\u062c\u0632 \u0627\u0646\u0633\u0679\u0627\u0644 \u06a9\u0631\u06cc\u06ba \u062c\u0646 \u0645\u06cc\u06ba \u0634\u0627\u0645\u0644 \u06c1\u06cc\u06ba: <code>npm install --omit=dev<\/code>.<\/p>\n<\/li>\n<li>\n<p>\u062f\u0648\u0633\u0631\u0627 \u0645\u0631\u062d\u0644\u06c1 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0634\u0631\u0648\u0639 \u06c1\u0648\u062a\u0627 \u06c1\u06d2: <code>node:22-slim<\/code>. \u0686\u0644\u0627\u0646\u06d2 \u0648\u0627\u0644\u06d2 APIs \u067e\u0631 \u0635\u0631\u0641 Debian \u0633\u06cc\u06a9\u06cc\u0648\u0631\u0679\u06cc \u0627\u067e \u0688\u06cc\u0679\u0633 \u06a9\u0627 \u0627\u0637\u0644\u0627\u0642 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 npm \u0627\u0648\u0631 Yarn \u06a9\u0648 \u06c1\u0679\u0627 \u062f\u06cc\u06ba\u06d4 <code>node src\/index.js<\/code>. \u06cc\u06c1 \u067e\u06cc\u062f\u0627 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 <code>appuser<\/code> \u06cc\u0648\u0632\u0631 \u0622\u0626\u06cc \u0688\u06cc 1001 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u06a9\u0627\u067e\u06cc \u06a9\u0631\u06cc\u06ba\u06d4 <code>node_modules<\/code>\u060c <code>src<\/code>\u0627\u0648\u0631 <code>db<\/code>. \u0622\u062e\u0631\u06cc \u0644\u0627\u0626\u0646 \u0645\u06cc\u06ba \u0645\u0646\u062a\u0642\u0644\u06cc: <code>USER appuser<\/code>.<\/p>\n<\/li>\n<\/ol>\n<p>\u062f\u06cc\u06a9\u06be\u06cc\u06ba \u06a9\u06c1 \u062a\u0635\u0648\u06cc\u0631 \u0645\u06cc\u06ba \u06a9\u06cc\u0627 \u0634\u0627\u0645\u0644 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 <code>DATABASE_URL<\/code> \u0627\u0648\u0631 <code>JWT_SECRET<\/code>. \u06cc\u06c1 \u0633\u06cc\u06a9\u0631\u06cc\u0679 \u0645\u06cc\u0646\u06cc\u062c\u0631 \u0633\u06d2 \u0631\u0646 \u0679\u0627\u0626\u0645 \u067e\u0631 \u0622\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>Docker \u0688\u06cc\u0633\u06a9 \u0679\u0627\u067e \u0686\u0644 \u0631\u06c1\u0627 \u06c1\u0648\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u06d4 \u0630\u062e\u06cc\u0631\u06c1 \u06a9\u06cc \u062c\u0691 \u0633\u06d2:<\/p>\n<pre><code class=\"language-bash\">docker build -t clearpay-api:test .\/api\ndocker run --rm clearpay-api:test whoami\n<\/code><\/pre>\n<h4 id=\"heading-check\">\u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba<\/h4>\n<p>\u062f\u0648\u0633\u0631\u0627 \u06a9\u0645\u0627\u0646\u0688 \u067e\u0631\u0646\u0679 \u06a9\u0631\u062a\u0627 \u06c1\u06d2:<\/p>\n<pre><code class=\"language-plaintext\">appuser\n<\/code><\/pre>\n<h4 id=\"heading-if-it-fails\">\u0627\u06af\u0631 \u06cc\u06c1 \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648\u062c\u0627\u062a\u0627 \u06c1\u06d2:<\/h4>\n<h4 id=\"heading-done-when\">\u0645\u06a9\u0645\u0644 \u06c1\u0648\u0646\u06d2 \u067e\u0631:<\/h4>\n<h3 id=\"heading-chapter-13-prepare-the-cluster-for-clearpay\">\u0628\u0627\u0628 13 ClearPay \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u067e\u0646\u06d2 \u06a9\u0644\u0633\u0679\u0631 \u06a9\u06cc \u062a\u06cc\u0627\u0631\u06cc<\/h3>\n<p><em>\u0645\u0646\u06af\u0644 11 \u0628\u062c\u06d2<\/em><\/p>\n<p>\u062a\u0635\u0648\u06cc\u0631 \u06a9\u06cc \u062a\u0635\u062f\u06cc\u0642 \u0645\u06a9\u0645\u0644 \u06c1\u0648 \u06af\u0626\u06cc \u06c1\u06d2\u06d4 GitHub \u06a9\u06be\u0648\u0644\u06cc\u06ba\u060c \u0622\u067e \u06a9\u06cc \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u0686\u0644\u0627\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062a\u06cc\u0627\u0631 \u06c1\u06d2\u06d4 \u062f\u0627\u0646\u06cc\u0627\u0644 \u0646\u06d2 \u0633\u06a9\u0631\u06cc\u0646 \u06a9\u06cc \u0637\u0631\u0641 \u062f\u06cc\u06a9\u06be\u0627 \u0627\u0648\u0631 \u0633\u0631 \u06c1\u0644\u0627\u06cc\u0627\u06d4<\/p>\n<p>\u0688\u06cc\u0646\u06cc\u0626\u0644: \"\u067e\u06c1\u0644\u06cc \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u0633\u06d2 \u063a\u06cc\u0631 \u0645\u062a\u0639\u0644\u0642 \u0648\u062c\u0648\u06c1\u0627\u062a \u06a9\u06cc \u0628\u0646\u0627\u0621 \u067e\u0631 \u062f\u0648 \u0628\u0627\u0631 \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648 \u06af\u0626\u06cc\u06d4 \u067e\u06c1\u0644\u06d2 \u0627\u0633\u06d2 \u0679\u06be\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4\"<\/p>\n<p>\u0627\u067e\u0646\u06cc \u0627\u0628\u062a\u062f\u0627\u0626\u06cc \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u0633\u06d2 \u067e\u06c1\u0644\u06d2\u060c \u0622\u067e \u06a9\u0648 \u062f\u0648 \u0686\u06cc\u0632\u06cc\u06ba \u062f\u0631\u06a9\u0627\u0631 \u06c1\u0648\u06ba \u06af\u06cc \u062c\u0648 \u0622\u067e \u06a9\u06d2 \u06a9\u0644\u0633\u0679\u0631 \u0645\u06cc\u06ba \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u0646\u06c1\u06cc\u06ba \u06c1\u06cc\u06ba:<\/p>\n<ol>\n<li>\n<p>\u067e\u0648\u0688\u0632 \u0633\u06cc\u06a9\u0631\u0679 \u0645\u06cc\u0646\u06cc\u062c\u0631 \u06a9\u06d2 \u0631\u0627\u0632 \u06a9\u06cc\u0633\u06d2 \u067e\u0691\u06be\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>AWS \u067e\u0631 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u062a\u06a9 \u0646\u06cc\u0679 \u0648\u0631\u06a9 \u06a9\u0627 \u0631\u0627\u0633\u062a\u06c1\u06d4<\/p>\n<\/li>\n<\/ol>\n<p>\u0627\u06af\u0631 \u067e\u06c1\u0644\u06cc \u0641\u0627\u0626\u0644 \u063a\u0627\u0626\u0628 \u06c1\u06d2 \u062a\u0648\u060c Kubernetes \u0633\u0679\u06cc\u062c\u0646\u06af \u0641\u0627\u0626\u0644 \u06a9\u0648 \u0645\u0633\u062a\u0631\u062f \u06a9\u0631 \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u06af\u0631 \u062f\u0648\u0633\u0631\u0627 \u063a\u0627\u0626\u0628 \u06c1\u06d2 \u062a\u0648 \u067e\u06be\u0644\u06cc \u0634\u0631\u0648\u0639 \u06c1\u0648 \u062c\u0627\u0626\u06d2 \u06af\u06cc \u0644\u06cc\u06a9\u0646 \u062a\u06cc\u0627\u0631 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u06af\u06cc\u06d4<\/p>\n<h4 id=\"heading-part-a-turn-on-the-secret-manager-add-ons\">\u062d\u0635\u06c1 A\u06d4 \u0633\u06cc\u06a9\u0631\u0679 \u0645\u06cc\u0646\u06cc\u062c\u0631 \u0627\u06cc\u0688 \u0622\u0646 \u06a9\u0631\u06cc\u06ba\u06d4<\/h4>\n<p>\u0688\u06cc\u0646\u06cc\u0626\u0644: \"\u067e\u0688\u0632 \u06a9\u0648 \u0633\u06cc\u06a9\u0631\u0679 \u0645\u06cc\u0646\u06cc\u062c\u0631 \u06a9\u06cc \u0642\u062f\u0631 \u06a9\u0648 \u0645\u0631\u062d\u0644\u06c1 6 \u0633\u06d2 \u067e\u0691\u06be\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u06d4 \u0627\u06af\u0631 \u0646\u06c1\u06cc\u06ba\u060c \u062a\u0648 \u0628\u0631\u0627\u06c1 \u06a9\u0631\u0645 \u0644\u06a9\u06be\u06cc\u06ba \u06a9\u06c1 \u0622\u067e \u0627\u0628 \u0628\u06be\u06cc \u0641\u0627\u0626\u0644 \u06a9\u06cc\u0648\u06ba \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631 \u0631\u06c1\u06d2 \u06c1\u06cc\u06ba\u06d4\"<\/p>\n<p>\u0627\u0633\u0679\u06cc\u062c\u0646\u06af \u0627\u0648\u0631 \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u0641\u0627\u0626\u0644\u06cc\u06ba\u06d4 <code>k8s\/overlays\/<\/code> \u0633\u06cc\u06a9\u0631\u0679 \u0645\u06cc\u0646\u06cc\u062c\u0631 \u0633\u06d2 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u06cc\u0648 \u0622\u0631 \u0627\u06cc\u0644 \u0627\u0648\u0631 \u062c\u06d2 \u0688\u0628\u0644\u06cc\u0648 \u0679\u06cc \u0633\u06cc\u06a9\u0631\u06cc\u0679 \u067e\u0691\u06be\u06cc\u06ba\u06d4 \u06c1\u0645 \u062f\u0648 GKE \u0627\u06cc\u0688\u0648\u0646\u0633 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba:<\/p>\n<ul>\n<li>\n<p>\u0633\u06cc\u06a9\u0631\u06cc\u0679 \u0645\u06cc\u0646\u06cc\u062c\u0631 CSI \u0688\u0631\u0627\u0626\u06cc\u0648\u0631 \u067e\u0648\u0688 \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u062e\u0641\u06cc\u06c1 \u0645\u0639\u0644\u0648\u0645\u0627\u062a \u06a9\u0648 \u0641\u0627\u0626\u0644 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0644\u06af\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0633\u06cc\u06a9\u0631\u0679 \u0633\u0646\u06a9 \u0627\u0633 \u06a9\u0648 \u0628\u0627\u0642\u0627\u0639\u062f\u06c1 \u06a9\u0628\u0631\u0646\u06cc\u0679\u0633 \u0633\u06cc\u06a9\u0631\u06cc\u0679 \u0645\u06cc\u06ba \u0627\u0633 \u0637\u0631\u062d \u06a9\u0627\u067e\u06cc \u06a9\u0631\u062a\u0627 \u06c1\u06d2: <code>clearpay-api-secrets<\/code>. \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u0644\u0648\u0688 \u06a9\u0631\u062a\u06cc \u06c1\u06d2 \u062c\u0648 API \u06a9\u06d2 \u0645\u0627\u062d\u0648\u0644\u06cc\u0627\u062a\u06cc \u0645\u062a\u063a\u06cc\u0631\u0627\u062a \u0645\u06cc\u06ba \u062e\u0641\u06cc\u06c1 \u06c1\u06d2\u06d4<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/10\/1792188594_927_\u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0648\u06ba-\u06a9\u0648-AWS-\u0633\u06d2-GKE-\u0645\u06cc\u06ba-\u06a9\u06cc\u0633\u06d2-\u0645\u0646\u062a\u0642\u0644-\u06a9\u06cc\u0627-\u062c\u0627\u0626\u06d2\u06d4.png\" alt=\"\u062e\u0641\u06cc\u06c1 \u0645\u06cc\u0646\u06cc\u062c\u0631 \u06a9\u06d2 \u0628\u06c1\u0627\u0624 \u06a9\u0648 \u0638\u0627\u06c1\u0631 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u06cc \u062a\u0635\u0648\u06cc\u0631\" style=\"display: block;\" width=\"600\" height=\"400\" loading=\"lazy\" title=\"\"><\/li>\n<\/ul>\n<p>Pods \u0645\u0631\u062d\u0644\u06c1 5 \u0645\u06cc\u06ba \u0633\u0631\u0648\u0633 \u0627\u06a9\u0627\u0624\u0646\u0679\u0633 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u062a\u0627\u06a9\u06c1 \u06cc\u06c1 \u062b\u0627\u0628\u062a \u06a9\u06cc\u0627 \u062c\u0627 \u0633\u06a9\u06d2 \u06a9\u06c1 \u0648\u06c1 \u06a9\u0627\u0645 \u06a9\u06d2 \u0628\u0648\u062c\u06be \u06a9\u06cc \u0634\u0646\u0627\u062e\u062a \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u06a9\u0648\u0646 \u06c1\u06cc\u06ba\u06d4 \u06a9\u0644\u06cc\u062f\u06cc \u0641\u0627\u0626\u0644 \u06a9\u06c1\u06cc\u06ba \u0645\u0648\u062c\u0648\u062f \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 API \u06a9\u0648\u0688 \u062a\u0628\u062f\u06cc\u0644 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0627\u0628 \u0628\u06be\u06cc \u0628\u0627\u0642\u0627\u0639\u062f\u06c1 \u0645\u0627\u062d\u0648\u0644\u06cc\u0627\u062a\u06cc \u0645\u062a\u063a\u06cc\u0631\u0627\u062a \u067e\u0691\u06be\u062a\u0627 \u06c1\u06d2\u060c \u0628\u0627\u0644\u06a9\u0644 AWS \u06a9\u06cc \u0637\u0631\u062d\u06d4<\/p>\n<p>\u062f\u0648\u0646\u0648\u06ba \u0627\u06cc\u0688 \u0622\u0646\u0632 \u06a9\u0648 \u0622\u0646 \u06a9\u0631\u06cc\u06ba\u06d4 <code>gcloud<\/code> \u0627\u0633\u06d2 \u062f\u0648 \u0627\u0644\u06af \u0627\u0644\u06af \u06a9\u0645\u0627\u0646\u0688\u0632 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u060c \u06c1\u0631 \u0627\u06cc\u06a9 \u0645\u06cc\u06ba \u06a9\u0626\u06cc \u0645\u0646\u0679 \u0644\u06af\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">gcloud container clusters update clearpay --zone us-east4-a \n  --enable-secret-manager\ngcloud container clusters update clearpay --zone us-east4-a \n  --enable-secret-sync\n<\/code><\/pre>\n<p>\u06cc\u06c1 \u0627\u062f\u06be\u0631 \u0628\u06be\u0627\u06af\u062a\u06d2 \u06c1\u06cc\u06ba \u06cc\u06c1\u0627\u06ba \u0646\u06c1\u06cc\u06ba\u06d4 <code>03-gke<\/code>\u0644\u06c1\u0630\u0627 \u06a9\u0644\u0633\u0679\u0631 \u0645\u0631\u062d\u0644\u06c1 \u0686\u06be\u0648\u0679\u0627 \u0631\u06c1\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0622\u067e \u062e\u0641\u06cc\u06c1 \u0631\u0633\u0627\u0626\u06cc \u06a9\u06d2 \u0634\u0627\u0645\u0644 \u06c1\u0648\u0646\u06d2 \u06a9\u0627 \u0644\u0645\u062d\u06c1 \u062f\u06cc\u06a9\u06be \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u0686\u06be\u0648\u0691 \u062f\u0648 <code>PROJECT_ID<\/code> \u062c\u06cc\u0633\u0627 \u06a9\u06c1 \u06c1\u06d2\u06d4 <code>k8s\/overlays\/staging\/secretproviderclass.yaml<\/code> \u0627\u0648\u0631 <code>patch-serviceaccount.yaml<\/code>. \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u0627\u0633\u06d2 \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u067e\u0631 \u0627\u0635\u0644 \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 ID \u0633\u06d2 \u0628\u062f\u0644 \u062f\u06cc\u062a\u06cc \u06c1\u06d2\u06d4 \u0627\u0633 \u0641\u0627\u0626\u0644 \u0645\u06cc\u06ba \u06a9\u0648\u0626\u06cc ID \u062f\u0627\u062e\u0644 \u0646\u06c1 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<h4 id=\"heading-part-b-open-the-aws-database-to-gke\">\u062d\u0635\u06c1 B. GKE \u067e\u0631 AWS \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u06a9\u06be\u0648\u0644\u0646\u0627<\/h4>\n<p>\u0628\u0631\u0627\u06c1 \u06a9\u0631\u0645 \u0627\u0633\u06d2 '\u062c\u06cc \u06a9\u06d2 \u0627\u06cc \u06a9\u0648 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u0633\u06d2 \u062c\u0648\u0691\u06cc\u06ba' \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0628\u06cc\u0627\u0646 \u0646\u06c1 \u06a9\u0631\u06cc\u06ba\u06d4 \u0627\u0633 \u062c\u0645\u0644\u06d2 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u06a9\u06c1 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u0628\u06be\u06cc \u062d\u0631\u06a9\u062a \u06a9\u0631 \u0631\u06c1\u0627 \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u0627\u06cc\u0633\u0627 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0642\u062f\u0645 \u0627\u0633 \u0628\u0627\u062a \u06a9\u0648 \u06cc\u0642\u06cc\u0646\u06cc \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 GKE \u0645\u062d\u0641\u0648\u0638 \u0637\u0631\u06cc\u0642\u06d2 \u0633\u06d2 \u062d\u0642\u06cc\u0642\u06cc\u060c \u063a\u06cc\u0631 \u0645\u0646\u062a\u0642\u0644 \u0634\u062f\u06c1 AWS \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u062a\u06a9 \u067e\u06c1\u0646\u0686 \u0633\u06a9\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u06a9\u0644\u0633\u0679\u0631 \u0645\u06cc\u06ba \u0645\u0648\u062c\u0648\u062f \u0645\u0634\u06cc\u0646\u0648\u06ba \u0645\u06cc\u06ba \u0639\u0648\u0627\u0645\u06cc IPs \u0646\u06c1\u06cc\u06ba \u06c1\u06cc\u06ba\u06d4 \u0622\u0624\u0679 \u0628\u0627\u0624\u0646\u0688 \u0679\u0631\u06cc\u0641\u06a9 \u06a9\u0644\u0627\u0624\u0688 NAT \u06a9\u0648 \u0627\u06cc\u06a9 \u0648\u0627\u062d\u062f \u0639\u0648\u0627\u0645\u06cc \u067e\u062a\u06c1 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u0686\u06be\u0648\u0691 \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u060c NAT IP \u0644\u06cc\u0648\u0644 2 \u0633\u06d2\u06d4 RDS \u067e\u0648\u0631\u0679 5432 \u067e\u0631 \u0628\u0627\u0644\u06a9\u0644 \u0627\u0633\u06cc \u0627\u06cc\u0688\u0631\u06cc\u0633 \u0633\u06d2 \u06a9\u0646\u06a9\u0634\u0646 \u0642\u0628\u0648\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u06a9\u0646\u06a9\u0634\u0646 \u0633\u0679\u0631\u0646\u06af \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u06c1\u06cc TLS \u067e\u0631 \u0645\u0634\u062a\u0645\u0644 \u06c1\u06d2\u06d4<code>sslmode=require<\/code>)\u06d4<\/p>\n<pre><code class=\"language-plaintext\">GKE Pod  (clearpay-api)\n   \u2502\n   \u25bc\nPrivate node  (no public IP)\n   \u2502\n   \u25bc\nCloud NAT  (clearpay-nat-ip)\n   \u2502\n   \u2502  public egress, one \/32\n   \u25bc\nAWS security group  (additional_db_ingress_cidrs)\n   \u2502  port 5432 + SSL\n   \u25bc\nRDS PostgreSQL 16\n<\/code><\/pre>\n<p>\u06cc\u06c1 \u062f\u0648 \u0628\u0627\u062f\u0644\u0648\u06ba \u06a9\u0648 \u062c\u0648\u0691\u0646\u06d2 \u06a9\u06d2 \u062a\u06cc\u0646 \u0637\u0631\u06cc\u0642\u0648\u06ba \u0645\u06cc\u06ba \u0633\u06d2 \u0627\u06cc\u06a9 \u06c1\u06d2\u06d4<\/p>\n<table>\n<thead>\n<tr>\n<th>\u0627\u062e\u062a\u06cc\u0627\u0631\u0627\u062a<\/th>\n<th>\u062a\u0631\u062a\u06cc\u0628<\/th>\n<th>\u067e\u06cc\u0634\u06af\u06cc<\/th>\n<th>\u06cc\u06c1 \u06a9\u06cc\u0627 \u06c1\u06d2<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>\u067e\u0628\u0644\u06a9 \u0627\u06cc\u0646\u0688 \u067e\u0648\u0627\u0626\u0646\u0679 + \u0622\u0626\u06cc \u067e\u06cc \u0648\u0627\u0626\u0679 \u0644\u0633\u0679<\/td>\n<td>\u0686\u0646\u062f Terraform \u0645\u062a\u063a\u06cc\u0631\u0627\u062a<\/td>\n<td>$0 \u0634\u0627\u0645\u0644 \u06a9\u0631\u06cc\u06ba (\u0639\u0627\u0645 \u0627\u0646\u0679\u0631\u0646\u06cc\u0679 \u0679\u0631\u0627\u0646\u0633\u0645\u06cc\u0634\u0646)<\/td>\n<td>RDS \u06a9\u0648 \u0627\u06cc\u06a9 \u0639\u0648\u0627\u0645\u06cc IP \u0645\u0644\u062a\u0627 \u06c1\u06d2\u06d4 \u0633\u06cc\u06a9\u0648\u0631\u0679\u06cc \u06af\u0631\u0648\u067e \u0635\u0631\u0641 Cloud NAT \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4 <code>\/32<\/code>. TLS \u062f\u0631\u06a9\u0627\u0631 \u06c1\u06d2\u06d4<\/td>\n<\/tr>\n<tr>\n<td>\u06a9\u0644\u0627\u0624\u0688 \u0648\u06cc \u067e\u06cc \u0627\u06cc\u0646 (\u0633\u0627\u0626\u0679 \u0679\u0648 \u0633\u0627\u0626\u0679)<\/td>\n<td>\u0648\u0642\u062a: \u062f\u0648\u0646\u0648\u06ba \u0628\u0627\u062f\u0644\u0648\u06ba \u06a9\u0627 \u06af\u06cc\u0679 \u0648\u06d2<\/td>\n<td>\u062a\u0642\u0631\u06cc\u0628\u0627\u064b $36 \u0641\u06cc \u0633\u0631\u0646\u06af \u0641\u06cc \u0633\u0631\u0646\u06af \u0641\u06cc \u0645\u06c1\u06cc\u0646\u06c1 GCP \u067e\u0631 + $36 \u0641\u06cc \u0645\u06c1\u06cc\u0646\u06c1 AWS \u067e\u0631 (GCP VPN \u0642\u06cc\u0645\u062a\u0648\u06ba \u06a9\u0627 \u062a\u0639\u06cc\u0646)<\/td>\n<td>\u0630\u0627\u062a\u06cc \u0631\u0627\u0633\u062a\u06c1\u06d4 RDS \u06a9\u06d2 \u067e\u0627\u0633 \u067e\u0628\u0644\u06a9 \u0627\u06cc\u0646\u0688 \u067e\u0648\u0627\u0626\u0646\u0679\u0633 \u0646\u06c1\u06cc\u06ba \u06c1\u06cc\u06ba\u06d4 \u06cc\u06c1 \u0627\u0633 \u0630\u062e\u06cc\u0631\u06c1 \u0645\u06cc\u06ba \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4<\/td>\n<\/tr>\n<tr>\n<td>AWS \u06a9\u06d2 \u0644\u06cc\u06d2 \u067e\u0627\u0631\u0679\u0646\u0631 \u0679\u0648 \u06a9\u0644\u0627\u0624\u0688 \u0627\u0646\u0679\u0631 \u06a9\u0646\u06a9\u0634\u0646<\/td>\n<td>\u0627\u0635\u0644 \u0641\u0631\u0627\u06c1\u0645\u06cc \u06a9\u0627 \u0644\u06cc\u0688 \u0679\u0627\u0626\u0645<\/td>\n<td>\u0641\u06a9\u0633\u0688 10 \u06cc\u0627 100 Gbps \u0679\u0627\u0626\u0631 (\u06a9\u0631\u0627\u0633 \u06a9\u0644\u0627\u0624\u0688 \u0627\u0646\u0679\u0631\u06a9\u0646\u06cc\u06a9\u0679)<\/td>\n<td>\u06cc\u06c1 \u06c1\u0627\u0626\u06cc \u0679\u0631\u06cc\u0641\u06a9 \u06a9\u06cc\u0633\u0632 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u0633\u0631\u0634\u0627\u0631 \u0646\u062c\u06cc \u0644\u0646\u06a9 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0627\u0633 \u0630\u062e\u06cc\u0631\u06c1 \u0645\u06cc\u06ba \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u0627\u067e\u0646\u06d2 \u0646\u0638\u0627\u0645 \u0633\u06d2 \u0645\u0648\u0627\u0632\u0646\u06c1 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2:<\/p>\n<pre><code class=\"language-plaintext\">(expected monthly GB) \u00d7 (price per GB on that path) + fixed monthly cost of that option\n<\/code><\/pre>\n<p>ClearPay \u0686\u06be\u0648\u0679\u06d2 \u0633\u0648\u0627\u0644\u0627\u062a \u0628\u06be\u06cc\u062c\u062a\u0627 \u06c1\u06d2\u060c \u0644\u06c1\u0630\u0627 VPN \u0622\u067e \u06a9\u0648 \u06c1\u0631 \u0645\u0627\u06c1 \u0622\u067e \u06a9\u06d2 \u0688\u06cc\u0679\u0627 \u06a9\u06cc \u0642\u06cc\u0645\u062a \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u062e\u0631\u0686 \u06a9\u0631\u06d2 \u06af\u0627\u06d4 \u06cc\u06c1 \u0644\u06cc\u0628 \u0648\u0627\u0626\u0679 \u0644\u0633\u0679\u0646\u06af \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4 \u0645\u0635\u0631\u0648\u0641 \u0646\u0638\u0627\u0645 \u0645\u062e\u062a\u0644\u0641 \u0637\u0631\u06cc\u0642\u06d2 \u0633\u06d2 \u0645\u0646\u062a\u062e\u0628 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>NAT IP \u062d\u0627\u0635\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">cd infra\/gcp\/terraform\/02-network\nterraform output nat_ip_address\n<\/code><\/pre>\n<p>\u0688\u0627\u0644\u0648 <code>infra\/aws\/terraform\/terraform.tfvars<\/code>:<\/p>\n<pre><code class=\"language-plaintext\">db_publicly_accessible      = true\nadditional_db_ingress_cidrs = [\"<the nat=\"\" ip=\"\">\/32\"]\n<\/the><\/code><\/pre>\n<p>\u067e\u06be\u0631 AWS \u0627\u0633\u0679\u06cc\u06a9 \u0644\u06af\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">cd infra\/aws\/terraform\nterraform plan\nterraform apply\n<\/code><\/pre>\n<p>\u06cc\u06c1 \u0645\u0646\u0635\u0648\u0628\u06c1 NAT IP \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u0646\u06cc\u0627 \u0633\u06cc\u06a9\u06cc\u0648\u0631\u0679\u06cc \u06af\u0631\u0648\u067e \u0631\u0648\u0644 \u0634\u0627\u0645\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 RDS \u0633\u06d2 \u0639\u0648\u0627\u0645\u06cc \u0631\u0627\u0628\u0637\u06d2 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4 \u0622\u067e \u06a9\u0648 \u0627\u06cc\u0633\u06d2 \u0642\u0648\u0627\u0646\u06cc\u0646 \u06a9\u0648 \u0646\u06c1\u06cc\u06ba \u06c1\u0679\u0627\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2 \u062c\u0648 EC2 \u0633\u0631\u0648\u0631\u0632 \u06a9\u0648 RDS \u062a\u06a9 \u067e\u06c1\u0646\u0686\u0646\u06d2 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u062f\u06cc\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u06cc\u06c1 Terraform \u0645\u06cc\u06ba \u062f\u0648 \u0627\u0644\u06af \u0627\u0644\u06af \u0627\u0635\u0648\u0644 \u06c1\u06cc\u06ba\u06d4 <code>aws_security_group_rule.db_from_nat<\/code> GKE \u0627\u0648\u0631 \u06a9\u06d2 \u0644\u06cc\u06d2 <code>aws_security_group_rule.db_from_api<\/code> EC2 \u06a9\u06d2 \u0644\u06cc\u06d2\u06d4<\/p>\n<h4 id=\"heading-check\">\u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba<\/h4>\n<p>AWS \u06a9\u0648 \u0627\u0628 \u0628\u06be\u06cc \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u0633\u06d2 \u06a9\u0646\u06a9\u0634\u0646 \u062f\u0631\u06a9\u0627\u0631 \u06c1\u06d2\u06d4 \u0630\u062e\u06cc\u0631\u06c1 \u06a9\u06cc \u062c\u0691 \u0633\u06d2:<\/p>\n<pre><code class=\"language-bash\">export INSTANCE_IP=$(terraform -chdir=infra\/aws\/terraform output -raw instance_public_ip)\ncurl -k https:\/\/$INSTANCE_IP\/health\/ready\n<\/code><\/pre>\n<pre><code class=\"language-plaintext\">{\"status\":\"ready\", ... \"platform\":\"aws\" ...}\n<\/code><\/pre>\n<p>\u062c\u0628 \u06cc\u06c1 \u067e\u0631\u0646\u0679 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 <code>not_ready<\/code>\u0645\u062a\u0628\u0627\u062f\u0644 \u0637\u0648\u0631 \u067e\u0631\u060c AWS \u0644\u0627\u06af \u0627\u0646 \u0635\u0641\u062d\u06c1 \u06a9\u0686\u06be \u0627\u0633 \u0637\u0631\u062d \u062f\u06a9\u06be\u0627\u0626\u06d2 \u06af\u0627: <code>internal error<\/code>\u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u0646\u06d2 EC2 \u0633\u0631\u0648\u0631\u0632 \u06a9\u0648 \u0642\u0628\u0648\u0644 \u06a9\u0631\u0646\u0627 \u0628\u0646\u062f \u06a9\u0631 \u062f\u06cc\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1\u0627\u06ba \u0631\u06a9\u06cc\u06ba \u0627\u0648\u0631 \u0679\u06cc\u0631\u0627\u0641\u0627\u0631\u0645 \u067e\u0644\u0627\u0646 \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u067e\u0691\u06be\u06cc\u06ba\u06d4 AWS \u0627\u0628 \u0628\u06be\u06cc \u062a\u0645\u0627\u0645 \u0635\u0627\u0631\u0641\u06cc\u0646 \u06a9\u0648 \u062e\u062f\u0645\u0627\u062a \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0644\u06c1\u0630\u0627 \u0628\u0631\u0627\u06c1 \u06a9\u0631\u0645 GKE \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 AWS \u06a9\u0648 \u0679\u06be\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<h4 id=\"heading-check-before-you-go-on\">\u062c\u0627\u0631\u06cc \u0631\u06a9\u06be\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4<\/h4>\n<p>\u0628\u0627\u0628 14 \u0645\u06cc\u06ba\u060c \u0622\u067e \u0627\u067e\u0646\u0627 \u06a9\u0648\u0688 \u062f\u0628\u0627\u0626\u06cc\u06ba \u0627\u0648\u0631 \u0627\u067e\u0646\u06cc \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u0634\u0631\u0648\u0639 \u06a9\u0631\u06cc\u06ba\u06d4 \u0627\u06af\u0631 \u0622\u067e \u0645\u0646\u062f\u0631\u062c\u06c1 \u0628\u0627\u0644\u0627 \u0645\u0631\u0627\u062d\u0644 \u0645\u06cc\u06ba \u0633\u06d2 \u06a9\u0633\u06cc \u06a9\u0648 \u0686\u06be\u0648\u0691 \u062f\u06cc\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u062f\u0648 \u0627\u0628\u0648\u0627\u0628 \u06a9\u06d2 \u0628\u0639\u062f \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648 \u062c\u0627\u0626\u06d2 \u06af\u06cc \u0627\u0648\u0631 \u0622\u067e \u06a9\u0648 \u0627\u06cc\u06a9 \u0627\u06cc\u0633\u06cc \u062e\u0627\u0645\u06cc \u0646\u0638\u0631 \u0622\u0626\u06d2 \u06af\u06cc \u062c\u0648 \u0622\u067e \u06a9\u0648 \u06cc\u06c1 \u0646\u06c1\u06cc\u06ba \u0628\u062a\u0627\u0626\u06d2 \u06af\u06cc \u06a9\u06c1 \u0622\u067e \u0646\u06d2 \u06a9\u0648\u0646 \u0633\u0627 \u0645\u0631\u062d\u0644\u06c1 \u0686\u06be\u0648\u0691\u0627 \u06c1\u06d2\u06d4 \u0627\u0633 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2\u060c \u0627\u0628\u06be\u06cc \u06cc\u06c1 \u0679\u06cc\u0633\u0679 \u0686\u0644\u0627\u0626\u06cc\u06ba\u06d4 \u067e\u0631\u0646\u0679 <code>ok<\/code> \u06cc\u0627 <code>MISSING<\/code> \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u0645\u06cc\u06ba \u062f\u0631\u06a9\u0627\u0631 \u06c1\u0631 \u0634\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2\u06d4 \u0630\u062e\u06cc\u0631\u06c1 \u06a9\u06cc \u062c\u0691 \u0633\u06d2 \u0686\u0644\u0627\u0626\u06cc\u06ba:<\/p>\n<pre><code class=\"language-bash\">export INSTANCE_IP=$(terraform -chdir=infra\/aws\/terraform output -raw instance_public_ip)\nNAT_IP=$(terraform -chdir=infra\/gcp\/terraform\/02-network output -raw nat_ip_address)\nDB_HOST=$(terraform -chdir=infra\/aws\/terraform output -raw db_endpoint | cut -d: -f1)\n\ngrep -q '^db_publicly_accessible *= *true' infra\/aws\/terraform\/terraform.tfvars \n  && echo \"ok   RDS public setting\" \n  || echo \"MISSING db_publicly_accessible = true in infra\/aws\/terraform\/terraform.tfvars\"\ngrep -q \"$NAT_IP\/32\" infra\/aws\/terraform\/terraform.tfvars \n  && echo \"ok   NAT IP in the allowlist\" \n  || echo \"MISSING $NAT_IP\/32 in additional_db_ingress_cidrs\"\nkubectl get csidriver secrets-store-gke.csi.k8s.io >\/dev\/null 2>&1 \n  && echo \"ok   Secret Manager driver\" \n  || echo \"MISSING Secret Manager driver: run the two gcloud commands in Part A\"\nkubectl get crd secretsyncs.secret-sync.gke.io >\/dev\/null 2>&1 \n  && echo \"ok   Secret Sync\" \n  || echo \"MISSING Secret Sync: run the two gcloud commands in Part A\"\ncurl -sk https:\/\/$INSTANCE_IP\/health\/ready | grep -q '\"status\":\"ready\"' \n  && echo \"ok   AWS still reaches its database\" \n  || echo \"MISSING AWS cannot reach its database: read the Terraform plan again\"\n<\/code><\/pre>\n<p>\u062d\u062a\u0645\u06cc \u0686\u06cc\u06a9 GKE \u0633\u06d2 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u062a\u06a9 \u06a9\u06d2 \u0627\u0635\u0644 \u0631\u0627\u0633\u062a\u06d2 \u06a9\u06cc \u062c\u0627\u0646\u0686 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0627\u06cc\u06a9 \u0686\u06be\u0648\u0679\u0627 \u0688\u0633\u067e\u0648\u0632\u0627\u06cc\u0628\u0644 \u067e\u0648\u0688 \u0634\u0631\u0648\u0639 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u067e\u0648\u0686\u06be\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u06a9\u06cc\u0627 \u06cc\u06c1 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u067e\u0648\u0631\u0679 \u0633\u06d2 \u06a9\u0646\u06a9\u0634\u0646 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u067e\u0648\u0688 \u06a9\u0648 \u062d\u0630\u0641 \u06a9\u0631 \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4 \u062c\u0628 Kubernetes \u062a\u0635\u0648\u06cc\u0631 \u06a9\u0648 \u0688\u0627\u0624\u0646 \u0644\u0648\u0688 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u062a\u0648 \u067e\u06c1\u0644\u06cc \u0631\u0646 \u062a\u0642\u0631\u06cc\u0628\u0627\u064b \u0627\u06cc\u06a9 \u0645\u0646\u0679 \u0644\u06cc\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-bash\">kubectl run dbcheck --rm -i --restart=Never --image=postgres:16 -- \n  pg_isready -h \"$DB_HOST\" -p 5432 -t 10 \n  && echo \"ok   GKE reaches the database\" \n  || echo \"MISSING GKE cannot reach the database\"\n<\/code><\/pre>\n<p>\u0645\u062c\u06be\u06d2 6 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2\u06d4 <code>ok<\/code> \u0644\u0627\u0626\u0646 \u0627\u0648\u0631 \u0646\u06c1\u06cc\u06ba <code>MISSING<\/code>. \u06c1\u0631 \u0627\u06cc\u06a9 <code>MISSING<\/code> \u0644\u0627\u0626\u0646 \u062a\u0631\u0645\u06cc\u0645 \u06a9\u0627 \u0646\u0627\u0645 \u062f\u06cc\u062a\u06cc \u06c1\u06d2\u06d4 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u062f\u06cc\u06ba \u0627\u0648\u0631 \u067e\u06be\u0631 \u0627\u0633\u06a9\u06cc\u0646 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0686\u0644\u0627\u0626\u06cc\u06ba\u06d4 \u0628\u0627\u0628 14 \u0634\u0631\u0648\u0639 \u0646\u06c1 \u06a9\u0631\u06cc\u06ba \u062c\u0628 \u062a\u06a9 \u06a9\u06c1 \u062a\u0645\u0627\u0645 6 \u067e\u0631\u0646\u0679 \u0646\u06c1 \u06c1\u0648\u06ba\u06d4 <code>ok<\/code>.<\/p>\n<p>\u0627\u06af\u0631 \u0622\u062e\u0631\u06cc \u0644\u0627\u0626\u0646 \u0645\u06cc\u06ba \u06a9\u0686\u06be \u0627\u0633 \u0637\u0631\u062d \u06c1\u06d2: <code>MISSING<\/code> \u0644\u06cc\u06a9\u0646 \u067e\u06c1\u0644\u06d2 \u062f\u0648 \u06a9\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba: <code>ok<\/code>RDS \u0627\u0628 \u0628\u06be\u06cc \u062a\u0628\u062f\u06cc\u0644\u06cc\u0627\u06ba \u0644\u0627\u06af\u0648 \u06a9\u0631 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4 \u062a\u0642\u0631\u06cc\u0628\u0627\u064b 2 \u0645\u0646\u0679 \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u06a9\u0645\u0627\u0646\u0688 \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0686\u0644\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<h4 id=\"heading-done-when\">\u0645\u06a9\u0645\u0644 \u06c1\u0648\u0646\u06d2 \u067e\u0631:<\/h4>\n<ul>\n<li>\n<p>\u062f\u0648\u0646\u0648\u06ba <code>gcloud container clusters update<\/code> \u06a9\u0645\u0627\u0646\u0688 \u0645\u06a9\u0645\u0644 \u06c1\u0648 \u06af\u06cc\u0627\u06d4<\/p>\n<\/li>\n<li>\n<p>RDS NAT IP \u0627\u0648\u0631 <code>curl -k https:\/\/$INSTANCE_IP\/health\/ready<\/code> \u0627\u0628 \u0628\u06be\u06cc \u067e\u0631\u0646\u0679 \u0645\u06cc\u06ba <code>ready<\/code><\/p>\n<\/li>\n<li>\n<p>\u0645\u0646\u062f\u0631\u062c\u06c1 \u0628\u0627\u0644\u0627 \u0686\u06cc\u06a9 \u067e\u0631 6 \u0686\u06be\u067e\u06cc \u06c1\u0648\u0626\u06cc \u06c1\u06d2\u06d4 <code>ok<\/code> \u0644\u0627\u0626\u0646 \u0627\u0648\u0631 \u0646\u06c1\u06cc\u06ba <code>MISSING<\/code><\/p>\n<\/li>\n<\/ul>\n<h3 id=\"heading-chapter-14-build-the-cicd-pipeline\">\u0628\u0627\u0628 14\u06d4 CI\/CD \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u0628\u0646\u0627\u0646\u0627<\/h3>\n<p><em>\u0645\u0646\u06af\u0644 \u0633\u06c1 \u067e\u06c1\u0631 3 \u0628\u062c\u06d2<\/em><\/p>\n<p>\u0622\u067e \u06a9\u0627 \u06a9\u0644\u0633\u0679\u0631 \u0622\u067e \u06a9\u06cc \u067e\u06c1\u0644\u06cc \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u06a9\u06d2 \u0644\u06cc\u06d2 \u062a\u06cc\u0627\u0631 \u06c1\u06d2\u06d4 \u0645\u0627\u06cc\u0627 \u0679\u06cc\u0645 \u0686\u06cc\u0646\u0644 \u06a9\u0648 \u067e\u0691\u06be\u062a\u06cc \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u06cc\u06a9 \u0627\u0635\u0648\u0644 \u06a9\u0627 \u0627\u0636\u0627\u0641\u06c1 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u0645\u0627\u06cc\u0627: \"\u0686\u0644\u0648 \u0627\u0628 \u0633\u06d2 \u0646\u06c1\u06cc\u06ba \u0628\u06be\u0627\u06af\u0646\u0627\u06d4 <code>kubectl apply<\/code> \u06c1\u0627\u062a\u06be \u0633\u06d2 \u062a\u06cc\u0627\u0631\u06cc\u06d4 \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u06a9\u0648 \u06c1\u0631 \u0628\u0627\u0631 \u0627\u0633\u06cc \u0637\u0631\u062d \u062a\u0635\u0627\u0648\u06cc\u0631 \u0628\u0646\u0627\u0646\u0627\u060c \u0627\u0633\u06a9\u06cc\u0646 \u06a9\u0631\u0646\u0627\u060c \u062f\u06be\u06a9\u0627 \u062f\u06cc\u0646\u0627 \u0627\u0648\u0631 \u062a\u0639\u06cc\u0646\u0627\u062a \u06a9\u0631\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u06d4<\/p>\n<p>\u0648\u0631\u06a9 \u0641\u0644\u0648 \u0641\u0627\u0626\u0644 \u067e\u06c1\u0644\u06d2 \u06c1\u06cc \u0628\u0646 \u0686\u06a9\u06cc \u06c1\u06d2\u06d4 <code>.github\/workflows\/deploy.yml<\/code>. \u0622\u067e \u06a9\u0627 \u06a9\u0627\u0645 \u0627\u0633\u06d2 \u0633\u0645\u062c\u06be\u0646\u0627\u060c \u0627\u0633\u06d2 \u06af\u0648\u06af\u0644 \u06a9\u0644\u0627\u0624\u0688 \u0633\u06d2 \u062c\u0648\u0691\u0646\u0627\u060c \u0627\u0648\u0631 \u0627\u0633\u06d2 \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u06a9\u06d2 \u0644\u06cc\u06d2 \u062a\u06cc\u0627\u0631 \u06c1\u0648\u062a\u06d2 \u062f\u06cc\u06a9\u06be\u0646\u0627 \u06c1\u06d2\u06d4<\/p>\n<h4 id=\"heading-why-a-pipeline\">\u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u06a9\u06cc\u0648\u06ba\u061f<\/h4>\n<p>\u062c\u0628 \u06c1\u0627\u062a\u06be \u0633\u06d2 \u0631\u06a9\u06be\u0627 \u062c\u0627\u0626\u06d2 \u062a\u0648 \u06c1\u0631 \u0628\u06cc\u0686 \u062a\u06be\u0648\u0691\u0627 \u0645\u062e\u062a\u0644\u0641 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4 \u06a9\u0633\u06cc \u0646\u06d2 \u0627\u0633\u06a9\u06cc\u0646 \u06a9\u0648 \u0686\u06be\u0648\u0691 \u062f\u06cc\u0627 \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u0648\u06c1 \u062f\u06cc\u0631 \u0633\u06d2 \u062a\u06be\u06d2\u06d4 \u06a9\u0648\u0626\u06cc \u0644\u06cc\u067e \u0679\u0627\u067e \u0633\u06d2 \u063a\u06cc\u0631 \u0645\u0646\u0638\u0645 \u062a\u0628\u062f\u06cc\u0644\u06cc\u0627\u06ba \u062a\u0639\u06cc\u0646\u0627\u062a \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u06a9\u0686\u06be \u0679\u0648\u0679 \u062c\u0627\u0626\u06d2 \u062a\u0648 \u06a9\u0648\u0626\u06cc \u0646\u06c1\u06cc\u06ba \u0628\u062a\u0627 \u0633\u06a9\u062a\u0627 \u06a9\u06c1 \u06a9\u06cc\u0627 \u0628\u06be\u0627\u06af\u0627\u06d4<\/p>\n<p>\u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646\u06cc\u06ba \u0627\u0646 \u0627\u062e\u062a\u0644\u0627\u0641\u0627\u062a \u06a9\u0648 \u062e\u062a\u0645 \u06a9\u0631\u062a\u06cc \u06c1\u06cc\u06ba\u06d4 \u062a\u0645\u0627\u0645 \u062a\u0635\u0627\u0648\u06cc\u0631 \u06a9\u0645\u0679 \u0633\u06d2 \u0628\u0646\u0627\u0626\u06cc \u062c\u0627\u062a\u06cc \u06c1\u06cc\u06ba\u060c \u0627\u06cc\u06a9 \u06c1\u06cc \u0627\u0633\u06a9\u06cc\u0646 \u06a9\u0648 \u067e\u0627\u0633 \u06a9\u0631\u062a\u06cc \u06c1\u06cc\u06ba\u060c \u0627\u0648\u0631 \u0627\u06cc\u06a9 \u06c1\u06cc \u0645\u0631\u0627\u062d\u0644 \u0633\u06d2 \u06af\u0632\u0631 \u06a9\u0631 \u06a9\u0644\u0633\u0679\u0631 \u062a\u06a9 \u067e\u06c1\u0646\u0686\u062a\u06cc \u06c1\u06cc\u06ba\u06d4 \u0628\u0627\u0628 15 \u0645\u06cc\u06ba \u067e\u0631\u0648\u0645\u0648\u0634\u0646 \u06af\u06cc\u0679 \u0627\u0633 \u0644\u062d\u0627\u0638 \u0633\u06d2 \u0645\u0639\u0646\u06cc \u062e\u06cc\u0632 \u06c1\u06d2 \u06a9\u06c1 \u06cc\u06c1 \u0627\u0633 \u0637\u0631\u062d \u0628\u0646\u0627\u0626\u06cc \u06af\u0626\u06cc \u062a\u0635\u0648\u06cc\u0631 \u06a9\u06cc \u062a\u0635\u062f\u06cc\u0642 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h4 id=\"heading-how-the-pipeline-works\">\u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646\u0632 \u06a9\u06cc\u0633\u06d2 \u06a9\u0627\u0645 \u06a9\u0631\u062a\u06cc \u06c1\u06cc\u06ba\u06d4<\/h4>\n<p>\u0648\u0631\u06a9 \u0641\u0644\u0648 \u06a9\u06d2 \u062f\u0648 \u06a9\u0627\u0645 \u06c1\u06cc\u06ba:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/10\/1792188594_778_\u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0648\u06ba-\u06a9\u0648-AWS-\u0633\u06d2-GKE-\u0645\u06cc\u06ba-\u06a9\u06cc\u0633\u06d2-\u0645\u0646\u062a\u0642\u0644-\u06a9\u06cc\u0627-\u062c\u0627\u0626\u06d2\u06d4.png\" alt=\"\u062a\u0635\u0648\u06cc\u0631 cicd \u0628\u06c1\u0627\u0624 \u062f\u06a9\u06be\u0627 \u0631\u06c1\u06cc \u06c1\u06d2\u06d4\" style=\"display: block;\" width=\"600\" height=\"400\" loading=\"lazy\" title=\"\"><\/p>\n<p>\u06a9\u06be\u0644\u0627 <code>.github\/workflows\/deploy.yml<\/code> \u0627\u0633\u06d2 \u0627\u067e\u0646\u06d2 \u0630\u062e\u06cc\u0631\u06c1 \u0645\u06cc\u06ba \u0645\u062d\u0641\u0648\u0638 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u0627\u0633 \u062e\u0627\u06a9\u06c1 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0627\u0633\u06d2 \u06a9\u06be\u0644\u0627 \u0631\u06a9\u06be\u06cc\u06ba\u06d4 \u062e\u0627\u06a9\u06c1 \u0648\u0631\u06a9 \u0641\u0644\u0648 \u0627\u0648\u0631 \u0627\u0646 \u06a9\u06cc \u062a\u0631\u062a\u06cc\u0628 \u0645\u06cc\u06ba \u062f\u0648 \u06a9\u0627\u0645\u0648\u06ba \u06a9\u0627 \u0646\u0642\u0634\u06c1 \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u0641\u0627\u0626\u0644 \u0645\u06cc\u06ba \u0627\u0635\u0644 GitHub \u0627\u06cc\u06a9\u0634\u0646 \u06a9\u0646\u0641\u06cc\u06af\u0631\u06cc\u0634\u0646 \u06c1\u06d2\u06d4 \u062c\u0628 \u0622\u067e \u0645\u062d\u0631\u06a9\u0627\u062a\u060c \u0627\u062c\u0627\u0632\u062a\u06cc\u06ba\u060c \u0627\u0645\u06cc\u062c\u0632 \u0628\u0646\u0627\u0626\u06cc\u06ba \u0627\u0648\u0631 \u0627\u0633\u06a9\u06cc\u0646 \u06a9\u0631\u06cc\u06ba\u060c \u0627\u0633\u0679\u06cc\u062c\u0646\u06af \u062a\u0639\u06cc\u0646\u0627\u062a \u06a9\u0631\u06cc\u06ba\u060c \u0627\u0648\u0631 \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u06a9\u0648 \u0641\u0631\u0648\u063a \u062f\u06cc\u06ba \u062a\u0648 \u0627\u0646 \u06a9\u0648 \u0627\u06cc\u06a9 \u0633\u0627\u062a\u06be \u0641\u0627\u0644\u0648 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p>\u0641\u0627\u0626\u0644 \u06a9\u0648 \u0627\u0648\u067e\u0631 \u0633\u06d2 \u0646\u06cc\u0686\u06d2 \u062a\u06a9 \u067e\u0691\u06be\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0633 \u0646\u0642\u0634\u06d2 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p><strong>\u0645\u062d\u0631\u06a9:<\/strong> <code>on: push: branches: [main]<\/code> \u06c1\u0631 \u062f\u06be\u06a9\u06d2 \u067e\u0631 \u0679\u0627\u0633\u06a9 1 \u0686\u0644\u0627\u0626\u06cc\u06ba\u06d4 <code>main<\/code>. <code>workflow_dispatch<\/code> \u0627\u06cc\u06a9 \u0686\u06cc\u06a9 \u0628\u0627\u06a9\u0633 \u06a9\u06d2 \u0633\u0627\u062a\u06be GitHub \u0645\u06cc\u06ba \"\u0631\u0646 \u0648\u0631\u06a9 \u0641\u0644\u0648\" \u0628\u0679\u0646 \u0634\u0627\u0645\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 <code>promote_to_production<\/code>. \u0679\u0627\u0633\u06a9 1 \u062a\u0628\u06be\u06cc \u0686\u0644\u06d2 \u06af\u0627 \u062c\u0628 \u0627\u0633 \u06a9\u0627 \u0628\u0627\u06a9\u0633 \u0622\u0641 \u06c1\u0648 \u06af\u0627 (<code>if: ${{ !inputs.promote_to_production }}<\/code>)\u06d4 \u0679\u0627\u0633\u06a9 2 \u0635\u0631\u0641 \u0622\u0646 \u06c1\u0648\u0646\u06d2 \u067e\u0631 \u0686\u0644\u06d2 \u06af\u0627\u06d4 \u0627\u06a9\u06cc\u0644\u06d2 \u067e\u0634 \u0622\u067e \u06a9\u0648 \u067e\u06cc\u062f\u0627\u0648\u0627\u0631 \u0645\u06cc\u06ba \u0646\u06c1\u06cc\u06ba \u0644\u06d2 \u062c\u0627\u0626\u06d2 \u06af\u0627\u06d4<\/p>\n<p><strong>\u0627\u062a\u06be\u0627\u0631\u0679\u06cc:<\/strong> <code>id-token: write<\/code> \u0679\u0627\u0633\u06a9 \u06a9\u0648 GitHub \u0633\u06d2 \u0642\u0644\u06cc\u0644 \u0627\u0644\u0645\u062f\u062a OIDC \u0679\u0648\u06a9\u0646 \u06a9\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u0631\u06cc\u06ba\u060c \u062c\u0648 \u06a9\u06c1 \u0627\u06cc\u06a9 \u062f\u0633\u062a\u062e\u0637 \u0634\u062f\u06c1 \u062a\u0641\u0635\u06cc\u0644 \u06c1\u06d2 \u062c\u0633 \u0645\u06cc\u06ba \u06a9\u06c1\u0627 \u06af\u06cc\u0627 \u06c1\u06d2 \u06a9\u06c1 \"\u06cc\u06c1 \u0627\u06cc\u06af\u0632\u06cc\u06a9\u06cc\u0648\u0634\u0646 \u0631\u06cc\u067e\u0648\u0632\u0679\u0631\u06cc X \u0633\u06d2 \u062a\u0639\u0644\u0642 \u0631\u06a9\u06be\u062a\u0627 \u06c1\u06d2\u06d4\" \u06af\u0648\u06af\u0644 \u0627\u0633 \u0628\u06cc\u0627\u0646 \u06a9\u0648 \u067e\u0648\u0644 \u06a9\u06d2 \u062e\u0644\u0627\u0641 \u0645\u0631\u062d\u0644\u06c1 5 \u0633\u06d2 \u0686\u06cc\u06a9 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u0633 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0639\u0627\u0631\u0636\u06cc \u0627\u0633\u0646\u0627\u062f \u0648\u0627\u067e\u0633 \u06a9\u0631\u062a\u0627 \u06c1\u06d2: <code>clearpay-ci<\/code>. GitHub \u0631\u0627\u0632\u0648\u06ba \u0645\u06cc\u06ba \u06a9\u0644\u06cc\u062f\u06cc \u0641\u0627\u0626\u0644\u06cc\u06ba \u0646\u06c1\u06cc\u06ba \u06c1\u06cc\u06ba\u060c \u0644\u06c1\u0630\u0627 \u0644\u06cc\u06a9 \u06c1\u0648\u0646\u06d2 \u06a9\u06cc \u06a9\u0648\u0626\u06cc \u0686\u0627\u0628\u06cc\u0627\u06ba \u0646\u06c1\u06cc\u06ba \u06c1\u06cc\u06ba\u06d4<\/p>\n<p><strong>\u062a\u0635\u0648\u06cc\u0631\u06cc \u0679\u06cc\u06af\u0632:<\/strong> \u0679\u06cc\u06af \u0645\u0646\u062f\u0631\u062c\u06c1 \u0630\u06cc\u0644 \u0645\u062e\u062a\u0635\u0631 \u06a9\u0645\u0679 SHA \u06c1\u06d2: <code>git rev-parse --short HEAD<\/code>. \u06c1\u0631 \u062a\u0635\u0648\u06cc\u0631 \u0628\u0627\u0644\u06a9\u0644 \u0627\u06cc\u06a9 \u06a9\u0645\u0679 \u06a9\u06cc \u0637\u0631\u0641 \u0627\u0634\u0627\u0631\u06c1 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4 \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u0645\u0648\u0648 \u0679\u06cc\u06af\u0632 \u06a9\u0648 \u0628\u06be\u06cc \u062f\u06be\u06a9\u06cc\u0644\u062a\u06cc \u06c1\u06d2\u06d4 <code>staging-latest<\/code>\u062a\u0627\u06c1\u0645\u060c \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc SHA \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<p><strong>\u0627\u0646\u062c\u06a9\u0634\u0646:<\/strong> \u0679\u0631\u06cc\u0648\u06cc \u0627\u06cc\u06a9 \u0627\u0648\u067e\u0646 \u0633\u0648\u0631\u0633 \u0633\u06a9\u06cc\u0646\u0631 \u06c1\u06d2 \u062c\u0648 \u0645\u0639\u0644\u0648\u0645 \u06a9\u0645\u0632\u0648\u0631\u06cc\u0648\u06ba \u06a9\u06cc \u0641\u06c1\u0631\u0633\u062a \u06a9\u06d2 \u062e\u0644\u0627\u0641 \u062a\u0635\u0648\u06cc\u0631 \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u067e\u06cc\u06a9\u062c\u0648\u06ba \u06a9\u0648 \u0686\u06cc\u06a9 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u06c1\u0631 \u0645\u0639\u0631\u0648\u0641 \u062e\u0637\u0631\u06d2 \u06a9\u06cc \u062f\u0631\u062c \u0630\u06cc\u0644 ID \u06c1\u0648\u062a\u06cc \u06c1\u06d2: <code>CVE-2026-29786<\/code>. \u0648\u0631\u06a9 \u0641\u0644\u0648 \u062a\u0631\u062a\u06cc\u0628 \u062f\u06cc\u062a\u0627 \u06c1\u06d2:<\/p>\n<ul>\n<li>\n<p><code>severity: CRITICAL,HIGH<\/code>\u0644\u06c1\u0630\u0627\u060c \u0635\u0631\u0641 \u0633\u0646\u06af\u06cc\u0646 \u0646\u062a\u0627\u0626\u062c \u06a9\u0627 \u062d\u0633\u0627\u0628 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2.<\/p>\n<\/li>\n<li>\n<p><code>ignore-unfixed: true<\/code>\u0627\u0628\u06be\u06cc \u062a\u06a9 \u06a9\u0648\u0626\u06cc \u067e\u06cc\u0686 \u062f\u0633\u062a\u06cc\u0627\u0628 \u0646\u06c1 \u06c1\u0648\u0646\u06d2 \u06a9\u06d2 \u0646\u062a\u0627\u0626\u062c \u062a\u0639\u0645\u06cc\u0631 \u06a9\u0648 \u0645\u0633\u062f\u0648\u062f \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u06cc\u06ba \u06af\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><code>exit-code: \"1\"<\/code>\u0628\u0627\u0642\u06cc \u0646\u062a\u0627\u0626\u062c \u06a9\u06d2 \u0646\u062a\u06cc\u062c\u06d2 \u0645\u06cc\u06ba \u0622\u067e\u0631\u06cc\u0634\u0646 \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<\/ul>\n<p>\u0627\u06cc\u06a9 \u0633\u0627\u062a\u06be \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0633 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u06a9\u06c1 \u0627\u06af\u0631 \u0627\u06cc\u06a9 \u0627\u06c1\u0645 \u062e\u0637\u0631\u06d2 \u0645\u06cc\u06ba \u06a9\u0648\u0626\u06cc \u0628\u06c1\u062a\u0631\u06cc \u06c1\u06d2 \u0627\u0648\u0631 \u06cc\u06c1 \u062a\u0635\u0648\u06cc\u0631 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u060c \u062a\u0648 \u06cc\u06c1 \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648 \u062c\u0627\u0626\u06d2 \u06af\u06cc\u06d4 \u0627\u06af\u0631 \u0627\u0633\u06a9\u06cc\u0646 \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648\u062c\u0627\u062a\u0627 \u06c1\u06d2\u060c \u062a\u0648 \u06a9\u0686\u06be \u0628\u06be\u06cc \u0646\u06c1\u06cc\u06ba \u062f\u06be\u06a9\u06cc\u0644\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p><strong>\u062f\u06be\u06a9\u0627:<\/strong> \u0679\u0627\u0633\u06a9 \u06c1\u0631 \u062a\u0635\u0648\u06cc\u0631 \u06a9\u0648 \u0627\u0633 \u06a9\u06d2 \u0645\u06a9\u0645\u0644 \u0631\u062c\u0633\u0679\u0631\u06cc \u067e\u0627\u062a\u06be \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0679\u06cc\u06af \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 <code>us-east4-docker.pkg.dev\/<project>\/clearpay\/api:<sha\/><\/project><\/code>\u0627\u0648\u0631 \u0627\u0633\u06d2 \u062f\u0648\u0631 \u062f\u06be\u06a9\u06cc\u0644 \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4 <code>clearpay-ci<\/code> \u06c1\u06d2 <code>artifactregistry.writer<\/code> \u067e\u0634 \u0645\u0631\u062d\u0644\u06c1 5 \u0633\u06d2 \u06a9\u0627\u0645 \u06a9\u0631\u06d2 \u06af\u0627\u06d4<\/p>\n<p><strong>\u0627\u0633\u0679\u06cc\u062c\u0646\u06af \u067e\u0631 \u062a\u0639\u06cc\u0646\u0627\u062a \u06a9\u0631\u06cc\u06ba:<\/strong> \u0642\u062f\u0645 \u0627\u0646\u062f\u0631 \u0633\u06d2 \u0628\u0627\u06c1\u0631 \u0633\u06d2 \u06a9\u0627\u0645 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <code>k8s\/overlays\/staging<\/code>:<\/p>\n<ol>\n<li>\n<p>\u0633\u06cc\u06a9\u0631\u0679 \u0645\u06cc\u0646\u06cc\u062c\u0631 \u0633\u06d2 \u062f\u0648 \u0627\u0633\u0679\u06cc\u062c\u0646\u06af \u0631\u0627\u0632 <code>secrets.staging.env<\/code> \u062f\u0648\u0691\u0646\u06d2 \u0648\u0627\u0644\u0648\u06ba \u067e\u0631\u06d4 <code>umask 077<\/code> \u0641\u0627\u0626\u0644 \u06a9\u0648 \u0635\u0631\u0641 \u0627\u06cc\u06af\u0632\u06cc\u06a9\u06cc\u0648\u0679\u0631 \u06a9\u06d2 \u0635\u0627\u0631\u0641 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06c1 \u067e\u0691\u06be\u0646\u06d2 \u06a9\u06d2 \u0642\u0627\u0628\u0644 \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u0641\u0627\u0626\u0644 \u06a9\u0648 \u0646\u0638\u0631 \u0627\u0646\u062f\u0627\u0632 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0631\u0646\u0631 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u06c1\u06cc \u0645\u0631 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><code>sed<\/code> \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u06cc\u06ba <code>PROJECT_ID<\/code> \u067e\u0644\u06cc\u0633 \u06c1\u0648\u0644\u0688\u0631 <code>patch-serviceaccount.yaml<\/code> \u0627\u0648\u0631 <code>secretproviderclass.yaml<\/code> \u0627\u0635\u0644 \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 ID \u06a9\u06d2 \u0633\u0627\u062a\u06be<\/p>\n<\/li>\n<li>\n<p><code>kustomize edit set image<\/code> \u062a\u0635\u0648\u06cc\u0631 \u06a9\u06d2 \u0627\u0648\u0648\u0631\u0644\u06d2 \u06a9\u06cc \u0637\u0631\u0641 \u0627\u0634\u0627\u0631\u06c1 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0633 \u06a9\u0645\u0679 \u0633\u06d2 SHA \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p><code>kubectl apply -k .<\/code> \u0627\u0648\u0648\u0631\u0644\u06d2 \u06a9\u0648 \u06a9\u0644\u0633\u0679\u0631 \u0645\u06cc\u06ba \u0628\u06be\u06cc\u062c\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p><code>kubectl rollout status<\/code> API \u0627\u0648\u0631 UI Pods \u06a9\u06d2 \u062a\u06cc\u0627\u0631 \u06c1\u0648\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 180 \u0633\u06cc\u06a9\u0646\u0688 \u062a\u06a9 \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u0631\u06cc\u06ba\u06d4 \u0627\u06cc\u0633\u0627 \u0646\u06c1 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u0622\u067e\u0631\u06cc\u0634\u0646 \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648 \u062c\u0627\u0626\u06d2 \u06af\u0627\u06d4<\/p>\n<\/li>\n<\/ol>\n<p><code>clearpay-ci<\/code> \u06c1\u06d2 <code>container.developer<\/code>\u0622\u067e \u06a9\u0627\u0645 \u06a9\u06d2 \u0628\u0648\u062c\u06be \u06a9\u0648 \u062a\u0639\u06cc\u0646\u0627\u062a \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0644\u06cc\u06a9\u0646 \u062e\u0648\u062f \u06a9\u0644\u0633\u0679\u0631 \u06a9\u0648 \u062a\u0628\u062f\u06cc\u0644 \u0646\u06c1\u06cc\u06ba \u06a9\u06cc\u0627 \u062c\u0627 \u0633\u06a9\u062a\u0627\u06d4<\/p>\n<p><strong>\u067e\u06cc\u062f\u0627\u0648\u0627\u0631 \u06a9\u0648 \u0641\u0631\u0648\u063a \u062f\u06cc\u0646\u0627:<\/strong> \u0679\u0627\u0633\u06a9 2 \u0648\u0627\u062d\u062f \u0631\u0627\u0633\u062a\u06c1 \u06c1\u06d2 \u062c\u0648 \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u067e\u06cc\u062f\u0627\u0648\u0627\u0631 \u062a\u06a9 \u067e\u06c1\u0646\u0686\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<ul>\n<li>\n<p><code>environment: production<\/code> \u06a9\u0627\u0645 \u06a9\u0648 \u0627\u0633 \u0648\u0642\u062a \u062a\u06a9 \u0645\u0648\u0642\u0648\u0641 \u06a9\u0631\u06cc\u06ba \u062c\u0628 \u062a\u06a9 \u06a9\u06c1 \u0646\u0627\u0645\u0632\u062f \u062c\u0627\u0626\u0632\u06c1 \u0644\u06cc\u0646\u06d2 \u0648\u0627\u0644\u0627 GitHub \u067e\u0631 Approve \u067e\u0631 \u06a9\u0644\u06a9 \u0646\u06c1 \u06a9\u0631\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u06cc\u06c1 \u06a9\u0686\u06be \u0646\u06c1\u06cc\u06ba \u0628\u0646\u0627\u062a\u0627\u06d4 \u0627\u0645\u06cc\u062c \u0627\u0633\u0679\u0631\u0646\u06af \u06a9\u0648 \u067e\u0691\u06be\u062a\u0627 \u06c1\u06d2 \u062c\u0633 \u067e\u0631 \u0627\u0633\u0679\u06cc\u062c\u0646\u06af \u0641\u06cc \u0627\u0644\u062d\u0627\u0644 \u0686\u0644 \u0631\u06c1\u06cc \u06c1\u06d2 \u0627\u0648\u0631 \u0635\u062d\u06cc\u062d \u0627\u0645\u06cc\u062c \u06a9\u0648 \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u0645\u06cc\u06ba \u062a\u0639\u06cc\u0646\u0627\u062a \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<\/ul>\n<p>\u0627\u0633 \u0627\u0635\u0648\u0644 \u06a9\u0648 \"\u0627\u06cc\u06a9 \u0628\u0627\u0631 \u0628\u0646\u0627\u0626\u06cc\u06ba\u060c \u0627\u06cc\u06a9 \u062c\u06cc\u0633\u06d2 \u0646\u0645\u0648\u0646\u06d2 \u06a9\u0648 \u0641\u0631\u0648\u063a \u062f\u06cc\u06ba\" \u06a9\u06c1\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u0628\u0627\u0628 15 \u06af\u06cc\u0679 \u0633\u06d2 \u06af\u0632\u0631\u0646\u06d2 \u0648\u0627\u0644\u06cc \u062a\u0635\u0648\u06cc\u0631 \u06af\u0627\u06c1\u06a9 \u06a9\u0648 \u0628\u0627\u0626\u0679 \u0628\u0627\u0626\u0679 \u0645\u0644\u062a\u06cc \u06c1\u06d2\u06d4 \u062f\u0648\u0628\u0627\u0631\u06c1 \u062a\u0639\u0645\u06cc\u0631 \u0622\u067e \u06a9\u0648 \u0627\u06cc\u06a9 \u0646\u06cc\u0627 \u067e\u06cc\u06a9\u06cc\u062c \u0644\u06cc\u0646\u06d2 \u0627\u0648\u0631 \u0627\u06cc\u06a9 \u0627\u06cc\u0633\u06cc \u0645\u0635\u0646\u0648\u0639\u0627\u062a \u06a9\u0648 \u062c\u0627\u0631\u06cc \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u062f\u06cc\u062a\u06cc \u06c1\u06d2 \u062c\u0633 \u06a9\u0627 \u062a\u062c\u0631\u0628\u06c1 \u06a9\u0633\u06cc \u0646\u06d2 \u0646\u06c1\u06cc\u06ba \u06a9\u06cc\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>Kustomize \u06a9\u06d2 \u067e\u06cc\u0686\u06be\u06d2 \u0648\u0627\u0644\u0627 \u0679\u0648\u0644 \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u06a9\u06d2 \u062f\u0648\u0646\u0648\u06ba \u0645\u0631\u0627\u062d\u0644 \u0645\u06cc\u06ba \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4 <code>kubectl apply -k<\/code>. \u0645\u0634\u062a\u0631\u06a9\u06c1 \u0641\u0627\u0626\u0644\u06cc\u06ba \u062d\u0627\u0635\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 <code>k8s\/base\/<\/code> \u0686\u06be\u0648\u0679\u06cc\u060c \u0645\u0627\u062d\u0648\u0644 \u06a9\u06d2 \u0644\u062d\u0627\u0638 \u0633\u06d2 \u0645\u062e\u0635\u0648\u0635 \u062a\u0628\u062f\u06cc\u0644\u06cc\u0627\u06ba \u06a9\u0631\u06cc\u06ba\u06d4 <code>k8s\/overlays\/staging\/<\/code> \u06cc\u0627 <code>k8s\/overlays\/production\/<\/code>\u0627\u0633\u06d2 \u0627\u0648\u0648\u0631\u0644\u06d2 \u06a9\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0633\u0679\u06cc\u062c\u0646\u06af \u0627\u0648\u0631 \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u0627\u06cc\u06a9 \u0645\u0634\u062a\u0631\u06a9\u06c1 \u0628\u0646\u06cc\u0627\u062f \u06a9\u0627 \u0627\u0634\u062a\u0631\u0627\u06a9 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u0635\u0631\u0641 \u0627\u0633 \u0686\u06cc\u0632 \u0645\u06cc\u06ba \u0645\u062e\u062a\u0644\u0641 \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba \u062c\u0633 \u06a9\u06cc \u0627\u0646\u06c1\u06cc\u06ba \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<h4 id=\"heading-steps\">\u0642\u062f\u0645<\/h4>\n<p>\u0633\u0628 \u0633\u06d2 \u067e\u06c1\u0644\u06d2\u060c \u0627\u0633 \u0630\u062e\u06cc\u0631\u06c1 \u06a9\u0648 \u0627\u067e\u0646\u06d2 \u0627\u06a9\u0627\u0624\u0646\u0679 \u06a9\u06d2 \u062a\u062d\u062a GitHub \u067e\u0631 \u0631\u06a9\u06be\u06cc\u06ba\u06d4 <code>main<\/code> \u0628\u0646\u06cc\u0627\u062f\u06cc \u0628\u0627\u062a \u06a9\u06cc \u0637\u0631\u0641\u06d4<\/p>\n<p>\u067e\u06be\u0631 \u06c1\u0645\u06cc\u06ba \u0628\u062a\u0627\u0626\u06cc\u06ba \u06a9\u06c1 \u06a9\u0648\u0646 \u0633\u06d2 \u0630\u062e\u06cc\u0631\u06d2 \u062f\u0633\u062a\u06cc\u0627\u0628 \u06c1\u06cc\u06ba\u06d4 <code>clearpay-ci<\/code>. \u06a9\u06be\u0644\u0627 <code>infra\/gcp\/terraform\/05-identity\/terraform.tfvars<\/code> \u0627\u0648\u0631 \u0633\u06cc\u0679 <code>github_repo<\/code> \u0622\u067e \u06a9\u06d2 \u0630\u062e\u06cc\u0631\u06d2 \u0645\u06cc\u06ba <code>owner\/name<\/code>\u0645\u062b\u0627\u0644 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 <code>Osomudeya\/migrate-api-aws-gke-devops<\/code>. \u067e\u0648\u0631\u06cc \u0686\u06cc\u0632 \u06a9\u0648 \u0686\u0633\u067e\u0627\u06ba \u0646\u06c1 \u06a9\u0631\u06cc\u06ba\u06d4 <code>https:\/\/github.com\/...<\/code> \u067e\u062a\u06c1\u060c \u0627\u0648\u0631 \u0646\u06c1\u06cc\u06ba <code>.git<\/code> \u0622\u062e\u0631 \u0645\u06cc\u06ba\u06d4 \u0645\u0631\u062d\u0644\u06c1 5 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0644\u0627\u06af\u0648 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">cd infra\/gcp\/terraform\/05-identity\nterraform plan\nterraform apply\n<\/code><\/pre>\n<p>\u0645\u0646\u0635\u0648\u0628\u06c1 \u067e\u0648\u0644 \u06a9\u06cc \u062c\u0627\u0626\u06cc\u062f\u0627\u062f \u06a9\u06d2 \u062d\u0627\u0644\u0627\u062a \u06a9\u0648 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 <code>clearpay-ci<\/code> \u0644\u0646\u06a9 \u06cc\u06c1 \u06a9\u0644\u0633\u0679\u0631 \u06a9\u0648 \u0646\u06c1\u06cc\u06ba \u0686\u06be\u0648\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u06af\u0631 \u0622\u067e \u0646\u06d2 \u067e\u06c1\u0644\u06d2 \u06c1\u06cc \u0628\u0627\u0628 11 \u0645\u06cc\u06ba \u0627\u067e\u0646\u0627 \u0627\u0635\u0644\u06cc \u0646\u0627\u0645 \u062a\u0631\u062a\u06cc\u0628 \u062f\u06cc\u0627 \u06c1\u06d2\u060c \u062a\u0648 \u0622\u067e \u06a9\u0648 \u0627\u067e\u0646\u06d2 \u067e\u0644\u0627\u0646 \u0645\u06cc\u06ba \u06a9\u0648\u0626\u06cc \u062a\u0628\u062f\u06cc\u0644\u06cc \u0646\u0638\u0631 \u0646\u06c1\u06cc\u06ba \u0622\u0626\u06d2 \u06af\u06cc\u06d4<\/p>\n<p>GitHub \u067e\u0631 \u0627\u067e\u0646\u0627 \u0630\u062e\u06cc\u0631\u06c1 \u06a9\u06be\u0648\u0644\u06cc\u06ba \u0627\u0648\u0631 \u062a\u0631\u062a\u06cc\u0628\u0627\u062a \u067e\u0631 \u06a9\u0644\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4 \u0628\u0627\u0626\u06cc\u06ba \u0645\u06cc\u0646\u0648 \u0645\u06cc\u06ba\u060c \u0631\u0627\u0632 \u0627\u0648\u0631 \u0645\u062a\u063a\u06cc\u0631 \u067e\u0631 \u06a9\u0644\u06a9 \u06a9\u0631\u06cc\u06ba\u060c \u0627\u0648\u0631 \u067e\u06be\u0631 \u0627\u0639\u0645\u0627\u0644 \u067e\u0631 \u06a9\u0644\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4 \u0645\u062a\u063a\u06cc\u0631\u0627\u062a \u06a9\u0627 \u0679\u06cc\u0628 \u06a9\u06be\u0648\u0644\u06cc\u06ba \u0627\u0648\u0631 \u0627\u0646 \u062a\u06cc\u0646\u0648\u06ba \u0645\u06cc\u06ba \u0633\u06d2 \u06c1\u0631 \u0627\u06cc\u06a9 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0646\u06cc\u0627 \u0630\u062e\u06cc\u0631\u06c1 \u0645\u062a\u063a\u06cc\u0631 \u067e\u0631 \u06a9\u0644\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4 \u0631\u06cc\u067e\u0648\u0632\u0679\u0631\u06cc \u0633\u06cc\u06a9\u0634\u0646 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u060c \u0646\u06c1 \u06a9\u06c1 \u0645\u0627\u062d\u0648\u0644\u06d4<\/p>\n<table>\n<thead>\n<tr>\n<th>\u0646\u0627\u0645<\/th>\n<th>\u0642\u062f\u0631<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>GCP_PROJECT_ID<\/code><\/td>\n<td>GCP \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 ID<\/td>\n<\/tr>\n<tr>\n<td><code>GCP_WORKLOAD_IDENTITY_PROVIDER<\/code><\/td>\n<td>\u0637\u0627\u0642\u062a \u06a9\u06cc \u067e\u06cc\u062f\u0627\u0648\u0627\u0631 <code>terraform -chdir=infra\/gcp\/terraform\/05-identity output -raw github_actions_workload_identity_provider<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>GCP_CI_SERVICE_ACCOUNT<\/code><\/td>\n<td>\u0637\u0627\u0642\u062a \u06a9\u06cc \u067e\u06cc\u062f\u0627\u0648\u0627\u0631 <code>terraform -chdir=infra\/gcp\/terraform\/05-identity output -raw ci_service_account_email<\/code><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u06cc\u06c1 \u06a9\u0648\u0626\u06cc \u0631\u0627\u0632 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u060c \u06cc\u06c1 \u0627\u06cc\u06a9 \u0645\u062a\u063a\u06cc\u0631 \u06c1\u06d2\u06d4 \u0627\u0646 \u0645\u06cc\u06ba \u0633\u06d2 \u06a9\u0648\u0626\u06cc \u0628\u06be\u06cc \u067e\u0627\u0633 \u0648\u0631\u0688 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u06a9\u0648 \u06a9\u0633\u06cc GitHub \u0631\u0627\u0632 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u06af\u0631 \u0622\u067e \u062f\u0648 \u0622\u0624\u0679 \u067e\u0679 \u06a9\u0627\u067e\u06cc \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u062a\u0648 \u0622\u067e \u06a9\u0648 \u0645\u0644 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 <code>terraform output -raw<\/code> \u062d\u06a9\u0645 \u062f\u06cc\u06ba\u060c \u0646\u0642\u0644 \u0646\u06c1 \u06a9\u0631\u06cc\u06ba\u06d4 <code>%<\/code> \u0622\u062e\u0631 \u0645\u06cc\u06ba\u06d4 \u0645\u06cc\u06a9 \u067e\u0631\u060c \u0679\u0631\u0645\u06cc\u0646\u0644 \u062f\u06a9\u06be\u0627\u062a\u0627 \u06c1\u06d2: <code>%<\/code> \u0627\u06af\u0631 \u0622\u0624\u0679 \u067e\u0679 \u06a9\u06d2 \u0628\u0639\u062f \u06a9\u0648\u0626\u06cc \u0644\u0627\u0626\u0646 \u0628\u0631\u06cc\u06a9 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0642\u06cc\u0645\u062a \u06a9\u0627 \u062d\u0635\u06c1 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0646\u0646\u062f\u06c1 \u06a9\u06cc \u0642\u062f\u0631 \u0627\u0633 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u062e\u062a\u0645 \u06c1\u0648\u0646\u06cc \u0686\u0627\u06c1\u06cc\u06d2: <code>clearpay-github-provider<\/code>\u0633\u0631\u0648\u0633 \u0627\u06a9\u0627\u0624\u0646\u0679 \u0627\u0633 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u062e\u062a\u0645 \u06c1\u0648\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2: <code>.iam.gserviceaccount.com<\/code>.<\/p>\n<p>\u067e\u06be\u0631\u060c \u062a\u0631\u062a\u06cc\u0628\u0627\u062a \u0645\u06cc\u06ba\u060c \u0645\u0627\u062d\u0648\u0644\u06cc\u0627\u062a \u067e\u0631 \u06a9\u0644\u06a9 \u06a9\u0631\u06cc\u06ba\u060c \u067e\u06be\u0631 \u0646\u06cc\u0627 \u062a\u062c\u0631\u0628\u06c1\u06d4 \u0628\u0631\u0627\u06c1 \u06a9\u0631\u0645 \u0627\u0633 \u06a9\u0627 \u0646\u0627\u0645 \u062f\u06cc\u06ba\u06d4 <code>production<\/code> \u0645\u0627\u062d\u0648\u0644 \u06a9\u0648 \u062a\u0631\u062a\u06cc\u0628 \u062f\u06cc\u06ba \u067e\u0631 \u06a9\u0644\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4 \u0645\u0637\u0644\u0648\u0628\u06c1 \u062c\u0627\u0626\u0632\u06c1 \u0644\u06cc\u0646\u06d2 \u0648\u0627\u0644\u0648\u06ba \u06a9\u0648 \u0645\u0646\u062a\u062e\u0628 \u06a9\u0631\u06cc\u06ba\u060c \u0627\u0646 \u06a9\u06d2 GitHub \u0646\u0627\u0645\u0648\u06ba \u06a9\u0648 \u062a\u0644\u0627\u0634 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u0645\u0646\u062a\u062e\u0628 \u06a9\u0631\u06cc\u06ba\u060c \u0627\u0648\u0631 \u067e\u0631\u0648\u0679\u06cc\u06a9\u0634\u0646 \u0631\u0648\u0644 \u0645\u062d\u0641\u0648\u0638 \u06a9\u0631\u06cc\u06ba \u067e\u0631 \u06a9\u0644\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p>\u06a9\u06cc\u0648\u06ba: \u0646\u0648\u06a9\u0631\u06cc 2 \u067e\u06cc\u062f\u0627\u0648\u0627\u0631 \u06a9\u0627 \u0648\u0627\u062d\u062f \u0631\u0627\u0633\u062a\u06c1 \u06c1\u06d2\u06d4 \u0645\u0637\u0644\u0648\u0628\u06c1 \u062c\u0627\u0626\u0632\u06c1 \u0644\u06cc\u0646\u06d2 \u0648\u0627\u0644\u06d2 GitHub \u067e\u0631 \u06a9\u0627\u0631\u0631\u0648\u0627\u0626\u06cc \u06a9\u0648 \u0631\u0648\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u0627\u0633\u06d2 \u06a9\u0633\u06cc \u0627\u0646\u0633\u0627\u0646 \u06a9\u06d2 \u0645\u0646\u0638\u0648\u0631 \u067e\u0631 \u06a9\u0644\u06a9 \u06a9\u0631\u0646\u06d2 \u06a9\u0627 \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u0631\u0646\u06d2 \u067e\u0631 \u0645\u062c\u0628\u0648\u0631 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0627\u0648\u0631 \u0627\u0633\u06d2 \u063a\u0644\u0637\u06cc \u0633\u06d2 \u06af\u0627\u06c1\u06a9 \u06a9\u0648 \u0645\u0646\u062a\u0642\u0644 \u06c1\u0648\u0646\u06d2 \u0633\u06d2 \u0631\u0648\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u062c\u0627\u0628 2 \u0628\u0627\u0628 19 \u0645\u06cc\u06ba \u0645\u0646\u0638\u0648\u0631\u06cc \u06a9\u0627 \u0645\u0646\u062a\u0638\u0631 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u0633 \u0635\u0641\u062d\u06c1 \u067e\u0631 \u0622\u067e \u06a9\u0648 Environment Secrets \u06a9\u0627 \u0627\u0646\u062a\u0638\u0627\u0645 \u06a9\u0631\u0646\u06d2 \u06a9\u0627 \u0628\u0679\u0646 \u0646\u0638\u0631 \u0622\u0626\u06d2 \u06af\u0627\u06d4 \u06a9\u0644\u06a9 \u0646\u06c1 \u06a9\u0631\u06cc\u06ba\u06d4 \u06a9\u06c1 <code>production<\/code> \u0622\u067e \u06a9\u06d2 \u0645\u0627\u062d\u0648\u0644 \u06a9\u0648 \u0631\u0627\u0632 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u06d2 \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u0622\u067e \u06a9\u06cc \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u0630\u062e\u06cc\u0631\u06c1 \u0634\u062f\u06c1 \u067e\u0627\u0633 \u0648\u0631\u0688 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u0622\u067e \u06a9\u06d2 \u06a9\u0627\u0645 \u06a9\u06d2 \u0628\u0648\u062c\u06be \u06a9\u06cc \u0634\u0646\u0627\u062e\u062a \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 Google \u062a\u06a9 \u0631\u0633\u0627\u0626\u06cc \u062d\u0627\u0635\u0644 \u06a9\u0631 \u0633\u06a9\u062a\u06cc \u06c1\u06d2\u06d4 \u0627\u06af\u0631 \u0622\u067e \u06a9\u06d2 \u067e\u0627\u0633 \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u06c1\u06cc \u0622\u067e \u06a9\u06d2 \u0630\u062e\u06cc\u0631\u06d2 \u0645\u06cc\u06ba \u062f\u0648\u0633\u0631\u06d2 \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679\u0633 \u06a9\u06d2 \u0631\u0627\u0632 \u06c1\u06cc\u06ba \u062a\u0648 \u0627\u0646 \u0631\u0627\u0632\u0648\u06ba \u06a9\u0648 \u0686\u06be\u0648\u0691 \u062f\u06cc\u06ba\u06d4<\/p>\n<p>\u0627\u06af\u0631 GitHub \u0627\u0633\u06d2 \u067e\u06cc\u0634 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 <strong>\u062c\u0627\u0626\u0632\u06c1 \u0644\u06cc\u0646\u06d2 \u0648\u0627\u0644\u0627 \u0645\u0637\u0644\u0648\u0628 \u06c1\u06d2\u06d4<\/strong>\u0645\u0641\u062a \u067e\u0644\u0627\u0646 \u06a9\u06d2 \u062a\u062d\u062a \u0622\u067e \u06a9\u0627 \u0630\u062e\u06cc\u0631\u06c1 \u0646\u062c\u06cc \u06c1\u0648 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u0633 \u0644\u06cc\u0628 \u06a9\u06d2 \u0630\u062e\u06cc\u0631\u06d2 \u06a9\u0648 \u0639\u0648\u0627\u0645\u06cc \u0628\u0646\u0627\u0626\u06cc\u06ba \u06cc\u0627 \u062c\u0627\u0626\u0632\u06c1 \u0644\u06cc\u0646\u06d2 \u0648\u0627\u0644\u0648\u06ba \u06a9\u0648 \u0686\u06be\u0648\u0691 \u062f\u06cc\u06ba\u06d4 \u0627\u06af\u0631 \u06a9\u0648\u0626\u06cc \u0646\u06c1\u06cc\u06ba \u06c1\u06d2 \u062a\u0648\u060c \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u06a9\u0627 \u06a9\u0627\u0645 \u0634\u0631\u0648\u0639 \u06c1\u0648\u062a\u06d2 \u06c1\u06cc \u0686\u0644 \u062c\u0627\u0626\u06d2 \u06af\u0627\u06d4<\/p>\n<p>\u0627\u06af\u0644\u0627\u060c \u0622\u06af\u06d2 \u0628\u0691\u06be\u0627\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba. \u0627\u06cc\u06a9 \u0646\u0627\u06a9\u0627\u0645 \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u06a9\u06cc \u0644\u0627\u06af\u062a 3 \u0645\u0646\u0679 \u06c1\u06d2 \u0627\u0648\u0631 \u0644\u0645\u0628\u06d2 \u0644\u0627\u06af \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4 \u0686\u06cc\u06a9 \u06a9\u06cc \u0642\u06cc\u0645\u062a 10s \u06c1\u06d2\u06d4 \u0633\u0628 \u0633\u06d2 \u067e\u06c1\u0644\u06d2\u060c \u0628\u0627\u0628 13 \u06a9\u06d2 \u0622\u062e\u0631 \u0633\u06d2 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4 \u062a\u0645\u0627\u0645 6 \u0644\u0627\u0626\u0646\u06cc\u06ba \u067e\u0631\u0646\u0679 \u06c1\u0648\u0646\u06cc \u0686\u0627\u06c1\u0626\u06cc\u06ba\u06d4 <code>ok<\/code>. \u067e\u06be\u0631 \u0627\u0633 \u0631\u06cc\u067e\u0648\u0632\u0679\u0631\u06cc \u06a9\u0627 \u0646\u0627\u0645 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba \u062c\u0648 \u0622\u067e \u0646\u06d2 \u06af\u0648\u06af\u0644 \u06a9\u0648 \u0641\u0631\u0627\u06c1\u0645 \u06a9\u06cc\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-bash\">REPO=$(grep '^github_repo' infra\/gcp\/terraform\/05-identity\/terraform.tfvars | cut -d'\"' -f2)\ncase \"$REPO\" in\n  https*|*.git|YOUR_GITHUB_USER\/*) echo \"MISSING github_repo must be owner\/name. It is: $REPO\" ;;\n  *\/*) echo \"ok   github_repo $REPO\" ;;\n  *)   echo \"MISSING github_repo must be owner\/name. It is: $REPO\" ;;\nesac\n<\/code><\/pre>\n<p>\u067e\u0631\u0646\u0679 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2 <code>ok<\/code> \u0627\u0648\u0631 \u0622\u067e \u06a9\u06d2 \u0627\u067e\u0646\u06d2 <code>owner\/name<\/code>.<\/p>\n<p>\u0627\u0628 \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u06a9\u0648 \u0645\u062a\u062d\u0631\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">git commit --allow-empty -m \"trigger pipeline\"\ngit push\n<\/code><\/pre>\n<h4 id=\"heading-check\">\u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba<\/h4>\n<p>\u0627\u0641\u062a\u062a\u0627\u062d\u06cc <strong>\u0639\u0645\u0644<\/strong> \u0679\u06cc\u0628 \u067e\u0631 \u06a9\u0644\u06a9 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u0686\u0644\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u0648\u0631\u06a9 \u0641\u0644\u0648 \u067e\u0631 \u06a9\u0644\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4 \u0627\u06af\u0644\u06d2 \u0627\u0642\u062f\u0627\u0645\u0627\u062a \u067e\u0631 \u0646\u0638\u0631 \u0631\u06a9\u06be\u06cc\u06ba\u06d4 <code>build-scan-push<\/code> \u0627\u0646\u06c1\u06cc\u06ba \u0627\u06cc\u06a9 \u0627\u06cc\u06a9 \u06a9\u0631\u06a9\u06d2 \u0645\u06a9\u0645\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 \u06c1\u0631 \u0622\u0626\u0679\u0645 \u067e\u0631 \u0627\u06cc\u06a9 \u0686\u06cc\u06a9 \u0645\u0627\u0631\u06a9 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4 \u062a\u0639\u0645\u06cc\u0631 <strong>\u0627\u0633\u06a9\u06cc\u0646 API \u0627\u0645\u06cc\u062c<\/strong>\u060c <strong>UI \u0627\u0645\u06cc\u062c \u0627\u0633\u06a9\u06cc\u0646<\/strong>\u060c <strong>GCP \u0633\u06d2 \u062a\u0635\u062f\u06cc\u0642 \u06a9\u0631\u06cc\u06ba\u06d4<\/strong>\u062f\u06be\u06a9\u0627 <strong>\u0627\u0633\u0679\u06cc\u062c\u0646\u06af \u067e\u0631 \u062a\u0639\u06cc\u0646\u0627\u062a \u06a9\u0631\u06cc\u06ba\u06d4<\/strong>.<\/p>\n<p>\u062c\u0628 \u06a9\u0648\u0626\u06cc \u0642\u062f\u0645 \u0633\u0631\u062e \u06c1\u0648 \u062c\u0627\u0626\u06d2 \u062a\u0648 \u0627\u0633\u06d2 \u06cc\u06c1\u0627\u06ba \u062a\u0644\u0627\u0634 \u06a9\u0631\u06cc\u06ba\u06d4 \u06c1\u0631 \u0645\u0631\u062d\u0644\u06c1 \u0648\u0631\u06a9 \u0641\u0644\u0648 \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0686\u0644\u0627\u0646\u06d2 \u06a9\u06d2 \u067e\u06cc\u063a\u0627\u0645 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u062e\u062a\u0645 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<table>\n<thead>\n<tr>\n<th>\u0633\u0631\u062e \u0642\u062f\u0645<\/th>\n<th>\u062a\u062d\u0631\u06cc\u06a9<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><strong>\u0627\u0633\u06a9\u06cc\u0646 API \u0627\u0645\u06cc\u062c<\/strong> \u06cc\u0627 <strong>UI \u0627\u0645\u06cc\u062c \u0627\u0633\u06a9\u06cc\u0646<\/strong><\/td>\n<td>\"\u0627\u06af\u0631 \u0627\u0633\u06a9\u06cc\u0646 \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648\u062c\u0627\u062a\u0627 \u06c1\u06d2\"<\/td>\n<\/tr>\n<tr>\n<td><strong>GCP \u0633\u06d2 \u062a\u0635\u062f\u06cc\u0642 \u06a9\u0631\u06cc\u06ba\u06d4<\/strong><\/td>\n<td>'\u0627\u06af\u0631 \u062c\u06cc \u0633\u06cc \u067e\u06cc \u06a9\u06cc \u062a\u0648\u062b\u06cc\u0642 \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648\u062c\u0627\u062a\u06cc \u06c1\u06d2'<\/td>\n<\/tr>\n<tr>\n<td><strong>\u0627\u0633\u0679\u06cc\u062c\u0646\u06af \u067e\u0631 \u062a\u0639\u06cc\u0646\u0627\u062a \u06a9\u0631\u06cc\u06ba\u06d4<\/strong><\/td>\n<td>\"\u0627\u06af\u0631 \u0633\u0679\u06cc\u062c\u0646\u06af \u067e\u0631 \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648 \u062c\u0627\u062a\u06cc \u06c1\u06d2\"<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u062a\u0631\u0645\u06cc\u0645 \u06a9\u06d2 \u0628\u0639\u062f \u062f\u0648\u0628\u0627\u0631\u06c1 \u0686\u0644\u0627\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 <strong>\u0639\u0645\u0644<\/strong> \u0679\u06cc\u0628 \u0645\u06cc\u06ba\u060c \u0646\u0627\u06a9\u0627\u0645 \u0631\u0646\u0632 \u067e\u0631 \u06a9\u0644\u06a9 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 <strong>\u062a\u0645\u0627\u0645 \u06a9\u0627\u0645 \u062f\u0648\u0628\u0627\u0631\u06c1 \u06a9\u0631\u06cc\u06ba\u06d4<\/strong> \u0627\u0648\u067e\u0631 \u062f\u0627\u0626\u06cc\u06ba \u0637\u0631\u0641\u06d4 \u062f\u0648\u0628\u0627\u0631\u06c1 \u062f\u06be\u06a9\u06cc\u0644\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u0646\u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u062f\u0648\u0633\u0631\u0627 \u06a9\u0627\u0645\u060c <strong>\u067e\u06cc\u062f\u0627\u0648\u0627\u0631 \u06a9\u0648 \u0641\u0631\u0648\u063a \u062f\u06cc\u0627<\/strong>\u0633\u0644\u06cc\u0634 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0627\u06cc\u06a9 \u0633\u0631\u0645\u0626\u06cc \u062f\u0627\u0626\u0631\u06c1 \u0638\u0627\u06c1\u0631 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4 \u062a\u0645 \u0679\u06be\u06cc\u06a9 \u06c1\u0648 GitHub \u062c\u0628 \u0628\u06be\u06cc \u0622\u067e \u062f\u0628\u0627\u062a\u06d2 \u06c1\u06cc\u06ba \u0627\u0633\u06d2 \u0686\u06be\u0648\u0691 \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0635\u0631\u0641 \u0627\u0633 \u0648\u0642\u062a \u0686\u0644\u062a\u0627 \u06c1\u06d2 \u062c\u0628 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u0628\u0627\u0628 19 \u0633\u06d2 \u0634\u0631\u0648\u0639 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u062c\u0628 <strong>\u0627\u0633\u0679\u06cc\u062c\u0646\u06af \u067e\u0631 \u062a\u0639\u06cc\u0646\u0627\u062a \u06a9\u0631\u06cc\u06ba\u06d4<\/strong> \u0627\u06af\u0631 \u06cc\u06c1 \u06af\u0632\u0631 \u062c\u0627\u062a\u0627 \u06c1\u06d2 \u062a\u0648 \u06a9\u0644\u0633\u0679\u0631 \u06a9\u0648 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">kubectl -n staging get pods\n<\/code><\/pre>\n<p>\u0622\u067e API \u0627\u0648\u0631 UI \u067e\u0648\u0688\u0632 \u062f\u06cc\u06a9\u06be\u06cc\u06ba \u06af\u06d2\u06d4 <code>Running<\/code> \u06a9\u06d2 \u0633\u0627\u062a\u06be <code>READY 1\/1<\/code>.<\/p>\n<p>\u0633\u0679\u06cc\u062c\u0646\u06af \u06a9\u0627 \u06a9\u0648\u0626\u06cc \u0639\u0648\u0627\u0645\u06cc \u067e\u062a\u06c1 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2 \u0627\u0648\u0631 \u0644\u0648\u0688 \u0628\u06cc\u0644\u0646\u0633 \u0627\u0628 \u0628\u06be\u06cc \u062a\u0645\u0627\u0645 \u0635\u0627\u0631\u0641\u06cc\u0646 \u06a9\u0648 AWS \u067e\u0631 \u0628\u06be\u06cc\u062c\u062a\u0627 \u06c1\u06d2\u06d4 \u062a\u06cc\u0627\u0631\u06cc \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u067e\u0646\u0627 \u0628\u0631\u0627\u0624\u0632\u0631 \u0646\u06c1 \u06a9\u06be\u0648\u0644\u06cc\u06ba\u06d4 \u0628\u0627\u0628 15 \u0627\u06cc\u06a9 \u0630\u0627\u062a\u06cc \u0633\u0631\u0646\u06af \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u067e\u06c1\u0646\u0686\u0627 \u06c1\u06d2\u06d4<\/p>\n<h4 id=\"heading-if-the-scan-fails\">\u0627\u06af\u0631 \u0627\u0633\u06a9\u06cc\u0646\u0646\u06af \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648\u062c\u0627\u062a\u06cc \u06c1\u06d2\u06d4<\/h4>\n<p>\u06a9\u0628\u06be\u06cc \u0646\u06c1\u06cc\u06ba \u0628\u062f\u0644\u062a\u06d2 <code>exit-code: \"1\"<\/code> \u06a9\u0648 <code>\"0\"<\/code>. \u0627\u0633 \u0633\u06d2 \u0633\u06cc\u06a9\u0648\u0631\u0679\u06cc \u06af\u06cc\u0679 \u0628\u0646\u062f \u06c1\u0648 \u062c\u0627\u0626\u06d2 \u06af\u0627\u06d4<\/p>\n<p>\u0688\u0627\u06a9\u0631 \u0641\u0627\u0626\u0644 \u067e\u06c1\u0644\u06d2 \u06c1\u06cc \u067e\u06cc\u0686 \u0634\u062f\u06c1 \u06c1\u06d2\u060c \u0644\u06c1\u0630\u0627 \u0686\u06cc\u06a9 \u067e\u0627\u0633 \u06c1\u0648\u0646\u0627 \u0686\u0627\u06c1\u0626\u06d2\u06d4 \u0646\u0626\u06d2 \u062d\u0641\u0627\u0638\u062a\u06cc \u0633\u0648\u0631\u0627\u062e \u0645\u0633\u062a\u0642\u0628\u0644 \u0645\u06cc\u06ba \u0633\u0631\u062e \u06c1\u0648 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0631\u06cc\u0688 \u0679\u0627\u0633\u06a9 \u06a9\u06be\u0648\u0644\u06cc\u06ba\u06d4 \u0679\u0631\u06cc\u0648\u06cc \u0679\u06cc\u0628\u0644 \u067e\u0631\u0646\u0679 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u062a\u0644\u0627\u0634 \u06a9\u0631\u06cc\u06ba\u06d4 <strong>\u06c1\u062f\u0641<\/strong> \u06a9\u0627\u0644\u0645 \u062a\u0644\u0627\u0634 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u0645\u06cc\u0686 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<table>\n<thead>\n<tr>\n<th>\u06c1\u062f\u0641 \u06a9\u0627\u0644\u0645<\/th>\n<th>\u0645\u0639\u0646\u06cc<\/th>\n<th>\u06a9\u06cc\u0627 \u06a9\u0631\u0646\u0627 \u06c1\u06d2<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>\u0622\u067e\u0631\u06cc\u0679\u0646\u06af \u0633\u0633\u0679\u0645\u0632 \u0645\u06cc\u06ba \u0634\u0627\u0645\u0644 \u06c1\u06cc\u06ba: <code>debian 12.x<\/code>\u0641\u06a9\u0633\u0688 \u06a9\u0627\u0644\u0645 \u06a9\u0627 \u0648\u0631\u0698\u0646 \u06c1\u06d2\u06d4<\/td>\n<td>\u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u0637\u06d2 \u0634\u062f\u06c1 \u062a\u0635\u0648\u06cc\u0631 \u067e\u06cc\u0686\u06be\u06d2 \u06c1\u06d2\u06d4<\/td>\n<td>\u062f\u0648\u0628\u0627\u0631\u06c1 \u062a\u0639\u0645\u06cc\u0631 \u06a9\u0631\u06cc\u06ba\u06d4 \u0627\u06af\u0631 \u06cc\u06c1 \u0633\u0631\u062e \u0631\u06c1\u062a\u0627 \u06c1\u06d2 \u062a\u0648 \u0622\u06af\u06d2 \u0628\u0691\u06be\u06cc\u06ba\u06d4 <code>FROM node:22-slim<\/code> \u062a\u0627\u0632\u06c1 \u062a\u0631\u06cc\u0646 <code>22.x-slim<\/code> Docker Hub \u0645\u06cc\u06ba \u0679\u06cc\u06af\u0632 \u0634\u0627\u0645\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/td>\n<\/tr>\n<tr>\n<td><code>usr\/local\/lib\/node_modules\/npm<\/code><\/td>\n<td>npm \u067e\u06cc\u06a9\u062c \u0628\u06be\u06cc\u062c\u062a\u0627 \u06c1\u06d2\u06d4<\/td>\n<td>Dockerfile \u0688\u06cc\u0644\u06cc\u0679 npm \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 \u0622\u06cc\u0627 \u0688\u06cc\u0644\u06cc\u0679 \u0644\u0627\u0626\u0646 \u0627\u0628\u06be\u06cc \u0628\u06be\u06cc \u0645\u0648\u062c\u0648\u062f \u06c1\u06d2\u06d4<\/td>\n<\/tr>\n<tr>\n<td><code>app\/node_modules<\/code> \u06cc\u0627 <code>package-lock.json<\/code><\/td>\n<td>ClearPay \u067e\u06cc\u06a9\u062c\u0648\u06ba \u0645\u06cc\u06ba \u0633\u06d2 \u0627\u06cc\u06a9 \u067e\u06cc\u0686\u06be\u06d2 \u06c1\u06d2\u06d4<\/td>\n<td>\u0627\u0633\u06d2 \u0645\u0627\u0631\u0648 <code>api\/package.json<\/code> \u06cc\u0627 <code>ui\/package.json<\/code><\/td>\n<\/tr>\n<tr>\n<td>\u0627\u0644\u067e\u0627\u0626\u0646 \u067e\u06cc\u06a9\u062c\u060c <strong>UI \u0627\u0645\u06cc\u062c \u0627\u0633\u06a9\u06cc\u0646<\/strong>\u0641\u06a9\u0633\u0688 \u0648\u0631\u0698\u0646 \u0628\u06be\u06cc \u0634\u0627\u0645\u0644 \u06c1\u06d2\u06d4<\/td>\n<td>UI \u0688\u06cc\u0641\u0627\u0644\u0679 \u0627\u0645\u06cc\u062c \u0627\u0633 \u06a9\u06d2 \u067e\u06cc\u0686\u06be\u06d2 \u06c1\u06d2\u06d4<\/td>\n<td>\u0634\u0627\u0645\u0644 \u06a9\u0631\u06cc\u06ba <code>RUN apk upgrade --no-cache<\/code> nginx \u0627\u0642\u062f\u0627\u0645\u0627\u062a <code>ui\/Dockerfile.prod<\/code><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Dockerfile \u06a9\u0648 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f\u060c \u0645\u0642\u0627\u0645\u06cc \u0637\u0648\u0631 \u067e\u0631 \u062f\u0648\u0628\u0627\u0631\u06c1 \u062a\u0639\u0645\u06cc\u0631 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u06cc\u0642\u06cc\u0646\u06cc \u0628\u0646\u0627\u0626\u06cc\u06ba \u06a9\u06c1 \u0635\u0627\u0631\u0641 \u0627\u0628 \u0628\u06be\u06cc \u062f\u0631\u0633\u062a \u06c1\u06d2\u06d4 <code>appuser<\/code>:<\/p>\n<pre><code class=\"language-bash\">docker build -t clearpay-api:test .\/api\ndocker run --rm clearpay-api:test whoami\n<\/code><\/pre>\n<p>\u0639\u06c1\u062f \u06a9\u0631\u0646\u0627\u060c \u062f\u06be\u06a9\u0627 \u062f\u06cc\u0646\u0627 <code>main<\/code>\u06a9\u0644\u06a9 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u0627\u06cc\u06a9\u0634\u0646 \u062f\u0648\u0628\u0627\u0631\u06c1 \u062f\u06cc\u06a9\u06be\u06cc\u06ba\u06d4<\/p>\n<h4 id=\"heading-if-authenticate-to-gcp-fails\">\u0627\u06af\u0631 GCP \u06a9\u06cc \u062a\u0648\u062b\u06cc\u0642 \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648\u062c\u0627\u062a\u06cc \u06c1\u06d2\u06d4<\/h4>\n<p>\u063a\u0644\u0637\u06cc \u06cc\u06c1 \u06c1\u06d2:<\/p>\n<pre><code class=\"language-plaintext\">The given credential is rejected by the attribute condition.\n<\/code><\/pre>\n<p>\u06af\u0648\u06af\u0644 \u0646\u06d2 \u0642\u0628\u0648\u0644 \u06a9\u06cc\u0627 \u0627\u0648\u0631 \u067e\u06be\u0631 GitHub \u0679\u0648\u06a9\u0646\u0632 \u06a9\u0648 \u0645\u0633\u062a\u0631\u062f \u06a9\u0631 \u062f\u06cc\u0627\u06d4 \u0645\u0631\u062d\u0644\u06c1 5 \u062f\u0648\u0633\u0631\u06d2 \u0631\u06cc\u067e\u0648\u0632\u0679\u0631\u06cc \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u0646\u0627\u0645 \u0628\u062a\u0627\u062a\u0627 \u06c1\u06d2\u060c \u0627\u06a9\u062b\u0631 \u067e\u0644\u06cc\u0633 \u06c1\u0648\u0644\u0688\u0631 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2\u06d4 <code>YOUR_GITHUB_USER\/YOUR_REPO<\/code>. \u0627\u0642\u062f\u0627\u0631 \u0628\u0627\u0644\u06a9\u0644 \u062f\u0631\u0633\u062a \u06c1\u0648\u0646\u06d2 \u0686\u0627\u06c1\u0626\u06cc\u06ba\u06d4 <code>owner\/name<\/code>\u0634\u0628 \u0628\u062e\u06cc\u0631 <code>Osomudeya\/migrate-api-aws-gke-devops<\/code>. \u0645\u06a9\u0645\u0644 URL \u0645\u0645\u0627\u062b\u0644 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u060c \u0627\u0648\u0631 \u0646\u06c1 \u06c1\u06cc \u06a9\u0633\u06cc \u0627\u0648\u0631 \u06a9\u0627 \u0630\u062e\u06cc\u0631\u06c1\u06d4 \u0635\u062d\u06cc\u062d \u0627\u0642\u062f\u0627\u0631 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0627\u0648\u067e\u0631 \u0648\u0627\u0644\u0627 \u0645\u0631\u062d\u0644\u06c1 2 \u062f\u06c1\u0631\u0627\u0626\u06cc\u06ba\u06d4 <code>owner\/name<\/code>. \u067e\u06be\u0631 \u0627\u067e\u0646\u06d2 \u0648\u0631\u06a9 \u0641\u0644\u0648 \u06a9\u0648 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u06cc\u06d2 \u0628\u063a\u06cc\u0631 \u062f\u0648\u0628\u0627\u0631\u06c1 \u06a9\u0648\u0634\u0634 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">git commit --allow-empty -m \"retry pipeline after WIF repo lock\"\ngit push\n<\/code><\/pre>\n<h4 id=\"heading-if-deploy-to-staging-fails\">\u0627\u06af\u0631 \u0627\u0633\u0679\u06cc\u062c\u0646\u06af \u067e\u0631 \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648\u062c\u0627\u062a\u06cc \u06c1\u06d2\u06d4<\/h4>\n<p>\u062f\u0648\u0646\u0648\u06ba \u067e\u06cc\u063a\u0627\u0645\u0627\u062a \u06a9\u0627 \u0645\u0637\u0644\u0628 \u0627\u06cc\u06a9 \u06c1\u06cc \u06c1\u06d2\u06d4 <code>error: timed out waiting for the condition<\/code> \u0627\u0648\u0631 <code>error: deployment \"clearpay-api\" exceeded its progress deadline<\/code>. \u0641\u0627\u0626\u0644 \u0644\u06af\u0627\u0626\u06cc \u06af\u0626\u06cc \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u067e\u0648\u0688 \u062a\u06cc\u0627\u0631 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u0627\u067e\u0646\u06d2 \u06a9\u0644\u0633\u0679\u0631 \u0633\u06d2 \u067e\u0648\u0686\u06be\u06cc\u06ba \u06a9\u06cc\u0648\u06ba:<\/p>\n<pre><code class=\"language-bash\">kubectl -n staging get pods\nkubectl -n staging describe pod -l app=clearpay-api\n<\/code><\/pre>\n<p>\u067e\u06be\u0631 \u062c\u0648 \u0622\u067e \u062f\u06cc\u06a9\u06be\u062a\u06d2 \u06c1\u06cc\u06ba \u0627\u0633 \u0633\u06d2 \u0645\u0644\u0627\u0626\u06cc\u06ba\u06d4 \u067e\u06c1\u0644\u06cc \u062f\u0648 \u0644\u0627\u0626\u0646\u06cc\u06ba \u062c\u0627\u0628 \u0644\u0627\u06af \u0645\u06cc\u06ba \u0638\u0627\u06c1\u0631 \u06c1\u0648\u062a\u06cc \u06c1\u06cc\u06ba\u06d4 \u0628\u0627\u0642\u06cc \u067e\u0648\u0688 \u0622\u0624\u0679 \u067e\u0679 \u0645\u06cc\u06ba \u0638\u0627\u06c1\u0631 \u06c1\u0648\u06ba \u06af\u06d2\u06d4<\/p>\n<table>\n<thead>\n<tr>\n<th>\u062c\u0648 \u062a\u0645 \u062f\u06cc\u06a9\u06be\u062a\u06d2 \u06c1\u0648<\/th>\n<th>\u0645\u0639\u0646\u06cc<\/th>\n<th>\u06a9\u06cc\u0627 \u06a9\u0631\u0646\u0627 \u06c1\u06d2<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>no matches for kind \"SecretProviderClass\"<\/code> \u06cc\u0627 <code>\"SecretSync\"<\/code><\/td>\n<td>\u0633\u06cc\u06a9\u0631\u0679 \u0645\u06cc\u0646\u06cc\u062c\u0631 \u0627\u06cc\u0688 \u0622\u0646 \u06a9\u0648 \u063a\u06cc\u0631 \u0641\u0639\u0627\u0644 \u06a9\u0631 \u062f\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4<\/td>\n<td>\u062f\u0648 \u0686\u0644\u0627\u0626\u06cc\u06ba <code>gcloud<\/code> \u0628\u0627\u0628 13\u060c \u062d\u0635\u06c1 A \u0622\u0631\u0688\u0631\u06d4 \u0648\u0631\u06a9 \u0641\u0644\u0648 \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0686\u0644\u0627\u0626\u06cc\u06ba\u06d4<\/td>\n<\/tr>\n<tr>\n<td><code>Permission denied<\/code> \u06a9\u0648 <code>gcloud secrets versions access<\/code><\/td>\n<td>\u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u0627\u06a9\u0627\u0624\u0646\u0679\u0633 \u0627\u0633\u0679\u06cc\u062c\u0646\u06af \u0631\u0627\u0632 \u0646\u06c1\u06cc\u06ba \u067e\u0691\u06be \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/td>\n<td>\u0645\u0631\u062d\u0644\u06c1 6 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0644\u0627\u06af\u0648 \u06a9\u0631\u06cc\u06ba (\u0630\u06cc\u0644 \u0645\u06cc\u06ba \u062a\u0631\u0645\u06cc\u0645 A)\u06d4<\/td>\n<\/tr>\n<tr>\n<td><code>ImagePullBackOff<\/code> \u06a9\u06d2 \u0633\u0627\u062a\u06be <code>403 Forbidden<\/code><\/td>\n<td>\u06a9\u0644\u0633\u0679\u0631 \u0645\u0634\u06cc\u0646 \u0631\u062c\u0633\u0679\u0631\u06cc \u0646\u06c1\u06cc\u06ba \u067e\u0691\u06be \u0633\u06a9\u062a\u06cc\u06d4<\/td>\n<td>\u0645\u0631\u062d\u0644\u06c1 4 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0644\u06af\u0627\u0626\u06cc\u06ba \u0627\u0648\u0631 \u067e\u06be\u0631 \u067e\u0648\u0688 \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0634\u0631\u0648\u0639 \u06a9\u0631\u06cc\u06ba (\u0630\u06cc\u0644 \u0645\u06cc\u06ba \u062a\u0631\u0645\u06cc\u0645 B)\u06d4<\/td>\n<\/tr>\n<tr>\n<td><code>Insufficient cpu<\/code><\/td>\n<td>\u06a9\u0644\u0633\u0679\u0631 \u0628\u0691\u06be \u0631\u06c1\u0627 \u06c1\u06d2 \u06cc\u0627 \u0628\u06be\u0631\u0627 \u06c1\u0648\u0627 \u06c1\u06d2\u06d4<\/td>\n<td>\u0686\u0644\u0627\u0626\u06cc\u06ba <code>kubectl get nodes<\/code>. 3 \u0633\u06d2 \u06a9\u0645 \u0645\u0634\u06cc\u0646\u06cc\u06ba: \u0628\u0631\u0627\u06c1 \u06a9\u0631\u0645 \u0686\u0646\u062f \u0645\u0646\u0679 \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u0631\u06cc\u06ba\u06d4 3 \u0645\u0634\u06cc\u0646\u06cc\u06ba: \u062a\u0631\u0627\u0632\u0648 1 API \u067e\u0648\u0688 (\u0630\u06cc\u0644 \u0645\u06cc\u06ba C \u0645\u06cc\u06ba \u062a\u0631\u0645\u06cc\u0645 \u06a9\u0631\u06cc\u06ba) \u062a\u06a9 \u067e\u06c1\u0646\u0686\u062a\u0627 \u06c1\u06d2\u06d4<\/td>\n<\/tr>\n<tr>\n<td><code>FailedMount<\/code> \u06a9\u06d2 \u0633\u0627\u062a\u06be <code>driver ... not found<\/code>\u06cc\u0627 <code>secret \"clearpay-api-secrets\" not found<\/code><\/td>\n<td>\u0646\u0626\u06cc \u0645\u0634\u06cc\u0646 \u0627\u0628\u06be\u06cc \u0634\u0631\u0648\u0639 \u06c1\u0648 \u0631\u06c1\u06cc \u06c1\u06d2 \u06cc\u0627 \u0633\u06cc\u06a9\u0631\u0679 \u0633\u0646\u06a9 \u0646\u06d2 \u0627\u0628\u06be\u06cc \u062a\u06a9 \u0631\u0627\u0632 \u0646\u06c1\u06cc\u06ba \u0644\u06a9\u06be\u0627 \u06c1\u06d2\u06d4<\/td>\n<td>\u0628\u0631\u0627\u06c1 \u06a9\u0631\u0645 2 \u0645\u0646\u0679 \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u0631\u06cc\u06ba\u06d4 \u067e\u0648\u0688 \u0627\u067e\u0646\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u062f\u0648\u0628\u0627\u0631\u06c1 \u06a9\u0648\u0634\u0634 \u06a9\u0631\u06d2 \u06af\u0627\u06d4 \u0627\u0633\u06d2 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba <code>kubectl -n staging get secret clearpay-api-secrets<\/code>.<\/td>\n<\/tr>\n<tr>\n<td><code>Running<\/code> \u0644\u06cc\u06a9\u0646 <code>READY 0\/1<\/code>\u06a9\u06d2 \u0633\u0627\u062a\u06be <code>Connection terminated due to connection timeout<\/code> \u06cc\u0627 <code>Readiness probe failed<\/code><\/td>\n<td>Pod PostgreSQL \u0633\u06d2 \u0645\u0646\u0633\u0644\u06a9 \u0646\u06c1\u06cc\u06ba \u06c1\u0648 \u0633\u06a9\u062a\u0627\u06d4<\/td>\n<td>\u0628\u0627\u0628 13 \u06a9\u06d2 \u0622\u062e\u0631 \u0645\u06cc\u06ba \u0686\u06cc\u06a9 \u0686\u0644\u0627\u0626\u06cc\u06ba\u06d4 <code>MISSING<\/code> \u0644\u0627\u0626\u0646\u06cc\u06ba \u0646\u0627\u0645\u06a9\u0645\u0644 \u06a9\u0627\u0645 \u062f\u06a9\u06be\u0627\u062a\u06cc \u06c1\u06cc\u06ba\u06d4 \u0628\u0627\u0628 13\u060c \u062d\u0635\u06c1 B \u0627\u06cc\u06a9 \u0639\u0627\u0645 \u0648\u062c\u06c1 \u06c1\u06d2\u06d4 \u0627\u06af\u0644\u06cc \u0635\u062d\u062a \u06a9\u06cc \u062c\u0627\u0646\u0686 \u067e\u0631 \u067e\u06be\u0644\u06cc \u062e\u0648\u062f \u062a\u06cc\u0627\u0631 \u06c1\u0648 \u062c\u0627\u0626\u06d2 \u06af\u06cc\u06d4<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><strong>\u0679\u06be\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba A\u06d4 \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u06a9\u0648 \u0633\u0679\u06cc\u062c\u0646\u06af \u0633\u06cc\u06a9\u0631\u0679 \u062a\u06a9 \u0631\u0633\u0627\u0626\u06cc \u062f\u06cc\u06ba\u06d4<\/strong><\/p>\n<pre><code class=\"language-bash\">cd infra\/gcp\/terraform\/06-secrets\nterraform plan\nterraform apply\n<\/code><\/pre>\n<p><strong>B \u0645\u06cc\u06ba \u062a\u0631\u0645\u06cc\u0645 \u06a9\u0631\u06cc\u06ba\u06d4 \u06a9\u0644\u0633\u0679\u0631 \u06a9\u0648 \u0631\u062c\u0633\u0679\u0631\u06cc \u067e\u0691\u06be\u0646\u06d2 \u06a9\u0648 \u06a9\u06c1\u06cc\u06ba\u06d4<\/strong> \u0645\u0634\u06cc\u0646\u06cc\u06ba \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u0637\u06d2 \u0634\u062f\u06c1 \u06a9\u0645\u067e\u06cc\u0648\u0679 \u0627\u0646\u062c\u0646 \u0633\u0631\u0648\u0633 \u0627\u06a9\u0627\u0624\u0646\u0679 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u062a\u0635\u0627\u0648\u06cc\u0631 \u06a9\u06be\u06cc\u0646\u0686\u062a\u06cc \u06c1\u06cc\u06ba\u06d4 <code>artifactregistry.reader<\/code>. \u0645\u0646\u0635\u0648\u0628\u06c1 \u0627\u06cc\u06a9 \u0627\u0635\u0648\u0644 \u06a9\u0627 \u0627\u0636\u0627\u0641\u06c1 \u06a9\u0631\u062a\u0627 \u06c1\u06d2:<\/p>\n<pre><code class=\"language-bash\">cd infra\/gcp\/terraform\/04-registry\nterraform plan\nterraform apply\n<\/code><\/pre>\n<p>\u067e\u06be\u0631 \u0627\u0633\u0679\u06cc\u062c\u0646\u06af \u067e\u0648\u0688 \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0634\u0631\u0648\u0639 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">kubectl -n staging rollout restart deployment\/clearpay-api deployment\/clearpay-ui\nkubectl -n staging rollout status deployment\/clearpay-api --timeout=180s\nkubectl -n staging rollout status deployment\/clearpay-ui --timeout=180s\n<\/code><\/pre>\n<p><strong>C \u0645\u06cc\u06ba \u062a\u0631\u0645\u06cc\u0645 \u06a9\u0631\u06cc\u06ba\u06d4 \u0633\u0679\u06cc\u062c\u0646\u06af \u0645\u06cc\u06ba \u0627\u06cc\u06a9 API \u067e\u0648\u0688 \u0686\u0644\u0627\u0626\u06cc\u06ba\u06d4<\/strong> \u0627\u06cc\u06a9 \u0686\u06be\u0648\u0679\u0627 \u0644\u06cc\u0628 \u06a9\u0644\u0633\u0679\u0631 \u062f\u0648 \u0641\u0679 \u0646\u06c1\u06cc\u06ba \u06c1\u0648 \u0633\u06a9\u062a\u0627\u06d4 \u0627\u0633\u06a9\u06cc\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f\u060c \u0648\u0631\u06a9 \u0641\u0644\u0648 \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0686\u0644\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">kubectl -n staging scale deployment\/clearpay-api --replicas=1\n<\/code><\/pre>\n<p>\u0628\u063a\u06cc\u0631 \u067e\u0631\u0646\u0679\u0646\u06af \u06a9\u06d2 API \u0644\u0627\u06af\u0632 \u06a9\u0648 \u067e\u0691\u06be\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2\u060c \u0627\u0646 \u06c1\u062f\u0627\u06cc\u0627\u062a \u067e\u0631 \u0639\u0645\u0644 \u06a9\u0631\u06cc\u06ba:<\/p>\n<pre><code class=\"language-bash\">kubectl -n staging logs deployment\/clearpay-api --tail=20\n<\/code><\/pre>\n<h4 id=\"heading-done-when\">\u0645\u06a9\u0645\u0644 \u06c1\u0648\u0646\u06d2 \u067e\u0631:<\/h4>\n<ul>\n<li>\n<p>\u06a9\u06cc\u0627 \u0622\u067e \u0648\u0636\u0627\u062d\u062a \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba \u06a9\u06c1 \u06c1\u0631 \u062f\u0648 \u06a9\u0627\u0645 \u06a9\u06cc\u0627 \u06c1\u06d2\u061f <code>deploy.yml<\/code> \u06a9\u0631\u0648<\/p>\n<\/li>\n<li>\n<p>\u06a9\u06c1 <code>production<\/code> \u0627\u06cc\u06a9 \u0645\u0627\u062d\u0648\u0644 \u0627\u06cc\u06a9 \u0645\u0637\u0644\u0648\u0628\u06c1 \u062c\u0627\u0626\u0632\u06c1 \u0646\u06af\u0627\u0631 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0645\u0648\u062c\u0648\u062f \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u0627\u0633\u0679\u06cc\u062c\u0646\u06af \u067e\u0631 \u062a\u0639\u06cc\u0646\u0627\u062a \u06a9\u0631\u06cc\u06ba\u06d4<\/strong> \u06af\u0632\u0631 \u06af\u06cc\u0627<\/p>\n<\/li>\n<li>\n<p><code>kubectl -n staging get pods<\/code> API \u0627\u0648\u0631 UI \u062f\u06a9\u06be\u0627\u062a\u0627 \u06c1\u06d2\u06d4 <code>Running<\/code>\u060c <code>READY 1\/1<\/code><\/p>\n<\/li>\n<\/ul>\n<p>\u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u0648\u06c1\u06cc\u06ba \u0631\u06a9 \u062c\u0627\u062a\u06cc \u06c1\u06d2\u06d4 \u06c1\u0645 \u067e\u0631\u0648\u0645\u0648\u0634\u0646\u0644 \u06af\u06cc\u0679\u0633 \u0646\u06c1\u06cc\u06ba \u0686\u0644\u0627\u062a\u06d2\u06d4 \u0628\u0627\u0628 15 \u0645\u06cc\u06ba\u060c \u06c1\u0627\u06ba\u06d4<\/p>\n<h3 id=\"heading-chapter-15-check-staging-and-run-the-promotion-gate\">\u0628\u0627\u0628 15 \u0633\u0679\u06cc\u062c\u0646\u06af \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u067e\u0631\u0648\u0645\u0648\u0634\u0646 \u06af\u06cc\u0679 \u0686\u0644\u0627\u0626\u06cc\u06ba\u06d4<\/h3>\n<p><em>\u062f\u0648\u0633\u0631\u0627 \u0628\u062f\u06be \u0635\u0628\u062d 10 \u0628\u062c\u06d2<\/em><\/p>\n<p>\u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u06af\u0632\u0634\u062a\u06c1 \u0631\u0627\u062a 6:40 \u067e\u0631 \u0628\u063a\u06cc\u0631 \u06a9\u0633\u06cc \u063a\u0644\u0637\u06cc \u06a9\u06d2 \u0645\u06a9\u0645\u0644 \u06c1\u0648\u0626\u06cc\u06d4 \u0622\u067e \u0646\u06d2 \u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679 \u0644\u06cc\u0627\u06d4 ClearPay \u067e\u0631 \u06a9\u0648\u0626\u06cc \u0628\u06be\u06cc \u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679\u0633 \u06a9\u06cc \u067e\u0631\u0648\u0627\u06c1 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0688\u06cc\u0646\u06cc\u0626\u0644 \u0627\u067e\u0646\u06cc \u0645\u06cc\u0632 \u067e\u0631 \u0631\u06a9 \u062c\u0627\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u06af\u0632\u0631\u062a\u06cc \u06c1\u0648\u0626\u06cc \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u06a9\u0648 \u062f\u06cc\u06a9\u06be\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0688\u06cc\u0646\u06cc\u0644: \"\u062a\u0648 \u06a9\u06cc\u0627 \u062c\u06cc \u06a9\u06d2 \u0627\u06cc \u0635\u062d\u062a \u0645\u0646\u062f \u06c1\u06d2\u061f\"<\/p>\n<p>\u0622\u067e \u062c\u0648\u0627\u0628 \u062f\u06cc\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \"\u0628\u0631\u062a\u0646 \u0635\u062d\u062a \u0645\u0646\u062f \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u0627\u0633 \u0633\u06d2 \u06cc\u06c1 \u062b\u0627\u0628\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u062a\u0627 \u06a9\u06c1 \u06af\u0627\u06c1\u06a9 $20 \u0628\u06be\u06cc\u062c \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4\"<\/p>\n<p>\u0645\u0627\u06cc\u0627 \u0646\u06d2 \u062a\u06be\u0631\u06cc\u0688 \u067e\u0691\u06be\u0627\u06d4 \u0648\u06c1 \u0627\u06cc\u06a9 \u0644\u0627\u0626\u0646 \u06a9\u0627 \u0627\u0636\u0627\u0641\u06c1 \u06a9\u0631\u062a\u06cc \u06c1\u06d2:<\/p>\n<p>\u0645\u0627\u06cc\u0627: \"\u06af\u0627\u06c1\u06a9 \u0627\u0633 \u0648\u0642\u062a \u062a\u06a9 \u06cc\u06c1 \u062a\u0639\u0645\u06cc\u0631 \u062d\u0627\u0635\u0644 \u0646\u06c1\u06cc\u06ba \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u062c\u0628 \u062a\u06a9 \u06a9\u06c1 \u067e\u0631\u0648\u0645\u0648\u0634\u0646 \u0627\u0633\u06a9\u0631\u067e\u0679 \u067e\u0627\u0633 \u0646\u06c1 \u06c1\u0648 \u062c\u0627\u0626\u06d2\u06d4 \u0635\u0631\u0641 \u067e\u0648\u0688 \u0686\u0644\u0627\u0646\u0627 \u06a9\u0627\u0641\u06cc \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4\"<\/p>\n<h4 id=\"heading-why-this-matters\">\u06cc\u06c1 \u06a9\u06cc\u0648\u06ba \u0627\u06c1\u0645\u06cc\u062a \u0631\u06a9\u06be\u062a\u0627 \u06c1\u06d2\u06d4<\/h4>\n<p>Kubernetes \u0631\u067e\u0648\u0631\u0679 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u062c\u0628 \u0635\u062d\u062a \u06a9\u06cc \u062c\u0627\u0646\u0686 \u06a9\u0627 \u062c\u0648\u0627\u0628 \u0622\u062a\u0627 \u06c1\u06d2 \u062a\u0648 \u067e\u0648\u0688 \u062a\u06cc\u0627\u0631 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u0633 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u06a9\u06c1 \u0639\u0645\u0644 \u0686\u0644 \u0631\u06c1\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u062a\u06a9 \u0631\u0633\u0627\u0626\u06cc \u062d\u0627\u0635\u0644 \u06a9\u0631 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0644\u0627\u06af \u0627\u0646\u060c \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc\u0648\u06ba\u060c \u06cc\u0627 \u062f\u0648\u06c1\u0631\u06d2 \u0686\u0627\u0631\u062c\u0632 \u06a9\u06d2 \u0628\u0627\u0631\u06d2 \u0645\u06cc\u06ba \u06a9\u0686\u06be \u0646\u06c1\u06cc\u06ba \u06a9\u06c1\u062a\u0627\u06d4 \u0627\u0633\u06d2 \u067e\u0631\u0648\u0645\u0648\u0634\u0646 \u06af\u06cc\u0679 \u0645\u06cc\u06ba \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p>\u067e\u0631\u0648\u0645\u0648\u0634\u0646 \u06af\u06cc\u0679 \u0627\u06cc\u06a9 \u0627\u0633\u06a9\u0631\u067e\u0679 \u06c1\u06d2 \u062c\u0633\u06d2 \u0622\u067e \u0627\u067e\u0646\u06d2 \u0644\u06cc\u067e \u0679\u0627\u067e \u067e\u0631 \u0686\u0644\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u0627\u0633 \u067e\u0631 \u0639\u0645\u0644 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0633\u0631\u0645\u0626\u06cc \u0628\u06be\u06cc \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 <strong>\u067e\u06cc\u062f\u0627\u0648\u0627\u0631 \u06a9\u0648 \u0641\u0631\u0648\u063a \u062f\u06cc\u0627<\/strong> \u06cc\u06c1 \u0648\u06c1 \u06a9\u0627\u0645 \u06c1\u06d2 \u062c\u0648 \u0645\u06cc\u06ba \u0646\u06d2 GitHub \u067e\u0631 \u062f\u06cc\u06a9\u06be\u0627 \u062a\u06be\u0627\u06d4 \u06cc\u06c1 \u0628\u0639\u062f \u0645\u06cc\u06ba\u060c \u0628\u0627\u0628 19 \u0645\u06cc\u06ba\u060c \u0627\u0648\u0631 \u0635\u0631\u0641 \u0627\u0633 \u06af\u06cc\u0679 \u0648\u06d2 \u0633\u06d2 \u06af\u0632\u0631\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f \u0622\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h4 id=\"heading-how-staging-runs\">\u0627\u0633\u0679\u06cc\u062c\u0646\u06af \u06a9\u06cc\u0633\u06d2 \u0686\u0644\u0627\u0626\u06cc\u06ba\u06d4<\/h4>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/10\/1792188595_223_\u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0648\u06ba-\u06a9\u0648-AWS-\u0633\u06d2-GKE-\u0645\u06cc\u06ba-\u06a9\u06cc\u0633\u06d2-\u0645\u0646\u062a\u0642\u0644-\u06a9\u06cc\u0627-\u062c\u0627\u0626\u06d2\u06d4.png\" alt=\"GCP \u0645\u06cc\u06ba \u06a9\u0644\u0633\u0679\u0631 \u0641\u0646 \u062a\u0639\u0645\u06cc\u0631 \u06a9\u0648 \u0638\u0627\u06c1\u0631 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u06cc \u062a\u0635\u0648\u06cc\u0631\" style=\"display: block;\" width=\"600\" height=\"400\" loading=\"lazy\" title=\"\"><\/p>\n<pre><code class=\"language-plaintext\">GKE cluster \"clearpay\"   zone us-east4-a\n\u2502\n\u251c\u2500\u2500 namespace staging\n\u2502     Service clearpay-api :80\n\u2502     \u2514\u2500\u2500 API pods   (HPA 1\u20133)\n\u2502\n\u2514\u2500\u2500 namespace production   (created in Chapter 19)\n      Gateway clearpay-gke-edge   \u2190 clearpay-gke-edge-ip\n      HTTPRoute \u2192 Service :80\n      \u2514\u2500\u2500 API pods   (HPA 1\u20133)\n            each pod: DB_POOL_SIZE=10\n<\/code><\/pre>\n<p>\u0688\u06cc\u0646\u06cc\u0626\u0644 \u0627\u0633\u06cc \u0686\u0627\u0631\u0679 \u06a9\u0648 \u062f\u06cc\u06a9\u06be\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\"\u0645\u06cc\u06ba \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u0645\u06cc\u06ba \u06a9\u062a\u0646\u06d2 API \u0639\u0645\u0644 \u0686\u0644\u0627 \u0633\u06a9\u062a\u0627 \u06c1\u0648\u06ba\u061f\"<\/p>\n<p>\"\u0627\u0633 \u06a9\u0644\u0633\u0679\u0631 \u0645\u06cc\u06ba \u0632\u06cc\u0627\u062f\u06c1 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 3 \u06c1\u06cc\u06ba\u06d4 \u06cc\u06c1 HPA \u06a9\u06cc \u062d\u062f \u06c1\u06d2\u06d4 <code>patch-hpa.yaml<\/code>\"<\/p>\n<p>\"\u0627\u0648\u0631 \u06c1\u0631 \u0627\u06cc\u06a9 \u06a9\u06d2 \u06a9\u062a\u0646\u06d2 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u06a9\u0646\u06a9\u0634\u0646 \u06a9\u06be\u0644 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u061f\"<\/p>\n<p>\"10. \u0627\u06cc\u06a9 \u06c1\u06cc \u0686\u06cc\u0632\u06d4 <code>db.js<\/code> \"\u067e\u06cc\u0631 \u06a9\u0648\u06d4\"<\/p>\n<p>\"\u062a\u0648 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u06a9\u06cc\u0627 \u062f\u06cc\u06a9\u06be \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u061f\"<\/p>\n<p>\u0627\u0633\u06d2 \u0631\u0648\u06a9\u0648\u06d4 GKE \u067e\u0631 30\u06d4 AWS 10 \u06a9\u0627 \u0627\u0636\u0627\u0641\u06c1 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u062c\u0628\u06a9\u06c1 \u062f\u0648\u0646\u0648\u06ba \u0641\u0639\u0627\u0644 \u06c1\u06cc\u06ba\u06d4 \u0627\u06cc\u06a9 \u06a9\u0644\u0633\u0679\u0631 \u0645\u06cc\u06ba \u062c\u0648 8 \u067e\u0648\u0688\u0632 \u062a\u06a9 \u067e\u06cc\u0645\u0627\u0646\u06c1 \u06a9\u0631 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u060c \u0627\u06a9\u06cc\u0644\u06d2 GKE \u06a9\u06d2 \u067e\u0627\u0633 80 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\"\u06cc\u06c1 \u0648\u06c1 \u0646\u0645\u0628\u0631 \u06c1\u06d2 \u062c\u0648 \u0645\u06cc\u06ba \u0646\u06d2 \u0622\u067e \u0633\u06d2 \u06cc\u0627\u062f \u0631\u06a9\u06be\u0646\u06d2 \u06a9\u0648 \u06a9\u06c1\u0627 \u062a\u06be\u0627\u06d4\" \u0688\u06cc\u0646\u06cc\u0644 \u06a9\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba:<\/p>\n<p>\u0627\u0628 \u06cc\u06c1 \u062a\u06cc\u0646 \u0641\u0627\u0626\u0644\u0648\u06ba \u06a9\u0648 \u06a9\u06be\u0648\u0644\u0646\u06d2 \u06a9\u06d2 \u0642\u0627\u0628\u0644 \u06c1\u06d2:<\/p>\n<ul>\n<li>\n<p><code>k8s\/base\/deployment.yaml<\/code>: \u0627\u0633\u0679\u06cc\u0679\u0633 \u0686\u06cc\u06a9 \u06a9\u0627\u0644 <code>\/health\/ready<\/code>\u06c1\u0631 API \u067e\u0648\u0688 \u0631\u06cc\u0632\u0631\u0648\u06cc\u0634\u0646 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 <code>250m<\/code> \u0633\u06cc \u067e\u06cc \u06cc\u0648 \u0627\u0648\u0631 <code>256Mi<\/code> \u06cc\u0627\u062f\u062f\u0627\u0634\u062a<\/p>\n<\/li>\n<li>\n<p><code>k8s\/base\/networkpolicy.yaml<\/code>: \u0645\u062d\u062f\u0648\u062f \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 \u06a9\u0648\u0646 \u0633\u06d2 \u067e\u0648\u0688 API \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0628\u0627\u062a \u0686\u06cc\u062a \u06a9\u0631\u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p><code>k8s\/overlays\/staging\/patch-deployment.yaml<\/code>: \u0627\u0633\u0679\u06cc\u062c\u0646\u06af \u06a9\u06d2 \u0644\u06cc\u06d2 \u0646\u0642\u0644 \u06a9\u06cc \u06af\u0646\u062a\u06cc \u0627\u0648\u0631 \u0631\u0648\u0644 \u0622\u0624\u0679 \u06a9\u06cc \u062a\u0631\u062a\u06cc\u0628\u0627\u062a\u06d4<\/p>\n<\/li>\n<\/ul>\n<h4 id=\"heading-step-1-check-the-database-path-from-gke\">\u0645\u0631\u062d\u0644\u06c1 1\u06d4 GKE \u0645\u06cc\u06ba \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u06a9\u0627 \u0631\u0627\u0633\u062a\u06c1 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4<\/h4>\n<p>\u0627\u0633\u0679\u06cc\u062c\u0646\u06af API \u067e\u0648\u0688 \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u0627\u06cc\u06a9 \u0644\u0627\u0626\u0646 \u0646\u0648\u0688 \u0627\u0633\u06a9\u0631\u067e\u0679 \u0686\u0644\u0627\u0626\u06cc\u06ba\u06d4 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u06a9\u0646\u06a9\u0634\u0646 \u06a9\u06be\u0648\u0644\u06cc\u06ba \u0627\u0648\u0631 \u067e\u0631\u0646\u0679 \u06a9\u0631\u06cc\u06ba\u06d4 <code>connected<\/code>:<\/p>\n<pre><code class=\"language-bash\">kubectl -n staging exec deployment\/clearpay-api -- node -e \n  \"require('.\/src\/db').checkConnection().then(() => { console.log('connected'); process.exit(0); }).catch(e => { console.error(e); process.exit(1); })\"\n<\/code><\/pre>\n<pre><code class=\"language-plaintext\">connected\n<\/code><\/pre>\n<h4 id=\"heading-step-2-check-the-secrets-arrived\">\u0645\u0631\u062d\u0644\u06c1 2\u06d4 \u0627\u067e\u0646\u06cc \u062e\u0641\u06cc\u06c1 \u0622\u0645\u062f \u06a9\u06cc \u062a\u0635\u062f\u06cc\u0642 \u06a9\u0631\u06cc\u06ba\u06d4<\/h4>\n<p>Kubernetes \u062f\u0648 \u06a9\u0644\u06cc\u062f\u0648\u06ba \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0645\u0637\u0627\u0628\u0642\u062a \u067e\u0630\u06cc\u0631 \u0631\u0627\u0632 \u0631\u06a9\u06be\u062a\u0627 \u06c1\u06d2\u06d4 <code>describe<\/code> \u06a9\u0644\u06cc\u062f\u06cc \u0646\u0627\u0645\u0648\u06ba \u0627\u0648\u0631 \u0633\u0627\u0626\u0632\u0648\u06ba \u06a9\u06cc \u0641\u06c1\u0631\u0633\u062a \u0628\u0646\u0627\u0626\u06cc\u06ba\u060c \u0627\u0642\u062f\u0627\u0631 \u06a9\u06cc \u0646\u06c1\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">kubectl -n staging get secret clearpay-api-secrets\nkubectl -n staging describe secret clearpay-api-secrets\n<\/code><\/pre>\n<p>API \u06a9\u06d2 \u0639\u0645\u0644 \u0645\u06cc\u06ba \u0627\u0642\u062f\u0627\u0631 \u06a9\u0648 \u067e\u0631\u0646\u0679 \u06a9\u06cc\u06d2 \u0628\u063a\u06cc\u0631 \u0686\u06cc\u06a9 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-bash\">kubectl -n staging exec deployment\/clearpay-api -- node -e 'if (!process.env.DATABASE_URL) process.exit(1); console.log(\"DATABASE_URL is set\")'\n<\/code><\/pre>\n<pre><code class=\"language-plaintext\">DATABASE_URL is set\n<\/code><\/pre>\n<p>\u0627\u0633\u06a9\u0631\u067e\u0679 \u06a9\u0648 \u062c\u0627\u0646 \u0628\u0648\u062c\u06be \u06a9\u0631 \u0648\u0627\u062d\u062f \u0627\u0642\u062a\u0628\u0627\u0633\u0627\u062a \u0645\u06cc\u06ba \u0628\u0646\u062f \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4 \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u0637\u06d2 \u0634\u062f\u06c1 \u0645\u06cc\u06a9 \u0634\u06cc\u0644\u060c zsh\u060c \u06c1\u06cc\u0646\u0688\u0644: <code>!<\/code> \u0627\u0633\u06d2 \u06c1\u0633\u0679\u0631\u06cc \u06a9\u0645\u0627\u0646\u0688 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0688\u0628\u0644 \u06a9\u0648\u0679\u0633 \u0645\u06cc\u06ba \u0631\u06a9\u06be\u06cc\u06ba \u0627\u0648\u0631 \u0627\u0633 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0631\u06a9\u06cc\u06ba: <code>zsh: event not found<\/code>.<\/p>\n<p>CSI \u0645\u0627\u0624\u0646\u0679 \u062e\u0641\u06cc\u06c1 \u0641\u0627\u0626\u0644\u0648\u06ba \u06a9\u0648 \u0646\u0627\u0645 \u0633\u06d2 \u062f\u06a9\u06be\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-bash\">kubectl -n staging exec deployment\/clearpay-api -- ls \/mnt\/secrets-store\n<\/code><\/pre>\n<p>\u0627\u0633\u06d2 \u062a\u0644\u0627\u0634 \u06a9\u0631\u06cc\u06ba\u06d4 <code>DATABASE_URL<\/code> \u0627\u0648\u0631 <code>JWT_SECRET<\/code>.<\/p>\n<h4 id=\"heading-step-3-run-the-promotion-gate\">\u0645\u0631\u062d\u0644\u06c1 3\u06d4 \u067e\u0631\u0648\u0645\u0648\u0634\u0646 \u06af\u06cc\u0679 \u067e\u0631 \u0639\u0645\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/h4>\n<p>\u0633\u0679\u06cc\u062c\u0646\u06af \u0646\u062c\u06cc \u06c1\u06d2\u06d4 <code>kubectl port-forward<\/code> \u0633\u0631\u0646\u06af \u06a9\u06be\u0648\u0644 \u06a9\u0631 <code>localhost:8080<\/code> \u06cc\u06c1 \u0646\u0648\u0679 \u0628\u06a9 \u06a9\u06d2 \u0627\u0633\u0679\u06cc\u062c\u0646\u06af API \u062a\u06a9 \u067e\u06c1\u0646\u0686 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u06a9\u06c1 <code>&<\/code> \u0633\u0631\u0646\u06af \u06a9\u0648 \u067e\u0633 \u0645\u0646\u0638\u0631 \u0645\u06cc\u06ba \u0686\u0644\u062a\u06d2 \u0631\u06c1\u06cc\u06ba\u06d4 \u0630\u062e\u06cc\u0631\u06c1 \u06a9\u06cc \u062c\u0691 \u0633\u06d2:<\/p>\n<pre><code class=\"language-bash\">kubectl -n staging port-forward svc\/clearpay-api 8080:80 &\n<\/code><\/pre>\n<p>\u0628\u0631\u0627\u06c1 \u06a9\u0631\u0645 \u062c\u0627\u0631\u06cc \u0631\u06a9\u06be\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0627\u06af\u0644\u06cc \u0644\u0627\u0626\u0646 \u06a9\u0627 \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-plaintext\">Forwarding from 127.0.0.1:8080 -> 4000\n<\/code><\/pre>\n<p>\u0639\u0645\u0627\u0631\u06c1 \u067e\u06c1\u0644\u06d2 \u06c1\u06cc \u062a\u06be\u0631\u06cc\u0688 \u0645\u06cc\u06ba \u06c1\u06d2\u06d4 \"\u067e\u0644\u06d2 \u0686\u0644\u0627\u0626\u06cc\u06ba\u06d4 \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u0688\u06cc\u0628\u0679 \u062f\u06cc\u06a9\u06be\u0646\u0627 \u0686\u0627\u06c1\u062a\u0627 \u06c1\u0648\u06ba\u06d4\"<\/p>\n<p>\u0648\u06c1\u06cc \u06af\u06cc\u0679\u0633 \u0686\u0644\u0627\u0626\u06cc\u06ba \u062c\u0648 \u0622\u067e \u0646\u06d2 \u0628\u0627\u0628 6 \u0645\u06cc\u06ba AWS \u06a9\u06d2 \u0644\u06cc\u06d2 \u0686\u0644\u0627\u0626\u06d2 \u062a\u06be\u06d2\u06d4 \u0686\u0627\u0631 \u062f\u0644\u0627\u0626\u0644 \u0633\u0631\u0646\u06af \u06a9\u0627 \u06cc\u0648 \u0622\u0631 \u0627\u06cc\u0644\u060c \u0627\u06cc\u0644\u0633 \u06a9\u0627 \u0627\u06cc \u0645\u06cc\u0644\u060c \u0627\u06cc\u0644\u0633 \u06a9\u0627 \u067e\u0627\u0633 \u0648\u0631\u0688\u060c \u0627\u0648\u0631 \u0628\u0627\u0628 \u06a9\u0627 \u0627\u06cc \u0645\u06cc\u0644 \u06c1\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">.\/scripts\/promotion-gate.sh http:\/\/localhost:8080 \n  alice@clearpay.dev password123 bob@clearpay.dev\n<\/code><\/pre>\n<pre><code class=\"language-plaintext\">PASS: health endpoint returns ok\nPASS: readiness endpoint confirms DB connectivity\nPASS: login succeeds and returns a token\nPASS: replaying an idempotency key returns replayed=true\nPASS: balance debited exactly once (100 cents), not twice\n\n5 passed, 0 failed\n\nGATE PASSED: safe to promote to production.\n<\/code><\/pre>\n<p>\u0627\u06af\u0644\u0627\u060c \u0633\u0631\u0646\u06af \u06a9\u0648 \u0631\u0648\u06a9\u06cc\u06ba\u06d4 <code>kill %1<\/code>.<\/p>\n<p>\u0686\u0648\u0646\u06a9\u06c1 GKE \u0627\u0633\u06cc RDS \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u06a9\u0648 AWS \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u067e\u0691\u06be\u062a\u0627 \u06c1\u06d2\u060c \u0627\u06cc\u0644\u0633 GKE \u0645\u06cc\u06ba \u0628\u063a\u06cc\u0631 \u06a9\u0633\u06cc \u0646\u0626\u06d2 \u0628\u06cc\u062c \u06a9\u06d2 \u0645\u0648\u062c\u0648\u062f \u06c1\u06d2\u06d4<\/p>\n<h4 id=\"heading-step-4-confirm-customers-are-still-on-aws\">\u0645\u0631\u062d\u0644\u06c1 4\u06d4 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 \u0622\u06cc\u0627 \u0635\u0627\u0631\u0641 \u0627\u0628\u06be\u06cc \u0628\u06be\u06cc AWS \u067e\u0631 \u06c1\u06d2\u06d4<\/h4>\n<p>\u0633\u0679\u06cc\u062c\u0646\u06af \u06a9\u0627 \u0639\u0648\u0627\u0645\u06cc \u067e\u062a\u06c1 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-bash\">kubectl -n staging get svc clearpay-api\n<\/code><\/pre>\n<pre><code class=\"language-plaintext\">NAME           TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE\nclearpay-api   ClusterIP   10.x.x.x       <none>        80\/TCP    12m\n<\/none><\/code><\/pre>\n<p><code>ClusterIP<\/code> \u06a9\u06d2 \u0633\u0627\u062a\u06be <code><none\/><\/code> \u0627\u0633 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u06a9\u06c1 \u0635\u0631\u0641 \u06a9\u0644\u0633\u0679\u0631 \u062a\u06a9 \u06c1\u06cc \u067e\u06c1\u0646\u0686 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u06af\u0627\u06c1\u06a9 \u06a9\u06d2 \u067e\u062a\u06d2 \u0627\u0628\u06be\u06cc \u0628\u06be\u06cc AWS \u06a9\u06cc \u0637\u0631\u0641 \u0633\u06d2 \u062c\u0648\u0627\u0628 \u062f\u06cc\u06d2 \u062c\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">export INSTANCE_IP=$(terraform -chdir=infra\/aws\/terraform output -raw instance_public_ip)\ncurl -sk https:\/\/$INSTANCE_IP\/health\n<\/code><\/pre>\n<pre><code class=\"language-plaintext\">{\"status\":\"ok\",\"served_by\":{\"platform\":\"aws\",...}}\n<\/code><\/pre>\n<p>\u0627\u06af\u0631 \u0622\u067e \u062f\u06cc\u06a9\u06be\u062a\u06d2 \u06c1\u06cc\u06ba <code>gke<\/code> \u06cc\u06c1\u06cc\u06ba \u0631\u06a9 \u062c\u0627\u0624\u06d4 \u0627\u06af\u0631 curl \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648\u062c\u0627\u062a\u0627 \u06c1\u06d2\u060c AWS \u0646\u06cc\u0686\u06d2 \u0686\u0644\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u060c \u062c\u0648 GKE \u0633\u06d2 \u0679\u0631\u06cc\u0641\u06a9 \u062d\u0627\u0635\u0644 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u0645\u062e\u062a\u0644\u0641 \u0645\u0633\u0626\u0644\u06c1 \u06c1\u06d2\u06d4<\/p>\n<p>\u0644\u06c1\u0630\u0627 \u062f\u0648\u0646\u0648\u06ba \u0628\u0627\u062f\u0644 \u0686\u0644 \u0631\u06c1\u06d2 \u06c1\u06cc\u06ba\u060c \u0644\u06cc\u06a9\u0646 \u0635\u0631\u0641 AWS \u0635\u0627\u0631\u0641\u06cc\u0646 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u06be\u0644\u0627 \u06c1\u06d2\u06d4 \u0633\u0679\u06cc\u062c\u0646\u06af \u0645\u0642\u0627\u0645\u06cc \u0637\u0648\u0631 \u067e\u0631 GKE \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u0686\u0644\u062a\u06cc \u06c1\u06d2\u06d4 \u062f\u0631\u0648\u0627\u0632\u06c1 \u0648\u06c1 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2 \u062c\u0648 \u0627\u0633\u06d2 \u0686\u0644\u0627\u062a\u0627 \u0631\u06c1\u062a\u0627 \u06c1\u06d2\u06d4 \u0635\u0631\u0641 \u0633\u0631\u0646\u06af \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0679\u06cc\u0633\u0679 \u06a9\u0631\u06cc\u06ba\u060c \u062c\u0648 \u0648\u0627\u062d\u062f \u062f\u0631\u0648\u0627\u0632\u06c1 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-plaintext\">Browser  \u2192  api.clearpay.test  \u2192  100 percent  \u2192  AWS EC2  (serves everyone)\n\nGKE staging  \u2190  your tunnel (port-forward)  \u2190  the gate and the load test\nGKE production  (does not exist yet, Chapter 19)\n<\/code><\/pre>\n<p>\u06af\u0627\u06c1\u06a9 \u0635\u0631\u0641 \u0628\u0627\u0628 21 \u06a9\u06d2 \u0628\u0639\u062f GKE \u0633\u06d2 \u062c\u0691\u06cc\u06ba \u06af\u06d2\u060c \u062c\u0628 \u062d\u0642\u06cc\u0642\u06cc \u0679\u0631\u06cc\u0641\u06a9 \u0633\u0627\u0645\u0646\u06d2 \u06a9\u06d2 \u062f\u0631\u0648\u0627\u0632\u06d2 \u0633\u06d2 \u0628\u06be\u06cc\u062c\u0646\u0627 \u0634\u0631\u0648\u0639 \u06c1\u0648 \u062c\u0627\u0626\u06d2 \u06af\u06cc\u06d4<\/p>\n<h4 id=\"heading-if-it-fails\">\u0646\u0627\u06a9\u0627\u0645\u06cc \u06a9\u06cc \u0635\u0648\u0631\u062a \u0645\u06cc\u06ba<\/h4>\n<p>\u0628\u0631\u0627\u06c1 \u06a9\u0631\u0645 \u0627\u0633 \u062a\u0639\u0645\u06cc\u0631 \u06a9\u0648 \u0641\u0631\u0648\u063a \u0646\u06c1 \u062f\u06cc\u06ba\u06d4<\/p>\n<ul>\n<li>\n<p><code>Unexpected end of JSON input<\/code> \u06cc\u0627 <code>Connection refused<\/code>: \u0627\u0633\u06a9\u0631\u067e\u0679 \u06a9\u0648 \u0633\u0631\u0646\u06af \u06a9\u06d2 \u0633\u0646\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u06c1\u06cc \u0627\u0646\u062c\u0627\u0645 \u062f\u06cc\u0627 \u06af\u06cc\u0627 \u062a\u06be\u0627\u06d4 \u0627\u06af\u0631 <code>Forwarding from 127.0.0.1:8080<\/code> \u0627\u06af\u0631 \u0622\u067e \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u06c1\u06cc \u0679\u0631\u0645\u06cc\u0646\u0644 \u0645\u06cc\u06ba \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u0635\u0631\u0641 \u0627\u0633\u06a9\u0631\u067e\u0679 \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0686\u0644\u0627\u0626\u06cc\u06ba\u06d4 \u062f\u0648\u0633\u0631\u0627 \u067e\u0648\u0631\u0679 \u0641\u0627\u0631\u0648\u0631\u0688\u0646\u06af \u0634\u0631\u0648\u0639 \u0646\u06c1 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0631\u06cc\u0627\u0633\u062a \u06af\u0632\u0631 \u06af\u0626\u06cc\u060c \u0644\u06cc\u06a9\u0646 \u062a\u06cc\u0627\u0631\u06cc \u0646\u0627\u06a9\u0627\u0645 \u0631\u06c1\u06cc\u06d4 Pod PostgreSQL \u0633\u06d2 \u0645\u0646\u0633\u0644\u06a9 \u0646\u06c1\u06cc\u06ba \u06c1\u0648 \u0633\u06a9\u062a\u0627\u06d4 \u0628\u0627\u0628 13\u060c \u062d\u0635\u06c1 B \u067e\u0631 \u0648\u0627\u067e\u0633 \u062c\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0644\u0627\u06af \u0627\u0646 \u0646\u0627\u06a9\u0627\u0645: \u0628\u06cc\u062c \u06a9\u06d2 \u0644\u06cc\u06d2 \u0622\u067e \u0646\u06d2 \u062c\u0648 \u0642\u062f\u0631 \u062f\u0631\u062c \u06a9\u06cc \u06c1\u06d2 \u0627\u0633\u06d2 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4 <code>alice@clearpay.dev<\/code>\u060c <code>password123<\/code>\u060c <code>bob@clearpay.dev<\/code>.<\/p>\n<\/li>\n<li>\n<p><code>checkConnection<\/code> TLS \u06cc\u0627 \u0679\u0627\u0626\u0645 \u0622\u0624\u0679 \u06a9\u06cc \u062e\u0631\u0627\u0628\u06cc \u067e\u0631\u0646\u0679 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u062a\u06cc\u0627\u0631\u06cc \u0645\u06cc\u06ba \u0646\u0627\u06a9\u0627\u0645\u06cc \u06a9\u06cc \u0637\u0631\u062d\u06d4 \u0628\u0627\u0628 13\u060c \u062d\u0635\u06c1 \u0628\u06cc\u06d4<\/p>\n<\/li>\n<li>\n<p>\u06a9\u06c1 <code>ls<\/code> \u0641\u0627\u0626\u0644 \u0638\u0627\u06c1\u0631 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u062a\u06cc \u06c1\u06d2 \u06cc\u0627 \u067e\u0648\u0688 \u067e\u06be\u0646\u0633 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 <code>ContainerCreating<\/code>: \u062f\u0648\u0691\u0646\u0627 <code>kubectl -n staging describe pod <pod-name\/><\/code> \u062e\u0641\u06cc\u06c1 \u0645\u06cc\u0646\u06cc\u062c\u0631 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u06a9\u06cc \u063a\u0644\u0637\u06cc\u0648\u06ba \u06a9\u0648 \u062a\u0644\u0627\u0634 \u06a9\u0631\u06cc\u06ba\u06d4 \u0633\u0679\u06cc\u062c\u0646\u06af \u067e\u0631 \u0646\u0648\u0679\u0633 <code>clearpay-api<\/code> \u0633\u0631\u0648\u0633 \u0627\u06a9\u0627\u0624\u0646\u0679 \u06a9\u0648 \u0645\u0631\u062d\u0644\u06c1 5\u060c \u062e\u0637 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062e\u0637 \u0633\u06d2 \u0627\u0633\u0679\u06cc\u062c\u0646\u06af \u0627\u06cc \u0645\u06cc\u0644 \u0633\u06d2 \u0645\u0645\u0627\u062b\u0644 \u06c1\u0648\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u06d4 \u06cc\u06c1 \u0648\u06c1 \u0627\u06cc \u0645\u06cc\u0644 \u06c1\u06d2 \u062c\u0633\u06d2 \u0622\u067e \u0646\u06d2 \u0645\u0631\u062d\u0644\u06c1 6 \u0645\u06cc\u06ba \u0631\u0627\u0632 \u06a9\u0648 \u067e\u0691\u06be\u0646\u06d2 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u062f\u06cc \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<\/ul>\n<p>\u0648\u062c\u06c1 \u06a9\u0648 \u062f\u0631\u0633\u062a \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631\u060c \u0627\u06af\u0631 \u06a9\u0648\u0688 \u06cc\u0627 \u0641\u0627\u0626\u0644\u0632 \u0628\u062f\u0644 \u06af\u0626\u06cc \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u0627\u0646\u06c1\u06cc\u06ba \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u062f\u06be\u06a9\u06cc\u0644\u06cc\u06ba \u0627\u0648\u0631 \u06af\u06cc\u0679 \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0686\u0644\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<h4 id=\"heading-decision\">\u0641\u06cc\u0635\u0644\u06c1<\/h4>\n<p>\u0645\u0627\u06cc\u0627: \u06a9\u06cc\u0627 \u06c1\u0645 \u062a\u06cc\u0627\u0631 \u06c1\u06cc\u06ba\u061f<\/p>\n<p>\"\u06af\u06cc\u0679 \u06af\u0632\u0631 \u0686\u06a9\u0627 \u06c1\u06d2\u06d4 \u0627\u0633\u0679\u06cc\u0679\u0633\u060c \u062a\u06cc\u0627\u0631\u060c \u0644\u0627\u06af \u0627\u0646\u060c \u0631\u06cc \u067e\u0644\u06d2\u060c \u0627\u0648\u0631 \u0627\u06cc\u06a9 \u0628\u0627\u0631 \u0628\u0644 \u0622\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f\u06d4 \u0639\u0645\u0627\u0631\u06c1 \u06a9\u06cc \u0631\u06cc \u067e\u0644\u06d2 \u06a9\u06cc \u062a\u0635\u062f\u06cc\u0642 \u06af\u0632\u0631 \u0686\u06a9\u06cc \u06c1\u06d2\u06d4 \u0635\u0627\u0631\u0641\u06cc\u0646 \u0627\u0628 \u0628\u06be\u06cc AWS \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631 \u0631\u06c1\u06d2 \u06c1\u06cc\u06ba\u06d4\"<\/p>\n<p>\u0645\u0627\u06cc\u0627: \"\u062a\u0648 \u067e\u06be\u0631 \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u06a9\u06d2 \u0628\u0627\u0631\u06d2 \u0645\u06cc\u06ba \u0628\u0627\u062a \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u06cc\u06c1 \u067e\u06c1\u0644\u06d2 \u06a9\u0627\u0645 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u0627 \u062a\u06be\u0627\u06d4\"<\/p>\n<p>\u0648\u06c1 \u0648\u0627\u067e\u0633 \u0679\u0631\u0645\u06cc\u0646\u0644 \u06a9\u06cc \u0637\u0631\u0641 \u062f\u06cc\u06a9\u06be\u062a\u06cc \u06c1\u06d2\u06d4 \"\u0627\u0633\u0679\u06cc\u062c\u0646\u06af \u06a9\u0627\u0645 \u06a9\u0631 \u0631\u06c1\u06cc \u06c1\u06d2\u06d4 \u0627\u0628 \u0628\u0631\u0627\u06c1 \u06a9\u0631\u0645 \u0645\u062c\u06be\u06d2 \u0628\u062a\u0627\u0626\u06cc\u06ba \u06a9\u06c1 \u06a9\u06cc\u0627 \u0645\u062c\u06be\u06d2 GKE \u06a9\u0648 \u0627\u0633\u06cc \u067e\u0648\u0633\u0679\u06af\u0631\u06cc\u0633 \u06a9\u0648 \u0627\u0646\u0679\u0631\u0646\u06cc\u0679 \u067e\u0631 \u0628\u06be\u06cc\u062c\u0646\u0627 \u062c\u0627\u0631\u06cc \u0631\u06a9\u06be\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u06d4\"<\/p>\n<h4 id=\"heading-done-when\">\u0645\u06a9\u0645\u0644 \u06c1\u0648\u0646\u06d2 \u067e\u0631:<\/h4>\n<ul>\n<li>\n<p><code>checkConnection<\/code> \u067e\u0631\u0646\u0679\u0633 <code>connected<\/code> \u0627\u0633\u0679\u06cc\u062c\u0646\u06af \u067e\u06be\u0644\u06cc \u0645\u06cc\u06ba<\/p>\n<\/li>\n<li>\n<p><code>DATABASE_URL is set<\/code>\u0627\u0648\u0631 <code>\/mnt\/secrets-store<\/code> \u062f\u0648\u0646\u0648\u06ba \u062e\u0641\u06cc\u06c1 \u0646\u0627\u0645\u0648\u06ba \u06a9\u06cc \u0641\u06c1\u0631\u0633\u062a \u0628\u0646\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>\u06af\u06cc\u0679 \u067e\u0631\u0646\u0679 <code>5 passed, 0 failed<\/code> \u0633\u0631\u0646\u06af \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2<\/p>\n<\/li>\n<li>\n<p>\u0633\u0679\u06cc\u062c\u0646\u06af \u06c1\u06d2 <code>ClusterIP<\/code> \u06a9\u0648\u0626\u06cc \u0628\u06cc\u0631\u0648\u0646\u06cc IP \u0646\u06c1\u06cc\u06ba \u06c1\u06d2 \u0627\u0648\u0631 \u0644\u0686\u06a9\u062f\u0627\u0631 IP \u0627\u0628 \u0628\u06be\u06cc \u062c\u0648\u0627\u0628 \u062f\u06d2 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4 <code>aws<\/code><\/p>\n<\/li>\n<\/ul>\n<p>\u06cc\u06c1 \u0686\u0648\u06a9\u06cc \u06c1\u06d2\u06d4 \u0633\u0679\u06cc\u062c\u0646\u06af \u06af\u06cc\u0679 \u0648\u06d2 \u0633\u06d2 \u06af\u0632\u0631\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 GKE \u0627\u0635\u0644 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u062a\u06a9 \u067e\u06c1\u0646\u0686 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u06af\u0644\u0627\u060c \u06c1\u0645 \u062b\u0627\u0628\u062a \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u06a9\u06c1 \u06af\u0627\u06c1\u06a9 \u06a9\u06cc \u0679\u0631\u06cc\u0641\u06a9 \u0627\u0633 \u06a9\u06d2 \u0645\u0646\u062a\u0642\u0644 \u06c1\u0648\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u06c1\u06cc \u0645\u062d\u0641\u0648\u0638 \u06c1\u06d2\u060c \u06cc\u06c1\u0627\u06ba \u062a\u06a9 \u06a9\u06c1 \u0628\u0648\u062c\u06be \u06a9\u06d2 \u0646\u06cc\u0686\u06d2 \u0628\u06be\u06cc\u06d4<\/p>\n<h2 id=\"heading-part-5-how-to-make-gke-production-ready\">\u062d\u0635\u06c1 5\u06d4 \u067e\u06cc\u062f\u0627\u0648\u0627\u0631 \u06a9\u06d2 \u0644\u06cc\u06d2 GKE \u06a9\u0648 \u06a9\u06cc\u0633\u06d2 \u062f\u0633\u062a\u06cc\u0627\u0628 \u06a9\u06cc\u0627 \u062c\u0627\u0626\u06d2\u06d4<\/h2>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/10\/1792188595_40_\u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0648\u06ba-\u06a9\u0648-AWS-\u0633\u06d2-GKE-\u0645\u06cc\u06ba-\u06a9\u06cc\u0633\u06d2-\u0645\u0646\u062a\u0642\u0644-\u06a9\u06cc\u0627-\u062c\u0627\u0626\u06d2\u06d4.png\" alt=\"\u0648\u06c1 \u062a\u0635\u0627\u0648\u06cc\u0631 \u062c\u0648 \u0627\u0633 \u0628\u0627\u062a \u06a9\u06cc \u0648\u0636\u0627\u062d\u062a \u06a9\u0631\u062a\u06cc \u06c1\u06cc\u06ba \u06a9\u06c1 \u06c1\u0645 \u0646\u06d2 \u06a9\u06cc\u0627 \u06a9\u06cc\u0627\u060c \u06c1\u0645 \u06a9\u06c1\u0627\u06ba \u06c1\u06cc\u06ba\u060c \u0627\u0648\u0631 \u0622\u06af\u06d2 \u06a9\u06cc\u0627 \u06c1\u06d2\u06d4\" style=\"display: block;\" width=\"600\" height=\"400\" loading=\"lazy\" title=\"\"><\/p>\n<p>\u0633\u0679\u06cc\u062c\u0646\u06af \u06a9\u0627 \u06a9\u0627\u0645\u06d4 \u067e\u0631\u0648\u0645\u0648\u0634\u0646 \u06af\u06cc\u0679 \u0646\u06d2 \u067e\u0627\u0646\u0686 \u0686\u06cc\u0632\u06cc\u06ba \u062b\u0627\u0628\u062a \u06a9\u06cc \u06c1\u06cc\u06ba: \u0627\u06cc\u067e \u0686\u0644\u062a\u06cc \u06c1\u06d2\u060c \u0688\u06cc\u0679\u0627\u0628\u06cc\u0633 \u0633\u06d2 \u0679\u06a9\u0631\u0627 \u062c\u0627\u062a\u06cc \u06c1\u06d2\u060c \u0635\u0627\u0631\u0641 \u0644\u0627\u06af \u0627\u0646 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0627\u06cc\u06a9 \u0628\u0627\u0631 \u0628\u0627\u0631 \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u0686\u0627\u0631\u062c \u06a9\u06cc \u062c\u0627\u062a\u06cc \u06c1\u06d2\u060c \u0627\u0648\u0631 \u0628\u06cc\u0644\u0646\u0633 \u0645\u0646\u0627\u0633\u0628 \u0631\u0642\u0645 \u0633\u06d2 \u06a9\u0645 \u06c1\u0648 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0627\u06cc\u06a9 \u0627\u0686\u06be\u0627 \u0646\u062a\u06cc\u062c\u06c1 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u06af\u0627\u06c1\u06a9 \u06a9\u06cc \u062d\u0641\u0627\u0638\u062a \u06a9\u0648 \u06cc\u0642\u06cc\u0646\u06cc \u0628\u0646\u0627\u0646\u06d2 \u062c\u06cc\u0633\u0627 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u06cc\u06a9 \u0646\u0626\u06cc \u06a9\u0627\u0631 \u06a9\u06d2 \u0628\u0627\u0631\u06d2 \u0645\u06cc\u06ba \u0633\u0648\u0686\u0648 \u062c\u0633 \u0646\u06d2 \u0627\u0628\u06be\u06cc \u0627\u067e\u0646\u06cc \u067e\u06c1\u0644\u06cc \u0679\u06cc\u0633\u0679 \u0688\u0631\u0627\u0626\u06cc\u0648 \u067e\u0627\u0633 \u06a9\u06cc \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0634\u0631\u0648\u0639 \u06c1\u0648\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u06af\u06be\u0648\u0645\u062a\u0627 \u06c1\u06d2\u06d4 \u06a9\u0633\u06cc \u06a9\u06d2 \u0628\u0648\u0631\u0688 \u0645\u06cc\u06ba \u0622\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u06c1\u0645 \u0645\u0632\u06cc\u062f \u062a\u06cc\u0646 \u0633\u0648\u0627\u0644\u0627\u062a \u067e\u0648\u0686\u06be\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u06a9\u06cc\u0627 \u062f\u0631\u0648\u0627\u0632\u06c1 \u0628\u0646\u062f \u06c1\u06d2\u061f \u06a9\u06cc\u0627 \u0622\u067e \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 \u062f\u06cc\u06a9\u06be\u062a\u06d2 \u06c1\u06cc\u06ba\u061f \u0627\u06cc\u06a9 \u06a9\u06be\u0691\u06cc \u067e\u06c1\u0627\u0691\u06cc \u067e\u0631 \u06a9\u06cc\u0627 \u06c1\u0648\u062a\u0627 \u06c1\u06d2 \u06cc\u0627 \u0627\u06af\u0631 \u0622\u067e \u06a9\u0648 \u0686\u067e\u0679\u0627 \u0679\u0627\u0626\u0631 \u0645\u0644 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u061f<\/p>\n<p>\u0627\u0633 \u0633\u06cc\u06a9\u0634\u0646 \u0645\u06cc\u06ba\u060c \u06c1\u0645 \u06a9\u0644\u06cc\u0626\u0631 \u067e\u06d2 \u06a9\u06d2 \u0628\u0627\u0631\u06d2 \u0645\u06cc\u06ba \u0648\u06c1\u06cc \u062a\u06cc\u0646 \u0633\u0648\u0627\u0644\u0627\u062a \u067e\u0648\u0686\u06be\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<table>\n<thead>\n<tr>\n<th>\u0633\u0648\u0627\u0644<\/th>\n<th>\u0635\u0641\u062d\u06c1<\/th>\n<th>\u062c\u0648 \u0622\u067e \u0686\u06cc\u06a9 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>\u06a9\u06cc\u0627 \u0622\u067e \u06a9\u0648 \u06a9\u0633\u06cc \u0686\u06cc\u0632 \u06a9\u0627 \u0633\u0627\u0645\u0646\u0627 \u06a9\u0631\u0646\u0627 \u067e\u0691\u0627 \u06c1\u06d2\u061f<\/td>\n<td>16<\/td>\n<td>\u0648\u06c1 \u0634\u062e\u0635 \u062c\u0648 \u0631\u0627\u0632 \u067e\u0691\u06be \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4 \u0622\u06cc\u0627 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u06a9\u0646\u06a9\u0634\u0646 \u06a9\u0648 \u062e\u0641\u06cc\u06c1 \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4 \u0686\u0627\u06c1\u06d2 \u06c1\u0631 \u0627\u06a9\u0627\u0624\u0646\u0679 \u06a9\u06d2 \u067e\u0627\u0633 \u0635\u0631\u0641 \u0648\u06c1\u06cc \u0627\u062c\u0627\u0632\u062a\u06cc\u06ba \u06c1\u06cc\u06ba \u062c\u0646 \u06a9\u06cc \u0627\u0633\u06d2 \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2\u06d4<\/td>\n<\/tr>\n<tr>\n<td>\u06a9\u06cc\u0627 \u0622\u067e \u062f\u06cc\u06a9\u06be \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba \u06a9\u06c1 \u06a9\u06cc\u0627 \u06c1\u0648 \u0631\u06c1\u0627 \u06c1\u06d2\u061f<\/td>\n<td>17 (\u0627\u062e\u062a\u06cc\u0627\u0631\u06cc)<\/td>\n<td>\u0644\u06cc\u067e \u0679\u0627\u067e \u067e\u0631 \u0627\u06cc\u06a9 \u067e\u0631\u06cc\u06a9\u0679\u0633 \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 \u062c\u0648 \u0627\u06cc\u067e \u06a9\u06cc \u0631\u062f\u0639\u0645\u0644 \u0627\u0648\u0631 \u0646\u0627\u06a9\u0627\u0645 \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0648\u06ba \u06a9\u06cc \u062a\u0639\u062f\u0627\u062f \u06a9\u0648 \u0638\u0627\u06c1\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u0648\u0632\u0627\u0631 \u0633\u06a9\u06be\u0627\u0626\u06cc\u06ba\u06d4 \u0679\u0631\u06cc\u0641\u06a9 \u0634\u0641\u0679\u0648\u06ba \u06a9\u06d2 \u062f\u0648\u0631\u0627\u0646\u060c \u06c1\u0645 \u06a9\u0645\u0627\u0646\u0688 \u0644\u0627\u0626\u0646 \u0645\u0639\u0627\u0626\u0646\u06c1 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0646\u06af\u0631\u0627\u0646\u06cc \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/td>\n<\/tr>\n<tr>\n<td>\u062f\u0628\u0627\u0624 \u0645\u06cc\u06ba \u06a9\u06cc\u0627 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u061f<\/td>\n<td>18<\/td>\n<td>\u0627\u06cc\u06a9 \u0645\u0635\u0631\u0648\u0641 \u062f\u0648\u067e\u06c1\u0631 \u06a9\u06cc \u0637\u0631\u062d\u060c \u0628\u06c1\u062a \u0633\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u06cc\u06ba \u0627\u06cc\u06a9 \u0633\u0627\u062a\u06be \u0622\u062a\u06cc \u06c1\u06cc\u06ba\u06d4 \u0641\u0648\u0631\u0688 \u06a9\u0627\u0645 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u0645\u0631 \u06af\u06cc\u0627\u06d4 \u062c\u0628 \u0635\u0627\u0631\u0641 \u0627\u06cc\u067e \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631 \u0631\u06c1\u0627 \u06c1\u0648 \u062a\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0634\u0631\u0648\u0639 \u06a9\u0631\u06cc\u06ba\u06d4<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u06cc\u06c1 \u0633\u0648\u0627\u0644\u0627\u062a \u0627\u0628 \u062c\u0627\u0646 \u0628\u0648\u062c\u06be \u06a9\u0631 \u0638\u0627\u06c1\u0631 \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u06af\u0627\u06c1\u06a9 \u0627\u0628\u06be\u06cc \u0628\u06be\u06cc AWS \u067e\u0631 \u06c1\u06d2\u060c \u0627\u06af\u0631 \u0627\u0633 \u062d\u0635\u06d2 \u0645\u06cc\u06ba \u06a9\u0686\u06be \u06af\u0691\u0628\u0691 \u06c1\u0648 \u062c\u0627\u062a\u06cc \u06c1\u06d2\u060c \u062a\u0648 \u06a9\u0648\u0626\u06cc \u0646\u0648\u0679\u0633 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u06d2 \u06af\u0627 \u0627\u0648\u0631 \u06a9\u0633\u06cc \u06a9\u0648 \u067e\u06cc\u0633\u06d2 \u06a9\u0627 \u0646\u0642\u0635\u0627\u0646 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u06af\u0627\u06d4 \u06cc\u06c1\u0627\u06ba \u0679\u06be\u06cc\u06a9 \u06c1\u0648\u0646\u06d2 \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u06af\u06be\u0646\u0679\u06c1 \u0644\u06af\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u06af\u0631 \u0622\u067e \u06af\u0627\u06c1\u06a9 \u06a9\u06d2 \u0622\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f \u06a9\u0648\u0626\u06cc \u0645\u0633\u0626\u0644\u06c1 \u062d\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u0622\u067e \u0627\u0646 \u06a9\u0627 \u0627\u0639\u062a\u0645\u0627\u062f \u06a9\u06be\u0648 \u062f\u06cc\u062a\u06d2 \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u062a\u0645\u0627\u0645 \u0645\u0633\u0627\u0626\u0644 \u0627\u0633 \u0648\u0642\u062a \u067e\u06cc\u0634 \u0622\u062a\u06d2 \u06c1\u06cc\u06ba \u062c\u0628 \u0644\u0648\u06af \u062f\u06cc\u06a9\u06be \u0631\u06c1\u06d2 \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<h3 id=\"heading-chapter-16-run-the-security-review\">\u0628\u0627\u0628 16\u06d4 \u0633\u06cc\u06a9\u06cc\u0648\u0631\u0679\u06cc \u06a9\u0627 \u062c\u0627\u0626\u0632\u06c1 \u0644\u06cc\u06ba\u06d4<\/h3>\n<p><em>\u0628\u062f\u06be \u062f\u0648\u067e\u06c1\u0631 2 \u0628\u062c\u06d2<\/em><\/p>\n<p>\u062f\u0648\u067e\u06c1\u0631 \u06a9\u06d2 \u06a9\u06be\u0627\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f\u060c \u0645\u0627\u06cc\u0627 \u0627\u06af\u0644\u0627 \u06a9\u0627\u0645 \u0628\u06be\u06cc\u062c\u062a\u06cc \u06c1\u06d2\u06d4 \u0627\u0633 \u0646\u06d2 \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u06a9\u06d2 \u0646\u0648\u0634\u062a\u06c1 \u062c\u0627\u062a \u067e\u0691\u06be\u06d2\u06d4<\/p>\n<p>\u0645\u0627\u06cc\u0627: \"\u0645\u06cc\u06ba \u0686\u0627\u06c1\u062a\u06cc \u06c1\u0648\u06ba \u06a9\u06c1 \u0645\u06cc\u0631\u06d2 \u06af\u0627\u06c1\u06a9 GKE \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0627\u0646 \u06a9\u06cc \u0633\u06cc\u06a9\u06cc\u0648\u0631\u0679\u06cc \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4 \u0645\u06cc\u06ba \u0686\u0644\u0627\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f \u0641\u0627\u0626\u0644\u0648\u06ba \u0645\u06cc\u06ba \u0631\u0627\u0632 \u062a\u0644\u0627\u0634 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u0646\u0627 \u0686\u0627\u06c1\u062a\u06cc\u06d4\"<\/p>\n<h4 id=\"heading-why-this-matters\">\u06cc\u06c1 \u06a9\u06cc\u0648\u06ba \u0627\u06c1\u0645\u06cc\u062a \u0631\u06a9\u06be\u062a\u0627 \u06c1\u06d2\u06d4<\/h4>\n<p>\u06c1\u0631 \u067e\u0686\u06be\u0644\u06d2 \u0645\u0639\u0627\u0626\u0646\u06c1 \u0646\u06d2 \u067e\u0648\u0686\u06be\u0627\u060c \"\u06a9\u06cc\u0627 \u06cc\u06c1 \u06a9\u0627\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u061f\" \u06cc\u06c1 \u067e\u0648\u0686\u06be\u062a\u0627 \u06c1\u06d2\u060c \"\u06a9\u06cc\u0627 \u0628\u06d2 \u0646\u0642\u0627\u0628 \u06c1\u06d2\u061f\" \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u06a9\u06d2 APIs \u06a9\u06d2 \u0644\u06cc\u06d2\u060c \u067e\u0648\u0633\u0679 \u0644\u0627\u0646\u0686 \u062c\u0627\u0626\u0632\u06c1 \u0645\u06cc\u06ba \u0628\u06c1\u062a \u062f\u06cc\u0631 \u06c1\u0648 \u0686\u06a9\u06cc \u06c1\u06d2\u06d4<\/p>\n<h4 id=\"heading-check-1-traffic-to-the-database-is-encrypted\">\u062a\u0648\u062b\u06cc\u0642 1. \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u06a9\u06cc \u0679\u0631\u06cc\u0641\u06a9 \u06a9\u0648 \u062e\u0641\u06cc\u06c1 \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4<\/h4>\n<p>\u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u06a9\u0646\u06a9\u0634\u0646 \u0628\u0627\u062f\u0644\u0648\u06ba \u06a9\u06d2 \u062f\u0631\u0645\u06cc\u0627\u0646 \u0639\u0648\u0627\u0645\u06cc \u0627\u0646\u0679\u0631\u0646\u06cc\u0679 \u06a9\u0648 \u0639\u0628\u0648\u0631 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 \u0622\u06cc\u0627 \u0622\u067e \u06a9\u06d2 \u0644\u0627\u0626\u06cc\u0648 \u0633\u0679\u06cc\u062c\u0646\u06af \u06a9\u06d2 \u0639\u0645\u0644 \u06a9\u0648 URL \u067e\u0631\u0646\u0679 \u06a9\u06cc\u06d2 \u0628\u063a\u06cc\u0631 TLS \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-bash\">kubectl -n staging exec deployment\/clearpay-api -- node -e \"const u=process.env.DATABASE_URL||''; console.log(u.includes('sslmode=require') ? 'sslmode=require is set' : 'sslmode=require missing')\"\n<\/code><\/pre>\n<pre><code class=\"language-plaintext\">sslmode=require is set\n<\/code><\/pre>\n<h4 id=\"heading-check-2-secret-rotation-is-understood\">\u0679\u06be\u06cc\u06a9 \u06c1\u06d2 2. \u062e\u0641\u06cc\u06c1 \u0686\u06a9\u0631 \u0633\u0645\u062c\u06be \u0645\u06cc\u06ba \u0622 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4<\/h4>\n<p><code>api\/src\/routes\/auth.js<\/code> \u0645\u0633\u0644\u0633\u0644 \u0644\u0627\u06af \u0627\u0646 \u0679\u0648\u06a9\u0646 \u062c\u0627\u0631\u06cc \u06a9\u0631\u06cc\u06ba\u06d4 <code>12h<\/code>. \u0627\u06af\u0631 \u0622\u067e \u0627\u0633\u06d2 \u06af\u06be\u0645\u0627\u0626\u06cc\u06ba\u06d4 <code>JWT_SECRET<\/code>\u067e\u0631\u0627\u0646\u06d2 \u0679\u0648\u06a9\u0646 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u062f\u0633\u062a\u062e\u0637 \u0634\u062f\u06c1 \u06a9\u0648\u0626\u06cc \u0628\u06be\u06cc \u0679\u0648\u06a9\u0646 \u06a9\u0627\u0645 \u06a9\u0631\u0646\u0627 \u0686\u06be\u0648\u0691 \u062f\u06d2 \u06af\u0627 \u0627\u0648\u0631 \u0635\u0627\u0631\u0641 \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0644\u0627\u06af \u0627\u0646 \u06a9\u0631\u0646\u0627 \u067e\u0691\u06d2 \u06af\u0627\u06d4 \u0627\u0633 \u0644\u06cc\u0628 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0633 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u06c1\u06d2\u06d4 \u0627\u0633 \u062c\u0645\u0644\u06d2 \u06a9\u0648 \u0627\u067e\u0646\u06cc \u0646\u0648\u0679 \u0628\u06a9 \u0645\u06cc\u06ba \u0631\u0648\u0679\u06cc\u0634\u0646 \u067e\u0627\u0644\u06cc\u0633\u06cc \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0644\u06a9\u06be\u06cc\u06ba\u06d4 \u06cc\u06c1\u0627\u06ba \u06af\u0631\u062f\u0634 \u06a9\u0648 \u062e\u0648\u062f\u06a9\u0627\u0631 \u0646\u06c1 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<h4 id=\"heading-check-3-audit-logs-exist\">\u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba 3\u06d4 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 \u0622\u06cc\u0627 \u0622\u0688\u0679 \u0644\u0627\u06af \u0645\u0648\u062c\u0648\u062f \u06c1\u06d2\u06d4<\/h4>\n<p>\u06af\u0648\u06af\u0644 \u06a9\u0644\u0627\u0624\u0688 \u0631\u06cc\u06a9\u0627\u0631\u0688 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u06a9\u0648\u0646 \u062e\u0641\u06cc\u06c1 \u0645\u0639\u0644\u0648\u0645\u0627\u062a \u067e\u0691\u06be\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u06a9\u0633 \u0646\u06d2 \u0627\u06cc\u067e \u06a9\u06d2 \u0627\u067e\u0646\u06d2 \u0644\u0627\u06af \u0633\u06d2 \u0627\u0644\u06af \u0627\u0644\u06af \u0627\u062c\u0627\u0632\u062a\u06cc\u06ba \u062a\u0628\u062f\u06cc\u0644 \u06a9\u06cc \u06c1\u06cc\u06ba\u06d4 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 \u0622\u06cc\u0627 \u0645\u062a\u0639\u0644\u0642\u06c1 \u0622\u0688\u0679 \u0627\u0646\u062f\u0631\u0627\u062c \u0645\u0648\u062c\u0648\u062f \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-bash\">gcloud logging read 'protoPayload.serviceName=(\"secretmanager.googleapis.com\" OR \"iam.googleapis.com\")' --limit=5 --freshness=7d --format=\"table(timestamp,protoPayload.methodName)\"\n<\/code><\/pre>\n<p>\u0645\u0630\u06a9\u0648\u0631\u06c1 \u0637\u0631\u06cc\u0642\u06c1 \u06a9\u0627 \u0646\u0627\u0645 \u062a\u0644\u0627\u0634 \u06a9\u0631\u06cc\u06ba\u06d4 <code>SecretManager<\/code> \u06cc\u0627 <code>iam<\/code>. \u0628\u0633 \u062c\u0648 \u062a\u0645 \u062f\u06cc\u06a9\u06be\u062a\u06d2 \u06c1\u0648\u06d4 <code>iam<\/code> \u0627\u06cc\u06a9 \u06c1\u06cc \u0646\u0627\u0645 <code>SetIAMPolicy<\/code>\u062a\u0645 \u0679\u06be\u06cc\u06a9 \u06c1\u0648\u061f \u0627\u0633 \u0633\u06d2 \u062b\u0627\u0628\u062a \u06c1\u0648\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u06af\u0648\u06af\u0644 \u0627\u062c\u0627\u0632\u062a \u06a9\u06cc \u062a\u0628\u062f\u06cc\u0644\u06cc\u0648\u06ba \u06a9\u0648 \u0631\u06cc\u06a9\u0627\u0631\u0688 \u06a9\u0631 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4 \u0679\u0627\u0626\u0645 \u0633\u0679\u06cc\u0645\u067e \u0645\u062e\u062a\u0644\u0641 \u06c1\u0648 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<h4 id=\"heading-check-4-each-identity-has-only-what-it-needs\">\u0679\u06be\u06cc\u06a9 \u06c1\u06d2 4. \u06c1\u0631 ID \u0645\u06cc\u06ba \u0635\u0631\u0641 \u0648\u06c1\u06cc \u06c1\u0648\u062a\u0627 \u06c1\u06d2 \u062c\u0633 \u06a9\u06cc \u0627\u0633\u06d2 \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u06d4<\/h4>\n<p>\u0627\u0633\u0679\u06cc\u062c\u0646\u06af \u06a9\u0627 \u0627\u06a9\u0627\u0624\u0646\u0679 \u0627\u0633\u0679\u06cc\u062c\u0646\u06af \u0631\u0627\u0632 \u06a9\u0648 \u067e\u0691\u06be\u062a\u0627 \u06c1\u06d2\u06d4 \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u06a9\u0627 \u0627\u06a9\u0627\u0624\u0646\u0679 \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u06a9\u0627 \u0631\u0627\u0632 \u067e\u0691\u06be\u062a\u0627 \u06c1\u06d2\u06d4 \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u062a\u0635\u0627\u0648\u06cc\u0631 \u06a9\u0648 \u0622\u06af\u06d2 \u0628\u0691\u06be\u0627\u062a\u06cc \u0627\u0648\u0631 \u062a\u0639\u06cc\u0646\u0627\u062a \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u06a9\u0644\u0633\u0679\u0631 \u0645\u06cc\u06ba \u062a\u0628\u062f\u06cc\u0644\u06cc\u0627\u06ba \u0646\u06c1\u06cc\u06ba \u06a9\u0631 \u0633\u06a9\u062a\u06cc\u06d4<\/p>\n<pre><code class=\"language-bash\">PROJECT_ID=$(gcloud config get-value project)\ngcloud secrets get-iam-policy clearpay-staging-database-url\ngcloud secrets get-iam-policy clearpay-production-database-url\ngcloud projects get-iam-policy \"$PROJECT_ID\" --flatten='bindings[].members' --filter=\"bindings.members:serviceAccount:clearpay-ci@\" --format=\"table(bindings.role)\"\n<\/code><\/pre>\n<p>\u06a9\u06cc\u0627 \u062a\u0644\u0627\u0634 \u06a9\u0631\u0646\u0627 \u06c1\u06d2:<\/p>\n<ul>\n<li>\n<p>\u062e\u0641\u06cc\u06c1 \u0641\u06c1\u0631\u0633\u062a \u0645\u0631\u062a\u0628 \u06a9\u0631\u0646\u0627 <code>clearpay-api-staging<\/code> \u0627\u0648\u0631 <code>clearpay-ci<\/code>. \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u06a9\u06d2 \u062f\u0648\u0631\u0627\u0646 \u0627\u0633\u0679\u06cc\u062c\u0646\u06af \u062c\u0648\u0691\u06cc \u06a9\u0648 \u067e\u0691\u06be\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u06a9\u06cc \u062e\u0641\u06cc\u06c1 \u0641\u06c1\u0631\u0633\u062a <code>clearpay-api-production<\/code> \u0635\u0631\u0641<\/p>\n<\/li>\n<li>\n<p><code>clearpay-ci<\/code> \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u06a9\u06d2 \u062f\u0648 \u06a9\u0631\u062f\u0627\u0631 \u06c1\u06cc\u06ba: <code>artifactregistry.writer<\/code> \u0627\u0648\u0631 <code>container.developer<\/code>.<\/p>\n<\/li>\n<\/ul>\n<p>\u0627\u06af\u0631 \u0622\u067e \u06a9\u06d2 \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u0633\u06cc\u06a9\u0631\u0679 \u0645\u06cc\u06ba \u0627\u0633\u0679\u06cc\u062c\u0646\u06af \u0627\u06a9\u0627\u0624\u0646\u0679 \u06a9\u06cc \u0641\u06c1\u0631\u0633\u062a \u06c1\u06d2 \u06cc\u0627 \u0622\u067e \u06a9\u06cc \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u0645\u06cc\u06ba \u062f\u0631\u062c \u0630\u06cc\u0644 \u06a9\u0631\u062f\u0627\u0631 \u06c1\u06cc\u06ba: <code>owner<\/code> \u06cc\u0627 <code>editor<\/code>\u0631\u06a9\u06cc\u06ba \u0627\u0648\u0631 \u0645\u0631\u062d\u0644\u06c1 5 \u06cc\u0627 6 \u0645\u06cc\u06ba \u062a\u0635\u062d\u06cc\u062d \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<h4 id=\"heading-done-when\">\u0645\u06a9\u0645\u0644 \u06c1\u0648\u0646\u06d2 \u067e\u0631:<\/h4>\n<ul>\n<li>\u062f\u06cc\u06a9\u06be\u06d2 \u06af\u0626\u06d2 \u0646\u062a\u0627\u0626\u062c \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0686\u0627\u0631\u0648\u06ba \u0686\u06cc\u06a9 \u0646\u0648\u0679\u0648\u06ba \u0645\u06cc\u06ba \u0644\u06a9\u06be\u06d2 \u06af\u0626\u06d2 \u06c1\u06cc\u06ba\u060c \u0646\u06c1 \u0635\u0631\u0641 \"\u0634\u0627\u06cc\u062f \u0679\u06be\u06cc\u06a9\"\u06d4<\/li>\n<\/ul>\n<h3 id=\"heading-chapter-17-watch-clearpay-with-prometheus-and-grafana-optional\">\u0628\u0627\u0628 17 \u067e\u0631\u0648\u0645\u06cc\u0679\u06cc\u0633 \u0627\u0648\u0631 \u06af\u0631\u0627\u0641\u0627\u0646\u0627 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u06a9\u0644\u06cc\u0626\u0631 \u067e\u06d2 \u062f\u06cc\u06a9\u06be\u06cc\u06ba (\u0627\u062e\u062a\u06cc\u0627\u0631\u06cc)<\/h3>\n<p><em>\u062c\u0645\u0639\u0631\u0627\u062a \u0635\u0628\u062d 9:30 \u0628\u062c\u06d2<\/em><\/p>\n<p>\u0633\u06cc\u06a9\u0648\u0631\u0679\u06cc \u06a9\u0627 \u062c\u0627\u0626\u0632\u06c1 \u0645\u06a9\u0645\u0644 \u06a9\u0631 \u0644\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4 \u0688\u06cc\u0646\u06cc\u0626\u0644 \u0622\u067e \u06a9\u0627 \u0646\u0648\u0679 \u067e\u0691\u06be\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u067e\u06be\u0631 \u0627\u067e\u0646\u06cc \u06a9\u0631\u0633\u06cc \u0622\u067e \u06a9\u06cc \u0637\u0631\u0641 \u0645\u0648\u0691\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0688\u06cc\u0646\u06cc\u0626\u0644: \"\u062c\u0628 \u0679\u0631\u06cc\u0641\u06a9 \u0628\u06c1\u0646\u0627 \u0634\u0631\u0648\u0639 \u06c1\u0648 \u062c\u0627\u0626\u06d2 \u062a\u0648 \u0645\u06cc\u06ba \u0627\u0646\u062f\u0627\u0632\u06c1 \u0644\u06af\u0627\u0646\u06d2 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u06af\u0631\u0627\u0641 \u062f\u06cc\u06a9\u06be\u0646\u0627 \u0686\u0627\u06c1\u062a\u0627 \u06c1\u0648\u06ba\u06d4 \u0645\u062c\u06be\u06d2 \u06a9\u06cc\u0627 \u062f\u06cc\u06a9\u06be\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u061f\"<\/p>\n<h4 id=\"heading-why-this-matters\">\u06cc\u06c1 \u06a9\u06cc\u0648\u06ba \u0627\u06c1\u0645\u06cc\u062a \u0631\u06a9\u06be\u062a\u0627 \u06c1\u06d2\u06d4<\/h4>\n<p><strong>\u06cc\u06c1 \u0628\u0627\u0628 \u0627\u062e\u062a\u06cc\u0627\u0631\u06cc \u06c1\u06d2\u06d4<\/strong> \u06cc\u06c1 AWS \u06cc\u0627 GKE \u06a9\u0648 \u0646\u06c1\u06cc\u06ba \u0686\u06be\u0648\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0628\u0639\u062f \u06a9\u06d2 \u0627\u0628\u0648\u0627\u0628 \u0645\u06cc\u06ba \u0627\u0633 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u06af\u06cc\u06d4 \u0627\u06af\u0631 \u0622\u067e \u0686\u0627\u06c1\u06cc\u06ba \u062a\u0648 \u0628\u0627\u0628 18 \u067e\u0631 \u062c\u0627\u0626\u06cc\u06ba\u06d4 \u0627\u06af\u0631 \u0622\u067e \u06cc\u06c1 \u062c\u0627\u0646\u0646\u0627 \u0686\u0627\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba \u06a9\u06c1 Prometheus \u0627\u0648\u0631 Grafana \u06a9\u06cc\u0633\u06d2 \u06a9\u0627\u0645 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u0627\u0633 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062c\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<p>API \u062f\u0631\u062c \u0630\u06cc\u0644 \u0645\u0642\u0627\u0645\u0627\u062a \u067e\u0631 \u0646\u0645\u0628\u0631\u0648\u06ba \u06a9\u0648 \u0638\u0627\u06c1\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2: <code>\/metrics<\/code>: \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0648\u06ba \u06a9\u06cc \u062a\u0639\u062f\u0627\u062f\u060c \u062a\u0627\u062e\u06cc\u0631\u060c \u0627\u0648\u0631 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u067e\u0648\u0644 \u06a9\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644\u06d4 \u067e\u0631\u0648\u0645\u06cc\u062a\u06be\u06cc\u0633 \u0627\u0633 \u0646\u0645\u0628\u0631 \u06a9\u0648 \u06c1\u0631 \u0686\u0646\u062f \u0633\u06cc\u06a9\u0646\u0688 \u0645\u06cc\u06ba \u062c\u0645\u0639 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u06af\u0631\u0627\u0641\u0627\u0646\u0627 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06c1 \u062a\u06cc\u0627\u0631 \u06a9\u0631\u062f\u06c1\u06d4<\/p>\n<p>\u0627\u0633 \u0628\u0627\u0628 \u0645\u06cc\u06ba\u060c \u0622\u067e Docker Compose \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u0627\u067e\u0646\u06cc \u0646\u0648\u0679 \u0628\u06a9 \u067e\u0631 Prometheus \u0627\u0648\u0631 Grafana \u0686\u0644\u0627\u0626\u06cc\u06ba \u06af\u06d2\u060c \u062c\u0648 \u0628\u0627\u0628 1 API \u06a9\u06cc \u0637\u0631\u0641 \u0627\u0634\u0627\u0631\u06c1 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u0633 \u0633\u06d2 \u062b\u0627\u0628\u062a \u06c1\u0648\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 \u06a9\u0627\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u06c1\u0645 GKE \u06cc\u0627 AWS \u06a9\u06cc \u0646\u06af\u0631\u0627\u0646\u06cc \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u06c1\u062f\u0641 \u0641\u0627\u0626\u0644 \u0627\u0633 \u067e\u0631 \u0648\u0627\u0642\u0639 \u06c1\u06d2: <code>observability\/targets\/<\/code> \u067e\u0633\u0646\u062f <code>.example<\/code> \u0641\u0627\u0626\u0644\u060c \u0644\u06cc\u06a9\u0646 \u06c1\u0645 \u0627\u0633 \u0641\u0627\u0626\u0644 \u06a9\u0648 \u0627\u0633 \u0644\u06cc\u0628 \u0645\u06cc\u06ba \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u06cc\u06ba \u06af\u06d2\u06d4 \u062c\u0628 \u0679\u0631\u06cc\u0641\u06a9 \u0686\u0644 \u0631\u06c1\u0627 \u06c1\u06d2\u060c \u0628\u0627\u0628 21 \u0627\u0648\u0631 22 \u0645\u06cc\u06ba \u06a9\u0645\u0627\u0646\u0688 \u0644\u0627\u0626\u0646 \u06a9\u06cc \u062c\u0627\u0646\u0686 \u0645\u0639\u0644\u0648\u0645\u0627\u062a \u06a9\u0627 \u0630\u0631\u06cc\u0639\u06c1 \u06c1\u06d2\u06d4<\/p>\n<p>\u06af\u0648\u06af\u0644 \u06a9\u0644\u0627\u0624\u0688 \u06a9\u06d2 \u0627\u067e\u0646\u06d2 \u0633\u0627\u062a \u062f\u0631\u062c\u06d2 \u06a9\u06d2 \u0627\u06cc\u0631\u0631 \u06a9\u0627\u0624\u0646\u0679\u0631\u0632 \u06c1\u06cc\u06ba\u06d4 \u06cc\u06c1 \u062c\u06cc \u0633\u06cc \u067e\u06cc \u067e\u0631 \u06a9\u0644\u0627\u0624\u0688 \u0644\u0627\u06af\u0646\u06af \u0645\u06cc\u0679\u0631\u06a9 \u06c1\u06d2 \u062c\u0648 \u06af\u0631\u0627\u0641\u0627\u0646\u0627 \u0633\u06d2 \u0627\u0644\u06af \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-plaintext\">Now     localhost:4000  \u2192  Prometheus  \u2192  Grafana :3000\nLater   AWS, GKE, load balancer  (observability\/targets\/*.example, optional)\n<\/code><\/pre>\n<h4 id=\"heading-steps\">\u0642\u062f\u0645<\/h4>\n<p>\u067e\u0631\u0648\u0645\u06cc\u062a\u06be\u06cc\u0633 \u067e\u0691\u06be\u062a\u0627 \u06c1\u06d2\u06d4 <code>host.docker.internal:4000<\/code>\u06cc\u06c1 \u0627\u06cc\u06a9 \u0628\u0627\u0628 1 API \u06c1\u06d2\u06d4 \u0627\u06af\u0631 <code>curl http:\/\/localhost:4000\/health<\/code> \u0627\u06af\u0631 \u0622\u067e \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648\u062c\u0627\u062a\u06d2 \u06c1\u06cc\u06ba \u062a\u0648 \u0634\u0631\u0648\u0639 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">docker compose up -d api postgres\n<\/code><\/pre>\n<p>\u067e\u06be\u0631 \u06c1\u0645 \u0645\u0627\u0646\u06cc\u0679\u0631\u0646\u06af \u0627\u0633\u0679\u06cc\u06a9 \u0634\u0631\u0648\u0639 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">cd observability\ndocker compose up\n<\/code><\/pre>\n<p>http:\/\/localhost:3000 \u06a9\u06be\u0648\u0644\u06cc\u06ba\u06d4 \u0627\u0633 \u0644\u06cc\u067e \u0679\u0627\u067e \u06a9\u06d2 \u0645\u062e\u0635\u0648\u0635 \u0627\u0633\u0679\u06cc\u06a9 \u0645\u06cc\u06ba \u06af\u0645\u0646\u0627\u0645 \u0627\u06cc\u0688\u0645\u0646\u0633\u0679\u0631\u06cc\u0679\u0631 \u06a9\u06cc \u0631\u0633\u0627\u0626\u06cc \u0641\u0639\u0627\u0644 \u06c1\u06d2\u06d4 \u0627\u0641\u062a\u062a\u0627\u062d\u06cc <strong>ClearPay - \u0645\u0627\u0626\u06cc\u06af\u0631\u06cc\u0634\u0646 \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688<\/strong>.<\/p>\n<h4 id=\"heading-check\">\u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba<\/h4>\n<p>\u0645\u0642\u0627\u0645\u06cc API \u06a9\u0648 \u06a9\u0686\u06be \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u06cc\u06ba \u0628\u06be\u06cc\u062c\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">curl http:\/\/localhost:4000\/health\n<\/code><\/pre>\n<p>\u06a9\u06c1 <strong>\u0645\u0627\u062d\u0648\u0644\u06cc\u0627\u062a p95 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06c1 \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u06d2 \u0648\u0642\u062a \u06a9\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u0631\u06cc\u06ba\u06d4<\/strong> \u067e\u06cc\u0646\u0644 \u0645\u0646\u062f\u0631\u062c\u06c1 \u0630\u06cc\u0644 \u0633\u06cc\u0631\u06cc\u0632 \u062f\u06a9\u06be\u0627\u062a\u0627 \u06c1\u06d2: <code>local<\/code>. \u062e\u0627\u0644\u06cc \u067e\u06cc\u0646\u0644 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u06a9\u06c1 Prometheus \u067e\u0648\u0631\u0679 4000 \u0633\u06d2 \u0631\u0627\u0628\u0637\u06c1 \u0646\u06c1\u06cc\u06ba \u06a9\u0631 \u0633\u06a9\u062a\u0627\u06d4<\/p>\n<h4 id=\"heading-done-when\">\u0645\u06a9\u0645\u0644 \u06c1\u0648\u0646\u06d2 \u067e\u0631:<\/h4>\n<ul>\n<li>\u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 \u062f\u06a9\u06be\u0627\u062a\u0627 \u06c1\u06d2: <code>local<\/code> \u0633\u06cc\u0631\u06cc\u0632<\/li>\n<\/ul>\n<h3 id=\"heading-chapter-18-load-test-and-break-staging-on-purpose\">\u0628\u0627\u0628 18 \u0645\u0642\u0635\u062f \u06a9\u06d2 \u0645\u0637\u0627\u0628\u0642 \u0644\u0648\u0688 \u0679\u06cc\u0633\u0679\u0646\u06af \u0627\u0648\u0631 \u0628\u0646\u062f\u0634 \u06a9\u06d2 \u0627\u0642\u062f\u0627\u0645\u0627\u062a<\/h3>\n<p><em>\u062c\u0645\u0639\u0631\u0627\u062a \u062f\u0648\u067e\u06c1\u0631 1 \u0628\u062c\u06d2<\/em><\/p>\n<p>\u0627\u06cc\u06a9 \u0628\u0627\u0631 \u062c\u0628 \u0622\u067e \u06a9\u0627 \u0633\u0679\u06cc\u062c\u0646\u06af \u06af\u06cc\u0679 \u0633\u06d2 \u06af\u0632\u0631 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u060c \u062a\u0648 \u0622\u067e \u06a9\u0627 \u06a9\u0627\u0645 \u06c1\u0648 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4 \u0688\u06cc\u0646\u06cc\u0626\u0644 \u0628\u0627\u0628 6 \u06a9\u0627 \u0633\u06a9\u0648\u0631 \u06a9\u0627\u0631\u0688 \u0627\u0648\u0631 \u06af\u06cc\u0679 \u06a9\u06d2 \u0646\u062a\u0627\u0626\u062c \u06a9\u0648 \u0627\u0633\u06a9\u0631\u06cc\u0646 \u067e\u0631 \u0633\u0627\u062a\u06be \u0633\u0627\u062a\u06be \u062f\u06a9\u06be\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0688\u06cc\u0646\u06cc\u0626\u0644: \"\u06af\u06cc\u0679 \u06a9\u0648 \u0635\u0631\u0641 \u0627\u06cc\u06a9 \u0644\u0627\u06af \u0627\u0646 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0679\u06cc\u0633\u0679 \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4 \u0627\u06af\u0631 20 \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u06cc\u06ba \u0627\u06cc\u06a9 \u0633\u0627\u062a\u06be \u067e\u06c1\u0646\u0686 \u062c\u0627\u0626\u06cc\u06ba \u06cc\u0627 \u067e\u0648\u0688 \u062e\u062a\u0645 \u06a9\u0631 \u062f\u06cc\u0627 \u062c\u0627\u0626\u06d2 \u062a\u0648 \u06a9\u06cc\u0627 \u06c1\u0648\u06af\u0627\u061f\"<\/p>\n<p>\u0686\u06cc\u067e\u0679\u0631 6 \u0644\u0648\u0688 \u0679\u06cc\u0633\u0679 \u06a9\u0648 \u0633\u0679\u06cc\u062c\u0646\u06af \u06a9\u06d2 \u062e\u0644\u0627\u0641 \u0686\u0644\u0627\u0626\u06cc\u06ba\u060c \u062f\u0648\u0646\u0648\u06ba \u0633\u06a9\u0648\u0631 \u06a9\u0627\u0631\u0688\u0632 \u06a9\u0648 \u0633\u0627\u062a\u06be \u0633\u0627\u062a\u06be \u0631\u06a9\u06be\u06cc\u06ba\u060c \u067e\u06be\u0631 \u0644\u0648\u0688 \u06a9\u06d2 \u0686\u0644\u0646\u06d2 \u06a9\u06d2 \u062f\u0648\u0631\u0627\u0646 \u067e\u0648\u0688 \u06a9\u0648 \u0645\u0627\u0631 \u0688\u0627\u0644\u06cc\u06ba \u0627\u0648\u0631 \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0634\u0631\u0648\u0639 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<h4 id=\"heading-why-this-matters\">\u06cc\u06c1 \u06a9\u06cc\u0648\u06ba \u0627\u06c1\u0645\u06cc\u062a \u0631\u06a9\u06be\u062a\u0627 \u06c1\u06d2\u06d4<\/h4>\n<p>\u0635\u0627\u0631\u0641\u06cc\u0646 \u0627\u06cc\u06a9 \u0633\u0627\u062a\u06be GKE \u0633\u06d2 \u0628\u06c1\u062a \u0633\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u06cc\u06ba \u06a9\u0631\u06cc\u06ba \u06af\u06d2\u060c \u0627\u0648\u0631 Kubernetes \u0627\u067e \u0688\u06cc\u0679\u0633 \u0627\u0648\u0631 \u0645\u0634\u06cc\u0646 \u06a9\u06cc \u0645\u0631\u0645\u062a \u06a9\u06d2 \u062f\u0648\u0631\u0627\u0646 \u067e\u0648\u0688\u0632 \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0634\u0631\u0648\u0639 \u06a9\u0631\u06cc\u06ba \u06af\u06d2\u06d4 \u0627\u0628 \u0645\u06cc\u06ba \u062f\u0648\u0646\u0648\u06ba \u06a9\u0648 \u06a9\u0633\u0679\u0645\u0631 \u06a9\u06cc \u0634\u0645\u0648\u0644\u06cc\u062a \u06a9\u06d2 \u0628\u063a\u06cc\u0631 \u06c1\u0648\u062a\u0627 \u062f\u06cc\u06a9\u06be\u0646\u0627 \u0686\u0627\u06c1\u062a\u0627 \u06c1\u0648\u06ba\u06d4<\/p>\n<p>\u0679\u06cc\u0633\u0679 \u06a9\u06d2 \u062a\u062d\u062a \u0633\u0633\u0679\u0645 \u0627\u0633\u0679\u06cc\u062c 3 \u0633\u06d2 \u0628\u0627\u0642\u0627\u0639\u062f\u06c1 \u0646\u0648\u0688 \u067e\u0648\u0644 \u067e\u0631 \u0686\u0644\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u06af\u0631 \u0622\u067e \u06a9\u0644\u0627\u0624\u0688 \u0645\u06cc\u06ba \u0644\u0648\u0688 \u062c\u0646\u0631\u06cc\u0679\u0631 \u0686\u0644\u0627 \u0631\u06c1\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u0633\u0633\u062a\u06d2 \u0627\u0633\u067e\u0627\u0679 VMs \u0645\u062b\u0627\u0644\u06cc \u06c1\u06cc\u06ba \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u0627\u0646\u06c1\u06cc\u06ba \u0628\u063a\u06cc\u0631 \u06a9\u0633\u06cc \u0646\u0642\u0635\u0627\u0646 \u06a9\u06d2 \u0627\u062a\u0627\u0631\u0627 \u062c\u0627 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4 \u067e\u06cc\u0645\u0627\u0626\u0634 \u06a9\u06d2 \u0646\u0638\u0627\u0645 \u06a9\u0648 \u06a9\u0628\u06be\u06cc \u0628\u06be\u06cc \u0627\u0633\u067e\u0627\u0679 \u067e\u0631 \u0646\u06c1\u06cc\u06ba \u0686\u0644\u0646\u0627 \u0686\u0627\u06c1\u0626\u06d2 \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u0631\u06a9\u0627\u0648\u0679 \u0631\u06cc\u0688\u0646\u06af \u06a9\u0648 \u062e\u0631\u0627\u0628 \u06a9\u0631 \u0633\u06a9\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<h4 id=\"heading-step-1-load-test-staging\">\u0645\u0631\u062d\u0644\u06c1 1\u06d4 \u0644\u0648\u0688 \u0679\u06cc\u0633\u0679\u0646\u06af \u06a9\u06cc \u062a\u06cc\u0627\u0631\u06cc<\/h4>\n<p>\u0631\u06cc\u067e\u0648\u0632\u0679\u0631\u06cc \u0631\u0648\u0679 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062f\u0648 \u0679\u0631\u0645\u06cc\u0646\u0644\u0632 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p><strong>\u0679\u0631\u0645\u06cc\u0646\u0644 \u0627\u06d2<\/strong> \u0627\u0633 \u0628\u0627\u0628 \u0645\u06cc\u06ba \u067e\u0648\u0631\u06d2 \u0628\u0627\u0628 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0633\u0631\u0646\u06af\u06cc\u06ba \u06c1\u06cc\u06ba\u06d4 \u0686\u0644\u062a\u06d2 \u0631\u06c1\u0646\u06d2 \u062f\u0648\u06d4<\/p>\n<pre><code class=\"language-bash\">kubectl -n staging port-forward svc\/clearpay-api 8080:80\n<\/code><\/pre>\n<p>\u0627\u0633\u06d2 \u062a\u0644\u0627\u0634 \u06a9\u0631\u06cc\u06ba\u06d4 <code>Forwarding from 127.0.0.1:8080<\/code>.<\/p>\n<p><strong>\u0679\u0631\u0645\u06cc\u0646\u0644 \u0628\u06cc<\/strong>: \u0633\u0628 \u0633\u06d2 \u067e\u06c1\u0644\u06d2\u060c \u06cc\u0642\u06cc\u0646\u06cc \u0628\u0646\u0627\u0626\u06cc\u06ba \u06a9\u06c1 \u0622\u067e GKE \u0633\u06d2 \u062c\u0691\u06d2 \u06c1\u0648\u0626\u06d2 \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u067e\u0648\u0633\u0679\u06af\u0631\u06cc\u0633 \u062c\u0648\u0627\u0628 \u062f\u06d2 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-bash\">curl -s http:\/\/localhost:8080\/health\ncurl -s http:\/\/localhost:8080\/health\/ready\n<\/code><\/pre>\n<p><code>health<\/code> \u0634\u0627\u0645\u0644 \u06c1\u0648\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u06d4 <code>\"platform\":\"gke\"<\/code>. <code>ready<\/code> \u0634\u0627\u0645\u0644 \u06c1\u0648\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u06d4 <code>\"status\":\"ready\"<\/code>.<\/p>\n<p>\u067e\u06be\u0631 30 \u0633\u06cc\u06a9\u0646\u0688 \u0645\u06cc\u06ba 20 \u0633\u0645\u0648\u0631\u062a\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0648\u06ba \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0644\u0648\u0688 \u0679\u06cc\u0633\u0679 \u0686\u0644\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">.\/scripts\/load-test.sh http:\/\/localhost:8080 \n  alice@clearpay.dev password123 20 30\n<\/code><\/pre>\n<p>\u0627\u0633\u06a9\u0648\u0631 \u06a9\u0627\u0631\u0688 \u06a9\u0648 AWS \u0627\u0633\u06a9\u0648\u0631 \u06a9\u0627\u0631\u0688 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0627\u067e\u0646\u06d2 \u0646\u0648\u0679\u0648\u06ba \u0645\u06cc\u06ba \u06a9\u0627\u067e\u06cc \u06a9\u0631\u06cc\u06ba\u06d4 \u0627\u0633 \u0644\u06cc\u0628 \u06a9\u06d2 \u0627\u0639\u062f\u0627\u062f \u0648 \u0634\u0645\u0627\u0631:<\/p>\n<pre><code class=\"language-plaintext\">                AWS (Chapter 6)   GKE staging (this chapter)\np95 latency:    745 ms            655 ms\nError rate:     0.0 %             0.0 %\nRecovery time\nafter pod kill: n\/a               (fill in after Step 3)\n<\/code><\/pre>\n<p>AWS 10 \u0633\u0645\u0648\u0631\u062a\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0648\u06ba \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0686\u0644\u0627 \u0627\u0648\u0631 <code>ok=372<\/code>. GKE 20 \u0633\u0645\u0648\u0631\u062a\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0648\u06ba \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0686\u0644\u0627\u06d4 <code>ok=686<\/code>\u060c <code>failed=0<\/code>22.9 \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u06cc\u06ba \u0641\u06cc \u0633\u06cc\u06a9\u0646\u0688\u06d4<\/p>\n<p>GKE \u06a9\u0627 p95 AWS \u0633\u06d2 \u062a\u06be\u0648\u0691\u0627 \u06a9\u0645 \u06c1\u06d2\u06d4 \u0622\u067e \u062d\u06cc\u0631\u0627\u0646 \u06c1\u0648 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u062f\u0648\u0646\u0648\u06ba \u0646\u0645\u0628\u0631\u0648\u06ba \u06a9\u06cc \u0627\u06a9\u062b\u0631\u06cc\u062a \u0644\u06cc\u067e \u0679\u0627\u067e \u0633\u06d2 \u06a9\u0644\u0627\u0624\u0688 \u062a\u06a9 \u06a9\u06cc \u062d\u0631\u06a9\u062a \u06c1\u06d2\u060c \u0627\u0648\u0631 \u0627\u0633 \u062d\u0631\u06a9\u062a \u06a9\u0627 \u0633\u0627\u0626\u0632 \u062f\u0648\u0646\u0648\u06ba \u06a9\u06d2 \u0644\u06cc\u06d2 \u062a\u0642\u0631\u06cc\u0628\u0627\u064b \u0627\u06cc\u06a9 \u062c\u06cc\u0633\u0627 \u06c1\u06d2\u06d4 GKE \u0645\u06cc\u06ba \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u06a9\u06d2 \u062a\u0645\u0627\u0645 \u0633\u0648\u0627\u0644\u0627\u062a \u0628\u06be\u06cc \u06af\u0648\u06af\u0644 \u06a9\u06d2 \u0633\u0648\u0627\u0644\u0627\u062a \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0627\u06cc\u06a9 \u062f\u0648\u0633\u0631\u06d2 \u06a9\u0648 \u062c\u0648\u0691\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <code>us-east4<\/code> AWS \u067e\u0631 <code>us-east-1<\/code> \u06cc\u06c1 \u06a9\u0644\u0627\u0624\u0688 NAT \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u06cc\u06c1 \u0627\u0633 \u06a9\u06d2 \u0627\u0648\u067e\u0631 \u062a\u06be\u0648\u0691\u0627 \u0633\u0627 \u0627\u0636\u0627\u0641\u06c1 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0686\u0648\u0646\u06a9\u06c1 \u062f\u0648 \u0631\u0646\u0632 \u0645\u062e\u062a\u0644\u0641 \u06a9\u0646\u06a9\u0631\u0646\u0633\u06cc \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba (10 \u0627\u0648\u0631 20)\u060c \u06c1\u0645 \u0646\u0645\u0628\u0631\u0648\u06ba \u06a9\u0648 \u0631\u06cc\u0633\u0646\u06af \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u0642\u0631\u06cc\u0628 \u0633\u0645\u062c\u06be\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0644\u0627\u0626\u0646\u0648\u06ba \u06a9\u0648 \u0635\u0627\u0641 \u0631\u06a9\u06be\u0646\u0627 \u0636\u0631\u0648\u0631\u06cc \u06c1\u06d2\u06d4 <code>failed=0<\/code>. \u062f\u0648\u0646\u0648\u06ba \u0644\u06cc\u0679\u0646\u0633\u06cc \u0646\u0645\u0628\u0631\u0632 \u06a9\u0648 \u0630\u06c1\u0646 \u0645\u06cc\u06ba \u0631\u06a9\u06be\u06cc\u06ba\u06d4 \u0648\u06c1 \u06a9\u062a\u0627\u0628 \u06a9\u06d2 \u0622\u062e\u0631 \u0645\u06cc\u06ba \u062f\u0648\u0628\u0627\u0631\u06c1 \u0644\u0648\u0679\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<h4 id=\"heading-step-2-read-the-served-by-lines\">\u0645\u0631\u062d\u0644\u06c1 2\u06d4 \u067e\u0691\u06be\u06cc\u06ba <code>served by<\/code> \u0633\u0645\u0648\u0686<\/h4>\n<p>ClearPay \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 \u06a9\u06be\u0648\u0644\u06cc\u06ba\u06d4 <code>api.clearpay.test<\/code> \u062d\u0627\u0644\u06cc\u06c1 \u0633\u0631\u06af\u0631\u0645\u06cc \u067e\u0631 \u0627\u06cc\u06a9 \u0646\u0638\u0631 \u0688\u0627\u0644\u06cc\u06ba\u06d4 \u0633\u0628 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u0645\u062a\u0648\u0642\u0639 <code>aws<\/code> \u0644\u0627\u0626\u0646 \u0627\u0648\u0631 \u0627\u06cc\u06a9 \u06cc\u0627 \u062f\u0648 <code>gke<\/code> \u0633\u0645\u0648\u0686 \u06cc\u06c1 \u0644\u06cc\u0628\u0627\u0631\u0679\u0631\u06cc \u062a\u06be\u06cc:<\/p>\n<pre><code class=\"language-plaintext\">-$1.00  served by aws\/1.0.0        \u2190 a send you made in the browser\n-$1.00  served by gke\/0.0.0-unset  \u2190 the promotion gate from Chapter 15\n-$5.00  served by aws\/1.0.0        \u2190 an older send\n<\/code><\/pre>\n<p>\u06c1\u0631 \u0644\u0627\u0626\u0646 \u0627\u0633 \u0639\u0645\u0644 \u06a9\u0627 \u0646\u0627\u0645 \u062f\u06cc\u062a\u06cc \u06c1\u06d2 \u062c\u0633 \u0646\u06d2 \u0645\u0646\u062a\u0642\u0644\u06cc \u06a9\u0648 \u062a\u062e\u0644\u06cc\u0642 \u06a9\u06cc\u0627\u06d4 \u062f\u0648\u0646\u0648\u06ba \u0628\u0627\u062f\u0644 \u0627\u06cc\u06a9 \u06c1\u06cc \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u067e\u0631 \u0644\u06a9\u06be\u062a\u06d2 \u06c1\u06cc\u06ba \u0627\u0648\u0631 UI \u06c1\u0631 \u0642\u0637\u0627\u0631 \u06a9\u0648 \u067e\u0691\u06be\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u062a\u0646\u0627 \u06a9\u0645 \u06a9\u06cc\u0648\u06ba\u061f <code>gke<\/code> \u0633\u0645\u0648\u0686\u061f<\/p>\n<ul>\n<li>\n<p>\u0622\u067e \u06a9\u0627 \u0628\u0631\u0627\u0624\u0632\u0631 \u0627\u0633\u06d2 AWS \u06a9\u0648 \u0628\u06be\u06cc\u062c\u062a\u0627 \u06c1\u06d2\u06d4 \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u0633\u0627\u0645\u0646\u06d2 \u06a9\u0627 \u062f\u0631\u0648\u0627\u0632\u06c1 \u0627\u0628 \u0628\u06be\u06cc \u0622\u067e \u06a9\u06cc 100% \u0679\u0631\u06cc\u0641\u06a9 \u0648\u06c1\u0627\u06ba \u0628\u06be\u06cc\u062c\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0645\u06cc\u06ba \u0646\u06d2 \u0635\u0631\u0641 GKE \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u067e\u0631\u0648\u0645\u0648 \u06af\u06cc\u0679 \u0628\u0646\u0627\u06cc\u0627 \u0627\u0648\u0631 \u0633\u0631\u0646\u06af \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 $1.00 \u0627\u062f\u0627 \u06a9\u06cc\u0627\u06d4 \u0644\u0648\u0688 \u0679\u06cc\u0633\u0679 \u0635\u0631\u0641 \u0688\u06cc\u0679\u0627 \u06a9\u0648 \u067e\u0691\u06be\u062a\u0627 \u06c1\u06d2\u060c \u0644\u06c1\u0630\u0627 \u0627\u0633 \u0645\u06cc\u06ba \u06a9\u0648\u0626\u06cc \u0644\u06a9\u06cc\u0631\u06cc\u06ba \u0634\u0627\u0645\u0644 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u062a\u06cc \u06c1\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<\/ul>\n<p>\u06a9\u0648\u0626\u06cc \u0631\u0627\u0633\u062a\u06c1 \u0646\u06c1\u06cc\u06ba <code>gke<\/code> \u0627\u0633 \u0644\u0627\u0626\u0646 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06cc\u06c1 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2 \u06a9\u06c1 \u0644\u0648\u0688 \u0628\u06cc\u0644\u0646\u0633\u0631 \u0646\u06d2 \u0635\u0641\u062d\u06c1 GKE \u06a9\u0648 \u0628\u06be\u06cc\u062c\u0627 \u06c1\u06d2\u06d4 \u0627\u0633 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u06a9\u06c1 GKE \u067e\u0648\u0688 \u0646\u06d2 \u0627\u0633 \u0645\u0646\u062a\u0642\u0644\u06cc \u06a9\u0648 \u0633\u0646\u0628\u06be\u0627\u0644\u0627\u06d4<\/p>\n<p>\u062f\u0648\u0646\u0648\u06ba \u0646\u0627\u0645 \u0645\u0627\u062d\u0648\u0644\u06cc\u0627\u062a\u06cc \u0645\u062a\u063a\u06cc\u0631\u0627\u062a \u0633\u06d2 \u0622\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <code>aws\/1.0.0<\/code> EC2 \u0633\u06d2 \u0622\u0631\u06c1\u0627 \u06c1\u06d2\u06d4 <code>.env<\/code> \u0641\u0627\u0626\u0644 <code>gke\/0.0.0-unset<\/code> \u0633\u06d2 \u0622\u062a\u0627 \u06c1\u06d2 <code>k8s\/base\/deployment.yaml<\/code>\u06a9\u06c1\u0627\u06ba <code>APP_VERSION<\/code> \u06cc\u06c1 \u0627\u06cc\u06a9 \u067e\u0644\u06cc\u0633 \u06c1\u0648\u0644\u0688\u0631 \u06c1\u06d2 \u062c\u0648 \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u06a9\u0648 \u062a\u0628\u062f\u06cc\u0644 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u067e\u0644\u06cc\u0633 \u06c1\u0648\u0644\u0688\u0631 \u0645\u062a\u0648\u0642\u0639 \u06c1\u06d2\u060c \u062a\u0646\u0627\u0632\u0639\u06c1 \u0646\u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u0627\u0648\u067e\u0631 \u06a9\u06cc \u06a9\u0627\u0644\u06cc \u0628\u0627\u0631 \u0627\u0633 \u0628\u0627\u062a \u06a9\u06cc \u0646\u0634\u0627\u0646\u062f\u06c1\u06cc \u06a9\u0631\u062a\u06cc \u06c1\u06d2 \u06a9\u06c1 \u0641\u06cc \u0627\u0644\u062d\u0627\u0644 \u06a9\u0648\u0646 \u0633\u0627 \u0639\u0645\u0644 \u062c\u0648\u0627\u0628 \u062f\u06d2 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4 \u0622\u067e \u06a9\u06cc \u062d\u0627\u0644\u06cc\u06c1 \u0633\u0631\u06af\u0631\u0645\u06cc \u06a9\u06cc \u0633\u0631\u06af\u0632\u0634\u062a \u0638\u0627\u06c1\u0631 \u06a9\u06cc \u062c\u0627\u0626\u06d2 \u06af\u06cc\u06d4<\/p>\n<h4 id=\"heading-step-3-kill-a-pod-and-time-the-recovery\">\u0645\u0631\u062d\u0644\u06c1 3\u06d4 \u067e\u0648\u0688 \u06a9\u0648 \u0628\u0646\u062f \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u0628\u062d\u0627\u0644\u06cc \u06a9\u0627 \u0648\u0642\u062a \u0645\u0642\u0631\u0631 \u06a9\u0631\u06cc\u06ba\u06d4<\/h4>\n<p>\u0627\u06cc\u06a9 API Pod \u06a9\u0648 \u062a\u0628\u0627\u06c1 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u067e\u06cc\u0645\u0627\u0626\u0634 \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 Kubernetes \u06a9\u0648 \u0627\u0633\u06d2 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u0646\u06d2 \u0645\u06cc\u06ba \u06a9\u062a\u0646\u0627 \u0648\u0642\u062a \u0644\u06af\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-bash\">kubectl -n staging get pods -l app=clearpay-api\nPOD=$(kubectl -n staging get pod -l app=clearpay-api -o jsonpath=\"{.items[0].metadata.name}\")\necho \"deleting $POD\"\nSTART=$(date +%s)\nkubectl -n staging delete pod \"$POD\"\nkubectl -n staging wait --for=condition=Ready pod -l app=clearpay-api --timeout=120s\necho \"recovery $(( $(date +%s) - START )) s\"\nkubectl -n staging get pods -l app=clearpay-api\n<\/code><\/pre>\n<p><code>kubectl delete pod<\/code> \u067e\u0686\u06be\u0644\u06cc \u067e\u0648\u0688 \u06a9\u06d2 \u063a\u0627\u0626\u0628 \u06c1\u0648\u0646\u06d2 \u06a9\u0627 \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u0631\u06cc\u06ba\u060c \u0628\u0634\u0645\u0648\u0644 5 \u0633\u06cc\u06a9\u0646\u0688\u06d4 <code>preStop<\/code> \u0648\u0642\u0641\u06c1 <code>k8s\/base\/deployment.yaml<\/code>. \u0645\u0648\u0642\u0648\u0641 \u062c\u0627\u0631\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0648\u06ba \u06a9\u0648 \u0639\u0645\u0644 \u06a9\u0648 \u0631\u0648\u06a9\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0645\u06a9\u0645\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4 \u06a9\u06c1 <code>recovery<\/code> \u0644\u0627\u0626\u0646 \u062d\u0630\u0641 \u06c1\u0648\u0646\u06d2 \u0633\u06d2 \u0644\u06d2 \u06a9\u0631 \u0646\u06cc\u0627 \u067e\u0648\u0688 \u062a\u06cc\u0627\u0631 \u06c1\u0648\u0646\u06d2 \u062a\u06a9 \u06a9\u0627 \u0648\u0642\u062a \u06c1\u06d2\u06d4 \u0627\u0633 \u0644\u06cc\u0628 \u06a9\u0627 \u067e\u0686\u06be\u0644\u0627 \u0631\u0646 \u067e\u0631\u0646\u0679 \u06a9\u06cc\u0627 \u062c\u0627 \u0686\u06a9\u0627 \u06c1\u06d2\u06d4 <code>42 s<\/code>. \u0622\u067e \u06a9\u0627 \u0645\u0639\u0627\u0645\u0644\u06c1 \u0645\u062e\u062a\u0644\u0641 \u06c1\u0648\u06af\u0627\u06d4 \u0628\u0631\u0627\u06c1 \u06a9\u0631\u0645 \u0627\u0648\u067e\u0631 \u0648\u0627\u0644\u06d2 \u062c\u062f\u0648\u0644 \u0645\u06cc\u06ba \u0627\u067e\u0646\u0627 \u0641\u0648\u0646 \u0646\u0645\u0628\u0631 \u062f\u0631\u062c \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p>\u0627\u06af\u0631 <code>wait<\/code> \u0648\u0642\u062a \u062e\u062a\u0645\u060c \u0686\u0644\u0627\u0626\u06cc\u06ba <code>kubectl -n staging get pods<\/code> \u0627\u0648\u0631 <code>kubectl -n staging describe pod<\/code> \u067e\u0648\u0688 \u06a9\u06d2 \u0646\u0626\u06d2 \u0646\u0627\u0645 \u0645\u06cc\u06ba\u06d4<\/p>\n<p>\u0679\u0631\u0645\u06cc\u0646\u0644 \u0627\u06cc\u06a9 \u0633\u0631\u0646\u06af \u06a9\u0648 \u0627\u0633 \u0648\u0642\u062a \u062d\u0630\u0641 \u06a9\u06cc\u0627 \u062c\u0627 \u0633\u06a9\u062a\u0627 \u06c1\u06d2 \u062c\u0628 \u067e\u0648\u0688 \u062c\u0633 \u06a9\u06cc \u0637\u0631\u0641 \u0627\u0634\u0627\u0631\u06c1 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u0627\u0633\u06d2 \u062d\u0630\u0641 \u06a9\u0631 \u062f\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u0679\u0631\u0645\u06cc\u0646\u0644 A \u0628\u0646\u062f \u06c1\u0648\u0646\u06d2 \u067e\u0631\u060c \u0645\u0631\u062d\u0644\u06c1 4 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u062f\u0648\u0628\u0627\u0631\u06c1 \u067e\u0648\u0631\u0679 \u0641\u0627\u0631\u0648\u0631\u0688\u0646\u06af \u0634\u0631\u0648\u0639 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<h4 id=\"heading-step-4-restart-the-deployment-under-load\">\u0645\u0631\u062d\u0644\u06c1 4\u06d4 \u0644\u0648\u0688\u0646\u06af \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0634\u0631\u0648\u0639 \u06a9\u0631\u06cc\u06ba\u06d4<\/h4>\n<p>\u0627\u0633 \u0642\u062f\u0645 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0622\u067e \u06a9\u0648 \u062f\u0631\u062c \u0630\u06cc\u0644 \u0645\u06cc\u06ba \u0633\u06d2 \u0627\u06cc\u06a9 \u06a9\u0648 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2: <code>scripts\/load-test.sh<\/code>. \u0627\u0633 \u06a9\u06d2 \u0628\u063a\u06cc\u0631\u060c <code>failed=<\/code> \u06cc\u06c1\u0627\u06ba \u062a\u06a9 \u06a9\u06c1 \u0627\u06af\u0631 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u062e\u062a\u0645 \u06c1\u0648\u062c\u0627\u062a\u06cc \u06c1\u06d2\u060c 0 \u067e\u0691\u06be\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u0633\u06a9\u0631\u067e\u0679 \u0635\u0631\u0641 \u0627\u0646 \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0648\u06ba \u06a9\u0648 \u0634\u0645\u0627\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u062c\u0646 \u06a9\u0627 \u062c\u0648\u0627\u0628 \u0645\u0648\u0635\u0648\u0644 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4 \u062c\u0628 \u067e\u0648\u0688 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0634\u0631\u0648\u0639 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u060c \u0633\u0631\u0646\u06af \u0644\u0679\u06a9 \u062c\u0627\u062a\u06cc \u06c1\u06d2\u060c \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u0627 \u06a9\u0648\u0626\u06cc \u062c\u0648\u0627\u0628 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u0627\u0633\u06a9\u0631\u067e\u0679 \u0646\u0627\u06a9\u0627\u0645\u06cc \u06a9\u0648 \u0634\u0645\u0627\u0631 \u06a9\u06cc\u06d2 \u0628\u063a\u06cc\u0631 \u0627\u0633 \u06a9\u0627\u0631\u06a9\u0646 \u06a9\u0648 \u0631\u0648\u06a9 \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u06a9\u06be\u0644\u0627 <code>scripts\/load-test.sh<\/code> \u0622\u067e \u06a9\u06d2 \u0627\u06cc\u0688\u06cc\u0679\u0631 \u0645\u06cc\u06ba\u06d4 \u067e\u0648\u0631\u06cc \u0686\u06cc\u0632 \u06a9\u0648 \u0628\u062f\u0644 \u062f\u06cc\u06ba\u06d4 <code>hit()<\/code> \u0627\u0633 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0641\u0646\u06a9\u0634\u0646\u06d4 \u062f\u0648 \u0646\u0626\u06cc \u0686\u06cc\u0632\u06cc\u06ba: <code>2>\/dev\/null || true<\/code> \u06a9\u0631\u0644 \u0644\u0627\u0626\u0646 \u0627\u0648\u0631 <code>if<\/code> \u0622\u062e\u0631 \u0645\u06cc\u06ba \u0644\u0627\u0626\u0646.<\/p>\n<pre><code class=\"language-bash\">hit() {\n  local path=\"$1\" out code secs\n  out=$(curl \"${CURL_OPTS[@]}\" -o \/dev\/null -w '%{http_code} %{time_total}' \n    -H \"Authorization: Bearer $TOKEN\" \n    \"$BASE_URL$path\" 2>\/dev\/null || true)\n  code=\"${out%% *}\"\n  secs=\"${out##* }\"\n  echo \"$code\" >> \"$CODES\"\n  node -e \"process.stdout.write(String(Math.round(Number(process.argv[1]) * 1000)) + 'n')\" \"$secs\" >> \"$TIMES\"\n  if [ \"$code\" = \"000\" ]; then sleep 0.5; fi\n}\n<\/code><\/pre>\n<p><code>000<\/code> \u062c\u0628 \u06a9\u0648\u0626\u06cc \u062c\u0648\u0627\u0628 \u0646\u06c1\u06cc\u06ba \u0622\u062a\u0627 \u06c1\u06d2 \u062a\u0648 \u06cc\u06c1 \u0648\u06c1\u06cc \u06c1\u06d2 \u062c\u0648 curl \u06a9\u06cc \u0627\u0637\u0644\u0627\u0639 \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u06cc\u06a9 \u0645\u062e\u062a\u0635\u0631 \u0648\u0642\u0641\u06c1 \u0646\u0627\u06a9\u0627\u0645 \u06a9\u0627\u0631\u06a9\u0646 \u06a9\u0648 \u0627\u067e\u0646\u06d2 \u0622\u067e \u06a9\u0648 \u0641\u06cc \u0633\u06cc\u06a9\u0646\u0688 \u06c1\u0632\u0627\u0631\u0648\u06ba \u0628\u0627\u0631 \u062f\u06c1\u0631\u0627\u0646\u06d2 \u0633\u06d2 \u0631\u0648\u06a9\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u0628 \u0679\u0631\u0645\u06cc\u0646\u0644 B \u067e\u0631 \u0644\u0648\u0688 \u0679\u06cc\u0633\u0679 \u0686\u0644\u0627\u0626\u06cc\u06ba\u06d4 \u06cc\u06c1 40 \u0633\u06cc\u06a9\u0646\u0688 \u062a\u06a9 \u0686\u0644\u062a\u0627 \u06c1\u06d2\u060c \u0644\u06c1\u0630\u0627 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0634\u0631\u0648\u0639 \u06a9\u0631\u0646\u0627 \u0627\u0633 \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u0641\u0679 \u06c1\u0648\u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-bash\">.\/scripts\/load-test.sh http:\/\/localhost:8080 \n  alice@clearpay.dev password123 5 40\n<\/code><\/pre>\n<p>\u0627\u0633 \u06a9\u0645\u0627\u0646\u0688 \u067e\u0631 \u0627\u0646\u0679\u0631 \u062f\u0628\u0627\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2\u060c \u062a\u06cc\u0633\u0631\u06d2 \u0679\u0631\u0645\u06cc\u0646\u0644 \u0645\u06cc\u06ba \u0631\u06cc \u0627\u0633\u0679\u0627\u0631\u0679 \u06a9\u0645\u0627\u0646\u0688 \u0679\u0627\u0626\u067e \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u0627\u0633\u06d2 \u062a\u06cc\u0627\u0631 \u0631\u06c1\u0646\u06d2 \u062f\u06cc\u06ba\u06d4 \u0644\u0648\u0688 \u0679\u06cc\u0633\u0679 \u0634\u0631\u0648\u0639 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 3 \u0633\u06cc\u06a9\u0646\u0688 \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u062a\u06cc\u0633\u0631\u06d2 \u0679\u0631\u0645\u06cc\u0646\u0644 \u067e\u0631 Enter \u062f\u0628\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">kubectl -n staging rollout restart deployment\/clearpay-api\nkubectl -n staging rollout status deployment\/clearpay-api\nkubectl -n staging get events --sort-by=.lastTimestamp | tail\n<\/code><\/pre>\n<p>\u0627\u06cc\u0648\u0646\u0679\u0633 \u0627\u06cc\u06a9 \u0648\u0642\u062a \u0645\u06cc\u06ba \u067e\u0631\u0627\u0646\u06d2 \u067e\u0648\u0688\u0632 \u06a9\u0648 \u0631\u0648\u06a9\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u0627\u0648\u0631 \u0646\u0626\u06d2 \u067e\u0648\u0688 \u0634\u0631\u0648\u0639 \u06c1\u0648\u062a\u06d2 \u062f\u06a9\u06be\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u0627\u0633\u0679\u06cc\u062c\u0646\u06af \u06a9\u06d2 \u0633\u0627\u062a\u06be\u060c \u0645\u062a\u0628\u0627\u062f\u0644 \u0634\u0631\u0648\u0639 \u06c1\u0648\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0627\u06cc\u06a9 \u067e\u0648\u0688 \u06a9\u0648 \u06c1\u0679\u0627 \u062f\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2 (<code>maxUnavailable: 1<\/code> \u0627\u0648\u0631 <code>maxSurge: 0<\/code> \u06a9\u0648 <code>k8s\/overlays\/staging\/patch-deployment.yaml<\/code>)\u06d4 \u0686\u06be\u0648\u0679\u06d2 \u0644\u06cc\u0628 \u06a9\u0644\u0633\u0679\u0631\u0632 \u0645\u06cc\u06ba \u0627\u0636\u0627\u0641\u06cc \u067e\u06be\u0644\u06cc\u0648\u06ba \u06a9\u06d2 \u0644\u06cc\u06d2 \u062c\u06af\u06c1 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u062a\u06cc\u06d4 \u0644\u06c1\u0630\u0627\u060c \u062f\u0648\u0628\u0627\u0631\u06c1 \u0634\u0631\u0648\u0639 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u062f\u0648\u0631\u0627\u0646 \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u06cc\u06ba \u0645\u062e\u062a\u0635\u0631 \u0645\u062f\u062a \u06a9\u06d2 \u0644\u06cc\u06d2 \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648 \u062c\u0627\u0626\u06cc\u06ba \u06af\u06cc\u06d4 <code>failed=<\/code> 0 \u0633\u06d2 \u0627\u0648\u067e\u0631 \u06a9\u0648\u0626\u06cc \u0628\u06be\u06cc \u0686\u06cc\u0632 \u0646\u0627\u0631\u0645\u0644 \u06c1\u06d2\u06d4 \u0646\u0645\u0628\u0631 \u0644\u06a9\u06be \u062f\u06cc\u06ba\u06d4 \u0679\u0631\u0645\u06cc\u0646\u0644 A \u067e\u0631\u0646\u0679 \u06a9\u0631\u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4 <code>lost connection to pod<\/code>. Ctrl+C \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0631\u06a9\u06cc\u06ba \u0627\u0648\u0631 \u062c\u0627\u0646\u0686 \u06a9\u06d2 \u0628\u0639\u062f \u0633\u0631\u0646\u06af \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0634\u0631\u0648\u0639 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p>\u067e\u06cc\u062f\u0627\u0648\u0627\u0631 \u0632\u06cc\u0627\u062f\u06c1 \u0645\u062d\u0641\u0648\u0638 \u06c1\u06d2\u06d4 \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u0637\u06d2 \u0634\u062f\u06c1 \u062a\u0631\u062a\u06cc\u0628 \u067e\u0631\u0627\u0646\u06d2 \u06a9\u0648 \u0631\u0648\u06a9\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0646\u0626\u06d2 \u067e\u0648\u0688 \u0634\u0631\u0648\u0639 \u06a9\u0631\u062a\u06cc \u06c1\u06d2 (<code>maxSurge: 1<\/code> \u0627\u0648\u0631 <code>maxUnavailable: 0<\/code>)\u06d4<\/p>\n<h4 id=\"heading-decision\">\u0641\u06cc\u0635\u0644\u06c1<\/h4>\n<p>\u067e\u0627\u0633: <code>failed=0<\/code> 30 \u0633\u06cc\u06a9\u0646\u0688 \u06a9\u06d2 \u0679\u06cc\u0633\u0679 \u0645\u06cc\u06ba\u060c \u0688\u06cc\u0644\u06cc\u0679 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f \u0645\u062a\u0628\u0627\u062f\u0644 \u067e\u0648\u0688 \u062a\u06cc\u0627\u0631 \u062a\u06be\u0627\u06d4 <code>rollout status<\/code> \u0645\u06a9\u0645\u0644 \u0627\u06af\u0631\u0686\u06c1 GKE \u06a9\u0627 p95 AWS \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u06c1\u06d2\u060c \u0622\u067e \u0627\u0633 \u0631\u0627\u0633\u062a\u06d2 \u067e\u0631 \u0627\u0633 \u0648\u0642\u062a \u062a\u06a9 \u062c\u0627 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba \u062c\u0628 \u062a\u06a9 \u06a9\u06c1 \u0622\u067e AWS p95 \u06a9\u06cc \u063a\u0644\u0637\u06cc \u06a9\u06cc \u062d\u062f \u0633\u06d2 3x \u0646\u06cc\u0686\u06d2 \u0631\u06c1\u06cc\u06ba \u062c\u0633 \u06a9\u06d2 \u0628\u0627\u0631\u06d2 \u0645\u06cc\u06ba \u06c1\u0645 \u0646\u06d2 \u0628\u0627\u0628 6 \u0645\u06cc\u06ba \u0644\u06a9\u06be\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0646\u0627\u06a9\u0627\u0645: 30 \u0633\u06cc\u06a9\u0646\u0688 \u0679\u06cc\u0633\u0679 \u0645\u06cc\u06ba 5xx \u063a\u0644\u0637\u06cc\u060c \u0644\u0627\u06af \u0627\u0646 <code>internal_error<\/code>\u06cc\u0627 \u0627\u06cc\u06a9 \u0646\u0626\u06cc \u067e\u06be\u0644\u06cc \u062c\u0648 \u062a\u06cc\u0627\u0631 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u0627\u067e\u0646\u06d2 \u0633\u0679\u06cc\u062c\u0646\u06af \u06a9\u0648 \u0679\u06be\u06cc\u06a9 \u06a9\u0631\u0646\u06d2 \u0627\u0648\u0631 \u0627\u067e\u0646\u06cc \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u06a9\u0648 \u0622\u06af\u06d2 \u0628\u0691\u06be\u0627\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f\u060c \u0627\u0633 \u0628\u0627\u0628 \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0686\u0644\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<h4 id=\"heading-done-when\">\u0645\u06a9\u0645\u0644 \u06c1\u0648\u0646\u06d2 \u067e\u0631:<\/h4>\n<ul>\n<li>\n<p>\u0646\u0648\u0679 \u0645\u06cc\u06ba \u062f\u0648\u0646\u0648\u06ba \u0633\u06a9\u0648\u0631 \u06a9\u0627\u0631\u0688 \u0633\u0627\u062a\u06be \u0633\u0627\u062a\u06be \u06c1\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>\u067e\u0648\u0688 \u06a9\u06cc \u0628\u0627\u0632\u06cc\u0627\u0628\u06cc \u06a9\u0627 \u0648\u0642\u062a \u0645\u062a\u0639\u06cc\u0646 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u062c\u0628 \u0644\u0648\u0688 \u0686\u0644 \u0631\u06c1\u0627 \u062a\u06be\u0627 \u0627\u06cc\u06a9 \u0631\u0648\u0644\u0646\u06af \u062f\u0648\u0628\u0627\u0631\u06c1 \u0634\u0631\u0648\u0639 \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u062a\u06be\u0627 \u0627\u0648\u0631 \u06cc\u06c1 \u0646\u0648\u0679 \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u062a\u06be\u0627. <code>failed=<\/code><\/p>\n<\/li>\n<\/ul>\n<p>Ctrl+C \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u0679\u0631\u0645\u06cc\u0646\u0644 A \u067e\u0631 \u067e\u0648\u0631\u0679 \u0641\u0627\u0631\u0648\u0631\u0688\u0646\u06af \u0628\u0646\u062f \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p>\u06cc\u06c1 \u0686\u0648\u06a9\u06cc \u06c1\u06d2\u06d4 GKE \u0628\u0648\u062c\u06be \u0627\u0648\u0631 \u067e\u0648\u0688 \u0634\u0679 \u0688\u0627\u0624\u0646 \u0633\u06d2 \u0628\u0686 \u06af\u06cc\u0627\u06d4 \u0627\u0628 \u062a\u06a9 \u062a\u0645\u0627\u0645 \u0686\u06cc\u06a9\u0633 \u0631\u0648\u0679 \u067e\u0631 \u06af\u0627\u06c1\u06a9\u0648\u06ba \u06a9\u06d2 \u0628\u063a\u06cc\u0631 \u06a9\u0626\u06d2 \u06af\u0626\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u0627\u0628 \u06cc\u06c1 \u0628\u062f\u0644 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4<\/p>\n<h2 id=\"heading-part-6-how-to-move-customers-to-gke\">\u062d\u0635\u06c1 6\u06d4 \u0635\u0627\u0631\u0641\u06cc\u0646 \u06a9\u0648 GKE \u0645\u06cc\u06ba \u06a9\u06cc\u0633\u06d2 \u0645\u0646\u062a\u0642\u0644 \u06a9\u06cc\u0627 \u062c\u0627\u0626\u06d2\u06d4<\/h2>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/10\/1792188595_42_\u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0648\u06ba-\u06a9\u0648-AWS-\u0633\u06d2-GKE-\u0645\u06cc\u06ba-\u06a9\u06cc\u0633\u06d2-\u0645\u0646\u062a\u0642\u0644-\u06a9\u06cc\u0627-\u062c\u0627\u0626\u06d2\u06d4.png\" alt=\"\u0648\u06c1 \u062a\u0635\u0627\u0648\u06cc\u0631 \u062c\u0648 \u0627\u0633 \u0628\u0627\u062a \u06a9\u06cc \u0648\u0636\u0627\u062d\u062a \u06a9\u0631\u062a\u06cc \u06c1\u06cc\u06ba \u06a9\u06c1 \u06c1\u0645 \u0646\u06d2 \u06a9\u06cc\u0627 \u06a9\u06cc\u0627\u060c \u06c1\u0645 \u06a9\u06c1\u0627\u06ba \u06c1\u06cc\u06ba\u060c \u0627\u0648\u0631 \u0622\u06af\u06d2 \u06a9\u06cc\u0627 \u06c1\u06d2\u06d4\" style=\"display: block;\" width=\"600\" height=\"400\" loading=\"lazy\" title=\"\"><\/p>\n<p>\u06cc\u06c1 \u0648\u06c1 \u062c\u06af\u06c1 \u06c1\u06d2 \u062c\u06c1\u0627\u06ba \u06af\u0627\u06c1\u06a9 GKE \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u062f\u0648\u0646\u0648\u06ba \u0628\u0627\u062f\u0644 \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0648\u06ba \u067e\u0631 \u06a9\u0627\u0631\u0631\u0648\u0627\u0626\u06cc \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u06cc\u06c1\u0627\u06ba \u06c1\u0631 \u0642\u062f\u0645 \u0627\u06cc\u06a9 \u0633\u0648\u0627\u0644 \u067e\u0648\u0686\u06be\u062a\u0627 \u06c1\u06d2: \u0632\u06cc\u0627\u062f\u06c1 \u0679\u0631\u06cc\u0641\u06a9 \u0686\u0644\u0627\u0646\u06d2 \u06a9\u0627 \u06a9\u06cc\u0627 \u062b\u0628\u0648\u062a \u06c1\u06d2\u061f<\/p>\n<h3 id=\"heading-chapter-19-deploy-production-and-the-gke-gateway\">\u0628\u0627\u0628 19\u06d4 \u067e\u06cc\u062f\u0627\u0648\u0627\u0631 \u0627\u0648\u0631 \u062c\u06cc \u06a9\u06d2 \u0627\u06cc \u06af\u06cc\u0679 \u0648\u06d2 \u06a9\u06cc \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc\u06d4<\/h3>\n<p><em>\u062a\u06cc\u0633\u0631\u0627 \u067e\u06cc\u0631 \u0635\u0628\u062d 9 \u0628\u062c\u06d2<\/em><\/p>\n<p>\u06cc\u06c1 \u0648\u06c1 \u0631\u06cc\u0627\u0633\u062a\u06cc\u06ba \u06c1\u06cc\u06ba \u062c\u0646 \u0645\u06cc\u06ba GKE \u0635\u0627\u0631\u0641\u06cc\u0646 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062f\u0633\u062a\u06cc\u0627\u0628 \u06c1\u06d2\u06d4 \u06a9\u0648\u0626\u06cc \u0627\u0633\u06d2 \u0627\u0648\u0646\u0686\u06cc \u0622\u0648\u0627\u0632 \u0645\u06cc\u06ba \u0646\u06c1\u06cc\u06ba \u06a9\u06c1\u062a\u0627\u06d4 \u062f\u0641\u062a\u0631 \u0645\u0639\u0645\u0648\u0644 \u0633\u06d2 \u062a\u06be\u0648\u0691\u0627 \u0633\u0627 \u067e\u0631\u0633\u06a9\u0648\u0646 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u0628\u06be\u06cc \u062a\u06a9 GKE \u06a9\u06d2 \u067e\u0627\u0633 \u0635\u0631\u0641 \u0627\u0633\u0679\u06cc\u062c\u0646\u06af \u06c1\u06d2\u06d4 \u0627\u0633\u0679\u06cc\u062c\u0646\u06af \u0627\u06cc\u06a9 \u0646\u062c\u06cc \u06a9\u0627\u067e\u06cc \u06c1\u06d2 \u062c\u0648 \u0633\u0631\u0646\u06af \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u067e\u06c1\u0646\u0686\u062a\u06cc \u06c1\u06d2\u06d4 \u06a9\u0633\u0679\u0645\u0631 \u0627\u06cc\u06a9 \u0639\u0644\u06cc\u062d\u062f\u06c1 \u06a9\u0627\u067e\u06cc \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u062c\u0633\u06d2 \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u06a9\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0627\u0633 \u0628\u0627\u0628 \u0645\u06cc\u06ba\u060c \u0622\u067e \u0648\u06c1 \u06a9\u0627\u067e\u06cc \u0628\u0646\u0627\u0626\u06cc\u06ba \u06af\u06d2 \u0627\u0648\u0631 \u0627\u0633 \u0627\u06cc\u0688\u0631\u06cc\u0633 \u06a9\u0648 \u0644\u0646\u06a9 \u06a9\u0631\u06cc\u06ba \u06af\u06d2 \u062c\u06c1\u0627\u06ba \u0622\u067e \u06a9\u06d2 \u06af\u0627\u06c1\u06a9 \u0622\u067e \u06a9\u0648 \u06a9\u0627\u0644 \u06a9\u0631\u06cc\u06ba \u06af\u06d2\u06d4<\/p>\n<p>\u062f\u0648 \u0686\u06cc\u0632\u06cc\u06ba \u063a\u0627\u0626\u0628 \u06c1\u06cc\u06ba\u06d4<\/p>\n<ol>\n<li>\n<p><strong>\u06cc\u06c1 \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u0646\u0627\u0645 \u06a9\u06cc \u062c\u06af\u06c1 \u06c1\u06d2\u06d4<\/strong> \u0646\u0627\u0645 \u06a9\u06cc \u062c\u06af\u06c1 \u06a9\u0644\u0633\u0679\u0631 \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u0627\u06cc\u06a9 \u0627\u0644\u06af \u0639\u0644\u0627\u0642\u06c1 \u06c1\u06d2\u06d4 \u0627\u0633\u0679\u06cc\u062c\u0646\u06af \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u06c1\u06d2\u06d4 \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u067e\u0648\u0688 \u0645\u0648\u062c\u0648\u062f \u0646\u06c1\u06cc\u06ba \u06c1\u06d2 \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u0627\u0628\u06be\u06cc \u062a\u06a9 \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u0627\u0633\u06d2 \u0628\u0646\u0627\u0626\u06cc\u06ba \u0627\u0648\u0631 \u0648\u06c1\u06cc \u062a\u0635\u0648\u06cc\u0631 \u0688\u0627\u0644\u06cc\u06ba \u062c\u0648 \u0627\u0633\u0679\u06cc\u062c\u0646\u06af \u06af\u06cc\u0679 \u0633\u06d2 \u06af\u0632\u0631\u06cc \u062a\u06be\u06cc\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>GKE \u0627\u06cc\u062c \u0622\u0626\u06cc \u067e\u06cc \u06a9\u06d2 \u067e\u06cc\u0686\u06be\u06d2 \u06a9\u0686\u06be \u06c1\u06d2\u06d4<\/strong> \u0645\u0631\u062d\u0644\u06c1 8 \u0645\u06cc\u06ba\u060c \u0622\u067e \u0646\u06d2 GKE \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u0639\u0648\u0627\u0645\u06cc \u067e\u062a\u06c1 \u0645\u062d\u0641\u0648\u0638 \u06a9\u06cc\u0627\u060c \u062c\u0633\u06d2 edge IP \u06a9\u06c1\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0627\u06cc\u06a9 \u0645\u062d\u0641\u0648\u0638 \u0644\u06cc\u06a9\u0646 \u063a\u06cc\u0631 \u0645\u0646\u0633\u0644\u06a9 \u0641\u0648\u0646 \u0646\u0645\u0628\u0631 \u06a9\u06cc \u0637\u0631\u062d \u06a9\u0627\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u06af\u06be\u0646\u0679\u06cc \u0628\u062c\u062a\u06cc \u06c1\u06d2 \u0627\u0648\u0631 \u06a9\u0648\u0626\u06cc \u062c\u0648\u0627\u0628 \u0646\u06c1\u06cc\u06ba \u062f\u06cc\u062a\u0627\u06d4 \u0627\u067e\u0646\u06d2 \u06af\u06cc\u0679 \u0648\u06d2 \u0633\u06d2 \u062c\u0691\u06cc\u06ba\u06d4 \u06af\u06cc\u0679 \u0648\u06d2 \u06c1\u0631 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u0627 \u062c\u0648\u0627\u0628 \u062f\u06cc\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u0633\u06d2 \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u067e\u0648\u0688 \u067e\u0631 \u0628\u06be\u06cc\u062c \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<\/ol>\n<p>\u0645\u06a9\u0645\u0644 \u06c1\u0648\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f\u060c GKE \u0627\u0635\u0644 \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0648\u06ba \u06a9\u0627 \u062c\u0648\u0627\u0628 \u062f\u06d2 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u0628 \u0628\u06be\u06cc \u0679\u0631\u06cc\u0641\u06a9 \u0646\u06c1\u06cc\u06ba \u0686\u0644 \u0631\u06c1\u06cc\u06d4 \u0645\u06cc\u0646 \u06af\u06cc\u0679 \u0628\u0627\u0628 21 \u062a\u06a9 \u0627\u067e\u0646\u06d2 100% \u0635\u0627\u0631\u0641\u06cc\u0646 \u06a9\u0648 AWS \u06a9\u0648 \u0628\u06be\u06cc\u062c\u062a\u0627 \u0631\u06c1\u06d2 \u06af\u0627\u06d4<\/p>\n<h4 id=\"heading-why-this-matters\">\u06cc\u06c1 \u06a9\u06cc\u0648\u06ba \u0627\u06c1\u0645\u06cc\u062a \u0631\u06a9\u06be\u062a\u0627 \u06c1\u06d2\u06d4<\/h4>\n<p>\u0644\u0648\u0688 \u0628\u06cc\u0644\u0646\u0633\u0631 \u0635\u0631\u0641 GKE \u06a9\u0648 \u0679\u0631\u06cc\u0641\u06a9 \u0628\u06be\u06cc\u062c \u0633\u06a9\u062a\u0627 \u06c1\u06d2 \u062c\u0628 GKE \u0645\u06cc\u06ba \u06a9\u0686\u06be \u062c\u0648\u0627\u0628 \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0627\u06cc\u06a9 \u06af\u06cc\u0679 \u0648\u06d2 \u06c1\u06d2\u06d4 \u0627\u06cc\u06a9 Kubernetes \u0627\u0639\u062a\u0631\u0627\u0636 \u062c\u0648 Google \u06a9\u0648 \u0622\u067e \u06a9\u06cc \u0633\u0631\u0648\u0633 \u06a9\u06d2 \u0633\u0627\u0645\u0646\u06d2 \u0644\u0648\u0688 \u0628\u06cc\u0644\u0646\u0633\u0631 \u062a\u0639\u06cc\u0646\u0627\u062a \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u06c1\u062f\u0627\u06cc\u062a \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1\u0627\u06ba \u0633\u0646\u0648 <code>clearpay-gke-edge-ip<\/code> \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 APIs \u0627\u0648\u0631 UI \u06a9\u0648 \u0688\u06cc\u0644\u06cc\u0648\u0631 \u06a9\u06cc\u0627 \u06af\u06cc\u0627\u06d4<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/10\/1792188595_531_\u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0648\u06ba-\u06a9\u0648-AWS-\u0633\u06d2-GKE-\u0645\u06cc\u06ba-\u06a9\u06cc\u0633\u06d2-\u0645\u0646\u062a\u0642\u0644-\u06a9\u06cc\u0627-\u062c\u0627\u0626\u06d2\u06d4.png\" alt=\"\u062a\u0635\u0648\u06cc\u0631 \u06a9\u0644\u0627\u0624\u0688 \u0622\u0631\u06a9\u06cc\u0679\u06cc\u06a9\u0686\u0631 \u0641\u0644\u0648 \u0688\u0627\u06cc\u0627\u06af\u0631\u0627\u0645 \u062f\u06a9\u06be\u0627 \u0631\u06c1\u06cc \u06c1\u06d2\u06d4\" style=\"display: block;\" width=\"600\" height=\"400\" loading=\"lazy\" title=\"\"><\/p>\n<p>\u06a9\u06c1 <code>08-edge<\/code> \u0644\u0648\u0688 \u0628\u06cc\u0644\u0646\u0633\u0631 \u0627\u0646\u0679\u0631\u0646\u06cc\u0679 NEG (\u0627\u06cc\u06a9 \u0646\u06cc\u0679 \u0648\u0631\u06a9 \u0627\u06cc\u0646\u0688 \u067e\u0648\u0627\u0626\u0646\u0679 \u06af\u0631\u0648\u067e \u062c\u0648 \u0628\u06cc\u0631\u0648\u0646\u06cc IP \u0627\u06cc\u0688\u0631\u06cc\u0633 \u06a9\u06cc \u0637\u0631\u0641 \u0627\u0634\u0627\u0631\u06c1 \u06a9\u0631\u062a\u0627 \u06c1\u06d2) \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u062f\u0648\u0646\u0648\u06ba \u0628\u0627\u062f\u0644\u0648\u06ba \u062a\u06a9 \u067e\u06c1\u0646\u0686\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u0633 \u0642\u0633\u0645 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u0648\u0626\u06cc \u0635\u062d\u062a \u06a9\u06cc \u062c\u0627\u0646\u0686 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u0627\u06af\u0631 \u0628\u06cc\u06a9 \u0627\u06cc\u0646\u0688 \u0646\u06cc\u0686\u06d2 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u060c \u062a\u0648 \u0644\u0648\u0688 \u0628\u06cc\u0644\u0646\u0633\u0631 \u0679\u0631\u06cc\u0641\u06a9 \u0628\u06be\u06cc\u062c\u062a\u0627 \u0631\u06c1\u06d2 \u06af\u0627 \u0627\u0648\u0631 \u0635\u0627\u0631\u0641\u06cc\u0646 \u06a9\u0648 502 \u0627\u06cc\u0631\u0631 \u0645\u0648\u0635\u0648\u0644 \u06c1\u0648\u06af\u0627\u06d4 \u0622\u067e \u06a9\u06cc \u062d\u0641\u0627\u0638\u062a <code>synthetic-health.sh<\/code>\u0641\u06cc\u0635\u0644\u06c1 \u06af\u06cc\u0679 \u0627\u0648\u0631 <code>rollback.sh<\/code>.<\/p>\n<h4 id=\"heading-step-1-turn-on-the-gateway-api\">\u0645\u0631\u062d\u0644\u06c1 1. \u06af\u06cc\u0679 \u0648\u06d2 API \u06a9\u0648 \u0622\u0646 \u06a9\u0631\u06cc\u06ba\u06d4<\/h4>\n<p>\u0645\u0631\u062d\u0644\u06c1 3 \u0645\u06cc\u06ba \u06a9\u0644\u0633\u0679\u0631\u0632 \u0645\u06cc\u06ba \u06cc\u06c1 \u062e\u0635\u0648\u0635\u06cc\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-bash\">gcloud container clusters update clearpay --zone us-east4-a \n  --gateway-api=standard\n<\/code><\/pre>\n<p>\u0627\u0633 \u06a9\u06d2 \u0645\u06a9\u0645\u0644 \u06c1\u0648\u0646\u06d2 \u06a9\u0627 \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u0631\u06cc\u06ba\u060c \u067e\u06be\u0631 \u062f\u0631\u062c \u0630\u06cc\u0644 \u06a9\u0631\u06cc\u06ba:<\/p>\n<pre><code class=\"language-bash\">kubectl get gatewayclass\n<\/code><\/pre>\n<p>\u0627\u0633\u06d2 \u062a\u0644\u0627\u0634 \u06a9\u0631\u06cc\u06ba\u06d4 <code>gke-l7-global-external-managed<\/code>. \u0648\u06c1 \u06a9\u0644\u0627\u0633 \u06c1\u06d2\u06d4 <code>k8s\/gateway\/gke-gateway.yaml<\/code> \u0645\u06cc\u06ba \u0627\u0633\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u0648\u06ba\u06d4<\/p>\n<h4 id=\"heading-step-2-make-room-on-the-node-pool\">\u0645\u0631\u062d\u0644\u06c1 2\u06d4 \u0627\u067e\u0646\u06d2 \u0646\u0648\u0688 \u067e\u0648\u0644 \u0645\u06cc\u06ba \u062c\u06af\u06c1 \u062e\u0627\u0644\u06cc \u06a9\u0631\u06cc\u06ba\u06d4<\/h4>\n<p>\u062a\u06cc\u0646 \u0686\u06cc\u0632\u06cc\u06ba <code>e2-medium<\/code> \u0645\u0634\u06cc\u0646\u0648\u06ba \u0645\u06cc\u06ba \u062a\u0642\u0631\u06cc\u0628\u0627\u064b 940m CPUs \u06c1\u06cc\u06ba\u060c GKE \u0645\u06cc\u06ba \u0627\u0646 \u06a9\u06d2 \u0627\u067e\u0646\u06d2 \u0633\u0633\u0679\u0645 \u067e\u0648\u0688 \u06a9\u06d2 \u067e\u06cc\u0686\u06be\u06d2\u06d4 \u0627\u0633\u0679\u06cc\u062c\u0646\u06af \u0627\u0648\u0631 \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u06a9\u0648 \u0627\u06cc\u06a9 \u0633\u0627\u062a\u06be \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u0646\u0627 \u0645\u0646\u0627\u0633\u0628 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u062c\u06af\u06c1 \u0628\u0686\u0627\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0633\u0679\u06cc\u062c\u0646\u06af \u06a9\u0648 \u0633\u0645\u06cc\u0679\u06cc\u06ba\u06d4 \u062a\u0635\u0627\u0648\u06cc\u0631 \u06a9\u0648 \u0622\u0631\u0679\u0641\u06cc\u06a9\u0679 \u0631\u062c\u0633\u0679\u0631\u06cc \u0645\u06cc\u06ba \u0628\u0631\u0642\u0631\u0627\u0631 \u0631\u06a9\u06be\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u06af\u06cc\u0679 \u06a9\u06d2 \u0646\u062a\u0627\u0626\u062c \u06a9\u0648 \u0646\u0648\u0679\u0648\u06ba \u0645\u06cc\u06ba \u0628\u0631\u0642\u0631\u0627\u0631 \u0631\u06a9\u06be\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0633\u0628 \u0633\u06d2 \u067e\u06c1\u0644\u06d2\u060c \u0627\u067e\u0646\u06d2 \u0639\u06cc\u0646 \u0645\u0637\u0627\u0628\u0642 \u0627\u0645\u06cc\u062c \u0633\u0679\u06cc\u062c\u0646\u06af \u0631\u0646 \u06a9\u0648 \u0631\u06cc\u06a9\u0627\u0631\u0688 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u06a9\u0648\u0634\u0634 \u06a9\u0631\u06cc\u06ba\u06d4 \u067e\u06cc\u062f\u0627\u0648\u0627\u0631 \u0645\u06cc\u06ba \u0622\u067e \u06a9\u0648 \u0627\u0633 \u06a9\u06d2 \u0628\u0631\u0627\u0628\u0631 \u0633\u0679\u0631\u0646\u06af \u0686\u0644\u0627\u0646\u06cc \u0686\u0627\u06c1\u0626\u06d2:<\/p>\n<pre><code class=\"language-bash\">kubectl -n staging get deploy clearpay-api \n  -o jsonpath=\"{.spec.template.spec.containers[0].image}{\"n\"}\"\nkubectl -n staging get deploy clearpay-ui \n  -o jsonpath=\"{.spec.template.spec.containers[0].image}{\"n\"}\"\n<\/code><\/pre>\n<p>\u067e\u06be\u0631 \u0627\u0633\u0679\u06cc\u062c\u0646\u06af \u06a9\u0648 0 \u067e\u0631 \u0627\u06cc\u0688\u062c\u0633\u0679 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">kubectl -n staging scale deploy\/clearpay-api --replicas=0\nkubectl -n staging scale deploy\/clearpay-ui --replicas=0\n<\/code><\/pre>\n<p>\u062f\u06be\u06a9\u0627 \u0645\u062a \u06a9\u0631\u0648 <code>main<\/code> \u0679\u0631\u06cc\u0641\u06a9 \u0634\u0641\u0679 \u06a9\u06d2 \u062f\u0648\u0631\u0627\u0646\u06d4 \u067e\u0634 \u0627\u0633\u0679\u06cc\u062c\u0646\u06af \u06a9\u0648 \u067e\u0648\u0631\u06d2 \u0633\u0627\u0626\u0632 \u0645\u06cc\u06ba \u062f\u0648\u0628\u0627\u0631\u06c1 \u062a\u0642\u0633\u06cc\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 CPU \u06a9\u0648 \u0648\u0627\u067e\u0633 \u0644\u06d2 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u062c\u0628 \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 API \u067e\u0648\u0688\u0632 \u06a9\u0648 \u0628\u0631\u0642\u0631\u0627\u0631 \u0631\u06a9\u06be\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 <code>Pending<\/code> \u06a9\u06d2 \u0633\u0627\u062a\u06be <code>Insufficient cpu<\/code> \u0628\u0639\u062f \u0645\u06cc\u06ba \u0633\u0679\u06cc\u062c\u0646\u06af \u0627\u0628 \u0628\u06be\u06cc CPU \u0631\u06a9\u06be\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u067e\u0646\u06d2 \u0646\u0648\u0688 \u067e\u0648\u0644 \u0645\u06cc\u06ba \u0632\u06cc\u0627\u062f\u06c1 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u0627\u0636\u0627\u0641\u06c1 \u0646\u06c1 \u06a9\u0631\u06cc\u06ba \u062c\u0628 \u062a\u06a9 \u06a9\u06c1 \u0622\u067e \u062f\u0648\u0633\u0631\u06cc \u0645\u0634\u06cc\u0646\u0648\u06ba \u06a9\u06cc \u0642\u06cc\u0645\u062a \u06a9\u0648 \u0642\u0628\u0648\u0644 \u0646\u06c1 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<h4 id=\"heading-step-3-deploy-production\">\u0645\u0631\u062d\u0644\u06c1 3. \u067e\u06cc\u062f\u0627\u0648\u0627\u0631 \u06a9\u06cc \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc\u06d4<\/h4>\n<p>\u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646\u0648\u06ba \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 \u06cc\u06c1 \u0648\u06c1 \u0631\u0627\u0633\u062a\u06c1 \u06c1\u06d2 \u062c\u0633\u06d2 \u0628\u0627\u0628 14 \u0646\u06d2 \u0627\u0633 \u0644\u0645\u062d\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0628\u0646\u0627\u06cc\u0627 \u06c1\u06d2\u06d4<\/p>\n<p><strong>\u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2:<\/strong><\/p>\n<ol>\n<li>\n<p>GitHub \u0645\u06cc\u06ba \u0627\u067e\u0646\u0627 \u0679\u0627\u0633\u06a9 \u06a9\u06be\u0648\u0644\u06cc\u06ba\u060c \u067e\u06be\u0631 \u0628\u0627\u0626\u06cc\u06ba \u0637\u0631\u0641 \u06a9\u06cc \u0641\u06c1\u0631\u0633\u062a \u0633\u06d2 Build\u060c Scan\u060c \u0627\u0648\u0631 Deploy \u06a9\u0631\u06cc\u06ba\u06d4 \u0627\u0633 \u0648\u0631\u06a9 \u0641\u0644\u0648 \u0635\u0641\u062d\u06c1 \u0633\u06d2 \u0634\u0631\u0648\u0639 \u06a9\u0631\u06cc\u06ba\u060c \u0645\u06a9\u0645\u0644 \u0631\u0646 \u0633\u06d2 \u0646\u06c1\u06cc\u06ba\u06d4 \u0627\u06af\u0631 \u0622\u067e \u0627\u06cc\u06a9 \u06c1\u06cc \u0631\u0646 \u062f\u06cc\u06a9\u06be \u0631\u06c1\u06d2 \u06c1\u06cc\u06ba \u062a\u0648 \u0627\u0633 \u06a9\u06d2 \u0646\u0627\u0645 \u06a9\u06d2 \u0622\u06af\u06d2 \u067e\u06cc\u0686\u06be\u06d2 \u0648\u0627\u0644\u06d2 \u062a\u06cc\u0631 \u067e\u0631 \u06a9\u0644\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4 \u06a9\u06c1 <code>promote-to-production<\/code> \u067e\u0686\u06be\u0644\u06d2 \u0631\u0646\u0632 \u06a9\u06d2 \u0679\u0627\u0633\u06a9 \u062f\u06a9\u06be\u0627\u062a\u06d2 \u06c1\u06cc\u06ba \"\u06cc\u06c1 \u06a9\u0627\u0645 \u0686\u06be\u0648\u0691 \u062f\u06cc\u0627 \u06af\u06cc\u0627 \u062a\u06be\u0627\" \u0627\u0648\u0631 \u0686\u06be\u0648\u0691 \u062f\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u06cc\u06a9 \u0646\u0626\u06d2 \u0646\u0641\u0627\u0630 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0648\u0631\u06a9 \u0641\u0644\u0648 \u0686\u0644\u0627\u0626\u06cc\u06ba \u067e\u0631 \u06a9\u0644\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4 \u0627\u067e\u0646\u06cc \u0634\u0627\u062e\u06cc\u06ba \u06a9\u06be\u0644\u06cc \u0631\u06a9\u06be\u06cc\u06ba <code>main<\/code>,promote_to_production \u06a9\u0648 \u0645\u0646\u062a\u062e\u0628 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u0631\u0646 \u0648\u0631\u06a9 \u0641\u0644\u0648 \u067e\u0631 \u06a9\u0644\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>\u06a9\u06c1 <code>promote-to-production<\/code> \u0646\u0648\u06a9\u0631\u06cc \"\u062c\u0627\u0626\u0632\u06c1 \u06a9\u06d2 \u0645\u0646\u062a\u0638\u0631\" \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0642\u0637\u0627\u0631 \u0645\u06cc\u06ba \u06c1\u06d2\u06d4 \u067e\u0631 \u06a9\u0644\u06a9 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u0631\u06cc\u0648\u06cc\u0648 \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u06a9\u0648 \u0645\u0646\u062a\u062e\u0628 \u06a9\u0631\u06cc\u06ba\u06d4 <code>production<\/code>\u0627\u0648\u0631 \u0645\u0646\u0638\u0648\u0631 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u062a\u0639\u06cc\u0646\u0627\u062a \u06a9\u0631\u06cc\u06ba \u067e\u0631 \u06a9\u0644\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0627\u067e\u0646\u06cc \u0641\u06cc \u0627\u0644\u062d\u0627\u0644 \u0645\u062a\u0639\u06cc\u0646 \u0627\u0633\u0679\u06cc\u062c\u0646\u06af \u0627\u0645\u06cc\u062c \u06a9\u0648 \u062a\u0644\u0627\u0634 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u0686\u06cc\u06a9 \u0645\u0627\u0631\u06a9 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 \u0627\u0633 \u062a\u0635\u0648\u06cc\u0631 \u06a9\u0648 \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u06a9\u06cc \u062a\u06a9\u0645\u06cc\u0644 \u062a\u06a9 \u06a9\u06cc\u0633\u06d2 \u0644\u06af\u0627\u06cc\u0627 \u062c\u0627\u0626\u06d2\u06d4<\/p>\n<\/li>\n<\/ol>\n<p>\u0627\u0628\u060c \u06cc\u06c1\u0627\u06ba \u062a\u06a9 \u06a9\u06c1 \u0627\u06af\u0631 \u0627\u0633\u0679\u06cc\u062c\u0646\u06af 0 \u067e\u0648\u0688\u0632 \u0686\u0644\u0627\u062a\u0627 \u06c1\u06d2\u060c \u0679\u0627\u0633\u06a9 \u0627\u0633\u0679\u06cc\u062c\u0646\u06af \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u0633\u06d2 \u0627\u0645\u06cc\u062c \u0633\u0679\u0631\u0646\u06af \u06a9\u0648 \u067e\u0691\u06be\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0635\u062d\u06cc\u062d \u0627\u0645\u06cc\u062c \u06a9\u0648 \u062a\u0639\u06cc\u0646\u0627\u062a \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u06af\u0631 \u0622\u067e \u06a9\u06d2 \u067e\u0627\u0633 \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u0633\u06cc\u0679 \u0627\u067e \u0646\u06c1\u06cc\u06ba \u06c1\u06d2 \u062a\u0648 \u062f\u0633\u062a\u06cc \u0637\u0648\u0631 \u067e\u0631:<\/p>\n<p>\u06cc\u06c1 \u0648\u06c1\u06cc \u0645\u0631\u0627\u062d\u0644 \u06c1\u06cc\u06ba \u062c\u0646 \u0645\u06cc\u06ba \u06a9\u0627\u0645 \u0686\u0644\u062a\u0627 \u06c1\u06d2\u06d4 <code>PROJECT_ID<\/code> \u0641\u0627\u0626\u0644 \u0645\u06cc\u06ba \u0645\u0648\u062c\u0648\u062f \u0646\u0627\u0645 \u067e\u0644\u06cc\u0633 \u06c1\u0648\u0644\u0688\u0631\u0632 \u06c1\u06cc\u06ba\u060c \u0627\u0633 \u0644\u06cc\u06d2 \u0627\u0646\u06c1\u06cc\u06ba \u0627\u067e\u0646\u06cc \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u06a9\u06cc \u0637\u0631\u062d \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 \u0645\u06cc\u06a9 \u067e\u0631\u060c <code>sed -i<\/code> \u06a9\u0686\u06be \u062e\u0627\u0644\u06cc \u062c\u06af\u06c1 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2\u06d4 <code>''<\/code> \u0627\u0633 \u06a9\u06d2 \u0628\u0639\u062f:<\/p>\n<pre><code class=\"language-bash\">cd k8s\/overlays\/production\nPROJECT_ID=$(gcloud config get-value project)\nsed -i '' \"s\/@PROJECT_ID.iam\/@${PROJECT_ID}.iam\/\" patch-serviceaccount.yaml\nsed -i '' \"s#projects\/PROJECT_ID\/#projects\/${PROJECT_ID}\/#\" secretproviderclass.yaml\n<\/code><\/pre>\n<p>\u0644\u06cc\u0646\u06a9\u0633 \u067e\u0631 <code>''<\/code> ~ \u0628\u0639\u062f <code>-i<\/code>.<\/p>\n<p>\u0627\u0646 \u062f\u0648 \u062a\u0635\u0648\u06cc\u0631\u0648\u06ba \u067e\u0631 \u0627\u0648\u0648\u0631\u0644\u06d2 \u06a9\u06cc \u0637\u0631\u0641 \u0627\u0634\u0627\u0631\u06c1 \u06a9\u0631\u06cc\u06ba \u062c\u0646\u06c1\u06cc\u06ba \u0622\u067e \u0646\u06d2 \u0645\u0631\u062d\u0644\u06c1 2 \u0645\u06cc\u06ba \u0646\u0648\u0679 \u06a9\u06cc\u0627 \u06c1\u06d2\u06d4 \u0627\u0633\u06d2 \u06a9\u0628\u06be\u06cc \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u0646\u06c1 \u06a9\u0631\u06cc\u06ba\u06d4 <code>latest<\/code>:<\/p>\n<pre><code class=\"language-bash\">kustomize edit set image \n  REGION-docker.pkg.dev\/PROJECT_ID\/clearpay\/api=STAGING_API_IMAGE\nkustomize edit set image \n  REGION-docker.pkg.dev\/PROJECT_ID\/clearpay\/ui=STAGING_UI_IMAGE\nkubectl apply -k .\nkubectl -n production rollout status deployment\/clearpay-api --timeout=180s\nkubectl -n production rollout status deployment\/clearpay-ui --timeout=180s\n<\/code><\/pre>\n<p>\u062a\u0628\u062f\u06cc\u0644\u06cc <code>STAGING_API_IMAGE<\/code> \u0627\u0648\u0631 <code>STAGING_UI_IMAGE<\/code> \u0645\u0631\u062d\u0644\u06c1 2 \u0633\u06d2 \u067e\u0648\u0631\u06cc \u0633\u0679\u0631\u0646\u06af \u06a9\u0648 \u062f\u0631\u062c \u0630\u06cc\u0644 \u0641\u0627\u0631\u0645\u06cc\u0679 \u0645\u06cc\u06ba \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba: <code>us-east4-docker.pkg.dev\/...\/api:<tag\/><\/code>.<\/p>\n<p>\u0627\u0633 \u06a9\u06d2 \u0628\u0639\u062f \u0641\u0627\u0626\u0644 \u06a9\u0627 \u0627\u0631\u062a\u06a9\u0627\u0628 \u0646\u06c1 \u06a9\u0631\u06cc\u06ba\u06d4 <code>sed<\/code> \u0627\u0648\u0631 <code>kustomize edit<\/code>. \u0627\u0628 \u0627\u0633 \u0645\u06cc\u06ba \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 ID \u0627\u0648\u0631 \u0627\u0635\u0644 \u0679\u06cc\u06af\u0632 \u0634\u0627\u0645\u0644 \u06c1\u06cc\u06ba\u06d4 \u0686\u0644\u0627\u0626\u06cc\u06ba <code>git checkout k8s\/overlays\/production<\/code> \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u06a9\u06d2 \u0628\u0639\u062f \u06a9\u0627\u0644\u0639\u062f\u0645 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2\u060c \u0631\u06cc\u067e\u0648\u0632\u0679\u0631\u06cc \u0631\u0648\u0679 \u0633\u06d2 \u0686\u0644\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<h4 id=\"heading-check-production\">\u067e\u06cc\u062f\u0627\u0648\u0627\u0631 \u06a9\u06cc \u062a\u0635\u062f\u06cc\u0642<\/h4>\n<p>\u0631\u06cc\u067e\u0648\u0632\u0679\u0631\u06cc \u0631\u0648\u0679 \u067e\u0631 \u0648\u0627\u067e\u0633 \u062c\u0627\u0626\u06cc\u06ba\u06d4 \u067e\u0648\u0688 \u062a\u06cc\u0627\u0631 \u06c1\u0648\u0646\u06d2 \u062a\u06a9 \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">kubectl -n production get pods\n<\/code><\/pre>\n<p>\u0688\u0633\u067e\u0644\u06d2 API \u0627\u0648\u0631 UI \u067e\u0648\u0688\u0632 <code>Running<\/code> \u0627\u0648\u0631 <code>READY 1\/1<\/code>. \u067e\u06be\u0631\u060c \u0627\u0633\u0679\u06cc\u062c\u0646\u06af \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u067e\u0648\u0688 \u0645\u06cc\u06ba \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u06a9\u0648 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">kubectl -n production exec deployment\/clearpay-api -- node -e \n  \"require('.\/src\/db').checkConnection().then(() => { console.log('connected'); process.exit(0); }).catch(e => { console.error(e); process.exit(1); })\"\n<\/code><\/pre>\n<pre><code class=\"language-plaintext\">connected\n<\/code><\/pre>\n<h4 id=\"heading-step-4-apply-the-gke-gateway\">\u0645\u0631\u062d\u0644\u06c1 4\u06d4 GKE \u06af\u06cc\u0679 \u0648\u06d2 \u06a9\u0627 \u0627\u0637\u0644\u0627\u0642 \u06a9\u0631\u06cc\u06ba\u06d4<\/h4>\n<p>\u0645\u0631\u062d\u0644\u06c1 8 \u0645\u062d\u0641\u0648\u0638 <code>clearpay-gke-edge-ip<\/code> \u0627\u0648\u0631 \u0633\u0646\u062f <code>clearpay-gke-edge-cert<\/code>. \u0627\u0628 \u0627\u0646\u06c1\u06cc\u06ba \u062e\u062f\u0645\u062a \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u0686\u06be \u062f\u06cc\u06ba:<\/p>\n<pre><code class=\"language-bash\">kubectl apply -f k8s\/gateway\/gke-gateway.yaml\nkubectl apply -f k8s\/gateway\/httproute-production.yaml\nkubectl apply -f k8s\/gateway\/healthcheck-api.yaml\nkubectl -n production get gateway clearpay-gke-edge\n<\/code><\/pre>\n<p>\u0628\u0631\u0627\u06c1 \u06a9\u0631\u0645 \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u0631\u06cc\u06ba\u06d4 <code>PROGRAMMED<\/code> \u062f\u06a9\u06be\u0627\u0626\u06cc\u06ba <code>True<\/code>. \u0627\u0633 \u0645\u06cc\u06ba \u0686\u0646\u062f \u0645\u0646\u0679 \u0644\u06af \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba \u062c\u0628 \u06a9\u06c1 Google \u0644\u0648\u0688 \u0628\u06cc\u0644\u0646\u0633\u0631 \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u062a\u06cc\u0646 \u0641\u0627\u0626\u0644\u06cc\u06ba \u062a\u06cc\u0646 \u0686\u06cc\u0632\u06cc\u06ba \u06a9\u0631\u062a\u06cc \u06c1\u06cc\u06ba:<\/p>\n<ul>\n<li>\n<p><code>gke-gateway.yaml<\/code> \u0633\u0631\u0679\u06cc\u0641\u06a9\u06cc\u0679 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u0645\u062d\u0641\u0648\u0638 IP \u067e\u0631 \u0627\u06cc\u06a9 \u06af\u06cc\u0679 \u0648\u06d2 \u0628\u0646\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p><code>httproute-production.yaml<\/code> \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u0633\u0631\u0648\u0633 \u06a9\u0648 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0628\u06be\u06cc\u062c\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p><code>healthcheck-api.yaml<\/code> Google \u06a9\u0648 \u0627\u067e\u0646\u06cc \u062d\u06cc\u062b\u06cc\u062a \u0686\u06cc\u06a9 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u06c1\u062f\u0627\u06cc\u062a \u06a9\u0631\u06cc\u06ba\u06d4 <code>\/health<\/code>. \u0628\u0635\u0648\u0631\u062a \u062f\u06cc\u06af\u0631\u060c \u06af\u0648\u06af\u0644 \u0686\u06cc\u06a9 \u06a9\u0631\u06d2 \u06af\u0627\u06d4 <code>\/<\/code>API 404 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u062c\u0648\u0627\u0628 \u062f\u06cc\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648\u062c\u0627\u062a\u06cc \u06c1\u06d2\u06d4 <code>no healthy upstream<\/code>.<\/p>\n<\/li>\n<\/ul>\n<h4 id=\"heading-check-the-gateway\">\u0627\u067e\u0646\u0627 \u06af\u06cc\u0679 \u0648\u06d2 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4<\/h4>\n<p>GKE \u06a9\u0648 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u06a9\u0646\u0627\u0631\u06d2 \u0622\u0626\u06cc \u067e\u06cc \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u06a9\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 <code>--resolve<\/code> GKE IP \u0633\u06d2 \u062c\u0691\u062a\u06d2 \u0648\u0642\u062a \u0633\u0631\u0679\u06cc\u0641\u06a9\u06cc\u0679 \u06a9\u0627 \u0645\u06cc\u0632\u0628\u0627\u0646 \u0646\u0627\u0645 \u0628\u06be\u06cc\u062c\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">HOST=$(terraform -chdir=infra\/gcp\/terraform\/08-edge output -raw public_hostname)\nEDGE=$(terraform -chdir=infra\/gcp\/terraform\/08-edge output -raw gke_edge_ip_address)\ncurl -k --resolve \"$HOST:443:$EDGE\" \"https:\/\/$HOST\/health\"\n<\/code><\/pre>\n<p>\u0627\u0633\u06d2 \u062a\u0644\u0627\u0634 \u06a9\u0631\u06cc\u06ba\u06d4 <code>\"platform\":\"gke\"<\/code>. \u06a9\u0631\u0644 \u067e\u0631\u0646\u0679 \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <code>no healthy upstream<\/code>\u0628\u0631\u0627\u06c1 \u06a9\u0631\u0645 \u0627\u06cc\u06a9 \u0644\u0645\u062d\u06c1 \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u062f\u0648\u0628\u0627\u0631\u06c1 \u06a9\u0648\u0634\u0634 \u06a9\u0631\u06cc\u06ba\u06d4 \u0635\u062d\u062a \u06a9\u06cc \u062c\u0627\u0646\u0686 \u0645\u06cc\u06ba \u067e\u06be\u0644\u06cc \u06a9\u0648 \u0635\u062d\u062a \u0645\u0646\u062f \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0646\u0634\u0627\u0646 \u0632\u062f \u06a9\u0631\u0646\u06d2 \u0645\u06cc\u06ba \u06a9\u0686\u06be \u0648\u0642\u062a \u0644\u06af\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0628\u063a\u06cc\u0631 <code>--resolve<\/code>\u0686\u0648\u0646\u06a9\u06c1 \u0648\u0632\u0646 100\/0 \u06c1\u06d2\u060c \u0648\u06c1\u06cc \u0645\u06cc\u0632\u0628\u0627\u0646 \u0646\u0627\u0645 \u0627\u0628 \u0628\u06be\u06cc AWS \u067e\u0631 \u062c\u0627\u0626\u06d2 \u06af\u0627\u06d4<\/p>\n<h4 id=\"heading-done-when\">\u0645\u06a9\u0645\u0644 \u06c1\u0648\u0646\u06d2 \u067e\u0631:<\/h4>\n<ul>\n<li>\n<p><code>kubectl get gatewayclass<\/code> \u062c\u06be\u06a9\u0627\u0624 <code>gke-l7-global-external-managed<\/code><\/p>\n<\/li>\n<li>\n<p>\u067e\u0631\u0648\u0688\u06a9\u0634\u0646 API \u0627\u0648\u0631 UI \u067e\u0648\u0688\u0632 \u06c1\u06cc\u06ba\u06d4 <code>Running<\/code>\u060c <code>READY 1\/1<\/code>\u0627\u0633\u0679\u06cc\u062c\u0646\u06af \u0627\u0645\u06cc\u062c \u0679\u06cc\u06af\u0632 \u0634\u0627\u0645\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p><code>checkConnection<\/code> \u067e\u0631\u0646\u0679\u0633 <code>connected<\/code> \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u067e\u06be\u0644\u06cc \u0645\u06cc\u06ba<\/p>\n<\/li>\n<li>\n<p>\u06af\u06cc\u0679 \u0648\u06d2 \u0634\u0648 <code>PROGRAMMED<\/code> <code>True<\/code>\u06a9\u0646\u0627\u0631\u06d2 \u06a9\u0627 IP \u0648\u0627\u067e\u0633 \u0622 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4 <code>\"platform\":\"gke\"<\/code><\/p>\n<\/li>\n<\/ul>\n<h3 id=\"heading-chapter-20-walk-the-pre-cutover-checklist\">\u0628\u0627\u0628 20\u06d4 \u06c1\u0645\u0627\u0631\u06cc \u067e\u0631\u06cc \u06a9\u0646\u0648\u0631\u0698\u0646 \u0686\u06cc\u06a9 \u0644\u0633\u0679 \u067e\u0631 \u0627\u06cc\u06a9 \u0646\u0638\u0631 \u0688\u0627\u0644\u06cc\u06ba\u06d4<\/h3>\n<p><em>\u067e\u06cc\u0631 \u06a9\u06cc \u0633\u06c1 \u067e\u06c1\u0631 3 \u0628\u062c\u06d2<\/em><\/p>\n<p>\u067e\u06cc\u062f\u0627\u0648\u0627\u0631 \u0634\u0631\u0648\u0639 \u06c1\u0648 \u0686\u06a9\u06cc \u06c1\u06d2\u06d4 \u0645\u0627\u06cc\u0627 \u0627\u067e\u0646\u06d2 \u0644\u06cc\u067e \u0679\u0627\u067e \u06a9\u0648 \u0628\u0627\u0632\u0648 \u06a9\u06d2 \u0646\u06cc\u0686\u06d2 \u0631\u06a9\u06be\u06d2 \u0627\u067e\u0646\u06cc \u0645\u06cc\u0632 \u06a9\u06d2 \u0633\u0627\u0645\u0646\u06d2 \u0631\u06a9 \u06af\u0626\u06cc\u06d4<\/p>\n<p>\u0645\u0627\u06cc\u0627: \"\u0645\u062c\u06be\u06d2 \u0679\u06be\u06cc\u06a9 \u0633\u06d2 \u0628\u062a\u0627\u0626\u06cc\u06ba \u06a9\u06c1 \u0622\u067e \u0679\u0631\u06cc\u0641\u06a9 \u06a9\u0648 \u0645\u0646\u062a\u0642\u0644 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u06af\u0627\u06c1\u06a9\u0648\u06ba \u06a9\u0648 AWS \u06a9\u06cc \u0637\u0631\u0641 \u0648\u0627\u067e\u0633 \u06a9\u06cc\u0633\u06d2 \u0644\u0627\u0626\u06cc\u06ba \u06af\u06d2\u06d4 \u067e\u06be\u0631 \u0645\u062c\u06be\u06d2 \u062f\u06a9\u06be\u0627\u0626\u06cc\u06ba \u06a9\u06c1 \u06cc\u06c1 \u06a9\u0627\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4\"<\/p>\n<h4 id=\"heading-why-the-rollback-drill-matters\">\u0631\u0648\u0644 \u0628\u06cc\u06a9 \u0679\u0631\u06cc\u0646\u0646\u06af \u06a9\u06cc\u0648\u06ba \u0636\u0631\u0648\u0631\u06cc \u06c1\u06d2\u06d4<\/h4>\n<p><code>scripts\/rollback.sh<\/code> \u06c1\u0645 \u0627\u0633 \u062a\u0631\u062a\u06cc\u0628 \u0645\u06cc\u06ba \u062f\u0648 \u0686\u06cc\u0632\u06cc\u06ba \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba:<\/p>\n<ol>\n<li>\n<p>\u0686\u0644\u062a\u0627 \u06c1\u06d2 <code>shift-traffic.sh 100 0<\/code>\u06cc\u06c1 \u062a\u0645\u0627\u0645 \u0679\u0631\u06cc\u0641\u06a9 \u06a9\u0648 \u0633\u06cc\u06a9\u0646\u0688\u0648\u06ba \u0645\u06cc\u06ba \u0648\u0627\u067e\u0633 AWS \u067e\u0631 \u0628\u06be\u06cc\u062c \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>SSH \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0627\u067e\u0646\u06d2 AWS \u0633\u0631\u0648\u0631 \u0633\u06d2 \u062c\u0691\u06cc\u06ba \u0627\u0648\u0631 \u0627\u0633\u06d2 \u062a\u0631\u062a\u06cc\u0628 \u062f\u06cc\u06ba\u06d4 <code>ROLLBACK_ACTIVE=true<\/code> \u0627\u0633 \u06a9\u0627 <code>.env<\/code>API \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0634\u0631\u0648\u0639 \u06a9\u0631\u06cc\u06ba\u06d4 \u0627\u0633 \u06a9\u06d2 \u0628\u0639\u062f UI \u0627\u06cc\u06a9 \u0631\u0648\u0644 \u0628\u06cc\u06a9 \u0628\u06cc\u0646\u0631 \u0688\u0633\u067e\u0644\u06d2 \u06a9\u0631\u06d2 \u06af\u0627\u06d4<\/p>\n<\/li>\n<\/ol>\n<p>\u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 \u0645\u06cc\u06ba \u062c\u0627\u0646 \u0628\u0648\u062c\u06be \u06a9\u0631 \u062f\u0648 \u067e\u06cc\u063a\u0627\u0645\u0627\u062a \u06c1\u06cc\u06ba:<\/p>\n<ul>\n<li>\n<p><strong>\u0646\u0626\u06d2 \u0648\u0631\u0698\u0646 \u06a9\u0627 \u067e\u06cc\u063a\u0627\u0645<\/strong> \u0646\u06cc\u0686\u06d2 \u062f\u0627\u0626\u06cc\u06ba \u0637\u0631\u0641 \u0627\u06cc\u06a9 \u0686\u06be\u0648\u0679\u0627 \u0633\u0627 \u067e\u0627\u067e \u0627\u067e \u06c1\u06d2\u06d4 '\u06c1\u0645\u06cc\u06ba \u062a\u0628\u062f\u06cc\u0644\u06cc\u0627\u06ba \u0645\u0644\u06cc \u06c1\u06cc\u06ba\u06d4 \u06cc\u06c1 \u062f\u0631\u062e\u0648\u0627\u0633\u062a gke\/... (\u0633\u0627\u0628\u0642\u06c1 \u200b\u200baws\/...)' \u0633\u06d2 \u062c\u0627\u0631\u06cc \u06a9\u06cc \u06af\u0626\u06cc \u062a\u06be\u06cc \u0627\u0648\u0631 5 \u0633\u06cc\u06a9\u0646\u0688 \u06a9\u06d2 \u0628\u0639\u062f \u063a\u0627\u0626\u0628 \u06c1\u0648 \u062c\u0627\u062a\u06cc \u06c1\u06d2\u06d4 \u062c\u0628 \u062f\u0648\u0633\u0631\u0627 \u0648\u0631\u0698\u0646 \u062c\u0648\u0627\u0628 \u062f\u06d2 \u06af\u0627 \u062a\u0648 \u06cc\u06c1 \u0638\u0627\u06c1\u0631 \u06c1\u0648\u06af\u0627\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u0631\u0648\u0644 \u0628\u06cc\u06a9 \u0628\u06cc\u0646\u0631<\/strong> \u06cc\u06c1 \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 \u06a9\u06d2 \u0627\u0648\u067e\u0631\u06cc \u062d\u0635\u06d2 \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u0633\u0631\u062e \u067e\u0679\u06cc \u06c1\u06d2\u06d4 \u0622\u067e \u06a9\u0648 \u0627\u06cc\u06a9 \u067e\u06cc\u063a\u0627\u0645 \u0646\u0638\u0631 \u0622\u0626\u06d2 \u06af\u0627 \u062c\u0633 \u0645\u06cc\u06ba \u0644\u06a9\u06be\u0627 \u06c1\u0648\u06af\u0627 \u06a9\u06c1 \"\u06c1\u0645 AWS \u067e\u0631 \u0648\u0627\u067e\u0633 \u0622 \u06af\u0626\u06d2 \u06c1\u06cc\u06ba \u0627\u0648\u0631 GKE \u06a9\u06d2 \u0645\u0633\u0626\u0644\u06d2 \u06a9\u06cc \u062a\u062d\u0642\u06cc\u0642\u0627\u062a \u06a9\u06d2 \u062f\u0648\u0631\u0627\u0646 \u0679\u0631\u06cc\u0641\u06a9 \u0628\u062d\u0627\u0644 \u06c1\u0648 \u06af\u0626\u06cc \u06c1\u06d2\u06d4\" \u06cc\u06c1 \u062a\u0628 \u062a\u06a9 \u0631\u06c1\u06d2 \u06af\u0627 \u062c\u0628 \u062a\u06a9 \u0622\u067e \u062c\u06be\u0646\u0688\u0627 \u0635\u0627\u0641 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u06d2\u06d4<\/p>\n<\/li>\n<\/ul>\n<p>\u062c\u0648 \u0628\u06be\u06cc \u0622\u067e \u06a9\u06cc \u0627\u06cc\u067e \u06a9\u0648 \u062f\u06cc\u06a9\u06be \u0631\u06c1\u0627 \u06c1\u06d2 \u0648\u06c1 \u062f\u06cc\u06a9\u06be\u06d2 \u06af\u0627 \u06a9\u06c1 \"\u06a9\u0686\u06be \u063a\u0644\u0637 \u06c1\u0648 \u06af\u06cc\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u0633\u06d2 \u0679\u06be\u06cc\u06a9 \u06a9\u0631 \u062f\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\" \u06a9\u06d2 \u0628\u0631\u0639\u06a9\u0633 \"\u0627\u06cc\u06a9 \u0646\u06cc\u0627 \u0648\u0631\u0698\u0646 \u0628\u06be\u06cc\u062c \u062f\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\"\u06d4<\/p>\n<p>\u067e\u06c1\u0644\u06cc \u0628\u0627\u0631 \u062c\u0628 \u0622\u067e \u0631\u0648\u0644 \u0628\u06cc\u06a9 \u0686\u0644\u0627\u062a\u06d2 \u06c1\u06cc\u06ba \u062a\u0648 \u0648\u06c1 \u06a9\u0633\u06cc \u062d\u0642\u06cc\u0642\u06cc \u0627\u06cc\u0648\u0646\u0679 \u06a9\u06d2 \u062f\u0648\u0631\u0627\u0646 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u0646\u0627 \u0686\u0627\u06c1\u0626\u06d2 \u062c\u06c1\u0627\u06ba \u06af\u0627\u06c1\u06a9 \u0627\u0633 \u0627\u0645\u06cc\u062f \u0645\u06cc\u06ba \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648\u062c\u0627\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0627\u0633 \u06a9\u06cc SSH \u06a9\u0644\u06cc\u062f\u06cc\u06ba \u06a9\u0627\u0645 \u06a9\u0631\u06cc\u06ba \u06af\u06cc\u06d4 \u062c\u0628 \u06a9\u0648\u0626\u06cc \u0645\u0633\u0626\u0644\u06c1 \u0646\u06c1 \u06c1\u0648 \u062a\u0648 \u0627\u0633\u06d2 \u0627\u0628\u06be\u06cc \u0686\u0644\u0627\u0626\u06cc\u06ba\u06d4 \u0648\u0632\u0646 \u067e\u06c1\u0644\u06d2 \u06c1\u06cc 100\/0 \u06c1\u06d2\u060c \u0644\u06c1\u0630\u0627 \u0679\u0631\u06cc\u0641\u06a9 \u06a9\u06d2 \u0645\u0631\u062d\u0644\u06d2 \u0645\u06cc\u06ba \u06a9\u0686\u06be \u0628\u06be\u06cc \u0646\u06c1\u06cc\u06ba \u0628\u062f\u0644\u062a\u0627 \u06c1\u06d2\u06d4 SSH \u0627\u0642\u062f\u0627\u0645\u0627\u062a \u0627\u0648\u0631 \u0628\u06cc\u0646\u0631\u0632 \u06a9\u06cc \u062c\u0627\u0646\u0686 \u06a9\u06cc \u062c\u0627\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<h4 id=\"heading-the-checklist\">\u0686\u06cc\u06a9 \u0644\u0633\u0679<\/h4>\n<p>\u06c1\u0631 \u0633\u0637\u0631 \u06a9\u0648 \u0627\u0633 \u06a9\u0645\u0627\u0646\u0688 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0645\u0646\u062a\u062e\u0628 \u06a9\u0631\u06cc\u06ba \u062c\u0633 \u067e\u0631 \u0639\u0645\u0644 \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u060c \u0645\u06cc\u0645\u0648\u0631\u06cc \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0646\u06c1\u06cc\u06ba\u06d4 \u0627\u067e\u0646\u0627 \u0644\u0686\u06a9\u062f\u0627\u0631 IP \u0627\u0648\u0631 \u0645\u06cc\u0632\u0628\u0627\u0646 \u0646\u0627\u0645 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p>\u0627\u0628 \u06a9\u0645\u0627\u0646\u0688 \u06a9\u0648 \u0635\u0631\u0641 \u0686\u0627\u0631 \u0644\u0627\u0626\u0646\u0648\u06ba \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2: <strong>GKE \u0633\u0645\u0679<\/strong>\u060c <strong>\u0631\u0648\u0644 \u0628\u06cc\u06a9 \u0679\u06cc\u0633\u0679 \u06a9\u06cc\u0627 \u06af\u06cc\u0627\u06d4<\/strong>\u060c <strong>\u0627\u06d2 \u0688\u0628\u0644\u06cc\u0648 \u0627\u06cc\u0633 \u06c1\u06cc\u0644\u062a\u06be<\/strong>\u0627\u0648\u0631 <strong>\u0645\u0635\u0646\u0648\u0639\u06cc \u0679\u06cc\u0633\u0679 \u0686\u0644 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4<\/strong>. \u0645\u06cc\u0631\u06d2 \u067e\u0627\u0633 \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u06c1\u06cc \u062f\u0648\u0633\u0631\u06d2 5 \u0646\u062a\u0627\u0626\u062c \u06c1\u06cc\u06ba\u060c \u0644\u06c1\u0630\u0627 \u0627\u0646\u06c1\u06cc\u06ba \u067e\u0691\u06be\u06cc\u06ba \u0627\u0648\u0631 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4 \u0628\u0627\u0628 21 \u0627\u0648\u0631 22 \u0627\u0633 \u0686\u06cc\u06a9 \u0644\u0633\u0679 \u06a9\u0648 \u0646\u06c1\u06cc\u06ba \u062f\u06c1\u0631\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0635\u0631\u0641 \u0645\u0635\u0646\u0648\u0639\u06cc \u0679\u06cc\u0633\u0679 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba \u062c\u0648 \u0627\u067e\u0646\u06d2 \u0679\u0631\u0645\u06cc\u0646\u0644 \u0645\u06cc\u06ba \u0645\u0633\u0644\u0633\u0644 \u0686\u0644\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-plaintext\">Pre-Cutover Checklist\n\n[ ] GKE healthy\n    kubectl -n production get pods\n    (all Running, READY)\n\n[ ] Database healthy\n    the production checkConnection from Chapter 19 prints connected\n\n[ ] Monitoring up (optional, only if you did Chapter 17)\n    Grafana at http:\/\/localhost:3000 loads.\n    It does not watch GKE. Do not block on an empty GKE series.\n\n[ ] Rollback tested\n    YOUR_ELASTIC_IP is your AWS server's public IP. Get it with:\n    terraform -chdir=infra\/aws\/terraform output -raw instance_public_ip\n    .\/scripts\/rollback.sh YOUR_ELASTIC_IP ~\/.ssh\/clearpay-deployer\n    Open https:\/\/YOUR_ELASTIC_IP, log in, and look for the red strip\n    at the top of the dashboard (\"Rolled back to AWS ...\"). Then clear it:\n    .\/scripts\/clear-rollback-flag.sh YOUR_ELASTIC_IP ~\/.ssh\/clearpay-deployer\n\n[ ] AWS healthy\n    .\/scripts\/promotion-gate.sh https:\/\/YOUR_ELASTIC_IP \n      alice@clearpay.dev password123 bob@clearpay.dev\n    5 passed, 0 failed\n\n[ ] Synthetic test running\n    .\/scripts\/synthetic-health.sh https:\/\/YOUR_PUBLIC_HOSTNAME\n    Leave it running in its own terminal for the whole shift.\n    YOUR_PUBLIC_HOSTNAME is api.clearpay.test. From the repository root, confirm with:\n    terraform -chdir=infra\/gcp\/terraform\/08-edge output -raw public_hostname\n    It prints one line per second: time, status code, latency.\n\n[ ] Limits confirmed\n    Chapter 6 limits, plus the Chapter 18 table:\n    AWS p95 745 ms, GKE staging p95 655 ms, both 0.0 % errors, plus your pod recovery time from Chapter 18\n\n[ ] Security review passed\n    Chapter 16, all four checks written down\n\n[ ] Cost ledger current\n    infra\/aws\/COST.md and infra\/gcp\/COST.md, both clouds now billing\n<\/code><\/pre>\n<h4 id=\"heading-what-the-rollback-drill-prints\">\u06a9\u06cc\u0627 \u0631\u0648\u0644 \u0628\u06cc\u06a9 \u0688\u0631\u0644 \u067e\u0631\u0646\u0679\u0633<\/h4>\n<p>\u0679\u0631\u06cc\u0641\u06a9 \u06a9\u0627 \u0648\u0632\u0646 \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u06c1\u06cc 100\/0 \u06c1\u06d2\u060c \u0644\u06c1\u0630\u0627 \u0645\u0631\u062d\u0644\u06c1 1 \u0645\u06cc\u06ba \u06a9\u0686\u06be \u0628\u06be\u06cc \u0646\u06c1\u06cc\u06ba \u0628\u062f\u0644\u062a\u0627\u06d4 \u0645\u0631\u062d\u0644\u06c1 2 \u0627\u0635\u0644 \u0627\u0645\u062a\u062d\u0627\u0646 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0627\u0633 \u0637\u0631\u062d \u062e\u062a\u0645 \u06c1\u0648\u062a\u0627 \u06c1\u06d2:<\/p>\n<pre><code class=\"language-plaintext\">== Traffic split updated ==\n\"AWS: 100% \/ GKE: 0%\"\n\n== Step 2: flagging AWS as the active rollback target ==\nAWS ROLLBACK_ACTIVE=true, service restarted.\n\n== Rollback complete ==\n<\/code><\/pre>\n<p>\u0627\u0633\u06a9\u0631\u067e\u0679 \u06a9\u06d2 \u0646\u0627\u0645 \u06a9\u06cc \u0622\u062e\u0631\u06cc \u0633\u0637\u0631 \u067e\u0686\u06be\u0644\u0627 \u0628\u0627\u0628 \u0646\u0645\u0628\u0631 \u06c1\u06d2\u06d4 \u0627\u0633\u06d2 \u0646\u0638\u0631 \u0627\u0646\u062f\u0627\u0632 \u06a9\u0631\u06cc\u06ba\u06d4 \u0627\u0635\u0644 \u0631\u0648\u0644 \u0628\u06cc\u06a9 \u0627\u0642\u062f\u0627\u0645\u0627\u062a \u0628\u0627\u0628 23 \u0645\u06cc\u06ba \u062f\u06cc\u06d2 \u06af\u0626\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u0627\u06af\u0631 \u0645\u0631\u062d\u0644\u06c1 2 \u0627\u0633 \u0637\u0631\u062d \u0631\u06a9 \u062c\u0627\u062a\u0627 \u06c1\u06d2: <code>ssh: connect to host ... port 22: Operation timed out<\/code>\u0645\u06cc\u0631\u06d2 \u06af\u06be\u0631 \u06a9\u0627 IP \u0628\u062f\u0644 \u06af\u06cc\u0627 \u06c1\u06d2 \u0627\u0648\u0631 AWS \u0641\u0627\u0626\u0631 \u0648\u0627\u0644 \u0627\u0628 \u0628\u06be\u06cc \u067e\u0631\u0627\u0646\u06d2 IP \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u06af\u0644\u0627 \u0627\u067e\u0646\u0627 IP \u062d\u0627\u0635\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 <code>curl -s ifconfig.me; echo<\/code>. \u0627\u0633\u06d2 \u0627\u06cc\u06a9 \u067e\u0644\u0633 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0631\u06a9\u06be\u0648 <code>\/32<\/code> \u06a9\u0648 <code>ssh_allowed_cidr<\/code> \u06a9\u0648 <code>infra\/aws\/terraform\/terraform.tfvars<\/code>. \u0686\u0644\u0627\u0626\u06cc\u06ba <code>terraform apply<\/code> \u06a9\u0648 <code>infra\/aws\/terraform<\/code>\u060c \u067e\u06be\u0631 \u0627\u0633\u06a9\u0631\u067e\u0679 \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0686\u0644\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<h4 id=\"heading-decision\">\u0641\u06cc\u0635\u0644\u06c1<\/h4>\n<p>\u062c\u0628 \u062a\u0645\u0627\u0645 \u0644\u0627\u0626\u0646\u06cc\u06ba \u0645\u0646\u062a\u062e\u0628 \u06c1\u0648 \u062c\u0627\u062a\u06cc \u06c1\u06cc\u06ba\u060c GKE \u06a9\u0646\u0627\u0631\u06d2 IP \u0648\u0627\u067e\u0633 \u0622 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 <code>\"platform\":\"gke\"<\/code>: \u0628\u0627\u0628 21 \u067e\u0631 \u062c\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<p>\u0645\u0646\u062a\u062e\u0628 \u0646\u06c1\u06cc\u06ba: \u06cc\u06c1\u0627\u06ba \u0631\u06a9\u06cc\u06ba\u06d4 \u0645\u062a \u0628\u06be\u0627\u06af\u0648 <code>.\/scripts\/shift-traffic.sh 99 1<\/code> GKE \u06a9\u0646\u0627\u0631\u06d2 \u06a9\u0627 IP \u062e\u0627\u0644\u06cc \u06c1\u06d2\u06d4 1% \u0635\u0627\u0631\u0641\u06cc\u0646 \u0627\u06cc\u0633\u06d2 \u067e\u062a\u06d2 \u067e\u0631 \u062c\u0627\u0626\u06cc\u06ba \u06af\u06d2 \u062c\u0633 \u06a9\u06d2 \u067e\u06cc\u0686\u06be\u06d2 \u06a9\u0686\u06be \u0628\u06be\u06cc \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4<\/p>\n<p>\u0645\u0627\u06cc\u0627 \u0633\u06d2 \u06a9\u06c1\u0648: \"\u0631\u0648\u0644 \u0628\u06cc\u06a9 \u0627\u06cc\u06a9 \u0627\u0633\u06a9\u0631\u067e\u0679 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0679\u0631\u06cc\u0641\u06a9 \u06a9\u0648 \u062d\u0631\u06a9\u062a \u062f\u06cc\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0633\u06cc\u06a9\u0646\u0688\u0648\u06ba \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u0628\u06cc\u0646\u0631 \u062f\u06a9\u06be\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u06c1\u0645 \u0646\u06d2 \u0627\u0633\u06d2 5 \u0645\u0646\u0679 \u067e\u06c1\u0644\u06d2 \u0686\u0644\u0627\u06cc\u0627\u06d4\"<\/p>\n<h4 id=\"heading-done-when\">\u0645\u06a9\u0645\u0644 \u06c1\u0648\u0646\u06d2 \u067e\u0631:<\/h4>\n<ul>\n<li>\u06c1\u0631 \u0686\u06cc\u06a9 \u0644\u0633\u0679 \u0644\u0627\u0626\u0646 \u0648\u06c1 \u0646\u062a\u0627\u0626\u062c \u062f\u06a9\u06be\u0627\u062a\u06cc \u06c1\u06d2 \u062c\u0648 \u0622\u067e \u0646\u06d2 \u062f\u06cc\u06a9\u06be\u06d2\u06d4<\/li>\n<\/ul>\n<h3 id=\"heading-chapter-21-send-1-percent-of-traffic-to-gke\">\u0628\u0627\u0628 21\u06d4 \u0679\u0631\u06cc\u0641\u06a9 \u06a9\u0627 1% GKE \u06a9\u0648 \u0628\u06be\u06cc\u062c\u06cc\u06ba\u06d4<\/h3>\n<p><em>\u0645\u0646\u06af\u0644 \u0635\u0628\u062d 10 \u0628\u062c\u06d2<\/em><\/p>\n<p>\u067e\u0648\u0631\u06cc \u0679\u06cc\u0645 \u0627\u06cc\u06a9 \u06a9\u0627\u0644 \u067e\u0631 \u06c1\u06d2\u06d4 \u06a9\u0631\u0633 \u06a9\u0627 \u0633\u067e\u0648\u0631\u0679 \u0627\u0646 \u0628\u0627\u06a9\u0633 \u062f\u0648\u0633\u0631\u06cc \u0627\u0633\u06a9\u0631\u06cc\u0646 \u067e\u0631 \u06a9\u06be\u0644\u0627 \u06c1\u06d2\u06d4 \u0639\u0645\u0627\u0631\u06c1 \u0646\u06d2 \u0627\u067e\u0646\u0627 \u0679\u0631\u06cc\u0688\u0646\u06af \u0679\u06cc\u0628\u0644 \u06a9\u06be\u0644\u0627 \u0686\u06be\u0648\u0691 \u062f\u06cc\u0627\u06d4 \u0688\u06cc\u0646\u06cc\u0644 \u0644\u0648\u0688 \u0628\u06cc\u0644\u0646\u0633\u0631 \u06a9\u0627 \u0635\u0641\u062d\u06c1 \u06a9\u06be\u0648\u0644 \u06a9\u0631 \u0622\u067e \u06a9\u06d2 \u067e\u0627\u0633 \u0628\u06cc\u0679\u06be\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0645\u0627\u06cc\u0627: \"1% GKE \u06a9\u0648 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u063a\u0644\u0637\u06cc\u0627\u06ba \u0627\u0648\u0631 \u0679\u0631\u0627\u0646\u0633\u0641\u0631\u0632 \u062a\u0644\u0627\u0634 \u06a9\u0631\u06cc\u06ba\u06d4 \u0627\u06af\u0631 \u06a9\u0686\u06be \u063a\u0644\u0637 \u0644\u06af\u062a\u0627 \u06c1\u06d2 \u062a\u0648 \u0633\u0628 \u06a9\u0686\u06be \u062f\u0648\u0628\u0627\u0631\u06c1 \u0628\u06be\u06cc\u062c \u062f\u06cc\u06ba\u06d4\"<\/p>\n<h4 id=\"heading-why-1-percent\">1 \u0641\u06cc\u0635\u062f \u06a9\u06cc\u0648\u06ba\u061f<\/h4>\n<p>\u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0648\u06ba \u06a9\u0627 1%\u06d4 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0627\u06cc\u06a9 \u0648\u0627\u062d\u062f \u067e\u06cc\u063a\u0627\u0645 \u06c1\u06d2 (\u0644\u0627\u06af \u0627\u0646\u060c \u0686\u06cc\u06a9 \u0628\u06cc\u0644\u0646\u0633\u060c \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc) \u0628\u0631\u0627\u0624\u0632\u0631 \u0633\u06d2 API \u06a9\u0648 \u0628\u06be\u06cc\u062c\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 100 \u0645\u06cc\u06ba \u0633\u06d2 \u062a\u0642\u0631\u06cc\u0628\u0627\u064b 99 \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u06cc\u06ba AWS \u06a9\u0648 \u062c\u0627\u062a\u06cc \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u062a\u0642\u0631\u06cc\u0628\u0627\u064b 1 GKE \u06a9\u0648 \u062c\u0627\u062a\u06cc \u06c1\u06d2\u06d4 \u0644\u0648\u0688 \u0628\u06cc\u0644\u0646\u0633\u0631 \u06c1\u0631 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u06c1\u0631 \u06af\u0627\u06c1\u06a9 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0646\u06c1\u06cc\u06ba\u06d4 \u06cc\u06c1 \u0627\u06cc\u06a9 \u06af\u0627\u06c1\u06a9 \u06a9\u0648 \u0627\u06cc\u06a9 \u06c1\u06cc \u062f\u0648\u0631\u06d2 \u0645\u06cc\u06ba \u062f\u0648\u0646\u0648\u06ba \u0628\u0627\u062f\u0644\u0648\u06ba \u062a\u06a9 \u0631\u0633\u0627\u0626\u06cc \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0645\u0639\u0627\u06c1\u062f\u06d2 \u06a9\u06cc \u062e\u0644\u0627\u0641 \u0648\u0631\u0632\u06cc\u0648\u06ba \u06a9\u0648 \u062a\u0644\u0627\u0634 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 1% \u06a9\u0627\u0641\u06cc \u06c1\u06d2\u060c \u062c\u06cc\u0633\u06d2 \u0645\u062e\u062a\u0644\u0641 JSON \u0634\u06a9\u0644\u06cc\u06ba\u060c \u06af\u0645\u0634\u062f\u06c1 \u0631\u0627\u0633\u062a\u06d2\u060c \u06cc\u0627 \u0627\u06cc\u06a9 \u0637\u0631\u0641 \u0646\u0627\u06a9\u0627\u0645 \u0644\u0627\u06af \u0627\u0646\u06d4 \u0635\u0644\u0627\u062d\u06cc\u062a \u06a9\u0648 \u062c\u0627\u0646\u0686\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0628\u06c1\u062a \u0686\u06be\u0648\u0679\u0627 \u06c1\u06d2\u06d4 \u0628\u0627\u0628 22 \u0635\u0644\u0627\u062d\u06cc\u062a \u06a9\u0627 \u0627\u062d\u0627\u0637\u06c1 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h4 id=\"heading-steps\">\u0642\u062f\u0645<\/h4>\n<pre><code class=\"language-bash\">.\/scripts\/shift-traffic.sh 99 1\n<\/code><\/pre>\n<p>\u0627\u0633\u06a9\u0631\u067e\u0679 \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0644\u0627\u06af\u0648 \u06a9\u06cc\u0627 \u062c\u0627\u0626\u06d2 \u06af\u0627\u06d4 <code>08-edge<\/code> \u0644\u0648\u0688 \u0628\u06cc\u0644\u0646\u0633\u0631 \u06a9\u06d2 \u06cc\u0648 \u0622\u0631 \u0627\u06cc\u0644 \u0645\u06cc\u067e \u067e\u0631 \u0646\u0626\u06d2 \u0648\u0632\u0646 \u0644\u0627\u06af\u0648 \u06a9\u06cc\u06d2 \u06af\u0626\u06d2 \u06c1\u06cc\u06ba\u06d4 \u06a9\u0648\u0626\u06cc DNS \u062a\u0628\u062f\u06cc\u0644\u06cc\u0627\u06ba \u06cc\u0627 \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u0646\u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u0627\u0628 \u0628\u0631\u0627\u0628\u0631 \u0648\u0632\u0646 \u06a9\u06d2 \u0633\u0627\u062a\u06be <code>infra\/gcp\/terraform\/08-edge\/terraform.tfvars<\/code>:<\/p>\n<pre><code class=\"language-plaintext\">aws_traffic_weight = 99\ngke_traffic_weight = 1\n<\/code><\/pre>\n<p>\u0627\u0633\u06a9\u0631\u067e\u0679 \u0648\u0632\u0646 \u06a9\u0648 \u06a9\u0645\u0627\u0646\u0688 \u0644\u0627\u0626\u0646 \u0648\u06cc\u0644\u06cc\u0648 \u06a9\u06d2 \u0628\u0637\u0648\u0631 \u067e\u0627\u0633 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u06af\u0644\u0627 \u0645\u06cc\u062f\u0627\u0646 <code>terraform apply<\/code> \u06a9\u0648 <code>08-edge<\/code> \u0641\u0627\u0626\u0644 \u067e\u0691\u06be\u06cc\u06ba\u06d4 \u0627\u06af\u0631 \u0622\u067e \u0627\u0628 \u0628\u06be\u06cc \u0641\u0627\u0626\u0644 \u0645\u06cc\u06ba 100s \u0627\u0648\u0631 0s \u062f\u06cc\u06a9\u06be\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u0627\u0633\u06d2 \u0644\u06af\u0627\u0626\u06cc\u06ba \u0627\u0648\u0631 \u0679\u0631\u06cc\u0641\u06a9 \u062e\u0627\u0645\u0648\u0634\u06cc \u0633\u06d2 \u067e\u06be\u0631 \u0633\u06d2 \u062d\u0631\u06a9\u062a \u0645\u06cc\u06ba \u0622\u062c\u0627\u0626\u06d2 \u06af\u0627\u06d4<\/p>\n<p>\u06cc\u0642\u06cc\u0646\u06cc \u0628\u0646\u0627\u0626\u06cc\u06ba \u06a9\u06c1 \u0641\u0627\u0626\u0644 \u0627\u0648\u0631 \u0631\u06cc\u0626\u0644 \u0679\u0627\u0626\u0645 \u0627\u0633\u0679\u06cc\u0679\u0633 \u0645\u0645\u0627\u062b\u0644 \u06c1\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">grep traffic_weight infra\/gcp\/terraform\/08-edge\/terraform.tfvars\nterraform -chdir=infra\/gcp\/terraform\/08-edge output current_traffic_split\n<\/code><\/pre>\n<p>\u0622\u067e \u06a9\u0648 \u062f\u06cc\u06a9\u06be\u0646\u0627 \u0686\u0627\u06c1\u0626\u06d2 <code>aws_traffic_weight = 99<\/code>\u060c <code>gke_traffic_weight = 1<\/code>\u0627\u0648\u0631 <code>\"AWS: 99% \/ GKE: 1%\"<\/code>. \u0627\u06af\u0631 \u0622\u067e \u06a9\u06cc \u0641\u0627\u0626\u0644 \u0627\u0628 \u0628\u06be\u06cc 100s \u0627\u0648\u0631 0s \u062f\u06a9\u06be\u0627\u062a\u06cc \u06c1\u06d2 \u062a\u0648 \u0627\u0633\u06d2 \u0627\u0628\u06be\u06cc \u0679\u06be\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<h4 id=\"heading-check-did-any-request-reach-gke\">\u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba: \u06a9\u06cc\u0627 \u0622\u067e \u06a9\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a GKE \u062a\u06a9 \u067e\u06c1\u0646\u0686\u06cc\u061f<\/h4>\n<p>1% \u067e\u0631\u060c \u062a\u0642\u0631\u06cc\u0628\u0627\u064b \u062a\u0645\u0627\u0645 \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u06cc\u06ba \u0627\u0628 \u0628\u06be\u06cc AWS \u06a9\u0648 \u0628\u06be\u06cc\u062c\u06cc \u062c\u0627\u062a\u06cc \u06c1\u06cc\u06ba\u06d4 \u06c1\u0631 \u06a9\u0648\u0626\u06cc \u0644\u06af\u0627\u062a\u0627\u0631 40 \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0648\u06ba \u06a9\u06d2 \u0628\u0627\u0631\u06d2 \u0645\u06cc\u06ba \u0628\u0627\u062a \u06a9\u0631 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4 <code>aws<\/code> \u06cc\u06c1 \u0639\u0627\u0645 \u0628\u0627\u062a \u06c1\u06d2\u06d4 \u062c\u0628 \u062a\u06a9 \u06a9\u0648\u0626\u06cc \u0646\u06c1 \u06a9\u06c1\u06d2 \u062f\u06c1\u0631\u0627\u0626\u06cc\u06ba\u06d4 <code>gke<\/code>:<\/p>\n<pre><code class=\"language-bash\">HOST=$(terraform -chdir=infra\/gcp\/terraform\/08-edge output -raw public_hostname)\nIP=$(terraform -chdir=infra\/gcp\/terraform\/08-edge output -raw static_ip_address)\nwhile true; do\n  curl -sk --resolve \"$HOST:443:$IP\" \"https:\/\/$HOST\/health\"\n  echo\n  sleep 0.2\ndone\n<\/code><\/pre>\n<p>\u062c\u0628 \u0622\u067e \u0627\u0633\u06d2 \u062f\u06cc\u06a9\u06be\u06cc\u06ba \u062a\u0648 \u0627\u0633\u06d2 Ctrl+C \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0631\u0648\u06a9 \u062f\u06cc\u06ba\u06d4 <code>\"platform\":\"gke\"<\/code>. \u0627\u0633 \u0644\u06cc\u0628 \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u0631\u0646 \u06a9\u06d2 \u0644\u06cc\u06d2 200 \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u06cc\u06ba \u062f\u0631\u06a9\u0627\u0631 \u06c1\u06cc\u06ba: 197 <code>aws<\/code> \u0627\u0648\u0631 3 <code>gke<\/code>.<\/p>\n<p>\u0627\u0633 \u0628\u0627\u062a \u06a9\u0648 \u06cc\u0642\u06cc\u0646\u06cc \u0628\u0646\u0627\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u06c1 GKE \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u06cc\u06d2 \u0628\u063a\u06cc\u0631 \u062c\u0648\u0627\u0628 \u062f\u06cc\u0646\u0627 \u062c\u0627\u0631\u06cc \u0631\u06a9\u06be\u06d2\u060c \u06a9\u0646\u0627\u0631\u06d2 \u06a9\u06d2 IP \u06a9\u0648 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u06a9\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 \u06cc\u06c1 \u06af\u0627\u06c1\u06a9 \u06a9\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-bash\">HOST=$(terraform -chdir=infra\/gcp\/terraform\/08-edge output -raw public_hostname)\nEDGE=$(terraform -chdir=infra\/gcp\/terraform\/08-edge output -raw gke_edge_ip_address)\ncurl -sk --resolve \"$HOST:443:$EDGE\" \"https:\/\/$HOST\/health\"\n<\/code><\/pre>\n<p>\u0627\u0633\u06d2 \u062a\u0644\u0627\u0634 \u06a9\u0631\u06cc\u06ba\u06d4 <code>\"status\":\"ok\"<\/code> \u0627\u0648\u0631 <code>\"platform\":\"gke\"<\/code>. \u0627\u0633 \u0644\u06cc\u0628 \u0645\u06cc\u06ba \u06c1\u0645 \u0646\u06d2 \u067e\u0631\u0646\u0679 \u06a9\u06cc\u0627:<\/p>\n<pre><code class=\"language-plaintext\">{\"status\":\"ok\",\"served_by\":{\"platform\":\"gke\",\"version\":\"0.0.0-unset\",\"instance\":\"clearpay-api-6f9448c857-mj2j6\",\"commit\":\"unset\",\"rollback_active\":false}}\n<\/code><\/pre>\n<p>\u0622\u067e \u06a9\u0627 <code>instance<\/code> \u06cc\u06c1 \u0645\u062e\u062a\u0644\u0641 \u06c1\u0648\u06af\u0627\u06d4 \u0627\u06af\u0631 <code>platform<\/code> \u06a9\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba <code>aws<\/code>\u06cc\u0627\u060c \u0627\u06af\u0631 curl \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u060c \u062a\u0648 GKE \u063a\u06cc\u0631 \u062c\u0648\u0627\u0628\u062f\u06c1 \u06c1\u0648 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u0648\u0632\u0646 \u0646\u06c1 \u0628\u0691\u06be\u0627\u0624\u06d4<\/p>\n<h4 id=\"heading-check-does-a-login-work-through-the-public-address\">\u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba: \u06a9\u06cc\u0627 \u067e\u0628\u0644\u06a9 \u0627\u06cc\u0688\u0631\u06cc\u0633 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0644\u0627\u06af \u0627\u0646 \u06a9\u0631\u0646\u0627 \u06a9\u0627\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u061f<\/h4>\n<p>\u0627\u0628 \u0633\u06d2\u060c \u0627\u06cc\u06a9 \u0635\u0627\u0631\u0641 \u0627\u06cc\u06a9 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u06d2 \u0644\u06cc\u06d2 AWS \u0627\u0648\u0631 \u062f\u0648\u0633\u0631\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u06d2 \u0644\u06cc\u06d2 GKE \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4 \u062f\u0648\u0646\u0648\u06ba \u0644\u0648\u06af\u0648\u06ba \u06a9\u0648 \u0627\u06cc\u06a9 \u06c1\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u0648 \u0642\u0628\u0648\u0644 \u06a9\u0631\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2 \u0627\u0648\u0631 \u0627\u06cc\u06a9 \u06c1\u06cc \u062c\u0648\u0627\u0628 \u062f\u06cc\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u06d4 \u0627\u06af\u0631 \u0648\u06c1 \u0645\u062e\u062a\u0644\u0641 \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u0622\u067e \u0627\u0628 1% \u067e\u0631 \u0645\u0639\u0644\u0648\u0645 \u06a9\u0631\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06ba \u06af\u06d2\u060c \u0628\u0639\u062f \u0645\u06cc\u06ba 50% \u067e\u0631 \u0646\u06c1\u06cc\u06ba\u06d4 \u0644\u0627\u06af \u0627\u0646 \u06a9\u0648 \u0639\u0648\u0627\u0645\u06cc \u067e\u062a\u06d2 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0628\u06be\u06cc\u062c\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">HOST=$(terraform -chdir=infra\/gcp\/terraform\/08-edge output -raw public_hostname)\nIP=$(terraform -chdir=infra\/gcp\/terraform\/08-edge output -raw static_ip_address)\ncurl -sk --resolve \"$HOST:443:$IP\" \n  -H 'Content-Type: application\/json' \n  -d '{\"email\":\"alice@clearpay.dev\",\"password\":\"password123\"}' \n  \"https:\/\/$HOST\/api\/auth\/login\"\n<\/code><\/pre>\n<p>\u0627\u0633\u06d2 \u062a\u0644\u0627\u0634 \u06a9\u0631\u06cc\u06ba\u06d4 <code>\"token\"<\/code> \u0627\u0648\u0631 <code>\"user\"<\/code> \u062c\u0648\u0627\u0628 \u0645\u06cc\u06ba\u06d4 \u0627\u06af\u0631 \u0622\u067e \u062f\u06cc\u06a9\u06be\u062a\u06d2 \u06c1\u06cc\u06ba <code>internal_error<\/code>\u0645\u062a \u0631\u0648\u06a9\u0648 \u0627\u0648\u0631 \u0648\u0632\u0646 \u0628\u0691\u06be\u0627\u0624.<\/p>\n<h4 id=\"heading-check-use-the-app-like-a-customer\">\u0686\u06cc\u06a9 \u0622\u0624\u0679 \u06a9\u0631\u06cc\u06ba: \u06af\u0627\u06c1\u06a9 \u06a9\u06cc \u0637\u0631\u062d \u0627\u06cc\u067e \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/h4>\n<p>https:\/\/api.clearpay.test \u06a9\u06be\u0648\u0644\u06cc\u06ba \u0627\u0648\u0631 \u0633\u0631\u0679\u06cc\u0641\u06a9\u06cc\u0679 \u0648\u0627\u0631\u0646\u0646\u06af \u067e\u0631 \u06a9\u0644\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4 \u0644\u0627\u06af \u0627\u0646 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f\u060c \u0627\u067e\u0646\u0627 \u0628\u06cc\u0644\u0646\u0633 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u062a\u06be\u0648\u0691\u06cc \u0631\u0642\u0645 \u0628\u06be\u06cc\u062c\u06cc\u06ba\u06d4 \u062d\u0627\u0644\u06cc\u06c1 \u0633\u0631\u06af\u0631\u0645\u06cc \u06a9\u06d2 \u062a\u062d\u062a \u06c1\u0631 \u0646\u0626\u06cc \u0644\u0627\u0626\u0646 \u0627\u0633 \u0637\u0631\u062d \u0646\u0638\u0631 \u0622\u062a\u06cc \u06c1\u06d2: <code>served by aws\/1.0.0<\/code> \u06cc\u0627 <code>served by gke\/0.0.0-unset<\/code>. \u0635\u0631\u0641 \u062a\u0627\u0632\u06c1 \u062a\u0631\u06cc\u0646 \u0644\u0627\u0626\u0646 \u06c1\u06cc \u0622\u067e \u06a9\u0648 \u0627\u0633 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u06d2 \u0628\u0627\u0631\u06d2 \u0645\u06cc\u06ba \u0645\u0637\u0644\u0639 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4 \u067e\u0631\u0627\u0646\u06cc \u0633\u0637\u0631\u06cc\u06ba \u0627\u0633 \u0648\u0642\u062a \u0633\u06d2 \u0688\u0627\u06a9 \u0679\u06a9\u0679\u0648\u06ba \u06a9\u0648 \u0628\u0631\u0642\u0631\u0627\u0631 \u0631\u06a9\u06be\u062a\u06cc \u06c1\u06cc\u06ba \u062c\u0628 \u0648\u06c1 \u0644\u06a9\u06be\u06d2 \u06af\u0626\u06d2 \u062a\u06be\u06d2\u06d4<\/p>\n<p>\u0627\u0648\u067e\u0631 \u06a9\u06cc \u06a9\u0627\u0644\u06cc \u0628\u0627\u0631 \u062a\u0642\u0631\u06cc\u0628\u0627\u064b \u06c1\u0645\u06cc\u0634\u06c1 AWS \u06a9\u0648 1% \u067e\u0631 \u062f\u06a9\u06be\u0627\u062a\u06cc \u06c1\u06d2\u06d4 \u0646\u0626\u06cc \u0644\u0627\u0626\u0646\u06cc\u06ba \u0627\u0648\u0631 \u0633\u0631\u06af\u0631\u0645\u06cc \u06a9\u06d2 \u0644\u0648\u067e\u0633 \u062a\u0644\u0627\u0634 \u06a9\u0631\u06cc\u06ba\u060c \u0646\u06c1 \u0635\u0631\u0641 \u0628\u0627\u0631\u06d4<\/p>\n<p>\u0627\u06cc\u06a9 \u0646\u0638\u0631 \u0645\u06cc\u06ba <code>synthetic-health.sh<\/code> \u0679\u0631\u0645\u06cc\u0646\u0644 \u06c1\u0631 \u0644\u0627\u0626\u0646 \u06a9\u0648 \u0627\u06cc\u06a9 \u062d\u06cc\u062b\u06cc\u062a \u0638\u0627\u06c1\u0631 \u06a9\u0631\u0646\u06cc \u0686\u0627\u06c1\u06cc\u06d2\u06d4 <code>200<\/code>.<\/p>\n<h4 id=\"heading-decision\">\u0641\u06cc\u0635\u0644\u06c1<\/h4>\n<ul>\n<li>\n<p>\u0644\u0648\u067e \u062f\u06a9\u06be\u0627\u06cc\u0627 <code>gke<\/code> \u06a9\u0645 \u0627\u0632 \u06a9\u0645 \u0627\u06cc\u06a9 \u0628\u0627\u0631 \u0644\u0627\u06af \u0627\u0646 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f\u060c \u0679\u0648\u06a9\u0646 \u0648\u0627\u067e\u0633 \u0622 \u062c\u0627\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0635\u0631\u0641 \u062c\u0627\u0645\u0639 \u062d\u06cc\u062b\u06cc\u062a \u0638\u0627\u06c1\u0631 \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u06d4 <code>200<\/code>: \u0628\u0627\u0628 22 \u067e\u0631 \u062c\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0627\u0648\u0631 \u06a9\u0686\u06be \u0628\u06be\u06cc: \u0631\u0648\u06a9\u06cc\u06ba \u0627\u0648\u0631 \u062a\u0641\u062a\u06cc\u0634 \u06a9\u0631\u06cc\u06ba\u06d4 \u0648\u0632\u0646 \u0646\u06c1 \u0628\u0691\u06be\u0627\u0624\u06d4 \u0627\u06af\u0631 \u0622\u067e \u06a9\u0627 \u06af\u0627\u06c1\u06a9 \u0645\u062a\u0627\u062b\u0631 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u060c \u062a\u0648 \u0628\u0631\u0627\u06c1 \u06a9\u0631\u0645 \u062f\u0631\u062c \u0630\u06cc\u0644 \u06a9\u0627\u0645 \u06a9\u0631\u06cc\u06ba: <code>rollback.sh<\/code> \u067e\u06be\u0631 \u0628\u0627\u0628 23 \u067e\u0631 \u062c\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<\/ul>\n<h4 id=\"heading-done-when\">\u0645\u06a9\u0645\u0644 \u06c1\u0648\u0646\u06d2 \u067e\u0631:<\/h4>\n<ul>\n<li>\n<p>\u0641\u0627\u0626\u0644 \u0627\u0648\u0631 \u0641\u0627\u0626\u0644 \u062f\u0648\u0646\u0648\u06ba \u06a9\u06d2 \u0644\u06cc\u06d2 \u0648\u0632\u0646 99\/1 \u06c1\u06d2\u06d4 <code>current_traffic_split<\/code><\/p>\n<\/li>\n<li>\n<p>\u0644\u0648\u067e \u067e\u0631\u0646\u0679 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2. <code>\"platform\":\"gke\"<\/code> \u06a9\u0645 \u0627\u0632 \u06a9\u0645 \u0627\u06cc\u06a9 \u0628\u0627\u0631<\/p>\n<\/li>\n<li>\n<p>\u062c\u0628 \u0622\u067e \u0627\u067e\u0646\u06d2 \u0639\u0648\u0627\u0645\u06cc \u067e\u062a\u06d2 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0644\u0627\u06af \u0627\u0646 \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba \u062a\u0648 \u0627\u06cc\u06a9 \u0679\u0648\u06a9\u0646 \u0648\u0627\u067e\u0633 \u0622 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<\/ul>\n<h3 id=\"heading-chapter-22-raise-traffic-to-100-percent\">\u0628\u0627\u0628 22\u06d4 \u0679\u0631\u06cc\u0641\u06a9 \u0645\u06cc\u06ba 100% \u0627\u0636\u0627\u0641\u06c1 \u06a9\u0631\u06cc\u06ba<\/h3>\n<p><em>\u0635\u0628\u062d 11:30 \u0628\u062c\u06d2 \u0645\u0646\u06af\u0644 \u0633\u06d2 \u0628\u062f\u06be \u06a9\u06cc \u0633\u06c1 \u067e\u06c1\u0631 \u062a\u06a9<\/em><\/p>\n<p>1\u066a \u0646\u06d2 \u06a9\u0627\u0645 \u06a9\u06cc\u0627\u06d4 \u0627\u0633 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u06a9\u06c1 100 \u0645\u06cc\u06ba \u0633\u06d2 1 \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u06cc\u06ba GKE \u06a9\u0648 \u067e\u06c1\u0646\u0686\u0627\u0626\u06cc \u06af\u0626\u06cc\u06ba\u06d4 \u0627\u0628 \u0627\u06cc\u06a9 \u0648\u0642\u062a \u0645\u06cc\u06ba \u0688\u0627\u0626\u0644 \u06a9\u0648 \u062a\u06be\u0648\u0691\u0627 \u0633\u0627 \u0627\u0648\u067e\u0631 \u06a9\u0631\u06cc\u06ba\u06d4 \u0645\u06cc\u06ba \u062a\u0645\u06c1\u0627\u0631\u06d2 \u0644\u06cc\u06d2 \u06a9\u0686\u06be \u0646\u06c1\u06cc\u06ba \u06a9\u0631 \u0633\u06a9\u062a\u0627\u06d4 \u0627\u0633\u06d2 \u0627\u067e\u0646\u06d2 \u06c1\u0627\u062a\u06be \u0645\u06cc\u06ba \u067e\u06a9\u0691\u06cc\u06ba \u200b\u200b\u0627\u0648\u0631 \u06c1\u0631 \u0642\u062f\u0645 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0646\u0645\u0628\u0631 \u062f\u06cc\u06a9\u06be\u06cc\u06ba\u06d4<\/p>\n<p>\u06c1\u0631 \u0628\u0627\u0631 \u0627\u06cc\u06a9 \u06c1\u06cc \u062a\u06cc\u0646 \u0686\u06cc\u0632\u06cc\u06ba \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<ul>\n<li>\n<p><strong>\u0633\u06a9\u0648\u0631 \u06a9\u0627\u0631\u0688:<\/strong> \u0622\u067e \u062f\u06cc\u06a9\u06be \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba \u06a9\u06c1 \u0622\u067e \u06a9\u06cc \u0627\u06cc\u067e \u06a9\u062a\u0646\u06cc \u062c\u0644\u062f\u06cc \u062c\u0648\u0627\u0628 \u062f\u06cc\u062a\u06cc \u06c1\u06d2 \u0627\u0648\u0631 \u06a9\u062a\u0646\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u06cc\u06ba \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648\u062a\u06cc \u06c1\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u0646\u0642\u0644 \u06a9\u06cc \u062a\u0639\u062f\u0627\u062f:<\/strong> \u0686\u0644\u0627\u0646\u06d2 \u0648\u0627\u0644\u06cc API \u06a9\u0627\u067e\u06cc\u0648\u06ba \u06a9\u06cc \u062a\u0639\u062f\u0627\u062f<\/p>\n<\/li>\n<li>\n<p><strong>\u06a9\u0646\u06a9\u0634\u0646 \u0631\u06cc\u0627\u0636\u06cc:<\/strong> \u0622\u06cc\u0627 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u0645\u06cc\u06ba \u0627\u0628 \u0628\u06be\u06cc \u062a\u0645\u0627\u0645 \u06a9\u0646\u06a9\u0634\u0646\u0632 \u06a9\u06cc \u06af\u0646\u062c\u0627\u0626\u0634 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<\/ul>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/10\/1792188596_339_\u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0648\u06ba-\u06a9\u0648-AWS-\u0633\u06d2-GKE-\u0645\u06cc\u06ba-\u06a9\u06cc\u0633\u06d2-\u0645\u0646\u062a\u0642\u0644-\u06a9\u06cc\u0627-\u062c\u0627\u0626\u06d2\u06d4.png\" alt=\"\u0679\u0631\u06cc\u0641\u06a9 \u0645\u0646\u062a\u0642\u0644\u06cc \u06a9\u06cc \u062a\u0642\u0633\u06cc\u0645 \u06a9\u0648 \u0638\u0627\u06c1\u0631 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u06cc \u062a\u0635\u0648\u06cc\u0631\" style=\"display: block;\" width=\"600\" height=\"400\" loading=\"lazy\" title=\"\"><\/p>\n<pre><code class=\"language-plaintext\">99 \/ 1     AWS \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2591    GKE \u2591\n90 \/ 10    AWS \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2591\u2591     GKE \u2588\u2588\n75 \/ 25    AWS \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591     GKE \u2588\u2588\u2588\u2588\u2588\n50 \/ 50    AWS \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591     GKE \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\n25 \/ 75    AWS \u2588\u2588\u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591     GKE \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\n10 \/ 90    AWS \u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591     GKE \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\n 0 \/ 100   AWS                          GKE \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\n<\/code><\/pre>\n<h4 id=\"heading-before-50-50-do-the-connection-math\">50\/50 \u0633\u06d2 \u067e\u06c1\u0644\u06d2: \u0645\u0631\u0628\u0648\u0637 \u0631\u06cc\u0627\u0636\u06cc \u06a9\u0631\u0646\u0627<\/h4>\n<p>\u0688\u06cc\u0646\u06cc\u0626\u0644\u060c \u062c\u0648 \u0641\u0648\u0646 \u067e\u0631 \u06c1\u06d2\u060c \u0622\u062f\u06be\u06d2 \u0631\u0627\u0633\u062a\u06d2 \u067e\u0631 \u067e\u06c1\u0646\u0686\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u06c1\u06cc \u0645\u062f\u0627\u062e\u0644\u062a \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \"\u062c\u0628 AWS \u06a9\u0627\u0645 \u06a9\u0631\u0646\u0627 \u062c\u0627\u0631\u06cc \u0631\u06a9\u06be\u06d2 \u06af\u0627 \u062a\u0648 GKE \u0627\u0633\u06a9\u06cc\u0644 \u0622\u0624\u0679 \u06c1\u0648\u0646\u06d2 \u067e\u0631 \u06a9\u062a\u0646\u06d2 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u06a9\u0646\u06a9\u0634\u0646 RDS \u062a\u06a9 \u067e\u06c1\u0646\u0686 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u061f\"<\/p>\n<p>\u06c1\u0631 API \u0639\u0645\u0644 \u06a9\u06be\u0644 \u0633\u06a9\u062a\u0627 \u06c1\u06d2: <code>DB_POOL_SIZE<\/code> \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u0637\u06d2 \u0634\u062f\u06c1 \u0637\u0648\u0631 \u067e\u0631 10 \u06a9\u0646\u06a9\u0634\u0646 \u06c1\u06cc\u06ba\u06d4 \u067e\u0648\u0644 \u0627\u0633 \u0648\u0642\u062a \u06a9\u06be\u0644\u062a\u0627 \u06c1\u06d2 \u062c\u0628 \u0628\u0648\u062c\u06be \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u060c \u0644\u06c1\u0630\u0627 \u062c\u0628 \u0679\u0631\u06cc\u0641\u06a9 \u06c1\u0644\u06a9\u0627 \u06c1\u0648 \u062a\u0648 \u0646\u0645\u0628\u0631 \u06a9\u0645 \u0631\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0645\u06a9\u0645\u0644 \u0628\u0648\u062c\u06be \u067e\u0631\u060c \u06a9\u0633\u06cc \u0628\u06be\u06cc \u0639\u0645\u0644 \u0645\u06cc\u06ba \u06a9\u0644 10 \u06c1\u0648 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u06a9\u06cc \u0633\u062e\u062a \u062d\u062f\u0648\u062f \u06c1\u06cc\u06ba\u06d4 <code>max_connections<\/code>. \u0627\u06af\u0631 \u06a9\u0644 \u0627\u0633 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u06c1\u0648 \u062c\u0627\u0626\u06d2 \u062a\u0648 \u0646\u0626\u06d2 \u06a9\u0646\u06a9\u0634\u0646 \u0645\u0633\u062a\u0631\u062f \u06a9\u0631 \u062f\u06cc\u06d2 \u062c\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u06cc\u06ba \u0642\u0637\u0627\u0631 \u0645\u06cc\u06ba \u0644\u06af \u062c\u0627\u062a\u06cc \u06c1\u06cc\u06ba\u060c \u0627\u0648\u0631 \u06af\u0627\u06c1\u06a9 \u06a9\u0648 \u0679\u0627\u0626\u0645 \u0622\u0624\u0679 \u062f\u06a9\u06be\u0627\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u067e\u0646\u06d2 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u06a9\u06cc \u062d\u062f\u0648\u062f \u06a9\u0648 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4 \u06cc\u06c1 \u0686\u0644\u062a\u0627 \u06c1\u06d2\u06d4 <code>psql<\/code> AWS \u0633\u0631\u0648\u0631 \u067e\u0631 \u062c\u0633 \u0645\u06cc\u06ba \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u06c1\u06cc \u0628\u0627\u0628 5 \u06c1\u06d2:<\/p>\n<pre><code class=\"language-bash\">export INSTANCE_IP=$(terraform -chdir=infra\/aws\/terraform output -raw instance_public_ip)\nDATABASE_URL=$(terraform -chdir=infra\/aws\/terraform output -raw database_url)\nssh -i ~\/.ssh\/clearpay-deployer ubuntu@$INSTANCE_IP \"psql '$DATABASE_URL' -c 'SHOW max_connections;'\"\n<\/code><\/pre>\n<p>GKE \u06a9\u06cc \u062d\u062f\u0648\u062f \u06a9\u0648 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4 <code>maxReplicas<\/code> \u06a9\u0648 <code>k8s\/overlays\/production\/patch-hpa.yaml<\/code>. \u067e\u06be\u0631 \u062f\u0631\u062c \u0630\u06cc\u0644 \u062c\u062f\u0648\u0644 \u0645\u06cc\u06ba \u0646\u0645\u0628\u0631 \u062f\u0631\u062c \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-plaintext\">RDS max_connections:          ___\nAWS, 1 process \u00d7 10:          10\nGKE, maxReplicas \u00d7 10:        ___\nWorst case, both at once:     10 + ___ = ___\n<\/code><\/pre>\n<p>\u0622\u067e \u0627\u0633 \u0645\u0634\u0642 \u0645\u06cc\u06ba \u0628\u06be\u0631\u06cc \u06c1\u0648\u0626\u06cc \u0645\u06cc\u0632 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0627\u067e\u0646\u06cc \u0645\u06cc\u0632 \u06a9\u06cc \u062c\u0627\u0646\u0686 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-plaintext\">RDS max_connections:          81\nAWS, 1 process \u00d7 10:          10\nGKE, maxReplicas \u00d7 10:        30    (3 pods \u00d7 10)\nWorst case, both at once:     10 + 30 = 40\n<\/code><\/pre>\n<p>40 81 \u0633\u06d2 \u06a9\u0645 \u06c1\u06d2\u060c \u0627\u0633 \u0644\u06cc\u06d2 \u0679\u0631\u06cc\u0641\u06a9 \u0628\u0691\u06be\u0627\u0646\u06d2 \u06a9\u06cc \u06af\u0646\u062c\u0627\u0626\u0634 \u06c1\u06d2\u06d4 \u0622\u067e \u06a9\u0627 <code>max_connections<\/code> \u0627\u06af\u0631 \u0622\u067e \u06a9\u06d2 RDS \u06a9\u06cc \u0645\u062b\u0627\u0644\u06cc\u06ba \u0645\u062e\u062a\u0644\u0641 \u0633\u0627\u0626\u0632 \u06a9\u06cc \u06c1\u0648\u06ba \u062a\u0648 \u06cc\u06c1 \u0645\u062e\u062a\u0644\u0641 \u06c1\u0648 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u06c1\u0645 \u0628\u0627\u062a \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u0633\u0628 \u0633\u06d2 \u0628\u0631\u0627 \u0645\u0639\u0627\u0645\u0644\u06c1 \u0627\u0633 \u06a9\u06d2 \u0646\u06cc\u0686\u06d2 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u0628 \u0627\u06cc\u06a9 \u0628\u0691\u06d2 \u0633\u06cc\u0679 \u0627\u067e \u06a9\u06d2 \u0644\u06cc\u06d2 \u0648\u06c1\u06cc \u062d\u0633\u0627\u0628 \u0686\u0644\u0627\u0626\u06cc\u06ba\u06d4 \u0628\u0691\u06cc \u0645\u0634\u06cc\u0646\u0648\u06ba \u0648\u0627\u0644\u06cc \u06a9\u0645\u067e\u0646\u06cc\u0627\u06ba \u0686\u06be\u0648\u0679\u06cc RDS \u0645\u062b\u0627\u0644\u0648\u06ba \u06a9\u06d2 \u0644\u06cc\u06d2 3 \u0633\u06d2 8 \u067e\u0648\u0688\u0632 (10 + 80 = 90 \u06a9\u0646\u06a9\u0634\u0646\u0632) \u06a9\u06d2 HPAs \u0686\u0644\u0627 \u0633\u06a9\u062a\u06cc \u06c1\u06cc\u06ba\u060c \u062c\u0648 \u062a\u0642\u0631\u06cc\u0628\u0627\u064b 87 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u062f\u06cc\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u0646\u06c1 \u06c1\u06cc \u062a\u0631\u062a\u06cc\u0628 \u0627\u067e\u0646\u06d2 \u0622\u067e \u0645\u06cc\u06ba \u063a\u0644\u0637 \u06c1\u06d2\u06d4 \u067e\u0648\u0644 \u06a9\u06d2 \u0633\u0627\u0626\u0632 API \u06a9\u0648\u0688 \u0645\u06cc\u06ba \u0633\u06cc\u0679 \u06a9\u06cc\u06d2 \u06af\u0626\u06d2 \u062a\u06be\u06d2 \u0627\u0648\u0631 \u0645\u062e\u062a\u0644\u0641 \u0644\u0648\u06af\u0648\u06ba \u06a9\u06cc \u0637\u0631\u0641 \u0633\u06d2 Kubernetes \u0641\u0627\u0626\u0644\u0648\u06ba \u0645\u06cc\u06ba \u0645\u062e\u062a\u0644\u0641 \u0627\u0648\u0642\u0627\u062a \u0645\u06cc\u06ba \u067e\u0648\u0688 \u06a9\u06cc \u062d\u062f\u06cc\u06ba \u0633\u06cc\u0679 \u06a9\u06cc \u06af\u0626\u06cc \u062a\u06be\u06cc\u06ba\u06d4 \u0648\u06c1 \u0635\u0631\u0641 \u0627\u0633 \u0648\u0642\u062a \u062a\u0646\u0627\u0632\u0639\u06c1 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u062c\u0628 \u062f\u0648\u0646\u0648\u06ba \u0628\u0627\u062f\u0644 \u0627\u06cc\u06a9 \u06c1\u06cc \u0648\u0642\u062a \u0645\u06cc\u06ba \u067e\u0648\u0631\u06d2 \u0628\u0648\u062c\u06be \u0633\u06d2 \u0686\u0644\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0628\u062a\u062f\u0631\u06cc\u062c \u06c1\u062c\u0631\u062a \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0628\u0627\u0644\u06a9\u0644 \u0627\u06cc\u0633\u0627 \u06c1\u06cc \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u06af\u0631 \u0628\u062f\u062a\u0631\u06cc\u0646 \u0635\u0648\u0631\u062a \u062d\u0627\u0644 \u0622\u067e \u0633\u06d2 \u0628\u0691\u0627 \u06c1\u06d2\u06d4 <code>max_connections<\/code>\u0627\u0633 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u06a9\u06c1 \u0622\u067e \u0648\u0632\u0646 \u0627\u0679\u06be\u0627\u0626\u06cc\u06ba\u060c \u0631\u0648\u06a9\u06cc\u06ba \u0627\u0648\u0631 \u062a\u0631\u0645\u06cc\u0645 \u06a9\u06d2 \u0627\u062e\u062a\u06cc\u0627\u0631\u0627\u062a \u06a9\u06d2 \u0644\u06cc\u06d2 \u0628\u0627\u0628 23 \u067e\u0691\u06be\u06cc\u06ba\u06d4<\/p>\n<h4 id=\"heading-steps\">\u0642\u062f\u0645<\/h4>\n<p>\u06c1\u0631 \u0645\u0631\u062d\u0644\u06d2 \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u062c\u06cc\u0633\u06cc \u0686\u0627\u0631 \u062d\u0631\u06a9\u062a\u06cc\u06ba \u06c1\u0648\u062a\u06cc \u06c1\u06cc\u06ba\u06d4 \u0686\u0627\u0631\u0648\u06ba \u06a9\u0627\u0645 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f\u060c \u0646\u0645\u0628\u0631\u0648\u06ba \u06a9\u06d2 \u0627\u06af\u0644\u06d2 \u062c\u0648\u0691\u06d2 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u062f\u06c1\u0631\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<ol>\n<li>\n<p><strong>\u0645\u0646\u062a\u0642\u0644:<\/strong> \u0686\u0644\u0627\u0626\u06cc\u06ba <code>.\/scripts\/shift-traffic.sh<\/code> \u0627\u06cc\u06a9 \u0646\u0626\u06cc \u062c\u0648\u0691\u06cc \u06a9\u06d2 \u0633\u0627\u062a\u06be\u06d4 \u067e\u06c1\u0644\u0627 \u0646\u0645\u0628\u0631 AWS \u06a9\u0627 \u062d\u0635\u06c1 \u06c1\u06d2 \u0627\u0648\u0631 \u062f\u0648\u0633\u0631\u0627 \u0646\u0645\u0628\u0631 GKE \u06a9\u0627 \u062d\u0635\u06c1 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u062d\u0627\u0635\u0644 \u06a9\u0631\u06cc\u06ba:<\/strong> \u0628\u0631\u0627\u06c1 \u06a9\u0631\u0645 2 \u0627\u06cc\u06a9 \u062c\u06cc\u0633\u06d2 \u0646\u0645\u0628\u0631 \u062f\u0631\u062c \u06a9\u0631\u06cc\u06ba\u06d4 <code>terraform.tfvars<\/code> \u06a9\u0648 <code>08-edge<\/code>.<\/p>\n<\/li>\n<li>\n<p><strong>\u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba:<\/strong> \u0645\u0646\u062f\u0631\u062c\u06c1 \u0630\u06cc\u0644 \u062d\u0635\u0648\u06ba \u0645\u06cc\u06ba \u0686\u06be \u0679\u06cc\u0633\u0679 \u0686\u0644\u0627\u0626\u06cc\u06ba\u06d4 \u0627\u06cc\u06a9 \u0627\u0633\u06a9\u0631\u067e\u0679 \u0633\u0628 \u06a9\u0686\u06be \u0646\u06c1\u06cc\u06ba \u06a9\u0631 \u0633\u06a9\u062a\u06cc\u06d4 \u06cc\u06c1 \u0686\u0646\u062f \u06a9\u0645\u0627\u0646\u0688\u0632 \u0627\u0648\u0631 \u062f\u0648 \u0627\u0633\u06a9\u0631\u067e\u0679 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 <code>synthetic-health.sh<\/code>\u06cc\u06c1 \u067e\u06c1\u0644\u06d2 \u06c1\u06cc \u0686\u0644 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4 <code>load-test.sh<\/code>.<\/p>\n<\/li>\n<li>\n<p><strong>\u0641\u06cc\u0635\u0644\u06c1 \u06a9\u0631\u06cc\u06ba:<\/strong> \u0627\u06af\u0631 \u062a\u0645\u0627\u0645 \u0686\u06cc\u06a9 \u067e\u0627\u0633 \u06c1\u0648 \u062c\u0627\u062a\u06d2 \u06c1\u06cc\u06ba \u062a\u0648 \u0627\u06af\u0644\u06d2 \u0645\u0631\u062d\u0644\u06d2 \u067e\u0631 \u062c\u0627\u0626\u06cc\u06ba\u06d4 \u0627\u06af\u0631 \u062a\u0645\u0627\u0645 \u0686\u06cc\u06a9\u0633 \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648 \u062c\u0627\u0626\u06cc\u06ba \u062a\u0648 \u0631\u0648\u06a9 \u062f\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<\/ol>\n<p>\u0627\u0642\u062f\u0627\u0645\u0627\u062a \u062f\u0631\u062c \u0630\u06cc\u0644 \u06c1\u06cc\u06ba:<\/p>\n<table>\n<thead>\n<tr>\n<th>\u0642\u062f\u0645<\/th>\n<th>\u062d\u06a9\u0645<\/th>\n<th>AWS<\/th>\n<th>\u062c\u06cc \u06a9\u06d2 \u0627\u06cc<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>1<\/td>\n<td><code>.\/scripts\/shift-traffic.sh 90 10<\/code><\/td>\n<td>90%<\/td>\n<td>10%<\/td>\n<\/tr>\n<tr>\n<td>2<\/td>\n<td><code>.\/scripts\/shift-traffic.sh 75 25<\/code><\/td>\n<td>75%<\/td>\n<td>25%<\/td>\n<\/tr>\n<tr>\n<td>3<\/td>\n<td><code>.\/scripts\/shift-traffic.sh 50 50<\/code><\/td>\n<td>50%<\/td>\n<td>50%<\/td>\n<\/tr>\n<tr>\n<td>4<\/td>\n<td><code>.\/scripts\/shift-traffic.sh 25 75<\/code><\/td>\n<td>25%<\/td>\n<td>75%<\/td>\n<\/tr>\n<tr>\n<td>5<\/td>\n<td><code>.\/scripts\/shift-traffic.sh 10 90<\/code><\/td>\n<td>10%<\/td>\n<td>90%<\/td>\n<\/tr>\n<tr>\n<td>6<\/td>\n<td><code>.\/scripts\/shift-traffic.sh 0 100<\/code><\/td>\n<td>0%<\/td>\n<td>100%<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u0627\u06cc\u06a9 \u0648\u0642\u062a \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u0642\u0637\u0627\u0631 \u0686\u0644\u0627\u0626\u06cc\u06ba\u060c \u0627\u0646 \u0633\u0628 \u06a9\u0648 \u0627\u06cc\u06a9 \u0633\u0627\u062a\u06be \u0646\u06c1 \u0686\u0644\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<h4 id=\"heading-checks-at-every-stage\">\u06c1\u0631 \u0642\u062f\u0645 \u067e\u0631 \u0686\u06cc\u06a9 \u06a9\u06cc\u0627\u06d4<\/h4>\n<p><strong>1. \u0688\u0627\u0626\u0644 \u0645\u0646\u062a\u0642\u0644 \u06c1\u0648 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4<\/strong> \u0627\u0633\u06a9\u0631\u067e\u0679 \u06a9\u0627 \u067e\u0631\u0646\u0679 \u0622\u0624\u0679 \u0679\u06cc\u0631\u0627\u0641\u0627\u0631\u0645 \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u062a\u0631\u062a\u06cc\u0628 \u06c1\u06d2\u060c \u062b\u0628\u0648\u062a \u0646\u06c1\u06cc\u06ba\u06d4 \u06cc\u0642\u06cc\u0646\u06cc \u0628\u0646\u0627\u0626\u06cc\u06ba \u06a9\u06c1 \u0641\u0627\u0626\u0644\u06cc\u06ba \u0645\u0645\u0627\u062b\u0644 \u06c1\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">grep traffic_weight infra\/gcp\/terraform\/08-edge\/terraform.tfvars\nterraform -chdir=infra\/gcp\/terraform\/08-edge output current_traffic_split\n<\/code><\/pre>\n<p><strong>2. \u0627\u0635\u0644 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0688\u0627\u0626\u0644 \u06a9\u06d2 \u0628\u0639\u062f \u0622\u062a\u06cc \u06c1\u06d2\u06d4<\/strong> \u06c1\u0631 \u0634\u0641\u0679 \u06a9\u06d2 \u0628\u0639\u062f \u062a\u06cc\u0646 \u0645\u0646\u0679 \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u06af\u0646\u06cc\u06ba \u06a9\u06c1 \u06a9\u0648\u0646 \u062c\u0648\u0627\u0628 \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-bash\">HOST=$(terraform -chdir=infra\/gcp\/terraform\/08-edge output -raw public_hostname)\nIP=$(terraform -chdir=infra\/gcp\/terraform\/08-edge output -raw static_ip_address)\n\nfor i in $(seq 1 40); do\n  curl -sk --resolve \"$HOST:443:$IP\" \"https:\/\/$HOST\/health\"\n  echo\ndone | tee \/tmp\/clearpay-health.txt\n\ngrep -c '\"platform\":\"aws\"' \/tmp\/clearpay-health.txt\ngrep -c '\"platform\":\"gke\"' \/tmp\/clearpay-health.txt\n<\/code><\/pre>\n<p>GKEs \u06a9\u06cc \u062a\u0639\u062f\u0627\u062f \u0628\u0691\u06be\u0646\u06cc \u0686\u0627\u06c1\u06cc\u06d2 \u062c\u06cc\u0633\u0627 \u06a9\u06c1 \u0648\u0632\u0646 \u0628\u0691\u06be\u062a\u0627 \u06c1\u06d2\u06d4 40 \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u06cc\u06ba \u0627\u06cc\u06a9 \u06a9\u06be\u0631\u062f\u0631\u0627 \u0646\u0645\u0648\u0646\u06c1 \u06c1\u06d2\u060c \u0641\u06cc \u0635\u062f \u062b\u0628\u0648\u062a \u0646\u06c1\u06cc\u06ba\u06d4 \u0645\u0632\u06cc\u062f \u0628\u0631\u0622\u06ba\u060c Google \u06a9\u0648 \u06c1\u0631 \u062c\u06af\u06c1 \u0646\u0626\u06cc \u062a\u0642\u0633\u06cc\u0645 \u06a9\u0648 \u0644\u0627\u06af\u0648 \u06a9\u0631\u0646\u06d2 \u0645\u06cc\u06ba \u0686\u0646\u062f \u0645\u0646\u0679 \u0644\u06af\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0644\u06c1\u0630\u0627 \u0627\u06af\u0631 \u0622\u067e \u0627\u0633 \u06a9\u0627 \u062d\u0633\u0627\u0628 \u0628\u06c1\u062a \u062c\u0644\u062f \u06a9\u0631\u06cc\u06ba \u06af\u06d2\u060c \u062a\u0648 \u0622\u067e \u06a9\u0648 \u067e\u0631\u0627\u0646\u0627 \u062a\u0642\u0633\u06cc\u0645 \u0646\u0638\u0631 \u0622\u0626\u06d2 \u06af\u0627\u06d4 \u0627\u0633 \u0644\u06cc\u0628 \u0645\u06cc\u06ba \u06c1\u0645 \u0646\u06d2 \u062f\u0631\u062c \u0630\u06cc\u0644 \u06a9\u06cc \u062a\u0635\u062f\u06cc\u0642 \u06a9\u06cc:<\/p>\n<pre><code class=\"language-plaintext\">90 \/ 10   80 requests:  75 aws,  5 gke\n50 \/ 50   40 requests:  34 aws,  6 gke\n25 \/ 75   40 requests:  17 aws, 23 gke\n10 \/ 90   40 requests:   8 aws, 31 gke\n 0 \/ 100  40 requests, 1 minute later:    3 aws, 37 gke\n 0 \/ 100  40 requests, 90 seconds later:  0 aws, 40 gke\n<\/code><\/pre>\n<p>\u0627\u06af\u0631 10 \u0645\u0646\u0679 \u06a9\u06d2 \u0628\u0639\u062f \u0628\u06be\u06cc \u0646\u0645\u0628\u0631\u0632 \u0688\u0627\u0626\u0644 \u06a9\u06cc \u067e\u06cc\u0631\u0648\u06cc \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u062a\u0648 \u06af\u0648\u06af\u0644 \u0633\u06d2 \u067e\u0648\u0686\u06be\u06cc\u06ba \u06a9\u06c1 \u06a9\u0648\u0646 \u0633\u06cc \u062a\u0642\u0633\u06cc\u0645 \u0628\u0631\u0642\u0631\u0627\u0631 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-bash\">gcloud compute url-maps describe clearpay-migration-map | grep -B2 -A2 weight\n<\/code><\/pre>\n<p>0\/100 \u067e\u0631 <code>clearpay-gke-backend<\/code> \u0644\u0627\u0626\u0646 \u0634\u0648 <code>weight: 100<\/code>\u0686\u0648\u0646\u06a9\u06c1 \u06af\u0648\u06af\u0644 \u0646\u06d2 0 \u06a9\u0648 \u0686\u06be\u0648\u0691 \u062f\u06cc\u0627 \u06c1\u06d2\u060c AWS \u0644\u0627\u0626\u0646 \u0628\u0627\u0644\u06a9\u0644 \u0628\u06be\u06cc \u0648\u0632\u0646 \u0646\u06c1\u06cc\u06ba \u062f\u06a9\u06be\u0627\u062a\u06cc \u06c1\u06d2\u06d4 \u0627\u06af\u0631 \u0622\u067e \u06a9\u0627 \u0648\u0632\u0646 \u0622\u067e \u06a9\u06cc \u0641\u0627\u0626\u0644 \u0633\u06d2 \u0645\u062e\u062a\u0644\u0641 \u06c1\u06d2 \u062a\u0648 \u0686\u0644\u0627\u0626\u06cc\u06ba: <code>terraform apply<\/code> \u062f\u0648\u0628\u0627\u0631\u06c1 <code>08-edge<\/code>.<\/p>\n<p><strong>3. GKE \u0679\u06be\u06cc\u06a9 \u06c1\u06d2\u06d4<\/strong><\/p>\n<pre><code class=\"language-bash\">kubectl -n production get pods -l app=clearpay-api\nkubectl -n production get hpa clearpay-api\n<\/code><\/pre>\n<p>\u0641\u0648\u0631\u0688 <code>Running<\/code> \u0627\u0648\u0631 \u062a\u06cc\u0627\u0631\u06d4 HPA \u0644\u0627\u0626\u0646 \u0645\u0648\u062c\u0648\u062f\u06c1 CPU \u0627\u0648\u0631 \u0646\u0642\u0644 \u06a9\u06cc \u0645\u0648\u062c\u0648\u062f\u06c1 \u062a\u0639\u062f\u0627\u062f \u06a9\u0648 70% \u06c1\u062f\u0641 \u06a9\u06d2 \u0646\u0633\u0628\u062a \u062f\u06a9\u06be\u0627\u062a\u06cc \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0644\u06cc\u0628 25\/75 \u062a\u06a9 1 \u0646\u0642\u0644 \u0627\u0648\u0631 4-7% CPU \u06a9\u0648 \u0628\u0631\u0642\u0631\u0627\u0631 \u0631\u06a9\u06be\u062a\u06cc \u062a\u06be\u06cc\u06d4<\/p>\n<p><strong>4. \u0644\u0627\u06af \u0627\u0646 \u0627\u0628 \u0628\u06be\u06cc \u06a9\u0627\u0645 \u06a9\u0631\u06d2 \u06af\u0627\u06d4<\/strong> \u0628\u0627\u0628 21 \u062a\u0645\u0627\u0645 \u0645\u0631\u0627\u062d\u0644 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062f\u0648\u0628\u0627\u0631\u06c1 \u06a9\u0631\u0644 \u0644\u0627\u06af \u0627\u0646 \u06a9\u0631\u06cc\u06ba\u06d4 \u0645\u0639\u0627\u06c1\u062f\u06d2 \u06a9\u06d2 \u0645\u0633\u0627\u0626\u0644 \u0635\u0631\u0641 \u0645\u062e\u0635\u0648\u0635 \u0679\u0631\u06cc\u0641\u06a9 \u0645\u06a9\u0633\u0632 \u0645\u06cc\u06ba \u0638\u0627\u06c1\u0631 \u06c1\u0648 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0644\u06af\u0627\u062a\u0627\u0631 \u067e\u0627\u0646\u0686 \u0646\u0627\u06a9\u0627\u0645\u06cc\u0648\u06ba \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u0627\u06cc\u06a9 \u0631\u06a9 \u062c\u0627\u0646\u0627\u060c \u0646\u06c1 \u06a9\u06c1 \u062a\u06cc\u0632\u06d4<\/p>\n<p><strong>5. \u063a\u0644\u0637\u06cc\u0627\u06ba \u062d\u062f \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u06c1\u06cc\u06ba\u06d4<\/strong> \u06a9\u06c1 <code>synthetic-health.sh<\/code> \u0622\u067e \u06a9\u06d2 \u0679\u0631\u0645\u06cc\u0646\u0644 \u06a9\u0648 \u0635\u0631\u0641 \u062f\u0631\u062c \u0630\u06cc\u0644 \u062f\u06a9\u06be\u0627\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2: <code>200<\/code>. \u0627\u06af\u0631 \u0622\u067e \u0644\u0627\u0626\u0646 \u067e\u0631 \u06a9\u0686\u06be \u0627\u0648\u0631 \u062f\u06cc\u06a9\u06be\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u0631\u0648\u06a9\u06cc\u06ba \u0627\u0648\u0631 \u0627\u0633\u06d2 \u0646\u06c1 \u0627\u0679\u06be\u0627\u0626\u06cc\u06ba.<\/p>\n<p><strong>6.UI\u06d4<\/strong> \u067e\u06cc\u0633\u06d2 \u0628\u06be\u06cc\u062c\u0646\u06d2 \u0627\u0648\u0631 \u062a\u0627\u0632\u06c1 \u062a\u0631\u06cc\u0646 \u062e\u0628\u0631\u06cc\u06ba \u067e\u0691\u06be\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 https:\/\/api.clearpay.test \u067e\u0631 \u0644\u0627\u06af \u0627\u0646 \u06a9\u0631\u06cc\u06ba\u06d4 <code>served by<\/code> \u0644\u0627\u0626\u0646<\/p>\n<h4 id=\"heading-the-decision-at-every-stage\">\u06c1\u0631 \u0642\u062f\u0645 \u067e\u0631 \u0641\u06cc\u0635\u0644\u06d2<\/h4>\n<p>\u0645\u0627\u06cc\u0627 \u06c1\u0631 \u0628\u0627\u0631 \u0627\u06cc\u06a9 \u06c1\u06cc \u0633\u0648\u0627\u0644 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4 \"\u06a9\u06cc\u0627 \u0622\u067e \u0627\u06af\u0644\u06d2 \u0645\u0631\u062d\u0644\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062a\u06cc\u0627\u0631 \u06c1\u06cc\u06ba\u061f\"<\/p>\n<p>\u062b\u0628\u0648\u062a \u06a9\u06cc \u0628\u0646\u06cc\u0627\u062f \u067e\u0631 \u062c\u0648\u0627\u0628 \u062f\u06cc\u06ba\u06d4 \"\u0688\u0627\u0626\u0644 \u0641\u0627\u0626\u0644 \u0633\u06d2 \u0645\u06cc\u0644 \u06a9\u06be\u0627\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 GKE \u06a9\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u0627 \u062d\u0635\u06c1 \u0628\u0691\u06be \u06af\u06cc\u0627 \u06c1\u06d2\u06d4 \u067e\u0648\u0688\u0632 \u0635\u062d\u062a \u0645\u0646\u062f \u06c1\u06cc\u06ba\u060c \u0644\u0627\u06af \u0627\u0646 \u06a9\u0627\u0645 \u06a9\u0631 \u0631\u06c1\u06d2 \u06c1\u06cc\u06ba\u060c \u0627\u0648\u0631 \u062c\u0627\u0645\u0639 \u0633\u0679\u06cc\u0679\u0633 \u062a\u0645\u0627\u0645 200 \u06c1\u06cc\u06ba\u06d4 \u06a9\u0646\u06a9\u0634\u0646\u0632 \u06a9\u06cc \u0633\u0628 \u0633\u06d2 \u062e\u0631\u0627\u0628 \u0635\u0648\u0631\u062a \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u06a9\u06cc \u062d\u062f \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u06c1\u06d2\u06d4\"<\/p>\n<p>\u0627\u06af\u0631 \u06cc\u06c1 \u0679\u06cc\u0633\u0679 \u0645\u06cc\u06ba \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648 \u062c\u0627\u062a\u0627 \u06c1\u06d2 \u062a\u0648 \u0627\u067e \u0644\u0648\u0688 \u0646\u06c1 \u06a9\u0631\u06cc\u06ba\u06d4 \u0627\u06af\u0631 \u0622\u067e \u06a9\u0627 \u06af\u0627\u06c1\u06a9 \u0645\u062a\u0627\u062b\u0631 \u06c1\u0648\u0627 \u06c1\u06d2\u060c \u062a\u0648 \u0628\u0631\u0627\u06c1 \u06a9\u0631\u0645 \u0627\u0628\u06be\u06cc \u0628\u0627\u0628 23 \u067e\u0631 \u062c\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<h4 id=\"heading-done-when\">\u0645\u06a9\u0645\u0644 \u06c1\u0648\u0646\u06d2 \u067e\u0631:<\/h4>\n<ul>\n<li>\n<p>\u0641\u0627\u0626\u0644 \u0633\u06d2 \u0641\u0627\u0626\u0644 \u062a\u06a9 \u0648\u0632\u0646 0\/100 \u06c1\u06d2\u06d4 <code>current_traffic_split<\/code><\/p>\n<\/li>\n<li>\n<p>\u0644\u06af\u0627\u062a\u0627\u0631 40 \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u06cc\u06ba \u0648\u0627\u067e\u0633 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 <code>\"platform\":\"gke\"<\/code><\/p>\n<\/li>\n<li>\n<p>\u06a9\u0646\u06a9\u0634\u0646 \u06a9\u06cc \u0631\u06cc\u0627\u0636\u06cc \u0627\u0633 \u06a9\u06d2 \u0627\u067e\u0646\u06d2 \u0646\u0645\u0628\u0631\u0648\u06ba \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0644\u06a9\u06be\u06cc \u062c\u0627\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0645\u0635\u0646\u0648\u0639\u06cc \u062d\u0627\u0644\u062a \u0645\u06cc\u06ba \u06a9\u0633\u06cc \u0628\u06be\u06cc \u0645\u0631\u062d\u0644\u06d2 \u067e\u0631 \u06a9\u0648\u0626\u06cc \u0645\u0633\u062a\u0642\u0644 \u063a\u0644\u0637\u06cc \u0646\u06c1\u06cc\u06ba \u062f\u06cc\u06a9\u06be\u06cc \u06af\u0626\u06cc\u06d4<\/p>\n<\/li>\n<\/ul>\n<h3 id=\"heading-chapter-23-when-the-numbers-go-bad\">\u0628\u0627\u0628 23\u06d4 \u062c\u0628 \u0646\u0645\u0628\u0631 \u062e\u0631\u0627\u0628 \u06c1\u0648\u06ba\u06d4<\/h3>\n<p><em>\u0628\u062f\u06be \u0634\u0627\u0645 4:12 \u0628\u062c\u06d2<\/em><\/p>\n<p>\u0622\u062e\u0631\u06cc \u0634\u0641\u0679 \u0645\u06a9\u0645\u0644 \u06c1\u0648 \u0686\u06a9\u06cc \u06c1\u06d2\u06d4 \u0627\u0628 \u06c1\u0645\u0627\u0631\u06d2 \u062a\u0645\u0627\u0645 \u0635\u0627\u0631\u0641\u06cc\u0646 GKE \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631 \u0631\u06c1\u06d2 \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u06c1\u06cc\u0644\u062a\u06be \u0686\u06cc\u06a9 200 \u067e\u0631\u0646\u0679 \u06a9\u0631\u062a\u0627 \u0631\u06c1\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u0633 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u06a9\u06c1 \u0633\u0628 \u06a9\u0686\u06be \u0679\u06be\u06cc\u06a9 \u06c1\u06d2\u06d4 \u0633\u067e\u0648\u0631\u0679 \u0627\u0646 \u0628\u0627\u06a9\u0633 \u067e\u0686\u06be\u0644\u06d2 \u0627\u06cc\u06a9 \u06af\u06be\u0646\u0679\u06d2 \u0633\u06d2 \u062e\u0627\u0645\u0648\u0634 \u06c1\u06d2\u06d4 \u0639\u0645\u0627\u0631\u06c1 \u0627\u06cc\u06a9 \u0628\u0627\u0631 \u067e\u06be\u0631 \u0679\u0631\u06cc\u0688\u0646\u06af \u0679\u06cc\u0628\u0644 \u0686\u06cc\u06a9 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\"\u06cc\u06c1 \u0628\u0648\u0631\u0646\u06af \u0644\u06af \u0631\u06c1\u0627 \u06c1\u06d2\u060c\" \u0648\u06c1 \u06a9\u06c1\u062a\u06cc \u06c1\u06cc\u06ba\u06d4 \u0648\u06c1 \u0633\u0628 \u0633\u06d2 \u0628\u06c1\u062a\u0631 \u06cc\u06c1 \u06a9\u06c1\u06c1 \u0633\u06a9\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u0645\u06cc\u06ba \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u0631 \u0631\u06c1\u0627 \u06c1\u0648\u06ba \u06a9\u06c1 \u06a9\u0648\u0626\u06cc \u0627\u0633\u06d2 \u06a9\u0627\u0645\u06cc\u0627\u0628 \u06c1\u062c\u0631\u062a \u06a9\u06c1\u06d2\u06d4<\/p>\n<p>\u0688\u06cc\u0646\u06cc\u0644 \u0627\u0628 \u0628\u06be\u06cc \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u06a9\u0627 \u062c\u0627\u0626\u0632\u06c1 \u0644\u06d2 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4 \u0648\u06c1 GKE \u067e\u0631 \u0686\u0644\u0646\u06d2 \u0648\u0627\u0644\u06cc API \u06a9\u0627\u067e\u06cc\u0648\u06ba \u06a9\u06cc \u062a\u0639\u062f\u0627\u062f \u06af\u0646\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u0645\u06cc\u0679\u0631\u06a9\u0633 \u06a9\u0648 \u062f\u06cc\u06a9\u06be\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p><em>\"\u06a9\u06cc\u0627 \u0645\u06cc\u06ba \u0622\u067e \u06a9\u0648 \u0622\u067e \u06a9\u06cc \u0622\u062e\u0631\u06cc \u0646\u0648\u06a9\u0631\u06cc \u06a9\u06cc \u0628\u062f\u062a\u0631\u06cc\u0646 \u062f\u0648\u067e\u06c1\u0631 \u06a9\u06d2 \u0628\u0627\u0631\u06d2 \u0645\u06cc\u06ba \u0628\u062a\u0627 \u0633\u06a9\u062a\u0627 \u06c1\u0648\u06ba\u061f\"<\/em><\/p>\n<p>\u06a9\u0631\u0633 \u0646\u06d2 \u06a9\u0631\u0633\u06cc \u0645\u0648\u0691 \u062f\u06cc\u06d4<\/p>\n<p>\u0688\u06cc\u0646\u06cc\u0626\u0644 \u067e\u06cc\u0686\u06be\u06d2 \u062c\u06be\u06a9 \u06af\u06cc\u0627\u06d4<\/p>\n<p>\"\u06cc\u06c1 \u0627\u06cc\u06a9 \u0645\u062e\u062a\u0644\u0641 \u06a9\u0645\u067e\u0646\u06cc \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u0627\u0648\u0631 \u06c1\u062c\u0631\u062a \u062a\u06be\u06cc\u060c \u0644\u06cc\u06a9\u0646 \u0628\u0646\u06cc\u0627\u062f\u06cc \u0645\u0633\u0626\u0644\u06c1 \u0648\u06c1\u06cc \u062a\u06be\u0627\u06d4 \u06c1\u0645 \u0635\u0627\u0631\u0641\u06cc\u0646 \u06a9\u0648 \u0627\u06cc\u06a9 \u06a9\u0644\u0627\u0624\u0688 \u0633\u06d2 \u062f\u0648\u0633\u0631\u06d2 \u0645\u06cc\u06ba \u0645\u0646\u062a\u0642\u0644 \u06a9\u0631 \u0631\u06c1\u06d2 \u062a\u06be\u06d2\u060c \u0627\u0648\u0631 \u062c\u0645\u0639\u06c1 \u06a9\u06cc \u062f\u0648\u067e\u06c1\u0631 \u062a\u06a9 \u06c1\u0645 \u0627\u067e\u0646\u06d2 \u062a\u0642\u0631\u06cc\u0628\u0627\u064b \u0646\u0635\u0641 \u0635\u0627\u0631\u0641\u06cc\u0646 \u062a\u06a9 \u067e\u06c1\u0646\u0686 \u0686\u06a9\u06d2 \u062a\u06be\u06d2\u06d4 \u0679\u0631\u06cc\u0641\u06a9 \u0628\u0691\u06be\u0646\u0627 \u0634\u0631\u0648\u0639 \u06c1\u0648 \u06af\u06cc\u0627\u060c \u0627\u0648\u0631 \u06c1\u0645 \u0646\u06d2 API \u06a9\u06cc \u0645\u0632\u06cc\u062f \u06a9\u0627\u067e\u06cc\u0627\u06ba \u0646\u0626\u06d2 \u0645\u0627\u062d\u0648\u0644 \u0645\u06cc\u06ba \u0634\u0627\u0645\u0644 \u06a9\u0631\u0646\u0627 \u0634\u0631\u0648\u0639 \u06a9\u0631 \u062f\u06cc\u06ba\u06d4\"<\/p>\n<p>\u0648\u06c1 \u0627\u06cc\u06a9 \u0644\u0645\u062d\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0631\u06a9\u0627\u06d4<\/p>\n<p>\"\u06c1\u0645\u0627\u0631\u0627 \u067e\u0686\u06be\u0644\u0627 \u0645\u0627\u062d\u0648\u0644 \u0627\u0628 \u0628\u06be\u06cc \u0686\u0644 \u0631\u06c1\u0627 \u062a\u06be\u0627\u06d4 \u06c1\u0645 \u0627\u0646 \u0635\u0627\u0631\u0641\u06cc\u0646 \u06a9\u06cc \u062e\u062f\u0645\u062a \u06a9\u0631 \u0631\u06c1\u06d2 \u062a\u06be\u06d2 \u062c\u0648 \u0627\u0628\u06be\u06cc \u0645\u0646\u062a\u0642\u0644 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u0626\u06d2 \u062a\u06be\u06d2\u06d4\"<\/p>\n<p>\u0627\u067e\u0646\u06cc \u0627\u0633\u06a9\u0631\u06cc\u0646 \u067e\u0631 \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u062f\u06cc\u06a9\u06be\u06cc\u06ba\u06d4<\/p>\n<p>\"\u062a\u0648 \u062f\u0648\u0646\u0648\u06ba \u0645\u0627\u062d\u0648\u0644 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631 \u0631\u06c1\u06d2 \u062a\u06be\u06d2\u061f\" \"\u06c1\u0627\u06ba\u060c \u0627\u0648\u0631 API \u06a9\u06cc \u06c1\u0631 \u06a9\u0627\u067e\u06cc \u06a9\u06d2 \u0644\u06cc\u06d2 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u06a9\u0646\u06a9\u0634\u0646 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2\u06d4\"<\/p>\n<p>\u0648\u06c1 \u062e\u0627\u06a9\u0648\u06ba \u06a9\u06d2 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u06a9\u06cc \u0637\u0631\u0641 \u0627\u0634\u0627\u0631\u06c1 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\"\u06cc\u06c1\u06cc \u06c1\u06d2 \u062c\u06c1\u0627\u06ba \u06c1\u0645 \u0645\u0635\u06cc\u0628\u062a \u0645\u06cc\u06ba \u0628\u06be\u0627\u06af \u06af\u0626\u06d2.\" \u0688\u06cc\u0646\u06cc\u0626\u0644 \u0627\u067e\u0646\u06d2 \u0642\u0644\u0645 \u06a9\u06d2 \u0644\u06cc\u06d2 \u067e\u06c1\u0646\u0686\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\"\u0633\u06cc\u0679\u0648\u06ba \u06a9\u06cc \u0627\u06cc\u06a9 \u0645\u0642\u0631\u0631\u06c1 \u062a\u0639\u062f\u0627\u062f \u0648\u0627\u0644\u06d2 \u0631\u06cc\u0633\u062a\u0648\u0631\u0627\u0646 \u06a9\u06d2 \u0628\u0627\u0631\u06d2 \u0645\u06cc\u06ba \u0633\u0648\u0686\u0626\u06d2\u06d4 \u0631\u06cc\u0633\u062a\u0648\u0631\u0627\u0646 \u0645\u06cc\u06ba \u0644\u0648\u06af\u0648\u06ba \u06a9\u06cc \u0627\u06cc\u06a9 \u0645\u062e\u0635\u0648\u0635 \u062a\u0639\u062f\u0627\u062f \u06a9\u0648 \u0627\u06cc\u0688\u062c\u0633\u0679 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u0627\u0641\u06cc \u0646\u0634\u0633\u062a\u06cc\u06ba \u06c1\u06cc\u06ba\u060c \u0644\u06cc\u06a9\u0646 \u0632\u06cc\u0627\u062f\u06c1 \u0644\u0648\u06af\u0648\u06ba \u06a9\u06d2 \u0622\u0646\u06d2 \u0633\u06d2 \u0633\u06cc\u0679\u0648\u06ba \u06a9\u06cc \u062a\u0639\u062f\u0627\u062f \u0645\u06cc\u06ba \u06a9\u0648\u0626\u06cc \u062a\u0628\u062f\u06cc\u0644\u06cc \u0646\u06c1\u06cc\u06ba \u0622\u062a\u06cc\u06d4\"<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/10\/1792188596_883_\u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0648\u06ba-\u06a9\u0648-AWS-\u0633\u06d2-GKE-\u0645\u06cc\u06ba-\u06a9\u06cc\u0633\u06d2-\u0645\u0646\u062a\u0642\u0644-\u06a9\u06cc\u0627-\u062c\u0627\u0626\u06d2\u06d4.png\" alt=\"\u0688\u06cc\u0646\u06cc\u0626\u0644 \u0679\u06cc\u0645 \u06a9\u0648 \u0627\u067e\u0646\u06cc \u0635\u0648\u0631\u062a\u062d\u0627\u0644 \u0628\u062a\u0627\u062a\u0627 \u06c1\u06d2\u06d4\" style=\"display: block;\" width=\"600\" height=\"400\" loading=\"lazy\" title=\"\"><\/p>\n<p>\u0648\u06c1 \u0648\u0627\u0626\u0679 \u0628\u0648\u0631\u0688 \u067e\u0631 \u062f\u0648 \u06af\u0631\u0648\u067e \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\"AWS \u0627\u06cc\u06a9 \u06af\u0631\u0648\u067e \u062a\u06be\u0627 \u0627\u0648\u0631 GKE \u062f\u0648\u0633\u0631\u0627 \u06af\u0631\u0648\u067e \u062a\u06be\u0627\u06d4 \u062f\u0648\u0646\u0648\u06ba \u06af\u0631\u0648\u067e \u0627\u06cc\u06a9 \u06c1\u06cc \u0631\u06cc\u0633\u062a\u0648\u0631\u0627\u06ba \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631 \u0631\u06c1\u06d2 \u062a\u06be\u06d2\u06d4\"<\/p>\n<p>\u0627\u0633 \u0646\u06d2 GKE \u06a9\u06d2 \u0622\u06af\u06d2 \u0627\u06cc\u06a9 \u0627\u0648\u0631 \u06af\u0631\u0648\u067e \u0634\u0627\u0645\u0644 \u06a9\u06cc\u0627\u06d4<\/p>\n<p>\"\u067e\u06be\u0631 \u0679\u0631\u06cc\u0641\u06a9 \u0645\u06cc\u06ba \u0627\u0636\u0627\u0641\u06c1 \u06c1\u0648\u0627\u06d4 GKE \u0646\u06d2 API \u06a9\u06cc \u0645\u0632\u06cc\u062f \u06a9\u0627\u067e\u06cc\u0627\u06ba \u0634\u0627\u0645\u0644 \u06a9\u06cc\u06ba\u060c \u0627\u0648\u0631 \u06c1\u0631 \u0646\u0626\u06cc \u06a9\u0627\u067e\u06cc \u06a9\u06d2 \u0644\u06cc\u06d2 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u06a9\u0646\u06a9\u0634\u0646 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2\u06d4 \u067e\u0631\u0627\u0646\u06cc AWS \u06a9\u0627\u067e\u06cc \u0627\u0628 \u0628\u06be\u06cc \u06a9\u0646\u06a9\u0634\u0646 \u0628\u0631\u0642\u0631\u0627\u0631 \u0631\u06a9\u06be\u06d2 \u06c1\u0648\u0626\u06d2 \u062a\u06be\u06cc\u06d4\"<\/p>\n<p>\u0627\u0633 \u0646\u06d2 \u0642\u0644\u0645 \u0646\u06cc\u0686\u06d2 \u0631\u06a9\u06be\u0627\u06d4<\/p>\n<p>\"\u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u0645\u062d\u062f\u0648\u062f \u062a\u06be\u0627\u06d4 \u06c1\u0645 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u0633\u06d2 \u06a9\u0646\u06a9\u0634\u0646 \u06a9\u06cc \u062a\u0639\u062f\u0627\u062f \u0645\u06cc\u06ba \u0627\u0636\u0627\u0641\u06c1 \u06a9\u0631\u062a\u06d2 \u0631\u06c1\u06d2\u06d4\"<\/p>\n<p>\"\u062c\u0628 \u062d\u062f \u06c1\u0648 \u06af\u0626\u06cc \u062a\u0648 \u06a9\u06cc\u0627 \u06c1\u0648\u0627\u061f\" \u062a\u0645 \u067e\u0648\u0686\u06be\u0648<\/p>\n<p>\"\u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u0646\u06a9\u0634\u0646 \u06a9\u0627 \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u0631\u0646\u06d2 \u0644\u06af\u06cc\u06d4 \u067e\u06be\u0631 \u0679\u0627\u0626\u0645 \u0622\u0624\u0679 \u0634\u0631\u0648\u0639 \u06c1\u0648\u0627\u06d4\"<\/p>\n<p>\u0648\u06c1 \u0622\u067e \u06a9\u0648 \u062f\u06cc\u06a9\u06be\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\"\u062f\u0631\u062e\u0648\u0627\u0633\u062a \u062e\u0648\u062f \u0648\u0627\u0636\u062d \u0637\u0648\u0631 \u067e\u0631 \u0633\u0645\u062c\u06be\u0648\u062a\u06c1 \u0646\u06c1\u06cc\u06ba \u06a9\u06cc \u06af\u0626\u06cc \u062a\u06be\u06cc\u06d4 \u0627\u06af\u0631 \u067e\u0648\u0688 \u0686\u0644 \u0631\u06c1\u0627 \u062a\u06be\u0627 \u0627\u0648\u0631 \u0635\u062d\u062a \u06a9\u06cc \u062c\u0627\u0646\u0686 \u067e\u0691\u062a\u0627\u0644 \u06a9\u0631 \u0631\u06c1\u0627 \u062a\u06be\u0627\u060c \u062a\u0648 \u0645\u0633\u0626\u0644\u06c1 \u0635\u0644\u0627\u062d\u06cc\u062a \u06a9\u0627 \u062a\u06be\u0627\u06d4 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u06a9\u0646\u06a9\u0634\u0646 \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0645\u0627\u0646\u06af \u062a\u06be\u06cc\u06d4\"<\/p>\n<p>\u06a9\u0631\u0633 \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u067e\u0631 \u063a\u0648\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\"\u062a\u0648 \u0622\u067e \u0627\u06cc\u06a9 \u0646\u0626\u06d2 \u0645\u0627\u062d\u0648\u0644 \u06a9\u0627 \u0645\u0634\u0627\u06c1\u062f\u06c1 \u06a9\u0631 \u0631\u06c1\u06d2 \u062a\u06be\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u062f\u0648\u0646\u0648\u06ba \u0645\u0627\u062d\u0648\u0644 \u06a9\u0627 \u0627\u062d\u0627\u0637\u06c1 \u06a9\u0631 \u0631\u06c1\u0627 \u062a\u06be\u0627\u06d4\"<\/p>\n<p>\"\u062f\u0631\u0633\u062a \u0637\u0631\u06cc\u0642\u06d2 \u0633\u06d2\u06d4\"<\/p>\n<p>\u062f\u0627\u0646\u06cc\u0627\u0644 \u067e\u06be\u0631 \u0633\u06d2 \u062e\u0627\u06a9\u06d2 \u06a9\u0648 \u062f\u06cc\u06a9\u06be\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\"\u06cc\u06c1 \u0648\u06c1\u06cc \u06c1\u06d2 \u062c\u0648 \u06c1\u0645 \u0646\u06d2 \u06a9\u06be\u0648 \u062f\u06cc\u0627\u06d4 \u06c1\u0645 \u0646\u06d2 \u062d\u0633\u0627\u0628 \u0644\u06af\u0627\u06cc\u0627 \u06a9\u06c1 \u06c1\u0645\u06cc\u06ba \u0646\u0626\u06d2 \u0645\u0627\u062d\u0648\u0644 \u0645\u06cc\u06ba \u06a9\u06cc\u0627 \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2\u06d4 \u06c1\u0645 \u0646\u06d2 \u062d\u0633\u0627\u0628 \u0646\u06c1\u06cc\u06ba \u0644\u06af\u0627\u06cc\u0627 \u06a9\u06c1 \u06c1\u0645\u06cc\u06ba \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u0645\u06cc\u06ba \u06a9\u06cc\u0627 \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2 \u062c\u0628 \u062f\u0648\u0646\u0648\u06ba \u0645\u0627\u062d\u0648\u0644 \u0686\u0644 \u0631\u06c1\u06d2 \u062a\u06be\u06d2\u06d4\"<\/p>\n<p>\u0648\u06c1 \u067e\u06be\u0631 \u0628\u06cc\u0679\u06be \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\"\u0622\u062e\u0631\u06a9\u0627\u0631 \u06c1\u0645 \u0646\u06d2 \u0679\u0631\u06cc\u0641\u06a9 \u06a9\u0648 \u067e\u0686\u06be\u0644\u06d2 \u0645\u0627\u062d\u0648\u0644 \u0645\u06cc\u06ba \u0645\u0646\u062a\u0642\u0644 \u06a9\u0631 \u062f\u06cc\u0627 \u0627\u0648\u0631 \u0679\u06be\u06cc\u06a9 \u06c1\u0648 \u06af\u0626\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u0648\u0627\u0642\u0639\u06c1 \u067e\u06be\u0631 \u0628\u06be\u06cc \u0628\u0631\u0642\u0631\u0627\u0631 \u0631\u06c1\u0627\u06d4\"<\/p>\n<p>GKE \u06a9\u06cc \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc\u0648\u06ba \u06a9\u0648 \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0631\u06cc\u06ba\u06d4 \"\u0627\u0628 \u0622\u067e \u0645\u062e\u062a\u0644\u0641 \u0637\u0631\u06cc\u0642\u06d2 \u0633\u06d2 \u06a9\u06cc\u0627 \u06a9\u0631\u06cc\u06ba \u06af\u06d2\u061f\"<\/p>\n<p>\"\u0622\u0626\u06cc\u06ba \u0679\u0631\u06cc\u0641\u06a9 \u06a9\u0648 \u0645\u0646\u062a\u0642\u0644 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0646\u0645\u0628\u0631\u0648\u06ba \u06a9\u0648 \u062f\u06cc\u06a9\u06be\u06cc\u06ba\u06d4\"<\/p>\n<p>\u0688\u06cc\u0646\u06cc\u0626\u0644 \u0627\u067e\u0646\u0627 \u0644\u06cc\u067e \u0679\u0627\u067e \u0622\u067e \u06a9\u06cc \u0637\u0631\u0641 \u0645\u0648\u0691\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\"\u0622\u067e \u06a9\u06cc \u0644\u06cc\u0628 \u0645\u062d\u0641\u0648\u0638 \u06c1\u06d2\u06d4 \u06c1\u0645 \u0646\u06d2 81 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u06a9\u0646\u06a9\u0634\u0646 \u06a9\u06cc \u062d\u062f \u06a9\u06d2 \u0644\u06cc\u06d2 3 \u06a9\u0627\u067e\u06cc\u0627\u06ba \u0686\u0644\u0627\u0626\u06cc\u06ba \u0627\u0648\u0631 \u0628\u0645\u0634\u06a9\u0644 \u06a9\u0627\u0645 \u06a9\u0627 \u0628\u0648\u062c\u06be \u062e\u062a\u0645 \u06a9\u06cc\u0627\u06d4\"<\/p>\n<p>\u0648\u06c1 \u0646\u0648\u0679\u0648\u06ba \u06a9\u0627 \u0627\u06cc\u06a9 \u0627\u0648\u0631 \u0633\u06cc\u0679 \u06a9\u06be\u0648\u0644\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\"\u0645\u06cc\u0631\u0627 \u06a9\u06cc\u0633 \u0645\u062e\u062a\u0644\u0641 \u062a\u06be\u0627\u06d4 \u0645\u06cc\u0631\u06d2 \u067e\u0627\u0633 \u0632\u06cc\u0627\u062f\u06c1 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 8 \u06a9\u0627\u067e\u06cc\u0627\u06ba \u062a\u06be\u06cc\u06ba \u0627\u0648\u0631 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u0646\u06d2 87 \u06a9\u0646\u06a9\u0634\u0646 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u062f\u06cc \u062a\u06be\u06cc\u06d4\"<\/p>\n<p>\u0648\u06c1 \u0622\u067e \u06a9\u0648 \u062f\u06cc\u06a9\u06be\u062a\u0627 \u06c1\u06d2\u06d4 \"\u062a\u0648 \u067e\u06be\u0631 \u0648\u06c1 \u0646\u0645\u0628\u0631 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4\"<\/p>\n<p>\u062a\u0645 \u0627\u067e\u0646\u06cc \u06a9\u0631\u0633\u06cc \u06a9\u0648 \u0642\u0631\u06cc\u0628 \u06a9\u0631\u0648\u06d4 \u062f\u0627\u0646\u06cc\u0627\u0644 \u062c\u0627\u0631\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\"\u0645\u06cc\u06ba \u0622\u067e \u06a9\u0648 \u0648\u0627\u0642\u0639\u0627\u062a \u0627\u0633\u06cc \u062a\u0631\u062a\u06cc\u0628 \u0633\u06d2 \u0628\u062a\u0627\u0624\u06ba \u06af\u0627 \u062c\u0633 \u062a\u0631\u062a\u06cc\u0628 \u0633\u06d2 \u0648\u06c1 \u067e\u06cc\u0634 \u0622\u0626\u06d2\u06d4 \u0622\u067e \u0627\u0628\u06be\u06cc \u06c1\u0648\u0644\u0688 \u067e\u0631 \u06c1\u06cc\u06ba\u06d4 \u06cc\u06c1 \u0645\u062a \u0633\u0645\u062c\u06be\u0648 \u06a9\u06c1 \u0622\u067e \u06a9\u0648 \u0627\u0646\u062c\u0627\u0645 \u0645\u0639\u0644\u0648\u0645 \u06c1\u06d2\u06d4 \u062c\u06cc\u0633\u06d2 \u06c1\u06cc \u06c1\u0631 \u06a9\u06cc\u0633 \u0633\u0627\u0645\u0646\u06d2 \u0622\u062a\u0627 \u06c1\u06d2\u060c \u0645\u062c\u06be\u06d2 \u0628\u062a\u0627\u0626\u06cc\u06ba \u06a9\u06c1 \u0622\u067e \u06a9\u06cc\u0627 \u062f\u06cc\u06a9\u06be\u062a\u06d2 \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u0622\u067e \u06a9\u06d2 \u062e\u06cc\u0627\u0644 \u0645\u06cc\u06ba \u06a9\u06cc\u0627 \u06c1\u0648\u06af\u0627\u06d4\"<\/p>\n<p>\u0648\u06c1 \u0627\u06cc\u06a9 \u0679\u0631\u0645\u06cc\u0646\u0644 \u06a9\u06be\u0648\u0644\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u062a\u0631\u0628\u06cc\u062a 8 API \u06a9\u0627\u067e\u06cc\u0648\u06ba \u0627\u0648\u0631 2 \u0645\u0627\u062d\u0648\u0644 \u0645\u06cc\u06ba \u062f\u0633\u062a\u06cc\u0627\u0628 87 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u06a9\u0646\u06a9\u0634\u0646 \u06a9\u06cc \u062d\u062f \u0633\u06d2 \u0634\u0631\u0648\u0639 \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u0633 \u0628\u0627\u0631 \u0646\u0645\u0628\u0631\u0648\u06ba \u0645\u06cc\u06ba \u0641\u0631\u0642 \u067e\u0691\u06d2 \u06af\u0627\u06d4<\/p>\n<p><strong>\u06a9\u06cc\u0627 \u0622\u067e \u0627\u0633 \u0628\u0627\u0628 \u0645\u06cc\u06ba \u06a9\u0686\u06be \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u061f<\/strong> \u0627\u0633\u06d2 \u0627\u062e\u0644\u0627\u0642\u06cc\u0627\u062a \u06a9\u06d2 \u0633\u0627\u062a\u06be \u06a9\u06c1\u0627\u0646\u06cc \u06a9\u06cc \u0637\u0631\u062d \u067e\u0691\u06be\u06cc\u06ba\u06d4 \u0622\u067e \u06a9\u06cc \u0644\u06cc\u0628 \u0645\u06cc\u06ba \u06a9\u0648\u0626\u06cc \u062d\u0627\u062f\u062b\u06c1 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u0627 \u062a\u06be\u0627\u060c \u0627\u0633 \u0644\u06cc\u06d2 \u0679\u06be\u06cc\u06a9 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u0686\u06be \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u0627\u06af\u0631 \u0622\u067e \u0648\u0627\u0636\u062d \u062b\u0628\u0648\u062a \u0686\u0627\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba \u062a\u0648\u060c \u0645\u0631\u062d\u0644\u06c1 2 \u0645\u06cc\u06ba \u062f\u0648 \u06a9\u0645\u0627\u0646\u0688\u0632 \u0686\u0644\u0627\u0626\u06cc\u06ba \u0627\u0648\u0631 \u0627\u0646 \u06a9\u0627 \u0645\u0648\u0627\u0632\u0646\u06c1 \"\u0627\u067e\u0646\u06d2 \u06a9\u0644\u0633\u0679\u0631\" \u0633\u06d2 \u06a9\u0631\u06cc\u06ba\u06d4 \u0627\u06af\u0631 \u0644\u0627\u06af \u0645\u06cc\u06ba \u06a9\u0648\u0626\u06cc \u062e\u0631\u0627\u0628\u06cc \u0638\u0627\u06c1\u0631 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u062a\u06cc \u06c1\u06d2 \u0627\u0648\u0631 HPA 1 \u0631\u06cc\u067e\u0644\u06cc\u06a9\u0627 \u067e\u0631 \u06c1\u06d2\u060c \u062a\u0648 \u0622\u067e\u0631\u06cc\u0634\u0646 \u0645\u06a9\u0645\u0644 \u06c1\u0648 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4 \u0628\u0627\u0628 24 \u067e\u0631 \u062c\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<h4 id=\"heading-what-it-looks-like\">\u06cc\u06c1 \u06a9\u06cc\u0633\u0627 \u0644\u06af\u062a\u0627 \u06c1\u06d2<\/h4>\n<p>50\/50 \u0634\u0641\u0679 \u06a9\u06d2 \u0628\u0639\u062f \u067e\u06c1\u0644\u06d2 \u0686\u0646\u062f \u0645\u0646\u0679 \u0646\u0627\u0631\u0645\u0644 \u0644\u06af\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u067e\u06be\u0631 \u0631\u062f\u0639\u0645\u0644 \u06a9\u0627 \u0648\u0642\u062a \u062a\u06cc\u0632 \u0627\u0648\u0631 \u062a\u06cc\u0632 \u062a\u0631 \u06c1\u0648\u0646\u0627 \u0634\u0631\u0648\u0639 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0639\u0645\u0627\u0631\u06c1 \u0646\u06d2 \u0679\u06cc\u0645 \u0686\u06cc\u0646\u0644 \u0645\u06cc\u06ba \u06cc\u06c1 \u0633\u0628 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u062f\u06cc\u06a9\u06be\u0627\u06d4<\/p>\n<p>\"\u06a9\u0626\u06cc \u0679\u0631\u0627\u0646\u0633\u0645\u06cc\u0634\u0646\u0632 \u06a9\u0627 \u0648\u0642\u062a \u062e\u062a\u0645 \u06c1\u0648 \u06af\u06cc\u0627\u06d4\"<\/p>\n<p>\u0688\u06cc\u0646\u06cc\u0626\u0644 \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 \u06a9\u06be\u0648\u0644\u062a\u0627 \u06c1\u06d2\u06d4 API \u06a9\u0648 7 replicas \u067e\u0631 \u0633\u06a9\u06cc\u0644 \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2 \u0627\u0648\u0631 p95 \u0645\u06cc\u06ba \u062a\u0627\u062e\u06cc\u0631 \u0628\u0691\u06be \u0631\u06c1\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u06a9\u0631\u0633 \u0646\u06d2 \u0633\u0633\u062a \u0645\u0646\u062a\u0642\u0644\u06cc \u06a9\u06d2 \u0628\u0627\u0631\u06d2 \u0645\u06cc\u06ba \u062f\u0648 \u06a9\u0633\u0679\u0645\u0631 \u0631\u067e\u0648\u0631\u0679\u0633 \u067e\u0648\u0633\u0679 \u06a9\u06cc\u06ba\u06d4<\/p>\n<p>\u062f\u0627\u0646\u06cc\u0627\u0644 \u0646\u06d2 \u062f\u0648\u0628\u0627\u0631\u06c1 \u06af\u0631\u0627\u0641 \u06a9\u0648 \u062f\u06cc\u06a9\u06be\u0627\u06d4 \"\u06a9\u06cc\u0627 \u06cc\u06c1 \u062a\u0645\u0627\u0645 \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0648\u06ba \u06a9\u0648 \u0645\u062a\u0627\u062b\u0631 \u06a9\u0631\u06d2 \u06af\u0627\u061f\"<\/p>\n<p>\"\u0627\u0628\u06be\u06cc \u062a\u06a9 \u0646\u06c1\u06cc\u06ba\u06d4\" \u06a9\u0631\u0633 \u0646\u06d2 \u06a9\u06c1\u0627\u06d4 \"\u0645\u06cc\u06ba \u0627\u0628 \u062a\u06a9 \u06a9\u0626\u06cc \u0628\u0627\u0631 \u0679\u0631\u0627\u0646\u0633\u0641\u0631 \u06a9\u0631 \u0686\u06a9\u0627 \u06c1\u0648\u06ba\u06d4\"<\/p>\n<p>\u0639\u0645\u0627\u0631\u06c1 \u0627\u067e\u0646\u06cc \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u06a9\u06cc \u062a\u0627\u0631\u06cc\u062e \u0686\u06cc\u06a9 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4 \"\u0622\u0626\u06cc\u06d2 \u06cc\u0642\u06cc\u0646\u06cc \u0628\u0646\u0627\u0626\u06cc\u06ba \u06a9\u06c1 \u0679\u0627\u0626\u0645 \u0622\u0624\u0679 \u0688\u067e\u0644\u06cc\u06a9\u06cc\u0679 \u0686\u0627\u0631\u062c\u0632 \u06a9\u0627 \u0646\u062a\u06cc\u062c\u06c1 \u0646\u06c1\u06cc\u06ba \u0628\u0646\u062a\u0627 \u06c1\u06d2\u06d4\"<\/p>\n<p>\u0688\u06cc\u0646\u06cc\u0626\u0644 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u0645\u06cc\u0679\u0631\u06a9\u0633 \u06a9\u0648 \u062f\u06cc\u06a9\u06be\u062a\u0627 \u06c1\u06d2\u06d4 \"\u06cc\u06c1 \u0627\u06cc\u06a9 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u06c1\u0648\u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4\"<\/p>\n<p>\u062a\u0645 \u0627\u0628\u06be\u06cc \u062a\u06a9 \u0646\u06c1\u06cc\u06ba \u062c\u0627\u0646\u062a\u06d2\u06d4<\/p>\n<p>\u0644\u0627\u06af \u0645\u06cc\u06ba \u06a9\u0686\u06be \u0628\u06be\u06cc \u0646\u06c1\u06cc\u06ba \u06c1\u06d2 \u062c\u0633 \u0645\u06cc\u06ba \u06a9\u06c1\u0627 \u06af\u06cc\u0627 \u06c1\u06d2 \u06a9\u06c1 \"\u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u0633\u06d2 \u06a9\u0646\u06a9\u0634\u0646 \u062e\u062a\u0645 \u06c1\u0648 \u06af\u06cc\u0627 \u062a\u06be\u0627\u06d4\" \u067e\u06c1\u0644\u06cc \u0639\u0644\u0627\u0645\u062a \u0635\u0631\u0641 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u0622\u067e \u06a9\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0686\u0646\u062f \u0645\u0646\u0679 \u067e\u06c1\u0644\u06d2 \u06a9\u06cc \u0646\u0633\u0628\u062a \u0632\u06cc\u0627\u062f\u06c1 \u0648\u0642\u062a \u0644\u06d2 \u0631\u06c1\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u06a9\u0648\u0626\u06cc \"\u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u06a9\u0646\u06a9\u0634\u0646 \u06a9\u06be\u0648 \u06af\u06cc\u0627\" \u063a\u0644\u0637\u06cc \u06a9\u0627 \u067e\u06cc\u063a\u0627\u0645 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u067e\u06c1\u0644\u06cc \u0686\u06cc\u0632 \u062c\u0648 \u0622\u067e \u062f\u06cc\u06a9\u06be\u06cc\u06ba \u06af\u06d2 \u0648\u06c1 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u0633\u0628 \u0633\u06d2 \u0633\u0633\u062a \u0631\u062f\u0639\u0645\u0644 (p95 \u0644\u06cc\u0679\u0646\u0633\u06cc) \u0622\u06c1\u0633\u062a\u06c1 \u0633\u06d2 \u0622\u06c1\u0633\u062a\u06c1 \u06c1\u0648\u062a\u0627 \u062c\u0627 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4 \u0627\u06cc\u067e \u0645\u06cc\u06ba \u0627\u0633\u0679\u06cc\u0679\u0633 \u0628\u0627\u0631 (ui\/src\/comComponents\/StatusRibbon.jsx) \"\u0688\u06cc\u06af\u0631\u06cc\u0688\u0688\u06d4 \u0627\u0646\u0648\u06cc\u0633\u0679\u06cc \u06af\u06cc\u0634\u0646\" \u0645\u06cc\u06ba \u062a\u0628\u062f\u06cc\u0644 \u06c1\u0648\u062a\u0627 \u06c1\u06d2 \u062c\u0628 \u0627\u06cc\u06a9 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u0627\u0633\u0679\u06cc\u0679\u0633 \u0686\u06cc\u06a9 \u0644\u06af\u0627\u062a\u0627\u0631 \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648 \u062c\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0627\u0633 \u0644\u06cc\u06d2 \u06cc\u06c1 \u0627\u06cc\u06a9 \u06c1\u06cc \u0633\u0633\u062a \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0633\u06d2 \u0645\u062a\u062d\u0631\u06a9 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h4 id=\"heading-what-you-know\">\u0622\u067e \u06a9\u06cc\u0627 \u062c\u0627\u0646\u062a\u06d2 \u06c1\u06cc\u06ba<\/h4>\n<p>\u0679\u0631\u06cc\u0641\u06a9 \u062f\u0648\u0646\u0648\u06ba \u0628\u0627\u062f\u0644\u0648\u06ba \u0645\u06cc\u06ba \u06c1\u06d2\u06d4 \u062a\u0627\u062e\u06cc\u0631 AWS \u0628\u06cc\u0633 \u0644\u0627\u0626\u0646 \u0633\u06d2 \u0628\u062f\u062a\u0631 \u06c1\u06d2\u06d4 \u0635\u0631\u0641 \u0627\u06cc\u06a9 \u063a\u0644\u0637\u06cc \u06a9\u06cc \u0628\u062c\u0627\u0626\u06d2 \u0645\u062a\u0639\u062f\u062f \u062a\u0635\u062f\u06cc\u0642\u06cc \u0646\u0627\u06a9\u0627\u0645\u06cc\u0648\u06ba \u06a9\u06d2 \u0628\u0639\u062f \u0627\u0633\u0679\u06cc\u0679\u0633 \u0628\u0627\u0631 \u06a9\u0648 \u067e\u0644\u0679 \u062f\u06cc\u0627 \u06af\u06cc\u0627\u06d4<\/p>\n<h4 id=\"heading-what-you-dont-know-yet\">\u062c\u0648 \u0622\u067e \u0627\u0628\u06be\u06cc \u062a\u06a9 \u0646\u06c1\u06cc\u06ba \u062c\u0627\u0646\u062a\u06d2<\/h4>\n<p>\u0686\u0627\u06c1\u06d2 \u06cc\u06c1 \u0644\u0648\u0688 \u0628\u06cc\u0644\u0646\u0633\u0631\u060c \u067e\u0648\u0688\u060c \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633\u060c \u06cc\u0627 \u062e\u0631\u0627\u0628 \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u06c1\u0648\u06d4 \u0627\u0633 \u0644\u06cc\u06d2 \u0642\u06cc\u0627\u0633 \u0622\u0631\u0627\u0626\u06cc\u0627\u06ba \u0646\u06c1 \u06a9\u0631\u06cc\u06ba\u06d4 \u067e\u06c1\u0644\u06d2 \u0645\u0639\u0644\u0648\u0645\u0627\u062a \u0627\u06a9\u0679\u06be\u06cc \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<h4 id=\"heading-step-1-stop-shifting\">\u0645\u0631\u062d\u0644\u06c1 1\u06d4 \u0634\u0641\u0679 \u06a9\u0631\u0646\u0627 \u0628\u0646\u062f \u06a9\u0631\u06cc\u06ba\u06d4<\/h4>\n<p>\u0645\u062a \u0628\u06be\u0627\u06af\u0648 <code>shift-traffic.sh<\/code> GKE \u067e\u0631 \u0648\u0627\u067e\u0633 \u062c\u0627\u0626\u06cc\u06ba \u062c\u0628 \u062a\u06a9 \u06a9\u06c1 \u0622\u067e \u0633\u0645\u062c\u06be \u0646\u06c1 \u0644\u06cc\u06ba \u06a9\u06c1 \u06a9\u06cc\u0627 \u06c1\u0648\u0627 \u06c1\u06d2\u06d4 \u0648\u06c1 \u0627\u0648\u0642\u0627\u062a \u0644\u06a9\u06be\u06cc\u06ba \u062c\u0648 \u0622\u067e \u0645\u062d\u0633\u0648\u0633 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u06a9\u0686\u06be \u0627\u0648\u0631 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2\u060c \u0622\u067e \u062c\u0648 \u06a9\u0686\u06be \u062f\u06cc\u06a9\u06be\u062a\u06d2 \u06c1\u06cc\u06ba \u0627\u0633\u06d2 \u0646\u0648\u0679 \u06a9\u0631 \u0644\u06cc\u06ba: \u0627\u0635\u0644 \u063a\u0644\u0637\u06cc \u06a9\u0627 \u067e\u06cc\u063a\u0627\u0645\u060c \u0646\u0642\u0644 \u06a9\u06cc \u0627\u0635\u0644 \u062a\u0639\u062f\u0627\u062f\u060c \u0627\u0648\u0631 \u0627\u0635\u0644 \u0679\u0627\u0626\u0645 \u0633\u0679\u06cc\u0645\u067e\u06d4<\/p>\n<p>\u06c1\u0646\u06af \u0631\u06cc\u0679 \u067e\u0631 \u062a\u0634\u062e\u06cc\u0635 \u06a9\u0631\u0646\u06d2 \u0645\u06cc\u06ba \u062e\u0631\u0686 \u06c1\u0648\u0646\u06d2 \u0648\u0627\u0644\u0627 \u06c1\u0631 \u06af\u06be\u0646\u0679\u06c1 \u0628\u06be\u06cc \u062f\u0648\u06c1\u0631\u06cc \u0644\u0627\u06af\u062a \u06a9\u0627 \u0627\u06cc\u06a9 \u06af\u06be\u0646\u0679\u06c1 \u06c1\u06d2\u06d4 \u0627\u062e\u0631\u0627\u062c\u0627\u062a \u0644\u06cc\u062c\u0631 \u0645\u06cc\u06ba \u0634\u0627\u0645\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 \u0627\u0633 \u0628\u0627\u062a \u06a9\u0648 \u06cc\u0642\u06cc\u0646\u06cc \u0628\u0646\u0627\u0626\u06cc\u06ba \u06a9\u06c1 \u0622\u067e \u0679\u0648\u0679\u0644 \u0633\u06d2 \u0645\u062d\u0631\u0648\u0645 \u0646\u06c1 \u06c1\u0648\u06ba \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u0633\u0628 \u06a9\u06cc \u062a\u0648\u062c\u06c1 \u06a9\u06c1\u06cc\u06ba \u0627\u0648\u0631 \u06c1\u06d2\u06d4<\/p>\n<h4 id=\"heading-step-2-gather-evidence\">\u0645\u0631\u062d\u0644\u06c1 2\u06d4 \u062b\u0628\u0648\u062a \u062c\u0645\u0639 \u06a9\u0631\u06cc\u06ba\u06d4<\/h4>\n<p>API \u06a9\u06cc \u063a\u0644\u0637\u06cc\u0627\u06ba \u067e\u0691\u06be\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">kubectl -n production logs deployment\/clearpay-api --tail=100 | grep error\n<\/code><\/pre>\n<p>\u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0644\u0641\u0627\u0638 \u062a\u0644\u0627\u0634 \u06a9\u0631\u06cc\u06ba\u06d4 \u06a9\u0646\u06a9\u0634\u0646 \u06a9\u06cc \u062e\u0631\u0627\u0628\u06cc\u060c \"\u0628\u06c1\u062a \u0632\u06cc\u0627\u062f\u06c1 \u06a9\u0646\u06a9\u0634\u0646\u0632\"\u060c \u06cc\u0627 \u067e\u0648\u0644 \u0645\u06cc\u06ba \u06a9\u0644\u0627\u0626\u0646\u0679 \u06a9\u0627 \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u0631\u062a\u06d2 \u0648\u0642\u062a \u0679\u0627\u0626\u0645 \u0622\u0624\u0679 \u06c1\u0648\u0627\u06d4 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u06a9\u06d2 \u0644\u0641\u0638 \u06a9\u06d2 \u0628\u063a\u06cc\u0631 5xx \u06a9\u06cc \u063a\u0644\u0637\u06cc \u06a9\u0633\u06cc \u062f\u0648\u0633\u0631\u06d2 \u0645\u0642\u0627\u0645 \u06a9\u06cc \u0637\u0631\u0641 \u0627\u0634\u0627\u0631\u06c1 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u060c \u062c\u06cc\u0633\u06d2 \u06af\u06cc\u0679 \u0648\u06d2 \u06cc\u0627 \u062e\u0631\u0627\u0628 \u062a\u0642\u0633\u06cc\u0645\u06d4<\/p>\n<p>\u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 \u06a9\u0628\u0631\u0646\u06cc\u0679\u0633 \u06a9\u062a\u0646\u06d2 \u067e\u0648\u0688\u0632 \u0686\u0644 \u0631\u06c1\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">kubectl -n production get hpa clearpay-api\n<\/code><\/pre>\n<p>\u0645\u0648\u0627\u0632\u0646\u06c1 <code>REPLICAS<\/code> \u06a9\u06d2 \u0633\u0627\u062a\u06be <code>maxReplicas<\/code>. \u0632\u06cc\u0627\u062f\u06c1 \u0686\u0691\u06be\u0646\u06d2 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u0628\u0648\u062c\u06be \u0645\u06cc\u06ba \u0627\u0636\u0627\u0641\u06c1\u06d4 \u06cc\u06c1 \u0627\u06cc\u06a9 \u0627\u0634\u0627\u0631\u06c1 \u06c1\u06d2\u060c \u0627\u0628\u06be\u06cc \u062a\u06a9 \u06a9\u0648\u0626\u06cc \u0648\u062c\u06c1 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4<\/p>\n<p>\u067e\u06be\u0631 \u0628\u0627\u0628 22 \u0645\u06cc\u06ba \u062c\u062f\u0648\u0644 \u0645\u06cc\u06ba \u0627\u0635\u0644 \u0627\u0639\u062f\u0627\u062f \u062f\u0631\u062c \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-plaintext\">RDS max_connections:          87\nAWS, 1 process \u00d7 10:          10\nGKE, 7 replicas \u00d7 10:         70\nRight now:                    80, close to the limit\nGKE at maxReplicas 8:         80, worst case 90, over the limit\n<\/code><\/pre>\n<h4 id=\"heading-your-own-cluster-at-50-50\">50\/50 \u0645\u06cc\u0631\u0627 \u06a9\u0644\u0633\u0679\u0631<\/h4>\n<p>\u0641\u0631\u0636 \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 \u0622\u067e \u0688\u06cc\u0646\u06cc\u0626\u0644 \u06a9\u06cc \u06a9\u06c1\u0627\u0646\u06cc \u0645\u06cc\u06ba \u0634\u0627\u0645\u0644 \u06c1\u0648 \u0631\u06c1\u06d2 \u06c1\u06cc\u06ba\u060c \u0627\u067e\u0646\u06d2 \u06a9\u0644\u0633\u0679\u0631 \u067e\u0631 \u0648\u06c1\u06cc \u062f\u0648 \u06a9\u0645\u0627\u0646\u0688 \u0686\u0644\u0627\u0626\u06cc\u06ba: AWS 50\/GKE 50 \u067e\u0631 \u0627\u0633 \u0644\u06cc\u0628 \u0646\u06d2 \u062f\u06a9\u06be\u0627\u06cc\u0627:<\/p>\n<pre><code class=\"language-plaintext\">HPA:       cpu 4%\/70%, MINPODS 1, MAXPODS 3, REPLICAS 1\npods:      1 Running\nlogs:      no error lines in the last 100\nRDS:       max_connections=81\n           two sessions on database clearpay\nstatus:    not Degraded\n<\/code><\/pre>\n<p>\u06cc\u06c1\u0627\u06ba \u0633\u0628 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u062e\u0631\u0627\u0628 \u0635\u0648\u0631\u062a \u062d\u0627\u0644 40 \u062a\u06a9 \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 81 \u0633\u06d2 \u06a9\u0645\u06d4 \u0628\u06be\u0627\u06af\u06cc\u06ba \u0646\u06c1\u06cc\u06ba\u06d4 <code>rollback.sh<\/code> \u062c\u0628 \u062a\u06a9 \u06a9\u06c1 \u0622\u067e \u06a9\u06d2 \u0646\u0645\u0628\u0631 \u0628\u0627\u0628 6 \u06a9\u06cc \u062d\u062f \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u062e\u0631\u0627\u0628 \u0646\u06c1\u06cc\u06ba \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u0627\u06af\u0631 HPA \u0627\u0628 \u0628\u06be\u06cc 1 \u06c1\u06d2 \u0627\u0648\u0631 \u0646\u0648\u0634\u062a\u06c1 \u062c\u0627\u062a \u062e\u0627\u0645\u0648\u0634 \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u0627\u0633 \u06a9\u0627 \u062f\u06be\u06cc\u0627\u0646 \u0631\u06a9\u06be\u06cc\u06ba\u06d4 \u06cc\u06c1\u06cc \u062b\u0628\u0648\u062a \u06c1\u06d2\u06d4 \u0627\u0633\u06d2 \u062c\u0627\u0631\u06cc \u0631\u06a9\u06be\u06cc\u06ba\u06d4<\/p>\n<h4 id=\"heading-how-the-failure-builds\">\u0646\u0627\u06a9\u0627\u0645\u06cc \u06a9\u06cc\u0633\u06d2 \u0628\u0646\u062a\u06cc \u06c1\u06d2\u06d4<\/h4>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/10\/1792188596_885_\u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0648\u06ba-\u06a9\u0648-AWS-\u0633\u06d2-GKE-\u0645\u06cc\u06ba-\u06a9\u06cc\u0633\u06d2-\u0645\u0646\u062a\u0642\u0644-\u06a9\u06cc\u0627-\u062c\u0627\u0626\u06d2\u06d4.png\" alt=\"\u062a\u0635\u0648\u06cc\u0631\u06cc \u062e\u0627\u06a9\u06c1 \u06cc\u06c1 \u0628\u062a\u0627 \u0631\u06c1\u0627 \u06c1\u06d2 \u06a9\u06c1 \u063a\u0644\u0637\u06cc \u06a9\u06cc\u0633\u06d2 \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u06d4\" style=\"display: block;\" width=\"600\" height=\"400\" loading=\"lazy\" title=\"\"><\/p>\n<p>AWS \u0627\u06a9\u06cc\u0644\u06d2 \u06cc\u06c1 \u06a9\u0628\u06be\u06cc \u062d\u0627\u0635\u0644 \u0646\u06c1\u06cc\u06ba \u06a9\u0631 \u0633\u06a9\u062a\u0627\u06d4 \u0627\u06a9\u06cc\u0644\u0627 GKE \u06a9\u0628\u06be\u06cc \u0628\u06be\u06cc \u0627\u0633 \u0645\u0633\u0626\u0644\u06d2 \u06a9\u0648 \u062d\u0644 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u06d2 \u06af\u0627\u06d4 \u06cc\u06c1 \u0635\u0631\u0641 \u0627\u0633 \u0648\u0642\u062a \u06c1\u0648\u062a\u0627 \u06c1\u06d2 \u062c\u0628 \u062f\u0648\u0646\u0648\u06ba \u067e\u0648\u0631\u06d2 \u0628\u0648\u062c\u06be \u0633\u06d2 \u0686\u0644 \u0631\u06c1\u06d2 \u06c1\u0648\u06ba\u060c \u0627\u0648\u0631 \u06c1\u062c\u0631\u062a \u06a9\u0627 \u0645\u0646\u0635\u0648\u0628\u06c1 \u062c\u0627\u0646 \u0628\u0648\u062c\u06be \u06a9\u0631 \u062f\u0648\u0646\u0648\u06ba \u06a9\u06d2 \u0644\u06cc\u06d2 \u0686\u0644\u062a\u0627 \u0631\u06c1\u06d2\u06d4<\/p>\n<p>\u0688\u06cc\u0646\u06cc\u0626\u0644 \u06a9\u0648 \u0628\u062a\u0627\u0626\u06cc\u06ba: \"\u0631\u06cc\u067e\u0644\u06cc\u06a9\u0633 \u06a9\u06cc \u062a\u0639\u062f\u0627\u062f \u0645\u06cc\u06ba \u0627\u0636\u0627\u0641\u06c1 \u06c1\u0648\u0627 \u06c1\u06d2\u06d4 \u067e\u0648\u0644 \u06a9\u06cc\u0644\u06a9\u0648\u0644\u06cc\u0634\u0646 \u06c1\u0645\u06cc\u06ba \u06c1\u0645\u0627\u0631\u06d2 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u06a9\u06cc \u062d\u062f\u0648\u062f \u06a9\u06d2 \u0642\u0631\u06cc\u0628 \u0644\u06d2 \u062c\u0627 \u0631\u06c1\u06d2 \u06c1\u06cc\u06ba\u06d4 \u06cc\u06c1 \u0635\u0644\u0627\u062d\u06cc\u062a \u06c1\u06d2\u060c \u06a9\u0648\u0628\u0631\u0646\u06cc\u0679\u0633 \u0646\u06c1\u06cc\u06ba\u06d4\"<\/p>\n<h4 id=\"heading-step-3-roll-back\">\u0645\u0631\u062d\u0644\u06c1 3\u06d4 \u0631\u0648\u0644 \u0628\u06cc\u06a9<\/h4>\n<p>\u0645\u0627\u06cc\u0627: \"\u0622\u067e \u06a9\u06cc\u0627 \u062a\u062c\u0648\u06cc\u0632 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u061f\"<\/p>\n<p>\u0646\u0645\u0628\u0631\u0648\u06ba \u06a9\u0627 \u0628\u0627\u0628 6 \u0645\u06cc\u06ba \u0644\u06a9\u06be\u06cc \u06af\u0626\u06cc \u062d\u062f\u0648\u062f \u0633\u06d2 \u0645\u0648\u0627\u0632\u0646\u06c1 \u06a9\u0631\u06cc\u06ba\u06d4 \u0627\u0628\u06be\u06cc \u0646\u0626\u06cc \u0627\u0646\u062a\u06c1\u0627 \u0646\u06c1 \u0628\u0646\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<p>\"\u06a9\u0633\u0679\u0645\u0631 \u06a9\u0648 \u0648\u0627\u067e\u0633 AWS \u067e\u0631 \u0628\u06be\u06cc\u062c\u06cc\u06ba\u06d4 \u063a\u0644\u0637\u06cc \u062d\u062f \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u06c1\u06d2\u060c \u06af\u0627\u06c1\u06a9 \u0645\u062a\u0627\u062b\u0631 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u0631\u0648\u0644 \u0628\u06cc\u06a9 \u06a9\u06cc \u062c\u0627\u0646\u0686 \u06a9\u06cc \u062c\u0627\u062a\u06cc \u06c1\u06d2\u06d4\"<\/p>\n<p>\u0645\u0627\u06cc\u0627: \"\u0679\u06be\u06cc\u06a9 \u06c1\u06d2\u060c \u06a9\u0648\u0634\u0634 \u06a9\u0631\u0648\u06d4\"<\/p>\n<pre><code class=\"language-bash\">.\/scripts\/rollback.sh <aws-instance-ip> ~\/.ssh\/clearpay-deployer\n<\/aws-instance-ip><\/code><\/pre>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/10\/1792188596_557_\u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0648\u06ba-\u06a9\u0648-AWS-\u0633\u06d2-GKE-\u0645\u06cc\u06ba-\u06a9\u06cc\u0633\u06d2-\u0645\u0646\u062a\u0642\u0644-\u06a9\u06cc\u0627-\u062c\u0627\u0626\u06d2\u06d4.png\" alt=\"\u0641\u0648\u0631\u06cc \u0631\u0648\u0644 \u0628\u06cc\u06a9 \u062f\u06a9\u06be\u0627\u0646\u06d2 \u0648\u0627\u0644\u06cc \u062a\u0635\u0648\u06cc\u0631\" style=\"display: block;\" width=\"600\" height=\"400\" loading=\"lazy\" title=\"\"><\/p>\n<p>\u0645\u0646\u062f\u0631\u062c\u06c1 \u0628\u0627\u0644\u0627 \u062e\u0627\u06a9\u06c1 \u062f\u0648 \u06a9\u0627\u0645\u0648\u06ba \u06a9\u0648 \u062f\u06a9\u06be\u0627\u062a\u0627 \u06c1\u06d2 \u062c\u0633 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06c1 \u0627\u0646\u062c\u0627\u0645 \u062f\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2: <code>rollback.sh<\/code>. \u0633\u0628 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 <code>shift-traffic.sh<\/code> <code>100 0<\/code> \u062a\u0645\u0627\u0645 \u06a9\u0633\u0679\u0645\u0631 \u0679\u0631\u06cc\u0641\u06a9 \u06a9\u0648 \u0648\u0627\u067e\u0633 AWS \u067e\u0631 \u0628\u06be\u06cc\u062c\u06cc\u06ba \u0627\u0648\u0631 GKE \u0633\u06d2 \u0679\u0631\u06cc\u0641\u06a9 \u06c1\u0679\u0627 \u062f\u06cc\u06ba\u06d4 \u062f\u0648\u0633\u0631\u0627\u060c \u0627\u0633\u06a9\u0631\u067e\u0679 AWS EC2 \u0633\u0631\u0648\u0631 \u0633\u06d2 SSH \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u062c\u0691\u062a\u0627 \u06c1\u06d2\u060c <code>ROLLBACK_ACTIVE=true<\/code> API \u0645\u0627\u062d\u0648\u0644 \u0641\u0627\u0626\u0644 \u06a9\u0648 \u0645\u062d\u0641\u0648\u0638 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 API \u0633\u0631\u0648\u0633 \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0634\u0631\u0648\u0639 \u06a9\u0631\u06cc\u06ba\u06d4 API \u067e\u06be\u0631 AWS \u06a9\u0648 \u0641\u0639\u0627\u0644 \u067e\u0644\u06cc\u0679 \u0641\u0627\u0631\u0645 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0631\u067e\u0648\u0631\u0679 \u06a9\u0631\u06d2 \u06af\u0627 \u0627\u0648\u0631 ClearPay UI \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u0645\u0646\u0641\u0631\u062f \"\u0631\u0648\u0644 \u0628\u06cc\u06a9 \u0679\u0648 AWS\" \u0628\u06cc\u0646\u0631 \u06a9\u0648 \u0641\u0639\u0627\u0644 \u06a9\u0631\u06d2 \u06af\u0627\u06d4 \u06cc\u06c1 \u0627\u0642\u062f\u0627\u0645\u0627\u062a \u0679\u0631\u06cc\u0641\u06a9 \u06a9\u0648 \u0628\u062d\u0627\u0644 \u06a9\u0631\u06cc\u06ba \u06af\u06d2 \u0627\u0648\u0631 \u0622\u067e\u0631\u06cc\u0679\u0631\u0632 \u06a9\u0648 \u0631\u0648\u0644 \u0628\u06cc\u06a9\u0633 \u062f\u06cc\u06a9\u06be\u0646\u06d2 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u062f\u06cc\u06ba \u06af\u06d2\u06d4<\/p>\n<p>\u0633\u06cc\u0679 <code>terraform.tfvars<\/code> \u06a9\u0648 <code>08-edge<\/code> \u06cc\u06c1 100 \u0627\u0648\u0631 0 \u067e\u0631 \u0648\u0627\u067e\u0633 \u0622\u062c\u0627\u062a\u0627 \u06c1\u06d2\u060c \u0644\u06c1\u0630\u0627 \u0627\u0633\u06d2 \u0628\u0639\u062f \u0645\u06cc\u06ba \u0644\u0627\u06af\u0648 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u0631\u0648\u0644 \u0628\u06cc\u06a9 \u0645\u0646\u0633\u0648\u062e \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u06af\u0627\u06d4<\/p>\n<h4 id=\"heading-step-4-confirm-the-rollback-worked\">\u0645\u0631\u062d\u0644\u06c1 4\u06d4 \u062a\u0635\u062f\u06cc\u0642 \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 \u0631\u0648\u0644 \u0628\u06cc\u06a9 \u0646\u06d2 \u06a9\u0627\u0645 \u06a9\u06cc\u0627\u06d4<\/h4>\n<pre><code class=\"language-bash\">curl -k https:\/\/api.clearpay.test\/api\/info\n<\/code><\/pre>\n<p><code>platform<\/code> \u067e\u0691\u06be\u06cc\u06ba <code>aws<\/code> \u0627\u0648\u0631 <code>rollback_active<\/code> \u067e\u0691\u06be\u06cc\u06ba <code>true<\/code>. UI \u0631\u06cc\u0641\u0631\u06cc\u0634: \u0627\u06cc\u06a9 \u0633\u0631\u062e \"\u0631\u0648\u0644 \u0628\u06cc\u06a9 \u0679\u0648 AWS\" \u0628\u06cc\u0646\u0631 \u0638\u0627\u06c1\u0631 \u06c1\u0648\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u0633\u0679\u06cc\u0679\u0633 \u0628\u0627\u0631 <code>All systems operational<\/code> \u0627\u06cc\u06a9 \u0628\u0627\u0631 \u062c\u0628 \u0635\u062d\u062a \u06a9\u06cc \u06a9\u0627\u0641\u06cc \u062c\u0627\u0646\u0686 \u067e\u0691\u062a\u0627\u0644 \u06c1\u0648 \u062c\u0627\u0626\u06d2\u06d4<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/10\/1792188597_386_\u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0648\u06ba-\u06a9\u0648-AWS-\u0633\u06d2-GKE-\u0645\u06cc\u06ba-\u06a9\u06cc\u0633\u06d2-\u0645\u0646\u062a\u0642\u0644-\u06a9\u06cc\u0627-\u062c\u0627\u0626\u06d2\u06d4.png\" alt=\"ClearPay \u06a9\u0627 \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 \u0627\u06cc\u06a9 \u0633\u0631\u062e \u0628\u06cc\u0646\u0631 \u062f\u06a9\u06be\u0627 \u0631\u06c1\u0627 \u06c1\u06d2 \u062c\u0633 \u0633\u06d2 \u0638\u0627\u06c1\u0631 \u06c1\u0648\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 AWS \u067e\u0631 \u0679\u0631\u06cc\u0641\u06a9 \u0628\u062d\u0627\u0644 \u06a9\u0631 \u062f\u06cc \u06af\u0626\u06cc \u06c1\u06d2 \u062c\u0628 \u06a9\u06c1 GKE \u06a9\u06d2 \u0645\u0633\u0626\u0644\u06d2 \u06a9\u06cc \u062a\u0641\u062a\u06cc\u0634 \u06c1\u0648 \u0631\u06c1\u06cc \u06c1\u06d2\u06d4 \u0627\u0633\u0679\u06cc\u0679\u0633 \u0628\u0627\u0631 \u0645\u06cc\u06ba \" style=\"display: block;\" width=\"600\" height=\"400\" loading=\"lazy\" title=\"\"><\/p>\n<p>\u067e\u06be\u0631 \u0627\u0646 \u0645\u06cc\u06ba \u0633\u06d2 \u06c1\u0631 \u0627\u06cc\u06a9 \u06a9\u0648 \u062b\u0628\u0648\u062a \u06a9\u06d2 \u0633\u0627\u062a\u06be \u062a\u0635\u062f\u06cc\u0642 \u06a9\u0631\u06cc\u06ba\u060c \u0645\u0641\u0631\u0648\u0636\u0648\u06ba \u0633\u06d2 \u0646\u06c1\u06cc\u06ba\u06d4<\/p>\n<ul>\n<li>\n<p>\u062f\u0631\u062e\u0648\u0627\u0633\u062a\u06cc\u06ba \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648\u0646\u0627 \u0628\u0646\u062f \u06c1\u0648\u06af\u0626\u06cc\u06ba (synthetic-health.sh \u0631\u06cc\u0679\u0631\u0646 200)\u06d4<\/p>\n<\/li>\n<li>\n<p>\u062a\u0627\u062e\u06cc\u0631 AWS \u0628\u0627\u0628 6 \u06a9\u06cc \u0633\u0637\u062d \u067e\u0631 \u0648\u0627\u067e\u0633 \u0622\u06af\u0626\u06cc \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u0645\u0633\u062a\u0642\u0644 \u06c1\u06d2\u06d4 \u0631\u0648\u0644 \u0628\u06cc\u06a9 \u0633\u06d2 \u0679\u06be\u06cc\u06a9 \u067e\u06c1\u0644\u06d2 \u06a9\u06cc \u0645\u0646\u062a\u0642\u0644\u06cc \u0628\u0627\u0644\u06a9\u0644 1 \u0688\u06cc\u0628\u0679 \u062f\u06a9\u06be\u0627\u0626\u06d2 \u06af\u06cc\u060c 0 \u06cc\u0627 2 \u0646\u06c1\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<\/ul>\n<p>\u0639\u0645\u0627\u0631\u06c1: \"\u0645\u062c\u06be\u06d2 \u067e\u0631\u0648\u0627\u06c1 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2 \u06a9\u06c1 \u0679\u0631\u06cc\u0641\u06a9 AWS \u0633\u06d2 \u0648\u0627\u067e\u0633 \u0622\u062c\u0627\u0626\u06d2\u06d4 \u06a9\u06cc\u0627 \u0679\u0631\u0627\u0646\u0633\u0641\u0631 \u0627\u06cc\u06a9 \u0628\u0627\u0631 \u06c1\u0648\u0627\u061f\"<\/p>\n<p>\u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u0644\u06cc\u0646 \u062f\u06cc\u0646 \u06a9\u06cc \u062a\u0627\u0631\u06cc\u062e \u06a9\u06d2 \u0633\u0627\u062a\u06be \u062c\u0648\u0627\u0628 \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u060c \u0646\u06c1 \u06a9\u06c1 \u0644\u0648\u0688 \u0628\u06cc\u0644\u0646\u0633 \u06a9\u06d2 \u0633\u0627\u062a\u06be\u06d4 \u0628\u0627\u0628 3 \u0645\u06cc\u06ba \u0622\u0626\u06cc\u0688\u06cc\u0645\u067e\u0648\u0679\u0646\u0679 \u06a9\u0644\u06cc\u062f \u0648\u06c1 \u06c1\u06d2 \u062c\u0648 \u06cc\u06c1\u0627\u06ba \u062f\u0648\u0628\u0627\u0631\u06c1 \u06a9\u0648\u0634\u0634 \u06a9\u06cc \u06af\u0626\u06cc \u0645\u0646\u062a\u0642\u0644\u06cc \u06a9\u0648 \u0645\u062d\u0641\u0648\u0638 \u0628\u0646\u0627\u062a\u06cc \u06c1\u06d2 \u06cc\u06c1\u0627\u06ba \u062a\u06a9 \u06a9\u06c1 \u0627\u06af\u0631 \u067e\u06c1\u0644\u06cc \u06a9\u0648\u0634\u0634 GKE \u0645\u06cc\u06ba \u06af\u0626\u06cc \u0627\u0648\u0631 \u062f\u0648\u0628\u0627\u0631\u06c1 \u06a9\u0648\u0634\u0634 AWS \u0645\u06cc\u06ba \u06af\u0626\u06cc\u06d4<\/p>\n<p>\u0648\u0627\u0642\u0639\u06d2 \u06a9\u06d2 \u062c\u0627\u0626\u0632\u06d2 \u06a9\u06d2 \u0645\u0642\u0627\u0635\u062f \u06a9\u06d2 \u0644\u06cc\u06d2\u060c \"\u0627\u0637\u0644\u0627\u0639\" \u0633\u06d2 \u0644\u06d2 \u06a9\u0631 \"AWS \u0633\u06d2 \u0679\u0631\u06cc\u0641\u06a9 \u0648\u0627\u067e\u0633\" \u062a\u06a9 \u0645\u0646\u0679\u0648\u06ba \u06a9\u06cc \u062a\u0639\u062f\u0627\u062f \u0631\u06cc\u06a9\u0627\u0631\u0688 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<h4 id=\"heading-step-5-fix-the-cause\">\u0645\u0631\u062d\u0644\u06c1 5\u06d4 \u0648\u062c\u06c1 \u0639\u0644\u0627\u062c<\/h4>\n<p>\u0688\u06cc\u0646\u06cc\u0626\u0644: \"\u0627\u0646 \u0646\u0645\u0628\u0631\u0648\u06ba \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u06c1\u0648\u0646\u06d2 \u0633\u06d2 \u0631\u0648\u06a9\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0622\u067e \u06a9\u06cc\u0627 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u06cc\u06ba \u06af\u06d2\u061f\"<\/p>\n<p>\u0686\u0627\u0631 \u062d\u0642\u06cc\u0642\u06cc \u0627\u062e\u062a\u06cc\u0627\u0631\u0627\u062a \u06c1\u06cc\u06ba\u060c \u0627\u0648\u0631 \u06c1\u0631 \u0627\u06cc\u06a9 \u06a9\u06cc \u0642\u06cc\u0645\u062a \u06c1\u06d2\u06d4<\/p>\n<ul>\n<li>\n<p><strong>\u06a9\u0645<\/strong> <code>DB_POOL_SIZE<\/code> <strong>\u062f\u0631\u062c \u0630\u06cc\u0644 \u0645\u0639\u06cc\u0627\u0631:<\/strong> \u0641\u06cc \u0639\u0645\u0644 \u06a9\u0645 \u06a9\u0646\u06a9\u0634\u0646\u06d4 \u06cc\u06c1 \u0633\u0633\u062a\u0627 \u0627\u0648\u0631 \u062a\u06cc\u0632 \u06c1\u06d2\u06d4 \u06c1\u0631 \u067e\u0648\u0688 \u0628\u06cc\u06a9 \u0648\u0642\u062a \u06a9\u0645 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u0633\u0648\u0627\u0644\u0627\u062a \u06a9\u06cc \u062e\u062f\u0645\u062a \u06a9\u0631\u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u0627\u067e\u0646\u0627 HPA \u06a9\u0645 \u06a9\u0631\u06cc\u06ba\u06d4<\/strong> <code>maxReplicas<\/code> \u06a9\u0648 <code>k8s\/overlays\/production\/patch-hpa.yaml<\/code>. \u0631\u0642\u0645 \u06a9\u0648 \u0645\u062d\u062f\u0648\u062f \u06a9\u0631\u06cc\u06ba\u06d4 GKE \u062d\u0642\u06cc\u0642\u06cc \u062f\u0646\u06cc\u0627 \u06a9\u06d2 \u0679\u0631\u06cc\u0641\u06a9 \u0627\u0633\u067e\u0627\u0626\u06a9\u0633 \u06a9\u06d2 \u062f\u0648\u0631\u0627\u0646 \u0645\u0632\u06cc\u062f \u067e\u06cc\u0645\u0627\u0646\u06c1 \u0646\u06c1\u06cc\u06ba \u0644\u06af\u0627 \u0633\u06a9\u062a\u0627\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u0622\u0631 \u0688\u06cc \u0627\u06cc\u0633 \u0627\u067e \u0644\u0648\u0688 \u06a9\u0631\u06cc\u06ba\u06d4<\/strong> <code>max_connections<\/code> \u062d\u0633\u0628 \u0636\u0631\u0648\u0631\u062a \u067e\u06cc\u0631\u0627\u0645\u06cc\u0679\u0631 \u06af\u0631\u0648\u067e\u0633 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 \u06c1\u0631 \u06a9\u0646\u06a9\u0634\u0646 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u0645\u06cc\u0645\u0648\u0631\u06cc \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u0633 \u06a9\u06cc \u0627\u06cc\u06a9 \u0686\u06be\u0648\u0679\u06cc \u0633\u06cc \u0645\u062b\u0627\u0644 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2: <code>db.t3.micro<\/code> \u0627\u0633\u06d2 \u0628\u06c1\u062a \u0632\u06cc\u0627\u062f\u06c1 \u0633\u06cc\u0679 \u06a9\u0631\u0646\u0627 \u0627\u0633\u06d2 \u0634\u0631\u0648\u0639 \u06c1\u0648\u0646\u06d2 \u0633\u06d2 \u0631\u0648\u06a9 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4 \u0633\u0628 \u0633\u06d2 \u067e\u06c1\u0644\u06d2\u060c \u0645\u062b\u0627\u0644 \u06a9\u06d2 \u0633\u0627\u0626\u0632 \u06a9\u06d2 \u0644\u06cc\u06d2 AWS \u0631\u06c1\u0646\u0645\u0627 \u062e\u0637\u0648\u0637 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u067e\u0648\u0633\u0679\u06af\u0631\u06cc\u0633 \u06a9\u06d2 \u0633\u0627\u0645\u0646\u06d2 \u06a9\u0646\u06a9\u0634\u0646 \u067e\u0648\u0644\u0631 \u0631\u06a9\u06be\u06cc\u06ba<\/strong>\u062c\u06cc\u0633\u06d2 PgBouncer \u06cc\u0627 RDS Proxy\u06d4 \u0628\u06c1\u062a \u0633\u06d2 \u0627\u06cc\u067e \u06a9\u0646\u06a9\u0634\u0646 \u06a9\u0626\u06cc \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u06a9\u0646\u06a9\u0634\u0646 \u06a9\u0627 \u0627\u0634\u062a\u0631\u0627\u06a9 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u06cc\u06c1 \u0628\u06c1\u062a\u0631\u06cc\u0646 \u0637\u0648\u06cc\u0644 \u0645\u062f\u062a\u06cc \u062d\u0644 \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u0633\u06d2 \u062a\u0631\u062a\u06cc\u0628 \u062f\u06cc\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0633\u0628 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u0645\u062d\u0646\u062a \u062f\u0631\u06a9\u0627\u0631 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<\/ul>\n<p>\u06cc\u06c1 \u06a9\u062a\u0627\u0628 \u0622\u067e \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u0633\u06cc \u0627\u06cc\u06a9 \u06a9\u0627 \u0627\u0646\u062a\u062e\u0627\u0628 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4 \u0644\u06a9\u06be\u06cc\u06ba \u06a9\u06c1 \u0622\u067e \u0646\u06d2 \u06a9\u06cc\u0627 \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u06cc\u0627 \u0627\u0648\u0631 \u06a9\u06cc\u0627 \u0686\u06be\u0648\u0691 \u062f\u06cc\u0627\u06d4<\/p>\n<p>\u0627\u0635\u0644 \u062a\u0628\u062f\u06cc\u0644\u06cc\u0648\u06ba \u06a9\u0648 \u06a9\u0645 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2\u060c \u067e\u0648\u0644 \u06a9\u0627 \u0633\u0627\u0626\u0632 \u06a9\u0645 \u06a9\u0631\u06cc\u06ba\u06d4 6 \u0641\u06cc \u067e\u0648\u0688 (GKE \u067e\u0631 8 \u00d7 6 = 48\u060c AWS \u067e\u0631 10) 58 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u067e\u0648\u0631\u06cc \u0686\u06be\u062a \u067e\u0631 \u0628\u06be\u06cc 87 \u0633\u06d2 \u06a9\u0645 \u0641\u0679 \u0628\u06cc\u0679\u06be\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u06c1\u0646\u06af\u0627\u0645\u06cc \u062d\u0627\u0644\u0627\u062a \u0645\u06cc\u06ba\u060c \u0627\u0633\u06d2 \u062d\u0642\u06cc\u0642\u06cc \u0648\u0642\u062a \u0645\u06cc\u06ba \u062a\u0631\u062a\u06cc\u0628 \u062f\u06cc\u0627 \u062c\u0627 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-bash\">kubectl -n production set env deployment\/clearpay-api DB_POOL_SIZE=6\n<\/code><\/pre>\n<p>\u0644\u0627\u0626\u06cc\u0648 \u062a\u0628\u062f\u06cc\u0644\u06cc\u0627\u06ba \u06a9\u0648\u0626\u06cc \u0631\u06cc\u06a9\u0627\u0631\u0688 \u0646\u06c1\u06cc\u06ba \u0686\u06be\u0648\u0691\u062a\u06cc \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u0627\u06af\u0644\u06cc \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u0627\u0646\u06c1\u06cc\u06ba \u0635\u0627\u0641 \u06a9\u0631 \u062f\u06cc\u062a\u06cc \u06c1\u06d2\u06d4 \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u062d\u0642\u06cc\u0642\u06cc \u062a\u0628\u062f\u06cc\u0644\u06cc\u0627\u06ba \u06a9\u0631\u0646\u0627: \u062a\u0631\u062a\u06cc\u0628\u0627\u062a <code>DB_POOL_SIZE<\/code> \u06a9\u0648 <code>k8s\/base\/deployment.yaml<\/code>\u06a9\u0645\u0679 \u0627\u0648\u0631 \u067e\u0634 <code>main<\/code>. \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646\u06cc\u06ba \u0627\u0633\u0679\u06cc\u062c\u0646\u06af \u06a9\u06cc \u062a\u0639\u0645\u06cc\u0631\u060c \u0628\u0627\u0632\u06cc\u0627\u0641\u062a \u0627\u0648\u0631 \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u06a9\u0631\u062a\u06cc \u06c1\u06cc\u06ba\u06d4 \u0627\u067e\u0646\u06d2 HPA \u06a9\u0648 \u0632\u06cc\u0627\u062f\u06c1 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u062a\u06a9 \u067e\u06c1\u0646\u0686\u0627\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u0627\u0641\u06cc \u0637\u0627\u0642\u062a\u0648\u0631 \u0644\u0648\u0688 \u0679\u06cc\u0633\u0679 \u06a9\u06cc \u062a\u06cc\u0627\u0631\u06cc \u06a9\u06d2 \u0644\u06cc\u06d2 \u0628\u0627\u0628 18 \u06a9\u06d2 \u0627\u0642\u062f\u0627\u0645\u0627\u062a \u06a9\u0648 \u0632\u06cc\u0627\u062f\u06c1 \u06c1\u0645 \u0622\u06c1\u0646\u06af\u06cc \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 \u0627\u06cc\u06a9 \u0641\u06a9\u0633 \u062c\u0648 \u0635\u0631\u0641 \u06c1\u0644\u06a9\u06d2 \u0628\u0648\u062c\u06be \u06a9\u06d2 \u0646\u06cc\u0686\u06d2 \u0633\u06d2 \u06af\u0632\u0631\u062a\u0627 \u06c1\u06d2 \u06a9\u0686\u06be \u0628\u06be\u06cc \u062b\u0627\u0628\u062a \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u0633 \u06a9\u06d2 \u0628\u0639\u062f \u06cc\u06c1 \u067e\u0631\u0648\u0645\u0648\u0634\u0646 \u06af\u06cc\u0679 \u0686\u0644\u0627\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0628\u0627\u0628 19 \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u06a9\u06d2 \u06a9\u0627\u0645 \u06a9\u0648 \u0641\u0631\u0648\u063a \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h4 id=\"heading-step-6-resume\">\u0645\u0631\u062d\u0644\u06c1 6\u06d4 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0634\u0631\u0648\u0639 \u06a9\u0631\u06cc\u06ba\u06d4<\/h4>\n<p>\u0645\u0627\u06cc\u0627: \"\u06a9\u06cc\u0627 \u0622\u067e 10 \u0641\u06cc\u0635\u062f \u06a9\u06d2 \u0644\u06cc\u06d2 \u062a\u06cc\u0627\u0631 \u06c1\u06cc\u06ba\u061f\"<\/p>\n<p>\"\u06c1\u0627\u06ba\u06d4 API \u0679\u06be\u06cc\u06a9 \u06c1\u06d2\u060c \u0645\u0635\u0646\u0648\u0639\u06cc \u062c\u0627\u0646\u0686\u06cc\u06ba \u0635\u0627\u0641 \u06c1\u06cc\u06ba\u060c \u063a\u0644\u0637\u06cc\u0627\u06ba \u062d\u062f \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u06c1\u06cc\u06ba\u060c \u067e\u0648\u0644 \u0631\u06cc\u0627\u0636\u06cc \u062d\u062f \u0645\u06cc\u06ba \u06c1\u06d2\u060c \u0631\u0648\u0644 \u0628\u06cc\u06a9\u0633 \u06a9\u06cc \u062c\u0627\u0646\u0686 \u06a9\u06cc \u062c\u0627\u062a\u06cc \u06c1\u06d2\u06d4\"<\/p>\n<p>\u0688\u06cc\u0646\u06cc\u0644: \"\u0645\u06cc\u06ba \u0645\u062a\u0641\u0642 \u06c1\u0648\u06ba\u06d4\"<\/p>\n<p>\u0645\u0627\u06cc\u0627: \"\u06cc\u06c1 \u0622\u067e \u06a9\u0627 \u0641\u0648\u0646 \u06c1\u06d2\u06d4\"<\/p>\n<p>\u067e\u06c1\u0644\u06d2 \u0631\u0648\u0644 \u0628\u06cc\u06a9 \u067e\u0631\u0686\u0645 \u06a9\u0648 \u0635\u0627\u0641 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">.\/scripts\/clear-rollback-flag.sh <aws-instance-ip> ~\/.ssh\/clearpay-deployer\n<\/aws-instance-ip><\/code><\/pre>\n<p>UI \u06a9\u0648 \u0631\u06cc\u0641\u0631\u06cc\u0634 \u06a9\u0631\u06cc\u06ba\u06d4 \u0631\u0648\u0644 \u0628\u06cc\u06a9 \u0628\u06cc\u0646\u0631 \u063a\u0627\u0626\u0628 \u06c1\u0648 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4 \u0627\u06af\u0631 \u0622\u067e \u062c\u06be\u0646\u0688\u0627 \u0686\u06be\u0648\u0691 \u062f\u06cc\u062a\u06d2 \u06c1\u06cc\u06ba \u062a\u0648\u060c \u0628\u06cc\u0646\u0631 \u0635\u062d\u062a \u06cc\u0627\u0628 \u06c1\u0648\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f \u0628\u06be\u06cc \u0646\u0638\u0631 \u0622\u062a\u0627 \u0631\u06c1\u06d2 \u06af\u0627\u060c \u0644\u0648\u06af\u0648\u06ba \u06a9\u0648 \u0627\u0633\u06d2 \u0646\u0638\u0631 \u0627\u0646\u062f\u0627\u0632 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u062a\u0631\u0628\u06cc\u062a \u062f\u06cc\u06ba \u06af\u06d2\u06d4<\/p>\n<p>\u067e\u06be\u0631 \u0634\u0631\u0648\u0639 \u0633\u06d2 \u0627\u0628\u0648\u0627\u0628 21 \u0627\u0648\u0631 22 \u06a9\u0648 \u062f\u06c1\u0631\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">.\/scripts\/shift-traffic.sh 99 1\n# observe, compare, record, decide\n\n.\/scripts\/shift-traffic.sh 90 10\n# observe, compare, record, decide\n\n.\/scripts\/shift-traffic.sh 75 25\n.\/scripts\/shift-traffic.sh 50 50\n.\/scripts\/shift-traffic.sh 25 75\n.\/scripts\/shift-traffic.sh 10 90\n.\/scripts\/shift-traffic.sh 0 100\n<\/code><\/pre>\n<p>\u0627\u0633 \u0645\u0631\u062d\u0644\u06d2 \u067e\u0631 \u062c\u06c1\u0627\u06ba \u0622\u062e\u0631\u06cc \u0648\u0627\u0642\u0639\u06c1 \u067e\u06cc\u0634 \u0622\u06cc\u0627 \u062a\u06be\u0627 \u0648\u06c1\u0627\u06ba HPA \u0627\u0648\u0631 \u0627\u06cc\u0631\u0631 \u0644\u0627\u0626\u0646\u0632 \u06a9\u0627 \u0628\u063a\u0648\u0631 \u0645\u0634\u0627\u06c1\u062f\u06c1 \u06a9\u0631\u06cc\u06ba\u06d4 \u0648\u06c1 \u0645\u0631\u062d\u0644\u06c1 \u06c1\u06d2 \u062c\u06c1\u0627\u06ba \u0627\u0635\u0644\u0627\u062d \u062e\u0648\u062f \u0628\u0648\u0644\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u062e\u0631\u0627\u062c\u0627\u062a \u06a9\u06d2 \u0644\u06cc\u062c\u0631 \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u0644\u0627\u0626\u0646 \u0634\u0627\u0645\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 \u062f\u0648\u0633\u0631\u06cc \u0628\u0627\u0631 \u0634\u0641\u0679 \u067e\u0627\u0633 \u06a9\u0631\u0646\u06d2 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u062f\u0648\u0646\u0648\u06ba \u06a9\u0644\u0627\u0624\u0688 \u0628\u0644\u0632 \u067e\u0631 \u0632\u06cc\u0627\u062f\u06c1 \u0648\u0642\u062a\u06d4 \u0644\u0627\u06af\u062a \u06a9\u0648 \u0627\u06cc\u06a9 \"\u0645\u0627\u0626\u06cc\u06af\u0631\u06cc\u0634\u0646 \u0644\u0627\u06af\u062a\" \u0646\u0645\u0628\u0631 \u0645\u06cc\u06ba \u0688\u0627\u0644\u0646\u06d2 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2\u060c \u0627\u0646\u06c1\u06cc\u06ba \u0645\u0631\u0626\u06cc \u0631\u06a9\u06be\u06cc\u06ba\u06d4<\/p>\n<h4 id=\"heading-the-skills-behind-this-chapter\">\u0627\u0633 \u0628\u0627\u0628 \u0645\u06cc\u06ba \u06c1\u0646\u0631<\/h4>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/10\/1792188597_912_\u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0648\u06ba-\u06a9\u0648-AWS-\u0633\u06d2-GKE-\u0645\u06cc\u06ba-\u06a9\u06cc\u0633\u06d2-\u0645\u0646\u062a\u0642\u0644-\u06a9\u06cc\u0627-\u062c\u0627\u0626\u06d2\u06d4.png\" alt=\"\u0648\u0627\u0642\u0639\u06d2 \u06a9\u06d2 \u0631\u062f\u0639\u0645\u0644 \u06a9\u0627 \u0628\u06c1\u0627\u0624 \u062a\u0627\u062e\u06cc\u0631\u060c \u0627\u0633\u0679\u06cc\u0679\u0633 \u0628\u0627\u0631\u0632\u060c \u0627\u0648\u0631 \u0627\u06cc\u0631\u0631 \u0644\u0627\u06af\u0632 \u06a9\u0648 \u062f\u06cc\u06a9\u06be \u06a9\u0631 \u0634\u0631\u0648\u0639 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4 \u06c1\u0645 \u06cc\u06c1 \u0642\u06cc\u0627\u0633 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u06a9\u06c1 AWS \u0627\u0648\u0631 GKE \u0645\u0644 \u06a9\u0631 PostgreSQL \u06a9\u0646\u06a9\u0634\u0646\u0632 \u06a9\u0648 \u062e\u062a\u0645 \u06a9\u0631 \u0631\u06c1\u06d2 \u06c1\u06cc\u06ba\u060c \u0627\u0648\u0631 \u067e\u06be\u0631 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u06a9\u06cc \u062d\u062f\u0648\u062f \u06a9\u06d2 \u062e\u0644\u0627\u0641 \u0645\u0634\u062a\u0631\u06a9\u06c1 \u0646\u0642\u0644 \u06a9\u06cc \u06af\u0646\u062a\u06cc \u0627\u0648\u0631 \u06a9\u0646\u06a9\u0634\u0646 \u067e\u0648\u0644 \u06a9\u06d2 \u0633\u0627\u0626\u0632 \u06a9\u06cc \u062c\u0627\u0646\u0686 \u06a9\u0631\u06cc\u06ba\u06d4 \u062b\u0628\u0648\u062a \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0631\u06cc\u0626\u0644 \u0679\u0627\u0626\u0645 \u0646\u0645\u0628\u0631 \u0631\u06cc\u06a9\u0627\u0631\u0688 \u06a9\u0631\u06cc\u06ba\u06d4 \u0627\u06af\u0631 \u0622\u067e \u06a9\u06d2 \u06af\u0627\u06c1\u06a9 \u0645\u062a\u0627\u062b\u0631 \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u0679\u0631\u06cc\u0641\u06a9 \u06a9\u06cc \u0646\u0642\u0644 \u0648 \u062d\u0631\u06a9\u062a \u0628\u0646\u062f \u06a9\u0631 \u062f\u06cc\u06ba \u0627\u0648\u0631 \u0627\u0633\u06d2 \u0648\u0627\u067e\u0633 \u06a9\u0631 \u062f\u06cc\u06ba\u06d4 \u0627\u067e\u0646\u06cc \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0648\u062c\u06c1 \u06a9\u0648 \u062f\u0631\u0633\u062a \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u0632\u06cc\u0627\u062f\u06c1 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u0645\u062a\u0648\u0642\u0639 \u0628\u0648\u062c\u06be \u06a9\u06d2 \u062a\u062d\u062a \u062f\u0631\u0633\u062a \u06a9\u06cc \u062c\u0627\u0646\u0686 \u06a9\u0631\u06cc\u06ba\u06d4 \u06c1\u062c\u0631\u062a \u0635\u0631\u0641 \u0627\u0633 \u0635\u0648\u0631\u062a \u0645\u06cc\u06ba \u062f\u0648\u0628\u0627\u0631\u06c1 \u0634\u0631\u0648\u0639 \u06a9\u0631\u06cc\u06ba \u062c\u0628 \u062b\u0628\u0648\u062a \u0627\u0633 \u06a9\u06cc \u062a\u0627\u0626\u06cc\u062f \u06a9\u0631\u06cc\u06ba\u06d4\" style=\"display: block;\" width=\"600\" height=\"400\" loading=\"lazy\" title=\"\"><\/p>\n<p>\u0645\u0646\u062f\u0631\u062c\u06c1 \u0628\u0627\u0644\u0627 \u062e\u0627\u06a9\u06c1 \u0645\u0634\u0627\u06c1\u062f\u06d2 \u0633\u06d2 \u0628\u062d\u0627\u0644\u06cc \u062a\u06a9 \u0648\u0627\u0642\u0639\u06d2 \u06a9\u06d2 \u0631\u062f\u0639\u0645\u0644 \u06a9\u06d2 \u0639\u0645\u0644 \u06a9\u0648 \u062f\u06a9\u06be\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u067e\u06c1\u0644\u06d2\u060c \u062a\u0627\u062e\u06cc\u0631\u060c \u0627\u0633\u0679\u06cc\u0679\u0633 \u0628\u0627\u0631\u060c \u0627\u0648\u0631 \u0627\u06cc\u0631\u0631 \u0644\u0627\u06af \u06a9\u0648 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4 \u0645\u0641\u0631\u0648\u0636\u06d2 \u0645\u0631\u062a\u0628 \u06a9\u0631\u06cc\u06ba\u060c \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u06a9\u0646\u06a9\u0634\u0646 \u06a9\u06cc \u062d\u062f\u0648\u062f \u06a9\u06d2 \u062e\u0644\u0627\u0641 \u0627\u0646 \u06a9\u06cc \u062c\u0627\u0646\u0686 \u06a9\u0631\u06cc\u06ba\u060c \u0627\u0648\u0631 \u062b\u0628\u0648\u062a \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u062d\u0642\u06cc\u0642\u06cc \u0648\u0642\u062a \u06a9\u06cc \u067e\u06cc\u0645\u0627\u0626\u0634 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 \u0627\u06af\u0631 \u0622\u067e \u06a9\u06d2 \u06af\u0627\u06c1\u06a9 \u0645\u062a\u0627\u062b\u0631 \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u0679\u0631\u06cc\u0641\u06a9 \u06a9\u06cc \u0646\u0642\u0644 \u0648 \u062d\u0631\u06a9\u062a \u0628\u0646\u062f \u06a9\u0631 \u062f\u06cc\u06ba \u0627\u0648\u0631 \u0627\u0633\u06d2 \u0648\u0627\u067e\u0633 \u06a9\u0631 \u062f\u06cc\u06ba\u06d4 \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0648\u062c\u06c1 \u06a9\u0648 \u062f\u0631\u0633\u062a \u06a9\u0631\u06cc\u06ba\u060c \u0632\u06cc\u0627\u062f\u06c1 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u0645\u062a\u0648\u0642\u0639 \u0628\u0648\u062c\u06be \u067e\u0631 \u062c\u0627\u0646\u0686 \u06a9\u0631\u06cc\u06ba\u060c \u0627\u0648\u0631 \u06c1\u062c\u0631\u062a \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0634\u0631\u0648\u0639 \u06a9\u0631\u06cc\u06ba \u062c\u0628 \u062b\u0628\u0648\u062a \u0627\u0633 \u06a9\u06cc \u062a\u0627\u0626\u06cc\u062f \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p>\u0645\u0639\u0627\u0645\u0644\u06c1 \u062c\u0648\u0627\u0628 \u062a\u0644\u0627\u0634 \u06a9\u0631\u0646\u06d2 \u06a9\u0627 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u06cc\u06c1 \u063a\u06cc\u0631 \u06cc\u0642\u06cc\u0646\u06cc \u0635\u0648\u0631\u062a\u062d\u0627\u0644 \u06a9\u0648 \u06a9\u0645 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0628\u0627\u0631\u06d2 \u0645\u06cc\u06ba \u06c1\u06d2 \u062c\u0628 \u062a\u06a9 \u06a9\u06c1 \u0622\u067e \u0645\u062d\u0641\u0648\u0638 \u0641\u06cc\u0635\u0644\u06c1 \u0646\u06c1 \u06a9\u0631 \u0644\u06cc\u06ba\u06d4 \u0627\u06af\u0631 \u06a9\u0648\u0626\u06cc \u06af\u0627\u06c1\u06a9 \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648\u062c\u0627\u062a\u0627 \u06c1\u06d2\u060c \u062a\u0648 \u0645\u062d\u0641\u0648\u0638 \u0641\u06cc\u0635\u0644\u06c1 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u0627\u0633\u06d2 \u0631\u0648\u06a9\u0627 \u062c\u0627\u0626\u06d2 \u0627\u0648\u0631 \u0648\u0627\u067e\u0633 \u0644\u0648\u0679 \u0644\u06cc\u0627 \u062c\u0627\u0626\u06d2\u06d4 \u0627\u06af\u0631 \u0646\u06c1\u06cc\u06ba\u060c \u062a\u0648 \u062f\u06cc\u06a9\u06be\u062a\u06d2 \u0631\u06c1\u0646\u0627 \u0627\u06cc\u06a9 \u0645\u062d\u0641\u0648\u0638 \u0641\u06cc\u0635\u0644\u06c1 \u06c1\u06d2\u06d4 \u067e\u06cc\u0686\u06be\u06d2 \u0646\u06c1 \u06c1\u0679\u06cc\u06ba \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u0646\u0645\u0628\u0631 \u0639\u062c\u06cc\u0628 \u0644\u06af\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0627\u0648\u0631 \u0622\u06af\u06d2 \u0646\u06c1 \u0628\u0691\u06be\u06cc\u06ba \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u067e\u06be\u0644\u06cc \u0635\u062d\u062a \u0645\u0646\u062f \u0646\u0638\u0631 \u0622\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u06cc\u06c1 \u0686\u0648\u06a9\u06cc \u06c1\u06d2\u06d4 GKE 100% \u0633\u0631\u0648\u0633 \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>AWS \u0627\u0628 \u0627\u06cc\u06a9 \u0642\u06cc\u0645\u062a\u06cc \u062d\u0641\u0627\u0638\u062a\u06cc \u062c\u0627\u0644 \u06c1\u06d2\u060c \u0646\u06c1 \u06a9\u06c1 \u0628\u06be\u0648\u0644\u06cc \u06c1\u0648\u0626\u06cc \u0628\u0627\u0642\u06cc\u0627\u062a\u06d4<\/p>\n<h2 id=\"heading-part-7-how-to-finish-the-migration\">\u062d\u0635\u06c1 7\u06d4 \u06c1\u062c\u0631\u062a \u06a9\u06cc\u0633\u06d2 \u0645\u06a9\u0645\u0644 \u06a9\u06cc \u062c\u0627\u0626\u06d2\u06d4<\/h2>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/10\/1792188597_911_\u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0648\u06ba-\u06a9\u0648-AWS-\u0633\u06d2-GKE-\u0645\u06cc\u06ba-\u06a9\u06cc\u0633\u06d2-\u0645\u0646\u062a\u0642\u0644-\u06a9\u06cc\u0627-\u062c\u0627\u0626\u06d2\u06d4.png\" alt=\"\u0648\u06c1 \u062a\u0635\u0627\u0648\u06cc\u0631 \u062c\u0648 \u0627\u0633 \u0628\u0627\u062a \u06a9\u06cc \u0648\u0636\u0627\u062d\u062a \u06a9\u0631\u062a\u06cc \u06c1\u06cc\u06ba \u06a9\u06c1 \u06c1\u0645 \u0646\u06d2 \u06a9\u06cc\u0627 \u06a9\u06cc\u0627\u060c \u06c1\u0645 \u06a9\u06c1\u0627\u06ba \u06c1\u06cc\u06ba\u060c \u0627\u0648\u0631 \u0622\u06af\u06d2 \u06a9\u06cc\u0627 \u06c1\u06d2\u06d4\" style=\"display: block;\" width=\"600\" height=\"400\" loading=\"lazy\" title=\"\"><\/p>\n<p>GKE \u062a\u0645\u0627\u0645 \u0635\u0627\u0631\u0641\u06cc\u0646 \u06a9\u06cc \u062e\u062f\u0645\u062a \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 AWS \u0627\u0628 \u0628\u06be\u06cc \u062d\u0641\u0627\u0638\u062a\u06cc \u062c\u0627\u0644 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0686\u0644 \u0631\u06c1\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0648\u06c1 \u0627\u0628 \u0628\u06be\u06cc \u0622\u067e \u0633\u06d2 \u0686\u0627\u0631\u062c \u0644\u06cc\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u06cc\u06c1 \u062d\u0635\u06c1 \u06a9\u0679 \u0627\u0648\u0648\u0631 \u06a9\u0648 \u062b\u0628\u0648\u062a\u060c \u062a\u0627\u0631\u06cc\u062e\u0648\u06ba \u06a9\u06d2 \u062d\u0641\u0627\u0638\u062a\u06cc \u062c\u0627\u0644\u0648\u06ba \u0645\u06cc\u06ba \u0628\u062f\u0644 \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u06c1\u0631 \u0648\u06c1 \u0686\u06cc\u0632 \u06c1\u0679\u0627 \u062f\u06cc\u062a\u0627 \u06c1\u06d2 \u062c\u0633 \u06a9\u06cc \u0622\u067e \u06a9\u0648 \u0645\u0632\u06cc\u062f \u0636\u0631\u0648\u0631\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-chapter-24-prove-the-cutover-with-numbers\">\u0628\u0627\u0628 24\u06d4 \u0646\u0645\u0628\u0631\u0648\u06ba \u06a9\u06d2 \u0633\u0627\u062a\u06be \u06a9\u0679 \u0627\u0648\u0648\u0631 \u062b\u0627\u0628\u062a \u06a9\u0631\u0646\u0627<\/h3>\n<p><em>\u062c\u0645\u0639\u0631\u0627\u062a \u0635\u0628\u062d 9 \u0628\u062c\u06d2<\/em><\/p>\n<p>\u0645\u0627\u06cc\u0627 \u06a9\u06cc 10 \u0628\u062c\u06d2 \u06a9\u0645\u067e\u0646\u06cc \u06a9\u06d2 \u0644\u06cc\u0688\u0631\u0648\u06ba \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0645\u06cc\u0679\u0646\u06af \u06c1\u06d2\u06d4 \u0648\u06c1 \u0622\u067e \u06a9\u06cc \u0645\u06cc\u0632 \u06a9\u06d2 \u0633\u0627\u0645\u0646\u06d2 \u0631\u06a9\u06cc\u060c \u0627\u0633 \u06a9\u0627 \u0644\u06cc\u067e \u0679\u0627\u067e \u0627\u06cc\u06a9 \u062e\u0627\u0644\u06cc \u0635\u0641\u062d\u06d2 \u067e\u0631 \u06a9\u06be\u0644\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0645\u0627\u06cc\u0627: \"\u0644\u06cc\u0688\u0631\u0632 \u06c1\u0645\u0627\u0631\u06cc \u06a9\u0627\u0644 \u067e\u0631 \u0628\u0627\u0644\u06a9\u0644 \u0646\u06c1\u06cc\u06ba \u062a\u06be\u06d2 \u0627\u0648\u0631 \u0648\u06c1 \u0635\u0631\u0641 \u0627\u06cc\u06a9 \u0628\u0627\u062a \u067e\u0648\u0686\u06be\u062a\u06d2 \u06c1\u06cc\u06ba: \u06a9\u06cc\u0627 \u0635\u0627\u0631\u0641\u06cc\u0646 \u0646\u06d2 \u0627\u0633 \u062d\u0631\u06a9\u062a \u06a9\u0648 \u062f\u06cc\u06a9\u06be\u0627 \u06c1\u06d2\u061f \u0645\u062c\u06be\u06d2 \u0627\u06cc\u06a9 \u0641\u0648\u0631\u06cc \u0633\u0645\u0631\u06cc \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2 \u062c\u0648 \u0645\u06cc\u06ba \u0627\u0633\u06a9\u0631\u06cc\u0646 \u067e\u0631 \u062f\u06a9\u06be\u0627 \u0633\u06a9\u0648\u06ba: \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0648\u06ba \u06a9\u06cc \u062a\u0639\u062f\u0627\u062f\u060c \u0646\u0627\u06a9\u0627\u0645 \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0648\u06ba \u06a9\u06cc \u062a\u0639\u062f\u0627\u062f\u060c \u0627\u06d2 \u0688\u0628\u0644\u06cc\u0648 \u0627\u06cc\u0633 \u06a9\u06d2 \u0645\u0642\u0627\u0628\u0644\u06d2 \u0645\u06cc\u06ba \u0627\u06cc\u067e \u06a9\u062a\u0646\u06cc \u062a\u06cc\u0632 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u06a9\u06cc\u0627 \u06a9\u0633\u06cc \u0646\u06d2 \u06a9\u0648\u0626\u06cc \u0628\u0646\u062f\u0634 \u062f\u06cc\u06a9\u06be\u06cc \u06c1\u06d2\u06d4 \u06a9\u06cc\u0627 \u0622\u067e \u0627\u0633\u06d2 10 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u062d\u0627\u0635\u0644 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u061f\"<\/p>\n<p>\u0622\u067e \u0633\u0631 \u06c1\u0644\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0627\u0633 \u0646\u06d2 \u062c\u0648 \u0628\u06be\u06cc \u0646\u0645\u0628\u0631 \u0645\u0627\u0646\u06af\u06d2 \u0648\u06c1 \u062f\u0648 \u0627\u0633\u06a9\u0631\u067e\u0679\u0633 \u0633\u06d2 \u0622\u06cc\u0627 \u062c\u0633\u06d2 \u0622\u067e \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u062c\u0627\u0646\u062a\u06d2 \u062a\u06be\u06d2\u06d4<\/p>\n<h4 id=\"heading-steps\">\u0642\u062f\u0645<\/h4>\n<p>100% GKE \u0627\u0628 \u062f\u0648 \u0686\u06cc\u06a9 \u0686\u0644\u0627\u062a\u0627 \u06c1\u06d2 \u062c\u0648 \u0639\u0648\u0627\u0645\u06cc \u067e\u062a\u0648\u06ba \u06a9\u06d2 \u0644\u06cc\u06d2 \u0645\u0634\u06a9\u0644 \u0646\u0645\u0628\u0631 \u062a\u06cc\u0627\u0631 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">HOST=$(terraform -chdir=infra\/gcp\/terraform\/08-edge output -raw public_hostname)\n.\/scripts\/promotion-gate.sh \"https:\/\/$HOST\" \n  alice@clearpay.dev password123 bob@clearpay.dev\n<\/code><\/pre>\n<p>\u067e\u06be\u0631 \u0628\u06be\u0627\u06af\u0648 <code>load-test.sh<\/code> \u06a9\u06d2 \u062e\u0644\u0627\u0641 <code>https:\/\/$HOST<\/code> \u0627\u0633\u06a9\u0648\u0631 \u06a9\u0627\u0631\u0688 \u06a9\u0648 \u0628\u0627\u0628 6 \u06a9\u06cc \u062a\u0631\u062a\u06cc\u0628\u0627\u062a \u0645\u06cc\u06ba \u06a9\u0627\u067e\u06cc \u06a9\u0631\u06cc\u06ba\u06d4 \u0628\u0627\u0628 22 \u0644\u0648\u067e\u0633 \u06a9\u06cc \u062a\u0639\u062f\u0627\u062f \u0634\u0627\u0645\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 <code>synthetic-health.sh<\/code> \u0644\u0627\u06af<\/p>\n<h4 id=\"heading-the-evidence\">\u062b\u0628\u0648\u062a<\/h4>\n<p>\u0630\u06cc\u0644 \u0645\u06cc\u06ba \u06c1\u0645\u0627\u0631\u06cc \u0644\u06cc\u0628 \u0633\u06d2 \u0627\u06cc\u06a9 \u0679\u06cc\u0628\u0644 \u06c1\u06d2\u06d4 \u0622\u067e \u06a9\u0627 \u0641\u0648\u0646 \u0646\u0645\u0628\u0631 \u06c1\u06d2:<\/p>\n<pre><code class=\"language-plaintext\">Production requests (counted checks, not a full dashboard total):\n  40 \/health one minute after 0 \/ 100:  3 aws, 37 gke\n  40 \/health ninety seconds later:      0 aws, 40 gke\n  load-test.sh 10 \u00d7 20s:                ok=310  failed=0\n  promotion-gate.sh:                    5 passed, 0 failed\nSuccessful requests:                 310 + 40 + 5 in those runs\nFailed requests:                     0\n5xx errors:                          0.0 %\np95 latency (GKE, 100%):             647 ms\n  Chapter 6 AWS baseline was 164 ms.\n  Chapter 18 GKE staging (port-forward) was 1157 ms.\nSustained customer-visible outage:   0 seconds\n<\/code><\/pre>\n<p>\u0686\u0648\u0646\u06a9\u06c1 \u0645\u0642\u0627\u0645\u06cc Prometheus GKE \u0646\u06c1\u06cc\u06ba \u062f\u06cc\u06a9\u06be\u062a\u0627 \u062a\u06be\u0627\u060c \u0627\u0633 \u0644\u06cc\u06d2 \u06cc\u06c1 \u062c\u062f\u0648\u0644 \u062d\u0633\u0627\u0628\u06cc \u0686\u06cc\u06a9 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 \u06a9\u06d2 \u0679\u0648\u0679\u0644 \u0646\u06c1 \u0628\u0646\u0627\u0626\u06cc\u06ba \u062c\u0648 \u0622\u067e \u0646\u06d2 \u06a9\u0628\u06be\u06cc \u0646\u0627\u067e\u06d2 \u06c1\u0648\u06ba\u06d4<\/p>\n<p>GKE \u06a9\u06d2 \u0648\u062c\u0648\u062f \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u06c1\u0645 \u0646\u06d2 \u0628\u0627\u0628 6 \u0645\u06cc\u06ba \u062c\u0648 \u062d\u062f\u06cc\u06ba \u0628\u0646\u0627\u0626\u06cc \u062a\u06be\u06cc\u06ba \u0627\u0646 \u06a9\u06d2 \u062e\u0644\u0627\u0641 \u062c\u062f\u0648\u0644 \u06a9\u0648 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<ul>\n<li>\n<p>\u0628\u0646\u062f\u0634 \u06a9\u06cc \u062d\u062f: \u06a9\u0648\u0626\u06cc 5xx \u063a\u0644\u0637\u06cc\u0627\u06ba \u062d\u062f \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u06ba \u06af\u06cc\u06d4 \u0627\u0633 \u0644\u06cc\u0628 \u0645\u06cc\u06ba \u06a9\u0648\u0626\u06cc \u0646\u0627\u06a9\u0627\u0645 \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u06cc\u06ba \u0646\u06c1\u06cc\u06ba \u06c1\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0646\u0627\u06a9\u0627\u0645\u06cc \u06a9\u06cc \u062d\u062f: p95 \u0686\u06be\u062a \u0633\u06d2 \u0646\u06cc\u0686\u06d2\u06d4 \u0627\u0633 \u0645\u0634\u0642 \u06a9\u0627 647 ms \u0645\u062b\u0627\u0644 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 1500 ms \u06a9\u06cc \u0627\u0648\u067e\u0631\u06cc \u062d\u062f \u0633\u06d2 \u0646\u06cc\u0686\u06d2 \u06c1\u06d2\u060c \u0644\u06c1\u0630\u0627 \u06cc\u06c1 \u06af\u0632\u0631 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<\/ul>\n<p>\u067e\u0627\u0633 \u06c1\u0648\u0646\u0627 \u06c1\u06cc \u0633\u0628 \u06a9\u0686\u06be \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 647ms AWS 164ms \u06a9\u0627 \u062a\u0642\u0631\u06cc\u0628\u0627\u064b 4 \u06af\u0646\u0627 \u06c1\u06d2\u06d4 \u0635\u0627\u0631\u0641\u06cc\u0646 \u06a9\u0648 \u06a9\u0633\u06cc \u0642\u0633\u0645 \u06a9\u06cc \u0628\u0646\u062f\u0634 \u06a9\u0627 \u0633\u0627\u0645\u0646\u0627 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u0646\u0627 \u067e\u0691\u0627\u060c \u0644\u06cc\u06a9\u0646 \u062a\u0645\u0627\u0645 \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0648\u06ba \u06a9\u0648 \u0633\u0633\u062a \u06a9\u0631 \u062f\u06cc\u0627 \u06af\u06cc\u0627\u06d4 \u0627\u0633\u06d2 \u0645\u062a \u0686\u06be\u067e\u0627\u0626\u06cc\u06ba\u060c \u0627\u06cc\u0645\u0627\u0646\u062f\u0627\u0631\u06cc \u0633\u06d2 \u0644\u06a9\u06be\u06cc\u06ba\u06d4 \u0627\u0633 \u06a9\u062a\u0627\u0628 \u06a9\u0627 \u0622\u062e\u0631\u06cc \u062d\u0635\u06c1 \u0627\u0633 \u06a9\u06cc \u0648\u062c\u06c1 \u0628\u062a\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h4 id=\"heading-why-the-table-doesnt-say-zero-failed-requests-ever\">\u0679\u06cc\u0628\u0644 \u06cc\u06c1 \u06a9\u06cc\u0648\u06ba \u0646\u06c1\u06cc\u06ba \u06a9\u06c1\u062a\u0627 \u06a9\u06c1 \"\u06a9\u0648\u0626\u06cc \u0628\u06be\u06cc \u0646\u0627\u06a9\u0627\u0645 \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u06cc\u06ba \u0646\u06c1\u06cc\u06ba \u06c1\u06cc\u06ba\"\u061f<\/h4>\n<p>\u0679\u0631\u06cc\u0641\u06a9 \u06a9\u06cc \u062a\u0628\u062f\u06cc\u0644\u06cc\u0648\u06ba \u0627\u0648\u0631 \u0645\u0645\u06a9\u0646\u06c1 \u0631\u0648\u0644 \u0628\u06cc\u06a9\u0633 \u06a9\u0648 \u0645\u062f\u0646\u0638\u0631 \u0631\u06a9\u06be\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u06a9\u0626\u06cc \u06af\u06be\u0646\u0679\u0648\u06ba \u062a\u06a9 \u0686\u0644\u0646\u06d2 \u0648\u0627\u0644\u0627 \u0627\u06cc\u06a9 \u062d\u0642\u06cc\u0642\u06cc \u0646\u0638\u0627\u0645 \u0627\u06cc\u0645\u0627\u0646\u062f\u0627\u0631\u06cc \u0633\u06d2 \u0627\u0633 \u06a9\u0627 \u0648\u0639\u062f\u06c1 \u0646\u06c1\u06cc\u06ba \u06a9\u0631 \u0633\u06a9\u062a\u0627\u06d4 \u0627\u0633 \u06a9\u0627 \u062f\u0639\u0648\u06cc\u0670 \u0627\u06cc\u06a9 \u0627\u06c1\u0645 \u062f\u0644\u06cc\u0644 \u06a9\u0648 \u06a9\u0645\u0632\u0648\u0631 \u06a9\u0631 \u062f\u06d2 \u06af\u0627: \u06cc\u06c1 \u06a9\u06c1 \u0635\u0627\u0631\u0641\u06cc\u0646 \u06a9\u0648 \u062c\u0627\u0631\u06cc \u0628\u0646\u062f\u0634 \u0646\u0638\u0631 \u0646\u06c1\u06cc\u06ba \u0622\u0626\u06d2 \u06af\u06cc\u06d4<\/p>\n<p>\u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u0637\u06d2 \u0634\u062f\u06c1 \u062d\u062f\u0648\u062f \u0645\u06cc\u06ba \u06a9\u0686\u06be \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0648\u06ba \u06a9\u0648 \u0646\u0627\u06a9\u0627\u0645 \u06a9\u0631\u0646\u0627 \u06cc\u06c1 \u06a9\u06c1\u0646\u06d2 \u06a9\u0627 \u0627\u06cc\u06a9 \u0627\u06cc\u0645\u0627\u0646\u062f\u0627\u0631 \u0637\u0631\u06cc\u0642\u06c1 \u06c1\u06d2 \u06a9\u06c1 \"\u0627\u0633 \u0646\u06d2 \u06a9\u0627\u0645 \u06a9\u06cc\u0627\u06d4\" \u0645\u0639\u06cc\u0627\u0631\u0627\u062a \u06a9\u0648 \u06a9\u0646\u0679\u0631\u0648\u0644 \u0627\u0648\u0631 \u0645\u0627\u067e\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u060c \u06a9\u0627\u0645\u0644 \u0646\u06c1\u06cc\u06ba\u06d4<\/p>\n<h4 id=\"heading-done-when\">\u0645\u06a9\u0645\u0644 \u06c1\u0648\u0646\u06d2 \u067e\u0631:<\/h4>\n<ul>\n<li>\n<p>\u0679\u06cc\u0628\u0644 \u06a9\u06cc \u06c1\u0631 \u0644\u0627\u0626\u0646 \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u0646\u0627\u067e\u0627 \u06c1\u0648\u0627 \u0646\u0645\u0628\u0631 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0646\u0627\u06a9\u0627\u0645 \u0644\u0627\u0626\u0646\u0648\u06ba \u0633\u0645\u06cc\u062a \u06c1\u0631 \u0644\u0627\u0626\u0646 \u06a9\u0648 \u0628\u0627\u0628 6 \u06a9\u06cc \u062d\u062f\u0648\u062f \u06a9\u06d2 \u062e\u0644\u0627\u0641 \u0686\u06cc\u06a9 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<\/ul>\n<h3 id=\"heading-chapter-25-run-on-gke-and-set-a-date-for-aws\">\u0628\u0627\u0628 25\u06d4 GKE \u067e\u0631 \u0686\u0644 \u0631\u06c1\u0627 \u06c1\u06d2 \u0627\u0648\u0631 AWS \u06a9\u06cc \u062a\u0627\u0631\u06cc\u062e\u06cc\u06ba \u062a\u0631\u062a\u06cc\u0628 \u062f\u06d2 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4<\/h3>\n<p><em>\u062c\u0645\u0639\u06c1 \u0635\u0628\u062d 10 \u0628\u062c\u06d2<\/em><\/p>\n<p>\u0645\u0627\u06cc\u0627 \u0642\u0627\u0626\u062f\u06cc\u0646 \u06a9\u06d2 \u0633\u0648\u0627\u0644\u0627\u062a \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0645\u06cc\u0679\u0646\u06af \u0633\u06d2 \u0648\u0627\u067e\u0633 \u0622\u06af\u0626\u06cc\u06ba\u06d4<\/p>\n<p>\u0645\u0627\u06cc\u0627: \"\u062a\u0648 \u0635\u0627\u0631\u0641\u06cc\u0646 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u06cc\u0627 \u0628\u062f\u0644\u0627 \u06c1\u06d2\u061f\"<\/p>\n<p>\u0622\u067e \u0646\u0645\u0628\u0631\u0648\u06ba \u06a9\u0648 \u062f\u06cc\u06a9\u06be\u06cc\u06ba\u06d4 \u0679\u0631\u06cc\u0641\u06a9 100% GKE \u06c1\u06d2\u06d4 \u0645\u0646\u062a\u0642\u0644\u06cc \u06a9\u0627\u0645\u06cc\u0627\u0628 \u0631\u06c1\u06cc\u06d4 \u062a\u0645\u0627\u0645 \u0645\u0635\u0646\u0648\u0639\u06cc \u0679\u06cc\u0633\u0679 \u067e\u0627\u0633 \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 PostgreSQL \u0627\u0628 \u0628\u06be\u06cc AWS \u067e\u0631 \u06c1\u06d2\u06d4 EC2 \u0633\u0631\u0648\u0631\u0632 \u06a9\u0633\u06cc \u06a9\u06cc \u062e\u062f\u0645\u062a \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u06d2\u06d4<\/p>\n<p>\"\u067e\u062a\u06c1 \u0648\u06c1\u06cc \u0631\u06c1\u0627 \u0627\u0648\u0631 \u06a9\u0633\u06cc \u0646\u06d2 \u0628\u06be\u06cc \u0628\u0646\u062f\u0634 \u06a9\u0627 \u0645\u0634\u0627\u06c1\u062f\u06c1 \u0646\u06c1\u06cc\u06ba \u06a9\u06cc\u0627\u06d4\"<\/p>\n<p>\u0645\u0627\u06cc\u0627: \"\u067e\u06be\u0631 \u06cc\u06c1 \u0633\u0633\u0679\u0645 \u0627\u0628 \u0622\u067e \u06a9\u0627 \u06c1\u06d2\u06d4 \u0627\u0648\u0631 \u0645\u06cc\u06ba \u067e\u0631\u0627\u0646\u06d2 \u0633\u0631\u0648\u0631 \u06a9\u0648 \u0628\u0646\u062f \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u06cc\u0644\u0646\u0688\u0631 \u06a9\u06cc \u062a\u0627\u0631\u06cc\u062e \u0686\u0627\u06c1\u062a\u06cc \u06c1\u0648\u06ba\u06d4\"<\/p>\n<h4 id=\"heading-step-1-watch-it-run\">\u0645\u0631\u062d\u0644\u06c1 1. \u0631\u0646 \u062f\u06cc\u06a9\u06be\u06cc\u06ba<\/h4>\n<p>\u06a9\u0633\u06cc \u0628\u06be\u06cc \u0686\u06cc\u0632 \u06a9\u0627 \u0627\u0631\u062a\u06a9\u0627\u0628 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0627\u06cc\u06a9 \u062d\u0642\u06cc\u0642\u062a \u067e\u0633\u0646\u062f\u0627\u0646\u06c1 \u0645\u062f\u062a \u06a9\u06d2 \u0644\u0626\u06d2 \u067e\u06cc\u062f\u0627\u0648\u0627\u0631 \u0686\u0644\u0627\u0646\u06d2 \u06a9\u06cc \u06a9\u0648\u0634\u0634 \u06a9\u0631\u06cc\u06ba\u06d4 \u062d\u0642\u06cc\u0642\u06cc \u06a9\u0645\u067e\u0646\u06cc\u0648\u06ba \u06a9\u06d2 \u0644\u06cc\u06d2\u060c \u0627\u0633 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u062f\u0646\u060c \u0645\u0646\u0679 \u0646\u06c1\u06cc\u06ba\u060c \u0622\u067e \u06a9\u06cc \u0622\u062e\u0631\u06cc \u0634\u0641\u0679 \u06a9\u06d2 \u0628\u0639\u062f \u0633\u06d2\u06d4<\/p>\n<p>\u0627\u0633 \u0644\u06cc\u067e \u06a9\u06d2 \u0644\u06cc\u06d2 100% \u0648\u0646\u0688\u0648 5\/5 \u06af\u06cc\u0679 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u06a9\u0626\u06cc \u0645\u0646\u0679 \u062a\u06a9 \u062c\u0627\u0631\u06cc \u0631\u06c1\u06cc\u06d4 <code>failed=0<\/code>. \u0627\u0633\u06d2 \u0644\u06a9\u06be \u062f\u06cc\u06ba\u06d4 \u06c1\u0641\u062a\u06d2 \u06a9\u06d2 \u0622\u062e\u0631 \u0645\u06cc\u06ba \u0644\u06cc\u0628 \u0627\u06cc\u06a9 \u0646\u062a\u06cc\u062c\u06c1 \u062e\u06cc\u0632 \u06c1\u0641\u062a\u06c1 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4<\/p>\n<h4 id=\"heading-step-2-check-the-alert\">\u0645\u0631\u062d\u0644\u06c1 2\u06d4 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4<\/h4>\n<p>\u0645\u0631\u062d\u0644\u06c1 7 \u0645\u06cc\u06ba\u060c \u0622\u067e \u0646\u06d2 \u0627\u0644\u0631\u0679 \u067e\u0627\u0644\u06cc\u0633\u06cc \u0628\u0646\u0627\u0626\u06cc\u06d4 <code>ClearPay API - elevated error rate<\/code>5 \u0645\u0646\u0679 \u0645\u06cc\u06ba 5+ \u0627\u06cc\u0631\u0631 \u0644\u0627\u0626\u0646\u0648\u06ba \u067e\u0631 \u0686\u0644\u062a\u0627 \u06c1\u06d2\u06d4 \u06a9\u0648\u0626\u06cc \u0646\u0648\u0679\u06cc\u0641\u06a9\u06cc\u0634\u0646 \u0686\u06cc\u0646\u0644 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u060c \u0627\u0633 \u0644\u06cc\u06d2 \u06a9\u0633\u06cc \u06a9\u0648 \u067e\u062a\u06c1 \u0646\u06c1\u06cc\u06ba \u0686\u0644\u06d2 \u06af\u0627 \u06a9\u06c1 \u06cc\u06c1 \u06a9\u0628 \u0686\u0644\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u06cc\u06a9 \u0627\u0646\u062a\u0628\u0627\u06c1 \u062c\u0648 \u06a9\u0633\u06cc \u062a\u06a9 \u0646\u06c1\u06cc\u06ba \u067e\u06c1\u0646\u0686\u062a\u0627 \u06c1\u06d2 \u0628\u0627\u0644\u06a9\u0644 \u0628\u06be\u06cc \u0627\u0646\u062a\u0628\u0627\u06c1 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u06cc\u06a9 \u062d\u0642\u06cc\u0642\u06cc \u0646\u0638\u0627\u0645 \u06a9\u06d2 \u0644\u06cc\u06d2\u060c \u06a9\u0644\u0627\u0624\u0688 \u0645\u0627\u0646\u06cc\u0679\u0631\u0646\u06af \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u0646\u0648\u0679\u06cc\u0641\u06a9\u06cc\u0634\u0646 \u0686\u06cc\u0646\u0644 \u0634\u0627\u0645\u0644 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u0627\u067e\u0646\u06d2 \u0635\u0627\u0631\u0641\u06cc\u0646 \u06a9\u0648 \u063a\u0644\u0637\u06cc\u0627\u06ba \u0628\u06be\u06cc\u062c\u06d2 \u0628\u063a\u06cc\u0631 \u0633\u0679\u06cc\u062c\u0646\u06af \u0679\u06cc\u0633\u0679 \u06a9\u0648 \u0645\u062a\u062d\u0631\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4 \u0627\u0633 \u0645\u0634\u0642 \u06a9\u06d2 \u0644\u06cc\u06d2\u060c \u0627\u0633 \u0641\u0631\u0642 \u06a9\u0648 \u0646\u0648\u0679 \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 \u067e\u0627\u0644\u06cc\u0633\u06cc \u0645\u0648\u062c\u0648\u062f \u06c1\u06d2 \u0627\u0648\u0631 \u06a9\u0633\u06cc \u06a9\u0648 \u0635\u0641\u062d\u06c1 \u0646\u06c1\u06cc\u06ba \u0628\u0646\u0627\u06cc\u0627 \u062c\u0627 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4<\/p>\n<h4 id=\"heading-step-3-review-capacity\">\u0645\u0631\u062d\u0644\u06c1 3\u06d4 \u0635\u0644\u0627\u062d\u06cc\u062a \u06a9\u0627 \u062c\u0627\u0626\u0632\u06c1<\/h4>\n<p>\u0627\u067e\u0646\u06cc \u06a9\u06be\u0691\u06a9\u06cc \u0633\u06d2 \u0628\u0627\u06c1\u0631 \u0627\u067e\u0646\u06d2 HPA \u067e\u0631 \u0627\u06cc\u06a9 \u0646\u0638\u0631 \u0688\u0627\u0644\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">kubectl -n production get hpa clearpay-api\n<\/code><\/pre>\n<p>\u0644\u06cc\u0628 \u0646\u06d2 100% \u0644\u0648\u0688 \u0679\u06cc\u0633\u0679\u0646\u06af \u06a9\u06d2 \u062f\u0648\u0631\u0627\u0646 1 \u0631\u06cc\u067e\u0644\u06cc\u06a9\u0627 \u0627\u0648\u0631 4-7% CPU \u06a9\u0648 \u0628\u0631\u0642\u0631\u0627\u0631 \u0631\u06a9\u06be\u0627\u060c \u06cc\u06c1\u0627\u06ba \u062a\u06a9 \u06a9\u06c1 15.5 \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u06cc\u06ba \u0641\u06cc \u0633\u06cc\u06a9\u0646\u0688 \u067e\u0631 \u0628\u06be\u06cc\u06d4 \u0627\u06cc\u06a9 \u067e\u06be\u0644\u06cc \u06a9\u0627\u0641\u06cc \u062a\u06be\u06cc\u06d4 \u062a\u06cc\u0646 <code>e2-medium<\/code> \u0627\u06cc\u06a9 API Pod \u06a9\u06d2 \u0644\u06cc\u06d2 \u062f\u0631\u06a9\u0627\u0631 \u0645\u0634\u06cc\u0646\u0648\u06ba \u06a9\u06cc \u062a\u0639\u062f\u0627\u062f \u0627\u0633 \u0679\u0631\u06cc\u0641\u06a9 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u06c1\u06d2\u06d4<\/p>\n<p>\u06af\u0648\u06af\u0644 \u06a9\u0645\u0679\u0688 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u0688\u0633\u06a9\u0627\u0624\u0646\u0679\u0633 (CUD) \u067e\u06cc\u0634 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u06cc\u0639\u0646\u06cc\u060c \u0648\u06c1 \u0627\u06cc\u06a9 \u06cc\u0627 \u062a\u06cc\u0646 \u0633\u0627\u0644 \u062a\u06a9 \u0645\u0634\u06cc\u0646 \u06a9\u06cc \u0627\u06cc\u06a9 \u0645\u062e\u0635\u0648\u0635 \u0645\u0642\u062f\u0627\u0631 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0648\u0639\u062f\u06d2 \u06a9\u06d2 \u0628\u062f\u0644\u06d2 \u06a9\u0645 \u0642\u06cc\u0645\u062a \u067e\u06cc\u0634 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06cc \u0645\u0633\u062a\u062d\u06a9\u0645 \u062a\u0627\u0631\u06cc\u062e \u06a9\u06d2 \u0628\u0639\u062f \u06c1\u06cc \u0639\u06c1\u062f \u06a9\u0631\u06cc\u06ba\u06d4 \u0646\u0627\u067e\u06d2 \u06af\u0626\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u0645\u0646\u0635\u0648\u0628\u06c1 \u0628\u0646\u062f \u0641\u0646 \u062a\u0639\u0645\u06cc\u0631 \u067e\u0631 \u0645\u0628\u0646\u06cc \u0648\u0639\u062f\u06d2 \u0627\u06cc\u06a9 \u06a9\u0646\u0679\u0631\u06cc\u06a9\u0679 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0642\u06cc\u0627\u0633 \u06c1\u06cc\u06ba\u06d4 \u0686\u0648\u0646\u06a9\u06c1 GKE \u06a9\u06d2 \u0686\u0646\u062f \u06af\u06be\u0646\u0679\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0627 \u0631\u06cc\u06a9\u0627\u0631\u0688 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u060c \u0627\u0633 \u0644\u06cc\u06d2 \u06c1\u0645 \u0646\u06d2 \u0627\u0633 \u0644\u06cc\u0628 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u0686\u06be \u0646\u06c1\u06cc\u06ba \u062e\u0631\u06cc\u062f\u0627\u06d4<\/p>\n<h4 id=\"heading-step-4-write-the-handover\">\u0645\u0631\u062d\u0644\u06c1 4\u06d4 \u0627\u06cc\u06a9 \u06c1\u06cc\u0646\u0688 \u0627\u0648\u0648\u0631 \u0628\u0646\u0627\u0626\u06cc\u06ba<\/h4>\n<p>\u06cc\u06c1 \u0627\u0646 \u0644\u0648\u06af\u0648\u06ba \u06a9\u06d2 \u0644\u06cc\u06d2 \u0644\u06a9\u06be\u06cc\u06ba \u062c\u0648 \u06c1\u062c\u0631\u062a \u0645\u06cc\u06ba \u0634\u0627\u0645\u0644 \u0646\u06c1\u06cc\u06ba \u06c1\u06cc\u06ba\u06d4 \u06cc\u06c1 \u06c1\u06cc\u0646\u0688 \u0622\u0646 \u0648\u0631\u0698\u0646:<\/p>\n<pre><code class=\"language-plaintext\">Logs:       kubectl -n production logs deployment\/clearpay-api\nDashboard:  http:\/\/localhost:3000 if observability\/docker-compose.yml\n            is up. GKE series may be empty.\nAlert:      Cloud Monitoring \"ClearPay API - elevated error rate\"\n            No notification channel.\nRollback:   scripts\/rollback.sh, only while EC2 still exists.\nHostname:   terraform output public_hostname\n            terraform output static_ip_address\n            (yours, not a hostname copied from this book)\n<\/code><\/pre>\n<h4 id=\"heading-step-5-put-a-date-on-aws\">\u0645\u0631\u062d\u0644\u06c1 5. AWS \u0645\u06cc\u06ba \u062a\u0627\u0631\u06cc\u062e\u06cc\u06ba \u062f\u0631\u062c \u06a9\u0631\u0646\u0627<\/h4>\n<p><code>scripts\/rollback.sh<\/code> \u06cc\u06c1 \u0635\u0631\u0641 \u0627\u0633 \u0648\u0642\u062a \u062a\u06a9 \u06a9\u0627\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u062c\u0628 \u062a\u06a9 EC2 \u0633\u0631\u0648\u0631 \u0645\u0648\u062c\u0648\u062f \u06c1\u06d2\u060c \u0627\u0648\u0631 \u0633\u0631\u0648\u0631 \u06a9\u0648 \u0627\u0633 \u06a9\u06d2 \u0645\u0648\u062c\u0648\u062f \u06c1\u0648\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u06c1\u0631 \u062f\u0646 \u06a9\u0627 \u0628\u0644 \u062f\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u0641\u06cc\u0635\u0644\u06c1 \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 \u0622\u067e \u0627\u0633\u06d2 \u06a9\u0628 \u062a\u06a9 \u0631\u06a9\u06be\u0646\u0627 \u0686\u0627\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0627\u0633 \u06a9\u06cc \u0648\u062c\u06c1 \u0628\u062a\u0627\u0626\u06cc\u06ba \u0627\u0648\u0631 \u0642\u06cc\u0645\u062a \u0645\u0642\u0631\u0631 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-plaintext\">AWS daily cost:              ~$1.25\/day (infra\/aws\/COST.md)\nRetention window:            ___ days\nDecommission date:           ___\nTotal safety-margin cost:    ___ days \u00d7 $1.25 = $___\n<\/code><\/pre>\n<p>\u0627\u0633 \u0644\u06cc\u0628 \u0645\u06cc\u06ba\u060c \u06a9\u0648\u0626\u06cc \u0627\u0636\u0627\u0641\u06cc \u062f\u0646 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u0646\u06c1\u06cc\u06ba \u06a9\u06cc\u06d2 \u06af\u0626\u06d2 \u062a\u06be\u06d2 \u0627\u0648\u0631 100% GKE \u06a9\u0648 \u0638\u0627\u06c1\u0631 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0633\u06cc \u062f\u0646 AWS \u06a9\u0645\u067e\u06cc\u0648\u0679 \u06a9\u0648 \u062e\u062a\u0645 \u06a9\u0631 \u062f\u06cc\u0627 \u06af\u06cc\u0627 \u062a\u06be\u0627\u06d4 \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u06cc\u06c1 \u0627\u06cc\u06a9 \u062c\u062f\u0627\u06af\u0627\u0646\u06c1 \u0645\u0634\u0642 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u06cc\u06a9 \u062d\u0642\u06cc\u0642\u06cc \u06a9\u0645\u067e\u0646\u06cc AWS \u067e\u0631 \u0627\u06cc\u06a9 \u06cc\u0627 \u062f\u0648 \u06c1\u0641\u062a\u06d2 \u0631\u06c1 \u0633\u06a9\u062a\u06cc \u06c1\u06d2\u06d4 \u0686\u06be\u0648\u0679\u06cc \u06a9\u06be\u0691\u06a9\u06cc\u0627\u06ba \u067e\u06cc\u0633\u06d2 \u0628\u0686\u0627\u062a\u06cc \u06c1\u06cc\u06ba\u06d4 \u0644\u0645\u0628\u06cc \u0644\u0645\u0628\u0627\u0626\u06cc \u0622\u067e \u06a9\u0648 \u0632\u06cc\u0627\u062f\u06c1 \u0627\u0639\u062a\u0645\u0627\u062f \u062f\u06d2 \u06af\u06cc\u06d4 \u063a\u0644\u0637\u06cc \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \"\u0627\u0633\u06d2 \u0635\u0631\u0641 \u0627\u0633 \u0635\u0648\u0631\u062a \u0645\u06cc\u06ba \u0631\u06a9\u06be\u06cc\u06ba\" \u0627\u0648\u0631 \u0627\u0633\u06d2 \u06a9\u06be\u0644\u0627 \u0686\u06be\u0648\u0691 \u062f\u06cc\u06ba\u060c \u062c\u0633 \u067e\u0631 \u06c1\u0631 \u0631\u0648\u0632 \u067e\u06cc\u0633\u06d2 \u062e\u0631\u0686 \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u0622\u067e \u06a9\u0628\u06be\u06cc \u062f\u0648\u0628\u0627\u0631\u06c1 \u0646\u06c1\u06cc\u06ba \u062c\u0627\u062a\u06d2\u06d4<\/p>\n<p>\u0627\u0633 \u0628\u0627\u062a \u06a9\u0648 \u06cc\u0642\u06cc\u0646\u06cc \u0628\u0646\u0627\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u06c1 \u0688\u06cc\u0688 \u0644\u0627\u0626\u0646 \u06a9\u0627 \u062f\u0628\u0627\u0624 \u0622\u067e \u06a9\u0648 \u0641\u06cc\u0635\u0644\u06d2 \u06a9\u0631\u0646\u06d2 \u067e\u0631 \u0645\u062c\u0628\u0648\u0631 \u0646\u06c1 \u06a9\u0631\u06d2\u06d4<\/p>\n<p><strong>\u0627\u0633 \u0644\u06cc\u0628\u0627\u0631\u0679\u0631\u06cc \u06a9\u06d2 \u0642\u0648\u0627\u0646\u06cc\u0646:<\/strong> \u0648\u0632\u0646 0\/100\u060c \u06af\u06cc\u0679 5\/5\u060c \u0644\u0648\u0688 \u0679\u06cc\u0633\u0679 <code>failed=0<\/code>HPA 1 \u06c1\u06d2 \u0627\u0648\u0631 \u06a9\u0648\u0626\u06cc \u0631\u0648\u0644 \u0628\u06cc\u06a9 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4<\/p>\n<p>\u0622\u062e\u0631 \u0645\u06cc\u06ba\u060c \u0627\u0633 \u0628\u0627\u062a \u06a9\u0648 \u06cc\u0642\u06cc\u0646\u06cc \u0628\u0646\u0627\u0626\u06cc\u06ba \u06a9\u06c1 \u0622\u067e \u06a9\u06d2 \u067e\u0627\u0633 \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u06a9\u0648\u0626\u06cc \u0627\u0648\u0631 \u0686\u06cc\u0632 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2 \u062c\u0648 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u0622\u067e \u06a9\u06d2 \u0644\u0686\u06a9\u062f\u0627\u0631 IP \u06a9\u06cc \u0637\u0631\u0641 \u0627\u0634\u0627\u0631\u06c1 \u06a9\u0631\u062a\u06cc \u06c1\u0648\u060c \u062c\u06cc\u0633\u06d2 \u06a9\u06c1 \u0628\u06a9 \u0645\u0627\u0631\u06a9\u060c \u06a9\u0633\u06cc \u062f\u0648\u0633\u0631\u06d2 \u0633\u0633\u0679\u0645 \u067e\u0631 \u06c1\u0627\u0631\u0688 \u06a9\u0648\u0688 \u0634\u062f\u06c1 URL\u060c \u06cc\u0627 \u0644\u0648\u0688 \u0628\u06cc\u0644\u0646\u0633 \u06a9\u06d2 \u0645\u0648\u062c\u0648\u062f \u06c1\u0648\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0627\u06cc\u06a9 \u0628\u06cc\u0631\u0648\u0646\u06cc \u0627\u067e \u0679\u0627\u0626\u0645 \u0645\u0627\u0646\u06cc\u0679\u0631 \u0633\u06cc\u0679 \u0627\u067e \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u0648\u06d4<\/p>\n<h4 id=\"heading-done-when\">\u0645\u06a9\u0645\u0644 \u06c1\u0648\u0646\u06d2 \u067e\u0631:<\/h4>\n<ul>\n<li>\n<p>\u0645\u06cc\u06ba \u0646\u06d2 \u067e\u06cc\u062f\u0627\u0648\u0627\u0631 \u06a9\u06d2 \u0639\u0645\u0644 \u06a9\u0648 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u0627\u0648\u0631 \u062a\u062d\u0631\u06cc\u0631\u06cc \u0637\u0648\u0631 \u067e\u0631 \u062f\u06cc\u06a9\u06be\u0627\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0627\u0646\u062a\u0628\u0627\u06c1\u06cc \u062c\u06af\u06c1\u06cc\u06ba \u0644\u0627\u06af \u0627\u0646 \u06c1\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0635\u0644\u0627\u062d\u06cc\u062a \u06a9\u0627 \u062c\u0627\u0626\u0632\u06c1 \u0644\u06cc\u06ba \u0627\u0648\u0631 CUD \u06a9\u06d2 \u062a\u0639\u06cc\u0646 \u06a9\u0648 \u0631\u06cc\u06a9\u0627\u0631\u0688 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>\u062d\u0648\u0627\u0644\u06af\u06cc \u06a9\u0627 \u0646\u0648\u0679 \u0645\u0648\u062c\u0648\u062f \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0628\u0631\u0642\u0631\u0627\u0631 \u0631\u06a9\u06be\u0646\u06d2 \u06a9\u06cc \u0645\u062f\u062a\u060c \u0636\u0627\u0626\u0639 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u062a\u0627\u0631\u06cc\u062e\u060c \u0644\u0627\u06af\u062a \u0627\u0648\u0631 \u0642\u0648\u0627\u0639\u062f \u062f\u0631\u062c \u06c1\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<\/ul>\n<h3 id=\"heading-chapter-26-retire-the-aws-server\">\u0628\u0627\u0628 26\u06d4 AWS \u0633\u0631\u0648\u0631 \u06a9\u0627 \u062e\u0627\u062a\u0645\u06c1<\/h3>\n<p><em>\u062c\u0645\u0639\u06c1 3 \u0628\u062c\u06d2<\/em><\/p>\n<p>\u062a\u0627\u0631\u06cc\u062e \u0622\u0686\u06a9\u06cc \u06c1\u06d2 \u0627\u0648\u0631 \u0628\u0627\u0628 25 \u06a9\u06d2 \u0642\u0648\u0627\u0639\u062f \u067e\u0648\u0631\u06d2 \u06c1\u0648\u0686\u06a9\u06d2 \u06c1\u06cc\u06ba\u06d4 EC2 \u0633\u0631\u0648\u0631 \u06a9\u0648 \u06c1\u0679\u0627 \u062f\u06cc\u06ba \u0627\u0648\u0631 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u06a9\u0648 \u0631\u06a9\u06be\u06cc\u06ba\u06d4 \u06cc\u06c1 \u0627\u0633 \u06c1\u062c\u0631\u062a \u06a9\u0627 \u062d\u0635\u06c1 \u0646\u06c1\u06cc\u06ba \u062a\u06be\u0627\u06d4<\/p>\n<h4 id=\"heading-steps\">\u0642\u062f\u0645<\/h4>\n<p>\u0631\u06cc\u067e\u0648\u0632\u0679\u0631\u06cc \u0631\u0648\u0679 \u067e\u0631 \u062d\u062a\u0645\u06cc \u062c\u0627\u0646\u0686 \u067e\u0691\u062a\u0627\u0644 \u06a9\u06cc \u062c\u0627\u062a\u06cc \u06c1\u06d2\u06d4 GKE \u06a9\u0648 \u06af\u06cc\u0679 \u0633\u06d2 \u06af\u0632\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0639\u0648\u0627\u0645\u06cc \u067e\u062a\u06d2 \u062f\u0631\u06a9\u0627\u0631 \u06c1\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">HOST=$(terraform -chdir=infra\/gcp\/terraform\/08-edge output -raw public_hostname)\n.\/scripts\/promotion-gate.sh \"https:\/\/$HOST\" \n  alice@clearpay.dev password123 bob@clearpay.dev\n<\/code><\/pre>\n<p>\u067e\u06be\u0631 \u06cc\u0642\u06cc\u0646\u06cc \u0628\u0646\u0627\u0626\u06cc\u06ba \u06a9\u06c1 Terraform \u0627\u0646 \u0633\u0631\u0648\u0631\u0632 \u06a9\u0648 \u0679\u0631\u06cc\u06a9 \u06a9\u0631 \u0631\u06c1\u0627 \u06c1\u06d2 \u062c\u0646\u06c1\u06cc\u06ba \u0622\u067e \u06c1\u0679\u0627\u0646\u0627 \u0686\u0627\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">cd infra\/aws\/terraform\nterraform state show aws_instance.api   # confirm you have the right resource\n<\/code><\/pre>\n<p>\u0627\u06af\u0644\u0627\u060c \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u0630\u062e\u06cc\u0631\u06c1 \u06a9\u06cc \u062c\u0691 \u067e\u0631 \u0648\u0627\u067e\u0633 \u062c\u0627\u0626\u06cc\u06ba: <code>cd ..\/..\/..<\/code>\u0635\u0631\u0641 AWS \u06a9\u0645\u067e\u06cc\u0648\u0679 \u0648\u0633\u0627\u0626\u0644 \u06a9\u0648 \u06c1\u0679\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-bash\">.\/scripts\/teardown-aws-compute.sh\n# Pass --yes to add -auto-approve after you have read a plan once.\n<\/code><\/pre>\n<p>\u0627\u0633 \u0642\u062f\u0645 \u06a9\u06d2 \u0628\u0639\u062f\u060c AWS \u0645\u06cc\u06ba \u06a9\u0648\u0626\u06cc \u0631\u0648\u0644 \u0628\u06cc\u06a9 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0628\u0627\u0628 25 \u0645\u06cc\u06ba \u0622\u067e \u06a9\u06d2 \u0641\u06cc\u0635\u0644\u06d2 \u06a9\u0627 \u062e\u0644\u0627\u0635\u06c1 \u06c1\u06d2\u06d4<\/p>\n<h4 id=\"heading-read-the-destroy-plan\">\u062a\u0628\u0627\u06c1\u06cc \u06a9\u0627 \u0645\u0646\u0635\u0648\u0628\u06c1 \u067e\u0691\u06be\u06cc\u06ba<\/h4>\n<p>\u0627\u0633\u06a9\u0631\u067e\u0679 \u0635\u0631\u0641 \u062f\u0631\u062c \u0630\u06cc\u0644 \u0622\u0626\u0679\u0645\u0632 \u06a9\u0648 \u062d\u0630\u0641 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>RDS \u0628\u0631\u0642\u0631\u0627\u0631 \u06c1\u06d2\u06d4<\/p>\n<p>\u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u06a9\u06d2 \u0642\u0648\u0627\u0639\u062f \u0627\u0646 \u06a9\u06d2 \u0627\u067e\u0646\u06d2 Terraform \u0648\u0633\u0627\u0626\u0644 \u06c1\u06cc\u06ba\u06d4 <code>aws_security_group_rule.db_from_api<\/code>\u0627\u0633\u06a9\u0631\u067e\u0679 \u067e\u06c1\u0644\u06d2 \u0627\u0633\u06d2 \u06c1\u0679\u0627 \u062f\u06d2 \u06af\u0627\u06d4 \u0627\u06af\u0631 \u0642\u0627\u0639\u062f\u06c1 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u0633\u06cc\u06a9\u06cc\u0648\u0631\u0679\u06cc \u06af\u0631\u0648\u067e \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u0645\u0648\u062c\u0648\u062f \u06c1\u06d2 \u062a\u0648\u060c AWS API \u0633\u06cc\u06a9\u06cc\u0648\u0631\u0679\u06cc \u06af\u0631\u0648\u067e \u06a9\u0648 \u062d\u0630\u0641 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u0627\u0646\u06a9\u0627\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u062c\u0628\u06a9\u06c1 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 API \u0633\u06cc\u06a9\u06cc\u0648\u0631\u0679\u06cc \u06af\u0631\u0648\u067e \u06a9\u0627 \u062d\u0648\u0627\u0644\u06c1 \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u067e\u0648\u0631\u06cc <code>terraform destroy<\/code> \u06a9\u0648 <code>infra\/aws\/terraform<\/code> PostgreSQL \u06a9\u0648 \u0628\u06be\u06cc \u062d\u0630\u0641 \u06a9\u0631 \u062f\u06cc\u0627 \u062c\u0627\u0626\u06d2 \u06af\u0627\u06d4 \u0627\u0633\u06d2 \u06cc\u06c1\u0627\u06ba \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u0646\u06c1 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<h4 id=\"heading-clean-up-credentials\">\u0627\u067e\u0646\u06d2 \u0627\u0633\u0646\u0627\u062f \u06a9\u0648 \u0635\u0627\u0641 \u06a9\u0631\u06cc\u06ba\u06d4<\/h4>\n<ul>\n<li>\n<p>AWS \u067e\u0631 \u0645\u06cc\u0631\u06cc SSH \u06a9\u0644\u06cc\u062f\u06cc \u062c\u0648\u0691\u06cc \u0645\u06cc\u0631\u06cc \u0627\u0633\u06a9\u0631\u067e\u0679 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u063a\u0627\u0626\u0628 \u06c1\u0648\u06af\u0626\u06cc\u06d4 \u0645\u0642\u0627\u0645\u06cc \u0646\u062c\u06cc \u06a9\u0644\u06cc\u062f \u06a9\u0648 \u062d\u0630\u0641 \u06a9\u0631\u06cc\u06ba\u06d4 <code>~\/.ssh\/clearpay-deployer<\/code> \u0627\u06af\u0631 \u0635\u0631\u0641 \u0627\u0633 \u0633\u0631\u0648\u0631 \u067e\u0631 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06cc\u0627 \u062c\u0627\u0626\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u067e\u0631\u0627\u0646\u06d2 \u0633\u0631\u0648\u0631 \u06a9\u06cc \u0637\u0631\u0641 \u0627\u0634\u0627\u0631\u06c1 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u06cc \u062f\u06cc\u06af\u0631 \u062a\u0645\u0627\u0645 \u0627\u0646\u062f\u0631\u0627\u062c\u0627\u062a \u06a9\u0648 \u06c1\u0679\u0627 \u062f\u06cc\u06ba\u060c \u062c\u06cc\u0633\u06d2 \u067e\u0631\u0627\u0646\u06d2 IP \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0630\u062e\u06cc\u0631\u06c1 \u06a9\u0631\u062f\u06c1 \u0645\u06cc\u0632\u0628\u0627\u0646 \u06cc\u0627 \u0627\u0633\u06a9\u0631\u067e\u0679\u06d4<\/p>\n<\/li>\n<li>\n<p>\u06a9\u0633\u06cc \u0628\u06be\u06cc CI\/CD \u0631\u0627\u0632 \u06cc\u0627 \u0645\u062a\u063a\u06cc\u0631\u0627\u062a \u06a9\u0648 \u06c1\u0679\u0627 \u062f\u06cc\u06ba \u062c\u0648 \u067e\u0631\u0627\u0646\u06d2 \u0633\u0631\u0648\u0631 \u06a9\u0627 \u062d\u0648\u0627\u0644\u06c1 \u062f\u06cc\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<\/ul>\n<h4 id=\"heading-update-the-diagram\">\u062e\u0627\u06a9\u06c1 \u0627\u067e \u0688\u06cc\u0679<\/h4>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/10\/1792188597_315_\u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0648\u06ba-\u06a9\u0648-AWS-\u0633\u06d2-GKE-\u0645\u06cc\u06ba-\u06a9\u06cc\u0633\u06d2-\u0645\u0646\u062a\u0642\u0644-\u06a9\u06cc\u0627-\u062c\u0627\u0626\u06d2\u06d4.png\" alt=\"\u06c1\u0645\u0627\u0631\u06d2 \u0641\u0646 \u062a\u0639\u0645\u06cc\u0631 \u06a9\u0627 \u062a\u0627\u0632\u06c1 \u062a\u0631\u06cc\u0646 \u062e\u0627\u06a9\u06c1\" style=\"display: block;\" width=\"600\" height=\"400\" loading=\"lazy\" title=\"\"><\/p>\n<p>\u0627\u0628 \u0628\u0627\u0628 7 \u0645\u06cc\u06ba \u0688\u0628\u0644 \u06a9\u0644\u0627\u0624\u0688 \u062e\u0627\u06a9\u06c1 \u063a\u0644\u0637 \u06c1\u06d2\u06d4 \u0646\u0626\u06cc \u062a\u0635\u0648\u06cc\u0631 \u0635\u0631\u0641 \u0627\u06cc\u06a9 \u0644\u0648\u0688 \u0628\u06cc\u0644\u0646\u0633\u0631 \u06a9\u06d2 \u067e\u06cc\u0686\u06be\u06d2 GKE \u06c1\u06d2 \u062c\u0633 \u0645\u06cc\u06ba \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u0627\u0628\u06be\u06cc \u0628\u06be\u06cc AWS \u0645\u06cc\u06ba \u06c1\u06d2\u060c \u062c\u06cc\u0633\u0627 \u06a9\u06c1 \u06c1\u0645 \u0646\u06d2 \u0628\u0627\u0628 7 \u0645\u06cc\u06ba \u06a9\u06c1\u0627 \u062a\u06be\u0627 \u06a9\u06c1 \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u06a9\u0648 \u062e\u062a\u0645 \u06a9\u0631 \u062f\u06cc\u0627 \u062c\u0627\u0626\u06d2 \u06af\u0627\u06d4<\/p>\n<h4 id=\"heading-done-when\">\u0645\u06a9\u0645\u0644 \u06c1\u0648\u0646\u06d2 \u067e\u0631:<\/h4>\n<ul>\n<li>\n<p>\u0627\u0646\u06c1\u062f\u0627\u0645 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u06af\u06cc\u0679 \u0639\u0648\u0627\u0645\u06cc \u062e\u0637\u0627\u0628 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06af\u0632\u0631\u0627\u06d4<\/p>\n<\/li>\n<li>\n<p>AWS \u06a9\u0645\u067e\u06cc\u0648\u0679 \u062a\u0628\u0627\u06c1 \u06c1\u0648 \u06af\u06cc\u0627 \u06c1\u06d2 \u0627\u0648\u0631 RDS \u0627\u0628 \u0628\u06be\u06cc \u0645\u0648\u062c\u0648\u062f \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0645\u0642\u0627\u0645\u06cc \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u06a9\u06cc\u0632 \u06a9\u0648 \u06c1\u0679\u0627 \u062f\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2 \u06cc\u0627 \u062c\u0627\u0646 \u0628\u0648\u062c\u06be \u06a9\u0631 \u0645\u062d\u0641\u0648\u0638 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u06cc\u06c1 \u0627\u0633 \u0633\u06d2 \u0645\u06cc\u0644 \u06a9\u06be\u0627\u062a\u0627 \u06c1\u06d2 \u062c\u0648 \u0622\u0631\u06a9\u06cc\u0679\u06cc\u06a9\u0686\u0631 \u0688\u0627\u06cc\u0627\u06af\u0631\u0627\u0645 \u0686\u0644 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<\/ul>\n<h3 id=\"heading-chapter-27-tear-down-gcp-and-the-database\">\u0628\u0627\u0628 27 \u062c\u06cc \u0633\u06cc \u067e\u06cc \u0627\u0648\u0631 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u06a9\u0648 \u062e\u062a\u0645 \u06a9\u0631\u0646\u0627<\/h3>\n<p><em>\u062c\u0645\u0639\u06c1 \u0634\u0627\u0645 5:30 \u0628\u062c\u06d2<\/em><\/p>\n<p>\u062f\u0641\u062a\u0631 \u062e\u0627\u0644\u06cc \u06c1\u0648 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4 \u062f\u0648\u0646\u0648\u06ba \u0628\u0627\u062f\u0644 \u0627\u0628 \u0628\u06be\u06cc \u06af\u06be\u0646\u0679\u06d2 \u06a9\u06d2 \u062d\u0633\u0627\u0628 \u0633\u06d2 \u0686\u0627\u0631\u062c \u06c1\u0648 \u0631\u06c1\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u06cc\u06c1 \u0627\u06cc\u06a9 \u062a\u062c\u0631\u0628\u06c1 \u06af\u0627\u06c1 \u06c1\u06d2\u06d4 \u0627\u06cc\u06a9 \u0628\u0627\u0631 \u062c\u0628 \u0622\u067e \u06a9\u06d2 \u0646\u0648\u0679\u0633 \u0645\u06a9\u0645\u0644 \u06c1\u0648 \u062c\u0627\u0626\u06cc\u06ba\u060c \u062a\u0648 \u0627\u06cc\u0633\u06cc \u06a9\u0648\u0626\u06cc \u0628\u06be\u06cc \u0686\u06cc\u0632 \u06c1\u0679\u0627 \u062f\u06cc\u06ba \u062c\u0633 \u067e\u0631 \u0622\u067e \u06a9\u06d2 \u067e\u06cc\u0633\u06d2 \u062e\u0631\u0686 \u06c1\u0648\u06ba\u060c \u0628\u0634\u0645\u0648\u0644 \u06af\u06cc\u0679 \u0648\u06d2 \u0644\u0648\u0688 \u0628\u06cc\u0644\u0646\u0633\u0631\u0632\u060c GKE \u0645\u0634\u06cc\u0646\u06cc\u06ba\u060c \u06a9\u0644\u0627\u0624\u0688 NAT\u060c \u0631\u062c\u0633\u0679\u0631\u06cc\u0627\u06ba\u060c \u0627\u0648\u0631 RDS \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633\u06d4<\/p>\n<p>\u06a9\u0633\u06cc \u0628\u06be\u06cc \u0686\u06cc\u0632 \u06a9\u0648 \u062e\u062a\u0645 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u06c1\u062c\u0631\u062a \u06a9\u06cc \u062a\u0627\u0631\u06cc\u062e 28 \u0628\u0627\u0628 \u0645\u06a9\u0645\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 \u0627\u0646 \u0633\u06d2 \u062d\u062a\u0645\u06cc \u0641\u0646 \u062a\u0639\u0645\u06cc\u0631\u060c \u0645\u0646\u062a\u0642\u0644\u06cc \u06a9\u06d2 \u0646\u062a\u0627\u0626\u062c\u060c \u06a9\u0627\u0631\u06a9\u0631\u062f\u06af\u06cc \u06a9\u06d2 \u0646\u0645\u0628\u0631\u060c \u0627\u0648\u0631 \u06a9\u0644 \u0644\u0627\u06af\u062a \u06a9\u0648 \u062f\u0633\u062a\u0627\u0648\u06cc\u0632 \u06a9\u0631\u0646\u06d2 \u06a9\u0648 \u06a9\u06c1\u06cc\u06ba\u06d4 \u0627\u06af\u0631 \u0622\u067e \u06a9\u0648 \u0627\u0628 \u0628\u06be\u06cc \u0686\u0644\u0627\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u0646\u0638\u0627\u0645 \u06a9\u06d2 \u062b\u0628\u0648\u062a \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2 \u062a\u0648 \u0627\u0633\u06d2 \u0627\u0628\u06be\u06cc \u062c\u0645\u0639 \u06a9\u0631\u06cc\u06ba\u06d4 \u0627\u06af\u0631 \u0622\u067e \u0628\u0646\u06cc\u0627\u062f\u06cc \u0688\u06be\u0627\u0646\u0686\u06d2 \u06a9\u0648 \u062a\u0628\u0627\u06c1 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u0648\u06c1 \u0631\u06cc\u0626\u0644 \u0679\u0627\u0626\u0645 \u067e\u06cc\u0645\u0627\u0626\u0634\u06cc\u06ba \u0645\u0632\u06cc\u062f \u062f\u0633\u062a\u06cc\u0627\u0628 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u06ba \u06af\u06cc\u06d4<\/p>\n<h4 id=\"heading-steps\">\u0642\u062f\u0645<\/h4>\n<p>\u0630\u062e\u06cc\u0631\u06c1 \u06a9\u06cc \u062c\u0691 \u0633\u06d2:<\/p>\n<pre><code class=\"language-bash\">.\/scripts\/teardown-gcp.sh\n# Pass --yes to skip the prompt and -auto-approve each stage.\n<\/code><\/pre>\n<p><strong>\u0633\u06a9\u0631\u067e\u0679:<\/strong><\/p>\n<ol>\n<li>\n<p>\u06af\u06cc\u0679 \u0648\u06d2 \u0627\u0648\u0631 \u0627\u0633 \u06a9\u06cc \u067e\u06cc\u062f\u0627\u0648\u0627\u0631 \u0627\u0648\u0631 \u0627\u0633\u0679\u06cc\u062c\u0646\u06af \u0648\u0631\u06a9 \u0628\u0648\u062c\u06be \u06a9\u0648 \u062d\u0630\u0641 \u06a9\u0631\u06cc\u06ba\u06d4 Kubernetes \u06af\u06cc\u0679 \u0648\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06af\u0648\u06af\u0644 \u0644\u0648\u0688 \u0628\u06cc\u0644\u0646\u0633\u0631 \u06a9\u0627 \u0627\u06cc\u06a9 \u062d\u0635\u06c1 \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 Terraform \u0627\u0633 \u06a9\u06d2 \u0628\u0627\u0631\u06d2 \u0645\u06cc\u06ba \u0646\u06c1\u06cc\u06ba \u062c\u0627\u0646\u062a\u0627\u06d4 \u0627\u06af\u0631 \u0622\u067e \u067e\u06c1\u0644\u06d2 \u0627\u0633\u06d2 \u062d\u0630\u0641 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u062a\u0648 \u0622\u067e Google \u0633\u06d2 \u0627\u067e\u0646\u0627 \u06af\u06cc\u0679 \u0648\u06d2 \u06c1\u0679\u0627 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0627\u06af\u0631 \u0622\u067e \u0627\u0633\u06d2 \u0686\u06be\u0648\u0691 \u062f\u06cc\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u0622\u067e \u0627\u0646 \u0648\u0633\u0627\u0626\u0644 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u067e\u06be\u0646\u0633 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba \u062c\u0648 Terraform \u0646\u06d2 \u0646\u06c1\u06cc\u06ba \u0628\u0646\u0627\u0626\u06d2 \u062a\u06be\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u067e\u06be\u0627\u0646\u0633\u06cc <code>terraform destroy<\/code> \u0627\u0644\u0679 \u062a\u0631\u062a\u06cc\u0628 \u0645\u06cc\u06ba: <code>08-edge<\/code> \u2192 <code>07-observability<\/code> \u2192 <code>06-secrets<\/code> \u2192 <code>05-identity<\/code> \u2192 <code>04-registry<\/code> \u2192 <code>03-gke<\/code> \u2192 <code>02-network<\/code> \u2192 <code>01-foundation<\/code>. \u0628\u0639\u062f \u06a9\u06d2 \u0645\u0631\u0627\u062d\u0644 \u067e\u0686\u06be\u0644\u06d2 \u0645\u0631\u0627\u062d\u0644 \u067e\u0631 \u0645\u0646\u062d\u0635\u0631 \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0627\u0633 \u0644\u06cc\u06d2 \u0648\u06c1 \u067e\u06c1\u0644\u06d2 \u0646\u06cc\u0686\u06d2 \u0622\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<\/ol>\n<p>\u0632\u0645\u0631\u06c1 <code>yes<\/code> \u0627\u0633\u06a9\u0631\u067e\u0679 \u067e\u0631\u0627\u0645\u067e\u0679 \u0633\u06d2 \u06c1\u0631 \u0679\u06cc\u0631\u0627\u0641\u0627\u0631\u0645 \u067e\u0644\u0627\u0646 \u06a9\u0648 \u067e\u0691\u06be\u06cc\u06ba \u0627\u0648\u0631 \u062a\u0635\u062f\u06cc\u0642 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p>\u0646\u0627\u0645 \u06a9\u06cc \u062c\u06af\u06c1 \u0627\u0633 \u0645\u06cc\u06ba \u0648\u0627\u0642\u0639 \u06c1\u0648\u0633\u06a9\u062a\u06cc \u06c1\u06d2: <code>Terminating<\/code> \u0686\u0646\u062f \u0645\u0646\u0679\u0648\u06ba \u06a9\u06d2 \u0644\u06cc\u06d2\u06d4 \u062c\u0627\u0631\u06cc \u0631\u06a9\u06be\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0627\u0633\u06a9\u0631\u067e\u0679 \u06c1\u0631 \u062d\u0630\u0641 \u06a9\u06d2 \u0644\u06cc\u06d2 180 \u0633\u06cc\u06a9\u0646\u0688 \u062a\u06a9 \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u0631\u06d2 \u06af\u0627\u06d4 \u06a9\u0644\u0633\u0679\u0631 \u06a9\u0648 \u062d\u0630\u0641 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u06a9\u0644\u0633\u0679\u0631 \u0628\u06be\u06cc \u06c1\u0679 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u067e\u06be\u0631 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u06a9\u0648 \u06c1\u0679\u0627 \u062f\u06cc\u06ba\u06d4 \u0645\u0646\u062a\u0642\u0644\u06cc \u06a9\u0648 \u062c\u0627\u0646 \u0628\u0648\u062c\u06be \u06a9\u0631 AWS \u0645\u06cc\u06ba \u062e\u062a\u0645 \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u062a\u06be\u0627\u060c \u0644\u06cc\u06a9\u0646 \u0644\u06cc\u0628 \u06a9\u0648 \u0627\u0633 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062a\u0642\u0631\u06cc\u0628\u0627\u064b $0.80 \u0641\u06cc \u062f\u0646 \u0627\u062f\u0627 \u06a9\u0631\u0646\u0627 \u062c\u0627\u0631\u06cc \u0646\u06c1\u06cc\u06ba \u0631\u06a9\u06be\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u06d4<\/p>\n<pre><code class=\"language-bash\">cd infra\/aws\/terraform\nterraform destroy\n<\/code><\/pre>\n<p>\u0622\u062e\u0631 \u0645\u06cc\u06ba\u060c \u0627\u0633\u06d2 \u062d\u0630\u0641 \u06a9\u0631\u06cc\u06ba. <code>api.clearpay.test<\/code> \u0644\u0627\u0626\u0646 <code>\/etc\/hosts<\/code>.<\/p>\n<p>\u06cc\u06c1 \u06a9\u062a\u0627\u0628 GCP \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679\u0633 \u06a9\u0648 \u062a\u062e\u0644\u06cc\u0642 \u06cc\u0627 \u062d\u0630\u0641 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4 \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u06a9\u0648 \u062d\u0630\u0641 \u0646\u06c1 \u06a9\u0631\u06cc\u06ba \u062c\u0628 \u062a\u06a9 \u06a9\u06c1 \u0627\u0633 \u0645\u06cc\u06ba \u0635\u0631\u0641 \u06cc\u06c1 \u0644\u06cc\u0628 \u0646\u06c1 \u06c1\u0648\u06d4<\/p>\n<h4 id=\"heading-done-when\">\u0645\u06a9\u0645\u0644 \u06c1\u0648\u0646\u06d2 \u067e\u0631:<\/h4>\n<ul>\n<li>\n<p><code>kubectl get ns<\/code> \u0627\u0628 \u0638\u0627\u06c1\u0631 \u0646\u06c1\u06cc\u06ba \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4 <code>staging<\/code> \u06cc\u0627 <code>production<\/code>\u06cc\u0627 \u06a9\u0644\u0633\u0679\u0631 \u063a\u0627\u0626\u0628 \u06c1\u0648 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u06c1\u0631 <code>infra\/gcp\/terraform\/0*-*<\/code> \u0633\u0679\u06cc\u062c \u062a\u0628\u0627\u06c1 \u06c1\u0648 \u06af\u06cc\u0627 \u06c1\u06d2<\/p>\n<\/li>\n<li>\n<p><code>terraform destroy<\/code> \u0645\u06cc\u06ba \u062e\u062a\u0645 \u06c1\u0648\u0627 <code>infra\/aws\/terraform<\/code><\/p>\n<\/li>\n<li>\n<p>\u0622\u067e \u06a9\u06d2 GCP \u0627\u0648\u0631 AWS \u0628\u0644 \u0627\u0633 \u0644\u06cc\u0628 \u06a9\u0648 \u0627\u0628\u06be\u06cc \u062a\u06a9 \u0686\u0644\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u0646\u06c1\u06cc\u06ba \u062f\u06a9\u06be\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<\/ul>\n<p>\u06cc\u06c1 \u0686\u0648\u06a9\u06cc \u06c1\u06d2\u06d4 \u06a9\u0627\u0645 \u06c1\u0648 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u0633 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u06a9\u06c1 \u0622\u067e \u0628\u06be\u0648\u0644 \u062c\u0627\u0626\u06cc\u06ba\u060c \u0644\u06a9\u06be\u06cc\u06ba \u06a9\u06c1 \u0627\u0635\u0644 \u0645\u06cc\u06ba \u06a9\u06cc\u0627 \u06c1\u0648\u0627\u060c \u0628\u0634\u0645\u0648\u0644 \u0622\u067e \u06a9\u06d2 \u0628\u0644\u06d4<\/p>\n<h3 id=\"heading-chapter-28-write-the-migration-record\">\u0628\u0627\u0628 28\u06d4 \u0646\u0642\u0644 \u0645\u06a9\u0627\u0646\u06cc \u06a9\u06cc \u062a\u0627\u0631\u06cc\u062e \u0628\u0646\u0627\u0626\u06cc\u06ba<\/h3>\n<p><em>\u0686\u0648\u062a\u06be\u06cc \u0633\u0648\u0645\u0648\u0627\u0631 \u0635\u0628\u062d 9 \u0628\u062c\u06d2<\/em><\/p>\n<p>\u0644\u06a9\u06be\u06cc\u06ba \u06a9\u06c1 \u06a9\u06cc\u0627 \u06c1\u0648\u0627\u060c \u0641\u0646 \u062a\u0639\u0645\u06cc\u0631\u060c \u0628\u0644\u060c \u0627\u0648\u0631 \u062a\u0641\u0635\u06cc\u0644\u0627\u062a \u063a\u0627\u0626\u0628 \u06c1\u0648\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0622\u067e \u06a9\u06cc\u0627 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u06cc\u06ba \u06af\u06d2\u06d4<\/p>\n<h4 id=\"heading-part-1-the-architecture-record\">\u062d\u0635\u06c1 1\u06d4 \u062a\u0639\u0645\u06cc\u0631\u0627\u062a\u06cc \u0631\u06cc\u06a9\u0627\u0631\u0688<\/h4>\n<p><strong>\u067e\u06c1\u0644\u06d2:<\/strong><\/p>\n<pre><code class=\"language-plaintext\">User \u2192 nginx (TLS) \u2192 systemd-managed Node process \u2192 RDS Postgres\n<\/code><\/pre>\n<p>\u0627\u06cc\u06a9 EC2 \u0633\u0631\u0648\u0631\u060c \u0627\u06cc\u06a9 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633\u060c \u0627\u06cc\u06a9 \u0628\u0646\u06cc\u0627\u062f\u06cc \u0646\u06cc\u0679 \u0648\u0631\u06a9 \u062c\u0633\u06d2 \u06a9\u0633\u06cc \u0646\u06d2 \u0688\u06cc\u0632\u0627\u0626\u0646 \u0646\u06c1\u06cc\u06ba \u06a9\u06cc\u0627\u060c \u0627\u0648\u0631 \u0633\u0627\u062f\u06c1 \u067e\u0631\u0627\u0646\u06d2 \u0631\u0627\u0632\u06d4 <code>.env<\/code> \u06a9\u0648\u0626\u06cc \u0641\u0627\u0626\u0644 \u0646\u06c1\u06cc\u06ba\u060c \u06a9\u0648\u0626\u06cc \u062e\u0648\u062f\u06a9\u0627\u0631 \u067e\u06cc\u0645\u0627\u0646\u06c1 \u0646\u06c1\u06cc\u06ba\u060c \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u06a9\u0627 \u0639\u0645\u0644 \u062f\u0633\u062a\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0686\u0644\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p><strong>\u0646\u0642\u0644 \u0645\u06a9\u0627\u0646\u06cc:<\/strong><\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/10\/1792188598_598_\u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0648\u06ba-\u06a9\u0648-AWS-\u0633\u06d2-GKE-\u0645\u06cc\u06ba-\u06a9\u06cc\u0633\u06d2-\u0645\u0646\u062a\u0642\u0644-\u06a9\u06cc\u0627-\u062c\u0627\u0626\u06d2\u06d4.png\" alt=\"\u06c1\u062c\u0631\u062a \u06a9\u06cc \u0645\u062f\u062a \u06a9\u06d2 \u062f\u0648\u0631\u0627\u0646 \u0641\u0646 \u062a\u0639\u0645\u06cc\u0631 \u06a9\u0627 \u062e\u0627\u06a9\u06c1\" style=\"display: block;\" width=\"600\" height=\"400\" loading=\"lazy\" title=\"\"><\/p>\n<p><strong>\u0628\u0639\u062f \u0645\u06cc\u06ba:<\/strong><\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/10\/1792188598_247_\u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0648\u06ba-\u06a9\u0648-AWS-\u0633\u06d2-GKE-\u0645\u06cc\u06ba-\u06a9\u06cc\u0633\u06d2-\u0645\u0646\u062a\u0642\u0644-\u06a9\u06cc\u0627-\u062c\u0627\u0626\u06d2\u06d4.png\" alt=\"\u06c1\u062c\u0631\u062a \u06a9\u06d2 \u0628\u0639\u062f \u0641\u0646 \u062a\u0639\u0645\u06cc\u0631 \u06a9\u0627 \u062e\u0627\u06a9\u06c1\" style=\"display: block;\" width=\"600\" height=\"400\" loading=\"lazy\" title=\"\"><\/p>\n<p>\u067e\u06be\u0631 \u06c1\u0631 \u0645\u0627\u0688\u0644 \u06a9\u06d2 \u0628\u0627\u0631\u06d2 \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u0645\u062e\u062a\u0635\u0631 \u067e\u06cc\u0631\u0627\u06af\u0631\u0627\u0641 \u0644\u06a9\u06be\u06cc\u06ba\u06d4<\/p>\n<ul>\n<li>\n<p><strong>\u0679\u0631\u06cc\u0641\u06a9<\/strong>: \u0639\u0627\u0644\u0645\u06cc \u0628\u06cc\u0631\u0648\u0646\u06cc \u0627\u06cc\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u0644\u0648\u0688 \u0628\u06cc\u0644\u0646\u0633\u0631 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0648\u0632\u0646\u06cc \u067e\u0633\u062f\u06cc\u062f\u060c \u062c\u0633 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u06cc\u0627 \u06af\u06cc\u0627: <code>shift-traffic.sh<\/code>. \u06cc\u06c1 DNS \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u0627\u0633 \u06a9\u06cc \u0648\u062c\u06c1 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u06a9\u06cc\u0634\u0688 DNS \u062c\u0648\u0627\u0628\u0627\u062a \u0631\u0648\u0644 \u0628\u06cc\u06a9\u0633 \u06a9\u0648 \u0633\u0633\u062a \u06a9\u0631 \u062f\u06cc\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u062a\u0642\u0633\u06cc\u0645<\/strong>: GitHub \u0627\u06cc\u06a9\u0634\u0646\u0632 \u0627\u0633\u0679\u06cc\u062c\u0646\u06af \u06a9\u06d2 \u0644\u06cc\u06d2 \u062a\u0645\u0627\u0645 \u0648\u0639\u062f\u0648\u06ba \u06a9\u06cc \u062a\u0639\u0645\u06cc\u0631\u060c \u0628\u0627\u0632\u06cc\u0627\u0641\u062a \u0627\u0648\u0631 \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u06a9\u0631\u062a\u06cc \u06c1\u06cc\u06ba\u06d4 \u067e\u0631\u0648\u0688\u06a9\u0634\u0646\u0632 \u06a9\u0648 \u0635\u0631\u0641 \u0627\u0633 \u0648\u0642\u062a \u062f\u0631\u0633\u062a \u0633\u0679\u06cc\u062c\u0646\u06af \u0627\u0645\u06cc\u062c\u0632 \u0645\u0644\u062a\u06cc \u06c1\u06cc\u06ba \u062c\u0628 \u0627\u0646\u06c1\u06cc\u06ba \u067e\u0631\u0648\u0645\u0648\u0634\u0646\u0644 \u06af\u06cc\u0679 \u0627\u0648\u0631 \u062c\u0627\u0626\u0632\u06c1 \u0644\u06cc\u0646\u06d2 \u0648\u0627\u0644\u0648\u06ba \u06a9\u06cc \u0637\u0631\u0641 \u0633\u06d2 \u0645\u0646\u0638\u0648\u0631\u06cc \u0645\u0644 \u062c\u0627\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633<\/strong>: \u06cc\u06c1 \u06a9\u0628\u06be\u06cc \u0645\u0646\u062a\u0642\u0644 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u0627\u06d4 \u0628\u0627\u0628 4 \u0645\u06cc\u06ba \u0648\u06c1\u06cc \u0622\u0631 \u0688\u06cc \u0627\u06cc\u0633 \u0645\u062b\u0627\u0644 \u067e\u0648\u0631\u06d2 \u0648\u0642\u062a \u0633\u0686\u0627\u0626\u06cc \u06a9\u0627 \u0648\u0627\u062d\u062f \u0630\u0631\u06cc\u0639\u06c1 \u0631\u06c1\u0627\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u0633\u06cc\u06a9\u0648\u0631\u0679\u06cc<\/strong>: \u067e\u0648\u0688 \u0627\u0648\u0631 \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u062f\u0648\u0646\u0648\u06ba \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u0627\u0645 \u06a9\u06d2 \u0628\u0648\u062c\u06be \u06a9\u06cc \u0634\u0646\u0627\u062e\u062a\u06d4 \u0688\u0627\u0624\u0646 \u0644\u0648\u0688 \u06a9\u0631\u062f\u06c1 \u0633\u0631\u0648\u0633 \u0627\u06a9\u0627\u0624\u0646\u0679 \u06a9\u0644\u06cc\u062f \u06a9\u0633\u06cc \u0628\u06be\u06cc \u0648\u0642\u062a \u0645\u0648\u062c\u0648\u062f \u0646\u06c1\u06cc\u06ba \u062a\u06be\u06cc\u06d4 \u0631\u0627\u0632 \u0631\u0627\u0632 \u0645\u06cc\u0646\u06cc\u062c\u0631 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06c1 \u0641\u0631\u0627\u06c1\u0645 \u06a9\u06cc\u06d2 \u062c\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u0645\u0634\u0627\u06c1\u062f\u06c1<\/strong>: API \u06a9\u0627 \u0627\u067e\u0646\u0627 JSON \u0644\u0627\u06af \u0627\u0648\u0631 <code>\/metrics<\/code> \u0627\u062e\u062a\u062a\u0627\u0645\u06cc \u067e\u0648\u0627\u0626\u0646\u0679\u0633 AWS \u0627\u0648\u0631 GKE \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u062c\u06cc\u0633\u06d2 \u06c1\u06cc\u06ba\u060c \u0627\u0648\u0631 \u06a9\u0644\u0627\u0624\u0688 \u0644\u0627\u06af\u0646\u06af \u0633\u06d2 \u0644\u0627\u06af \u067e\u0631 \u0645\u0628\u0646\u06cc \u0627\u06cc\u0631\u0631 \u0645\u06cc\u0679\u0631\u06a9\u0633 \u0628\u06be\u06cc \u06c1\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u0631\u0648\u0644 \u0628\u06cc\u06a9<\/strong>: \u0679\u0631\u06cc\u0641\u06a9 \u06a9\u06d2 \u0648\u0632\u0646 \u06a9\u0648 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u0646\u06d2 \u0627\u0648\u0631 AWS \u067e\u0631 \u062c\u06be\u0646\u0688\u06d2 \u0644\u06af\u0627\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u0627\u0633\u06a9\u0631\u067e\u0679\u060c \u067e\u06c1\u0644\u06cc \u0634\u0641\u0679 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u062c\u0627\u0646\u0686\u0627 \u06af\u06cc\u0627\u06d4<\/p>\n<\/li>\n<\/ul>\n<h4 id=\"heading-part-2-the-postmortem\">\u062d\u0635\u06c1 2\u06d4 \u067e\u0648\u0633\u0679 \u0645\u0627\u0631\u0679\u0645<\/h4>\n<p>\u0622\u067e \u0686\u0627\u0631\u0648\u06ba \u0645\u0644 \u06a9\u0631 \u0646\u0648\u0679\u0648\u06ba \u06a9\u0648 \u062f\u06cc\u06a9\u06be\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0645\u0627\u06cc\u0627 \u0627\u0633 \u0633\u0648\u0627\u0644 \u0633\u06d2 \u0634\u0631\u0648\u0639 \u06c1\u0648\u062a\u06cc \u06c1\u06d2 \u062c\u0633 \u06a9\u06cc \u06c1\u0631 \u06a9\u0648\u0626\u06cc \u062a\u0648\u0642\u0639 \u06a9\u0631\u062a\u0627 \u06c1\u06d2:<\/p>\n<p>\u0645\u0627\u06cc\u0627: \"\u06a9\u06cc\u0627 Kubernetes \u0645\u0633\u0626\u0644\u06c1 \u062a\u06be\u0627\u061f\"<\/p>\n<p>\"\u0646\u06c1\u06cc\u06ba\u060c \u0627\u0633 \u0646\u06d2 \u0648\u06c1\u06cc \u06a9\u06cc\u0627 \u062c\u0648 \u06c1\u0645 \u0646\u06d2 \u0627\u0633\u06d2 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u06c1\u0627 \u062a\u06be\u0627\u06d4 \u0635\u0631\u0641 \u0646\u0648\u0679 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u06cc \u0686\u06cc\u0632 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u062a\u06be\u06cc\u06d4 API \u06a9\u06cc \u06c1\u0631 \u06a9\u0627\u067e\u06cc \u0645\u06cc\u06ba 10 \u06a9\u0646\u06a9\u0634\u0646 \u06a9\u06be\u0644\u06d2 \u06c1\u0648 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u060c GKE \u0627\u06cc\u06a9 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u06a9\u0627\u067e\u06cc\u0627\u06ba \u0686\u0644\u0627 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 AWS \u0627\u0628 \u0628\u06be\u06cc \u0627\u06cc\u06a9 \u06c1\u06cc \u0648\u0642\u062a \u0645\u06cc\u06ba \u0635\u0627\u0631\u0641\u06cc\u0646 \u06a9\u06cc \u062e\u062f\u0645\u062a \u06a9\u0631 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u06a9\u06cc \u062d\u062f \u06a9\u06d2 \u0642\u0631\u06cc\u0628 \u067e\u06c1\u0646\u0686\u0646\u06d2 \u0645\u06cc\u06ba \u0627\u0636\u0627\u0641\u06c1 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u0633 \u0686\u06be\u0648\u0679\u06d2 \u06a9\u0644\u0633\u0679\u0631 \u0645\u06cc\u06ba \u06a9\u0648\u0626\u06cc \u0645\u0633\u0626\u0644\u06c1 \u0646\u06c1\u06cc\u06ba \u062a\u06be\u0627\u060c \u062c\u0648 \u06a9\u06c1 81 \u06a9\u06d2 \u0645\u0642\u0627\u0628\u0644\u06d2 \u0645\u06cc\u06ba 40 \u06a9\u0646\u06a9\u0634\u0646\u0632 \u062a\u06a9 \u067e\u06c1\u0646\u0686 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4 \u0627\u06cc\u06a9 \u06a9\u0644\u0633\u0679\u0631 \u0645\u06cc\u06ba \u062c\u0648 8 \u06a9\u0627\u067e\u06cc\u0648\u06ba \u062a\u06a9 \u067e\u06cc\u0645\u0627\u0646\u06c1 \u06c1\u06d2\u060c \u0648\u06c1\u06cc \u06a9\u0644 \u062d\u062f \u0633\u06d2 \u062a\u062c\u0627\u0648\u0632 \u06a9\u0631 \u062c\u0627\u0626\u06d2 \u06af\u0627\u06d4\"<\/p>\n<p>\u062f\u0627\u0646\u06cc\u0627\u0644 \u0646\u06d2 \u0633\u0631 \u06c1\u0644\u0627\u06cc\u0627\u06d4 \"\u06cc\u06c1 \u0648\u06c1\u06cc \u06c1\u06d2 \u062c\u0648 \u0645\u06cc\u06ba \u0646\u06d2 \u0627\u067e\u0646\u06cc \u0622\u062e\u0631\u06cc \u06a9\u0645\u067e\u0646\u06cc \u0645\u06cc\u06ba \u06cc\u0627\u062f \u06a9\u06cc\u0627. \u062a\u0645\u0627\u0645 \u0646\u0645\u0628\u0631 \u0648\u06c1\u0627\u06ba \u062a\u06be\u06d2 \u0627\u0648\u0631 \u06a9\u0633\u06cc \u0646\u06d2 \u0627\u0646\u06c1\u06cc\u06ba \u0627\u06cc\u06a9 \u0633\u0627\u062a\u06be \u0646\u06c1\u06cc\u06ba \u0644\u06af\u0627\u06cc\u0627. \u0622\u067e \u0646\u06d2 \u0679\u0631\u06cc\u0641\u06a9 \u06a9\u06d2 \u0645\u0646\u062a\u0642\u0644 \u06c1\u0648\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u06cc\u06c1 \u06a9\u06cc\u0627.\"<\/p>\n<p>\u0639\u0645\u0627\u0631\u06c1: \"\u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u06a9\u06cc \u0631\u0642\u0645 \u06a9\u0627 \u06a9\u06cc\u0627 \u06c1\u0648\u06af\u0627\u061f \u06a9\u06cc\u0627 \u062a\u0645\u0627\u0645 \u0679\u0631\u0627\u0646\u0633\u0641\u0631\u0632 \u06a9\u0627 \u0628\u0644 \u0627\u06cc\u06a9 \u0628\u0627\u0631 \u062f\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u061f\"<\/p>\n<p>\"\u06c1\u0627\u06ba\u060c \u0641\u06cc \u0634\u0641\u0679 \u0645\u06cc\u06ba 3 \u063a\u06cc\u0631\u0645\u0639\u0645\u0648\u0644\u06cc \u0686\u0627\u0628\u06cc\u0627\u06ba \u0628\u0631\u0642\u0631\u0627\u0631 \u0631\u06a9\u06be\u06cc \u06af\u0626\u06cc\u06ba\u06d4 \u062d\u062a\u06cc\u0670 \u06a9\u06c1 \u0645\u06cc\u06ba \u0646\u06d2 100% GKE \u067e\u0631 \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0686\u0644\u0627\u06cc\u0627 \u0627\u0648\u0631 \u06a9\u0648\u0626\u06cc \u062f\u0648\u0633\u0631\u0627 \u0686\u0627\u0631\u062c \u0646\u06c1\u06cc\u06ba \u062a\u06be\u0627\u06d4\"<\/p>\n<p>\u0645\u0627\u06cc\u0627 \u0646\u06d2 \u0627\u067e\u0646\u0627 \u0644\u06cc\u067e \u0679\u0627\u067e \u0628\u0646\u062f \u06a9\u0631 \u062f\u06cc\u0627\u06d4 \"\u062a\u0648 \u0627\u06af\u0644\u06cc \u0628\u0627\u0631 \u06c1\u0645 \u0645\u062e\u062a\u0644\u0641 \u0637\u0631\u06cc\u0642\u06d2 \u0633\u06d2 \u06a9\u06cc\u0627 \u06a9\u0631\u06cc\u06ba \u06af\u06d2\u061f\"<\/p>\n<p>\u062f\u0631\u062c \u0630\u06cc\u0644 \u062d\u0635\u0648\u06ba \u06a9\u0648 \u0645\u06a9\u0645\u0644 \u06a9\u0631\u06cc\u06ba:<\/p>\n<p><strong>\u06a9\u06cc\u0627 \u06a9\u0627\u0645 \u06a9\u06cc\u0627:<\/strong><\/p>\n<ul>\n<li>\n<p>GKE \u06a9\u06d2 \u0648\u062c\u0648\u062f \u0633\u06d2 \u067e\u06c1\u0644\u06d2\u060c \u0628\u0644\u0679 \u0627\u0646 \u0622\u0626\u06cc\u0688\u06cc\u0645\u067e\u0648\u0679\u06cc\u0646\u0679 \u06a9\u06cc\u0632 \u0646\u06d2 \u0635\u0627\u0631\u0641\u06cc\u0646 \u06a9\u06cc \u062f\u0648\u0628\u0627\u0631\u06c1 \u06a9\u0648\u0634\u0634\u0648\u06ba \u06a9\u0648 \u067e\u06c1\u0644\u06cc \u06a9\u0648\u0634\u0634 \u0633\u06d2 \u0645\u062e\u062a\u0644\u0641 \u06a9\u0644\u0627\u0624\u0688 \u062a\u06a9 \u0645\u062d\u0641\u0648\u0638 \u0637\u0631\u06cc\u0642\u06d2 \u0633\u06d2 \u067e\u06c1\u0646\u0686\u0646\u06d2 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u062f\u06cc\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0627\u0633\u0679\u06cc\u062c\u0688 \u0679\u06cc\u0631\u0627\u0641\u0627\u0631\u0645 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u06a9\u06c1 \u06c1\u0631 \u0646\u0627\u06a9\u0627\u0645\u06cc \u0627\u06cc\u06a9 \u0645\u0631\u062d\u0644\u06d2 \u06a9\u06cc \u0637\u0631\u0641 \u0627\u0634\u0627\u0631\u06c1 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u06a9\u06c1 \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u0628\u0627\u0644\u06a9\u0644 \u0648\u06c1\u06cc \u062a\u0635\u0648\u06cc\u0631\u06cc\u06ba \u0686\u0644\u0627\u0626\u06cc\u06ba \u062c\u0648 \u06af\u06cc\u0679 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u067e\u06c1\u0646\u0686\u06cc \u062a\u06be\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0631\u0648\u0644 \u0628\u06cc\u06a9 \u06a9\u0627 \u0628\u0627\u0628 20 \u0645\u06cc\u06ba \u062a\u062c\u0631\u0628\u06c1 \u06a9\u06cc\u0627 \u06af\u06cc\u0627\u060c \u0627\u0633 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u06a9\u06c1 \u0627\u0633 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u06d4<\/p>\n<\/li>\n<\/ul>\n<p><strong>\u0627\u0633 \u0644\u06cc\u0628 \u0645\u06cc\u06ba \u062f\u0631\u067e\u06cc\u0634 \u0645\u0633\u0627\u0626\u0644:<\/strong><\/p>\n<ul>\n<li>\n<p>\u0686\u0648\u0646\u06a9\u06c1 \u0645\u0642\u0627\u0645\u06cc \u067e\u0631\u0648\u0645\u06cc\u062a\u06be\u06cc\u0633 \u0646\u06d2 \u06a9\u0628\u06be\u06cc GKE \u0646\u06c1\u06cc\u06ba \u062f\u06cc\u06a9\u06be\u0627\u060c \u0628\u0627\u0628 24 \u0646\u06d2 \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 \u06a9\u06d2 \u0679\u0648\u0679\u0644 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u062d\u0633\u0627\u0628\u06cc \u0686\u06cc\u06a9 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06cc\u0627\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0627\u0644\u0631\u0679 \u067e\u0627\u0644\u06cc\u0633\u06cc \u0645\u06cc\u06ba \u06a9\u0648\u0626\u06cc \u0627\u0637\u0644\u0627\u0639\u06cc \u0686\u06cc\u0646\u0644 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0686\u06be\u0648\u0679\u0627 \u0646\u0648\u0688 \u067e\u0648\u0644 \u0627\u0646 \u067e\u0648\u0688\u0632 \u06a9\u06cc \u062a\u0639\u062f\u0627\u062f \u06a9\u0648 \u0646\u06c1\u06cc\u06ba \u0686\u0644\u0627 \u0633\u06a9\u062a\u0627 \u062c\u0648 \u0627\u06cc\u06a9 \u062d\u0642\u06cc\u0642\u06cc \u06a9\u0645\u067e\u0646\u06cc \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06d2 \u06af\u06cc\u060c \u0644\u06c1\u0630\u0627 \u06a9\u0646\u06a9\u0634\u0646 \u062a\u06be\u0631\u0648\u0679\u0644\u0646\u06af \u06a9\u06d2 \u062e\u0637\u0631\u06d2 \u06a9\u0648 \u062d\u0642\u06cc\u0642\u06cc \u0648\u0642\u062a \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u06a9\u0627\u063a\u0630 \u067e\u0631 \u0686\u06cc\u06a9 \u06a9\u06cc\u0627 \u06af\u06cc\u0627\u06d4<\/p>\n<\/li>\n<li>\n<p>GKE \u06a9\u0627 p95 AWS \u0633\u06d2 \u062a\u0642\u0631\u06cc\u0628\u0627\u064b 4 \u06af\u0646\u0627 \u062a\u06be\u0627\u06d4<\/p>\n<\/li>\n<\/ul>\n<p><strong>\u0628\u0646\u06cc\u0627\u062f\u06cc \u0648\u062c\u06c1:<\/strong> \u062f\u0648 \u0645\u0639\u0642\u0648\u0644 \u062a\u0631\u062a\u06cc\u0628\u0627\u062a\u060c <code>DB_POOL_SIZE=10<\/code> \u0627\u0648\u0631 HPA \u06a9\u06cc <code>maxReplicas<\/code>\u0645\u062e\u062a\u0644\u0641 \u062c\u06af\u06c1\u0648\u06ba \u0633\u06d2 \u0645\u0646\u062a\u062e\u0628\u06d4 \u06a9\u0633\u06cc \u0646\u06d2 \u0628\u06be\u06cc \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u06a9\u06cc \u062d\u062f\u0648\u062f \u06a9\u06d2 \u0644\u06cc\u06d2 \u067e\u0631\u0648\u0688\u06a9\u0679 \u06a9\u0648 \u0627\u0633 \u0648\u0642\u062a \u062a\u06a9 \u0686\u06cc\u06a9 \u0646\u06c1\u06cc\u06ba \u06a9\u06cc\u0627 \u062c\u0628 \u062a\u06a9 \u06a9\u06c1 \u06c1\u062c\u0631\u062a \u062f\u0648\u0646\u0648\u06ba \u0628\u0627\u062f\u0644\u0648\u06ba \u06a9\u0648 \u0628\u06cc\u06a9 \u0648\u0642\u062a \u0646\u06c1\u06cc\u06ba \u0686\u0644\u0627\u062a\u06cc\u06d4 \u0627\u06cc\u06a9 \u0628\u0627\u0631 \u062c\u0628 \u0622\u067e \u0627\u0633\u06d2 \u062a\u0644\u0627\u0634 \u06a9\u0631 \u0644\u06cc\u062a\u06d2 \u06c1\u06cc\u06ba \u062a\u0648 \u062d\u0644 \u067e\u06cc\u0686\u06cc\u062f\u06c1 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u0633\u06d2 \u062a\u0644\u0627\u0634 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2\u060c \u0622\u067e \u06a9\u0648 \u062c\u0648\u0627\u0628\u0627\u062a \u06a9\u0648 \u0686\u06be\u0648\u0691\u0646\u06d2 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u0628\u0627\u0628 23 \u06a9\u0648 \u0627\u06cc\u06a9 \u062d\u0642\u06cc\u0642\u06cc \u062a\u062d\u0642\u06cc\u0642\u0627\u062a \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0633\u0645\u062c\u06be\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u06d4<\/p>\n<p><strong>\u0641\u06cc\u0635\u0644\u06d2 \u0627\u0648\u0631 \u0627\u0646 \u06a9\u06d2 \u0641\u0627\u0626\u062f\u06d2 \u0627\u0648\u0631 \u0646\u0642\u0635\u0627\u0646\u0627\u062a:<\/strong><\/p>\n<ul>\n<li>\n<p>\u0622\u0679\u0648 \u067e\u0627\u0626\u0644\u0679 \u06a9\u06d2 \u0633\u0627\u062a\u06be GKE \u0633\u0679\u06cc\u0646\u0688\u0631\u0688: \u0646\u0648\u0688 \u067e\u0648\u0644\u0632 \u0627\u0648\u0631 \u0622\u0679\u0648 \u0627\u0633\u06a9\u06cc\u0644\u0646\u06af \u067e\u0631 \u0645\u06a9\u0645\u0644 \u06a9\u0646\u0679\u0631\u0648\u0644\u060c \u0644\u06cc\u06a9\u0646 \u0622\u067e \u06a9\u0648 \u0627\u0646 \u06a9\u0648 \u0633\u0645\u062c\u06be\u0646\u0627 \u0627\u0648\u0631 \u0627\u0633\u06a9\u06cc\u0644 \u06a9\u0631\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u06d4 \u0627\u0633 \u0644\u06cc\u0628 \u0646\u06d2 \u062a\u06cc\u0646 \u06a9\u0645\u067e\u06cc\u0648\u0679\u0631\u0632 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u06a9\u06cc \u062c\u0648 \u0632\u06cc\u0627\u062f\u06c1 \u062a\u0631 \u0628\u06cc\u06a9\u0627\u0631 \u062a\u06be\u06d2\u06d4 \u0622\u0679\u0648 \u067e\u0627\u0626\u0644\u0679 \u0646\u06d2 \u06a9\u0646\u06a9\u0634\u0646 \u06a9\u06cc \u062d\u062f\u0648\u062f \u06a9\u06d2 \u0627\u0633 \u062e\u0637\u0631\u06d2 \u06a9\u0648 \u0627\u067e\u0646\u06d2 \u0634\u06cc\u0688\u0648\u0644 \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u0686\u06be\u067e\u0627 \u0631\u06a9\u06be\u0627 \u06c1\u06d2\u060c \u0628\u06c1\u062a\u0631 \u06cc\u0627 \u0628\u062f\u062a\u0631\u06d4<\/p>\n<\/li>\n<li>\n<p>\u067e\u0627\u0646\u0686 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u062f\u0648 \u0645\u0627\u062d\u0648\u0644: \u0627\u0633\u0679\u06cc\u062c\u0646\u06af \u06a9\u06d2 \u0627\u062e\u0631\u0627\u062c\u0627\u062a \u062c\u0648 \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u06a9\u0627 \u0627\u0634\u062a\u0631\u0627\u06a9 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u0627\u0648\u0631 \u0627\u062e\u0631\u0627\u062c\u0627\u062a \u06a9\u0648 \u06a9\u0645 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u06cc\u06c1 \u062a\u0645\u0627\u0645 \u06a9\u0645\u067e\u0646\u06cc\u0648\u06ba \u067e\u0631 \u0644\u0627\u06af\u0648 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u0633\u06a9\u062a\u0627 \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u0627\u0633 \u067e\u06cc\u0645\u0627\u0646\u06d2 \u067e\u0631 \u06cc\u06c1 \u0679\u06be\u06cc\u06a9 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>VPN \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 IP \u0648\u0627\u0626\u0679 \u0644\u0633\u0679 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0639\u0648\u0627\u0645\u06cc \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u06a9\u06d2 \u0627\u062e\u062a\u062a\u0627\u0645\u06cc \u067e\u0648\u0627\u0626\u0646\u0679\u0633: \u06a9\u0648\u0626\u06cc \u0633\u06cc\u0679 \u0627\u067e \u0679\u0627\u0626\u0645 \u0627\u0648\u0631 \u06a9\u0648\u0626\u06cc \u0645\u0627\u06c1\u0627\u0646\u06c1 VPN \u0686\u0627\u0631\u062c\u0632 \u0646\u06c1\u06cc\u06ba\u06d4 \u0644\u0627\u06af\u062a \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 RDS \u0635\u0631\u0641 \u0627\u06cc\u06a9 IP \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u062f\u06cc\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 TLS \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u0646\u06d2 \u067e\u0631 \u0628\u06be\u06cc \u0627\u0633 \u06a9\u0627 \u067e\u0628\u0644\u06a9 \u0627\u06cc\u0646\u0688 \u067e\u0648\u0627\u0626\u0646\u0679 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0627\u067e\u0646\u06d2 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u06a9\u0648 AWS \u067e\u0631 \u0631\u06a9\u06be\u0646\u0627: \u0628\u0627\u062f\u0644\u0648\u06ba \u06a9\u06d2 \u062f\u0631\u0645\u06cc\u0627\u0646 \u0633\u06d2 \u06af\u0632\u0631\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u062a\u0645\u0627\u0645 \u0633\u0648\u0627\u0644\u0627\u062a \u06a9\u06cc \u0642\u06cc\u0645\u062a \u067e\u0631 \u0627\u06cc\u06a9 \u0622\u0633\u0627\u0646 \u0627\u0648\u0631 \u0632\u06cc\u0627\u062f\u06c1 \u0645\u062d\u0641\u0648\u0638 \u0645\u0646\u062a\u0642\u0644\u06cc\u06d4<\/p>\n<\/li>\n<\/ul>\n<p>\u062a\u0648 \u062f\u0648\u0633\u0631\u06cc \u06c1\u062c\u0631\u062a \u0645\u06cc\u06ba \u06a9\u06cc\u0627 \u062a\u0628\u062f\u06cc\u0644\u06cc \u0622\u062a\u06cc \u06c1\u06d2\u061f \u0679\u0631\u06cc\u0641\u06a9 \u06a9\u0648 \u0645\u0646\u062a\u0642\u0644 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u06a9\u0627 \u0627\u0634\u062a\u0631\u0627\u06a9 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u062a\u0645\u0627\u0645 \u0645\u0627\u062d\u0648\u0644 \u0645\u06cc\u06ba \u06a9\u0646\u06a9\u0634\u0646 \u06a9\u06cc \u0628\u062f\u062a\u0631\u06cc\u0646 \u062a\u0639\u062f\u0627\u062f \u06a9\u0627 \u062d\u0633\u0627\u0628 \u0644\u06af\u0627\u0626\u06cc\u06ba\u06d4 \u0627\u067e\u0646\u06cc \u0627\u0635\u0644 \u062d\u062f\u0648\u062f \u0633\u06d2 \u0627\u0633 \u06a9\u0627 \u0645\u0648\u0627\u0632\u0646\u06c1 \u06a9\u0631\u06cc\u06ba\u06d4 \u0631\u06cc\u0626\u0644 \u0679\u0627\u0626\u0645 \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u0627\u0633\u06d2 \u0686\u06cc\u06a9 \u0644\u0633\u0679 \u0622\u0626\u0679\u0645 \u0628\u0646\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<h4 id=\"heading-part-3-the-cost-postmortem\">\u062d\u0635\u06c1 3\u06d4 \u067e\u0648\u0633\u0679 \u0644\u0627\u06af\u062a<\/h4>\n<p>\u06cc\u06c1 \u06c1\u06cc\u0646\u0688 \u0622\u0646 \u0648\u0631\u0698\u0646:<\/p>\n<p><strong>\u0628\u062c\u0679:<\/strong> GCP \u06a9\u06d2 \u067e\u0627\u0646\u0686 \u062f\u0646\u0648\u06ba \u06a9\u06cc \u0644\u0627\u06af\u062a \u062a\u0642\u0631\u06cc\u0628\u0627\u064b $25 \u06c1\u06d2\u06d4<\/p>\n<p><strong>\u0627\u0635\u0644 \u062f\u0648\u06c1\u0631\u06cc \u0639\u0645\u0644\u062f\u0631\u0622\u0645\u062f:<\/strong> \u06a9\u0644 $4.30\u060c AWS $1.25 + GCP $3.05\u06d4 GCP $3.05 \u067e\u0631 \u0645\u0641\u062a \u0679\u0631\u0627\u0626\u0644 \u06a9\u0631\u06cc\u0688\u0679 \u0644\u0627\u06af\u0648 \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u062a\u06be\u0627\u060c \u0644\u06c1\u0630\u0627 \u0627\u0635\u0644 GCP \u0628\u0644 $0 \u062a\u06be\u0627\u06d4<\/p>\n<p>\u06c1\u062c\u0631\u062a \u0634\u06cc\u0688\u0648\u0644 \u06a9\u06d2 \u0645\u0637\u0627\u0628\u0642 \u06c1\u0648\u0626\u06cc\u06d4 \u06a9\u0648\u0626\u06cc \u062d\u0627\u062f\u062b\u0627\u062a\u060c \u0631\u0648\u0644 \u0628\u06cc\u06a9 \u06cc\u0627 \u062f\u0648\u0633\u0631\u06cc \u0634\u0641\u0679\u0648\u06ba \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u0646\u06c1\u06cc\u06ba \u062a\u06be\u06cc\u06d4<\/p>\n<p><strong>\u06a9\u0644\u0633\u0679\u0631 \u0632\u06cc\u0627\u062f\u06c1 \u067e\u0631\u0648\u0648\u06cc\u0698\u0646\u0688 \u06c1\u06d2\u06d4<\/strong> 3 GKE \u0646\u0648\u0688\u0633 \u0646\u06d2 1 API Pod \u06a9\u0648 4-7% CPU \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0633\u067e\u0648\u0631\u0679 \u06a9\u06cc\u0627\u06d4<\/p>\n<p>\u0645\u0639\u06cc\u0627\u0631\u06cc GKE \u06a9\u0648 \u0627\u0633 \u06a9\u06cc \u062a\u0639\u0644\u06cc\u0645\u06cc \u0642\u062f\u0631 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0645\u0646\u062a\u062e\u0628 \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u062a\u06be\u0627\u06d4 \u0627\u0633 \u06a9\u0627\u0645 \u06a9\u06d2 \u0628\u0648\u062c\u06be \u06a9\u06d2 \u0644\u06cc\u06d2 \u0622\u0679\u0648 \u067e\u0627\u0626\u0644\u0679 \u0633\u0633\u062a\u0627 \u06c1\u0648\u062a\u0627\u06d4<\/p>\n<p>\u0645\u06cc\u06ba \u0646\u06d2 \u06a9\u0648\u0626\u06cc CUD \u0646\u06c1\u06cc\u06ba \u062e\u0631\u06cc\u062f\u0627 \u06c1\u06d2\u06d4<\/p>\n<p><strong>\u0646\u062a\u06cc\u062c\u06c1:<\/strong> \u06c1\u062c\u0631\u062a \u0628\u062c\u0679 \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u0627\u0686\u06be\u06cc \u0637\u0631\u062d \u0631\u06c1\u06cc\u060c \u0644\u06cc\u06a9\u0646 GKE \u0633\u06cc\u0679 \u0627\u067e \u0646\u06d2 \u06a9\u0627\u0645 \u06a9\u06d2 \u0628\u0648\u062c\u06be \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u0635\u0644\u0627\u062d\u06cc\u062a \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06cc\u06d4<\/p>\n<p>\u0627\u067e\u0646\u06d2 \u06a9\u0644\u0627\u0624\u0688 \u0628\u0644 \u0633\u06d2 \u0627\u067e\u0646\u0627 \u0646\u0645\u0628\u0631 \u062f\u0631\u062c \u06a9\u0631\u06cc\u06ba\u06d4 \u0627\u0633 \u06a9\u062a\u0627\u0628 \u0645\u06cc\u06ba \u0627\u0633 \u06a9\u0627 \u06a9\u0648\u0626\u06cc \u0646\u0639\u0645 \u0627\u0644\u0628\u062f\u0644 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u060c \u0627\u0648\u0631 \u0627\u0646\u062f\u0627\u0632\u06c1 \u0644\u06af\u0627\u06cc\u0627 \u06af\u06cc\u0627 \u0646\u0645\u0628\u0631 \u0648\u06c1\u06cc \u063a\u0644\u0637 \u062f\u0631\u0633\u062a\u06af\u06cc \u06a9\u0627 \u06c1\u0648\u06af\u0627 \u062c\u0633 \u0633\u06d2 \u067e\u0648\u0631\u0627 \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u06af\u0631\u06cc\u0632 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h4 id=\"heading-done-when\">\u0645\u06a9\u0645\u0644 \u06c1\u0648\u0646\u06d2 \u067e\u0631:<\/h4>\n<ul>\n<li>\n<p>\u067e\u06c1\u0644\u06d2\u060c \u062f\u0648\u0631\u0627\u0646\u060c \u0627\u0648\u0631 \u0628\u0639\u062f \u06a9\u06d2 \u062e\u0627\u06a9\u06d2 \u0645\u0644\u062a\u06d2 \u06c1\u06cc\u06ba \u062c\u0648 \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u062a\u06be\u0627\u06d4<\/p>\n<\/li>\n<li>\n<p>\u067e\u0648\u0633\u0679 \u0645\u0627\u0631\u0679\u0645 \u06a9\u06cc \u062a\u0641\u062a\u06cc\u0634 \u0648\u0627\u0636\u062d \u0637\u0648\u0631 \u067e\u0631 \u0628\u0646\u06cc\u0627\u062f\u06cc \u0648\u062c\u06c1 \u0628\u062a\u0627\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u067e\u0648\u0633\u0679 \u0645\u0627\u0631\u0679\u0645 \u0645\u06cc\u06ba \u0627\u0635\u0644 \u062a\u0639\u062f\u0627\u062f \u0634\u0627\u0645\u0644 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<\/ul>\n<h2 id=\"heading-what-comes-after-this-project\">\u0627\u0633 \u0645\u0646\u0635\u0648\u0628\u06d2 \u06a9\u06d2 \u0628\u0639\u062f \u06a9\u06cc\u0627 \u0622\u062a\u0627 \u06c1\u06d2<\/h2>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/10\/1792188598_840_\u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0648\u06ba-\u06a9\u0648-AWS-\u0633\u06d2-GKE-\u0645\u06cc\u06ba-\u06a9\u06cc\u0633\u06d2-\u0645\u0646\u062a\u0642\u0644-\u06a9\u06cc\u0627-\u062c\u0627\u0626\u06d2\u06d4.png\" alt=\"\u0648\u06c1 \u062a\u0635\u0627\u0648\u06cc\u0631 \u062c\u0648 \u0627\u0633 \u0628\u0627\u062a \u06a9\u06cc \u0648\u0636\u0627\u062d\u062a \u06a9\u0631\u062a\u06cc \u06c1\u06cc\u06ba \u06a9\u06c1 \u06c1\u0645 \u0646\u06d2 \u06a9\u06cc\u0627 \u06a9\u06cc\u0627\u060c \u06c1\u0645 \u06a9\u06c1\u0627\u06ba \u06c1\u06cc\u06ba\u060c \u0627\u0648\u0631 \u0622\u06af\u06d2 \u06a9\u06cc\u0627 \u06c1\u06d2\u06d4\" style=\"display: block;\" width=\"600\" height=\"400\" loading=\"lazy\" title=\"\"><\/p>\n<h3 id=\"heading-what-question-this-project-leaves-open\">\u06cc\u06c1 \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u0622\u067e \u06a9\u0648 \u06a9\u0646 \u0633\u0648\u0627\u0644\u0627\u062a \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0686\u06be\u0648\u0691\u062a\u0627 \u06c1\u06d2\u061f<\/h3>\n<p>\u0628\u0627\u0628 13 \u0646\u06d2 \u0627\u0633 \u067e\u0631 \u062c\u06be\u0646\u0688\u0627 \u0644\u06af\u0627\u06cc\u0627 \u0627\u0648\u0631 \u062c\u0627\u0646 \u0628\u0648\u062c\u06be \u06a9\u0631 \u0627\u06af\u0644\u06d2 \u0645\u0631\u062d\u0644\u06d2 \u067e\u0631 \u0686\u0644\u0627 \u06af\u06cc\u0627\u06d4 \u06a9\u0633 \u0645\u0642\u0627\u0645 \u067e\u0631 \u067e\u0648\u0633\u0679\u06af\u0631\u06cc \u0627\u06cc\u0633 \u06a9\u06cc\u0648 \u0627\u06cc\u0644 \u06a9\u0648 AWS \u067e\u0631 \u0631\u06a9\u06be\u0646\u0627 \u062e\u0637\u0631\u06d2 \u0627\u0648\u0631 \u0627\u0646\u062c\u06cc\u0646\u0626\u0631\u0646\u06af \u06a9\u06d2 \u0648\u0642\u062a \u06a9\u06d2 \u0644\u062d\u0627\u0638 \u0633\u06d2 \u0627\u0633\u06d2 \u0645\u0646\u062a\u0642\u0644 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u0645\u06c1\u0646\u06af\u0627 \u06c1\u0648 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u061f \u0628\u0627\u062f\u0644\u0648\u06ba \u06a9\u06d2 \u062f\u0631\u0645\u06cc\u0627\u0646 \u0645\u0646\u062a\u0642\u0644 \u06c1\u0648\u0646\u0627\u060c \u062f\u0648 \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0646\u0646\u062f\u06af\u0627\u0646 \u067e\u0631 \u0627\u0646\u062d\u0635\u0627\u0631\u060c \u0627\u0648\u0631 \u0628\u0627\u0628 23 \u0645\u06cc\u06ba \u06a9\u0646\u06a9\u0634\u0646 \u067e\u0648\u0644 \u06a9\u06d2 \u062f\u0628\u0627\u0624 \u0633\u0628 \u0627\u0633 \u067e\u06cc\u0645\u0627\u0646\u06d2 \u06a9\u06d2 \u0627\u06cc\u06a9 \u06c1\u06cc \u0637\u0631\u0641 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u0627\u067e\u0646\u06d2 \u0646\u0648\u0679 \u0633\u06d2 \u062f\u0648 \u0646\u0645\u0628\u0631 \u0633\u0627\u062a\u06be \u0633\u0627\u062a\u06be \u0631\u06a9\u06be\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-plaintext\">AWS, Chapter 6:             p95 164 ms\nGKE at 100%, Chapter 24:    p95 647 ms\n<\/code><\/pre>\n<p>API \u06a9\u0648 \u0645\u0646\u062a\u0642\u0644 \u06a9\u0631 \u062f\u06cc\u0627 \u06af\u06cc\u0627 \u062a\u06be\u0627 \u0627\u0648\u0631 \u0635\u0627\u0631\u0641\u06cc\u0646 \u06a9\u0648 \u06a9\u0633\u06cc \u0642\u0633\u0645 \u06a9\u06cc \u0628\u0646\u062f\u0634 \u06a9\u0627 \u0633\u0627\u0645\u0646\u0627 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u0646\u0627 \u067e\u0691\u0627\u06d4 \u062a\u0627\u06c1\u0645\u060c \u062a\u0645\u0627\u0645 \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u06cc\u06ba \u062a\u0642\u0631\u06cc\u0628\u0627\u064b 4x \u0633\u0633\u062a \u062a\u06be\u06cc\u06ba\u06d4<\/p>\n<p>\u06a9\u0648\u0688 \u062a\u0628\u062f\u06cc\u0644 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u0627 \u06c1\u06d2\u06d4 \u0644\u0648\u0688 \u0679\u06cc\u0633\u0679\u0646\u06af \u0645\u06cc\u06ba \u06a9\u0648\u0626\u06cc \u062a\u0628\u062f\u06cc\u0644\u06cc \u0646\u06c1\u06cc\u06ba \u0622\u0626\u06cc \u06c1\u06d2\u06d4 \u062c\u0648 \u0628\u062f\u0644\u0627 \u06c1\u06d2 \u0648\u06c1 \u0641\u0627\u0635\u0644\u06c1 \u06c1\u06d2\u06d4 AWS \u0645\u06cc\u06ba\u060c API \u0627\u0648\u0631 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u0627\u06cc\u06a9 \u06c1\u06cc \u0688\u06cc\u0679\u0627 \u0633\u06cc\u0646\u0679\u0631 \u0645\u06cc\u06ba \u0648\u0627\u0642\u0639 \u062a\u06be\u06d2\u06d4 GKE \u067e\u0631\u060c \u062a\u0645\u0627\u0645 \u0633\u0648\u0627\u0644\u0627\u062a Google \u06a9\u0648 \u0686\u06be\u0648\u0691 \u062f\u06cc\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <code>us-east4<\/code>Cloud NAT \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0628\u0627\u06c1\u0631 \u0646\u06a9\u0644\u06cc\u06ba \u0627\u0648\u0631 \u0627\u0646\u0679\u0631\u0646\u06cc\u0679 \u067e\u0631 AWS \u067e\u0631 \u062c\u0627\u0626\u06cc\u06ba\u06d4 <code>us-east-1<\/code>\u0627\u0648\u0631 \u06cc\u06c1 \u0648\u0627\u067e\u0633 \u0622\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u06cc\u06a9 \u06c1\u06cc \u0645\u0646\u062a\u0642\u0644\u06cc \u0645\u062a\u0639\u062f\u062f \u0633\u0648\u0627\u0644\u0627\u062a \u06a9\u0648 \u0627\u0646\u062c\u0627\u0645 \u062f\u06cc\u062a\u06cc \u06c1\u06d2\u060c \u0644\u06c1\u0630\u0627 \u0622\u067e \u0627\u0633 \u0627\u0642\u062f\u0627\u0645 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0645\u062a\u0639\u062f\u062f \u0628\u0627\u0631 \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u06af\u0648\u06af\u0644 \u0644\u0648\u0688 \u0628\u06cc\u0644\u0646\u0633\u0631 \u0633\u0627\u0645\u0646\u06d2 \u0627\u06cc\u06a9 \u0627\u0648\u0631 \u06c1\u0627\u067e \u06a9\u0627 \u0627\u0636\u0627\u0641\u06c1 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0645\u0627\u06cc\u0627 \u0679\u06cc\u0628\u0644 \u067e\u0691\u06be\u062a\u06cc \u06c1\u06d2\u06d4 \"\u06cc\u06c1 \u0633\u0633\u062a \u06a9\u06cc\u0648\u06ba \u06c1\u06d2\u061f\"<\/p>\n<p>\"\u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 AWS \u067e\u0631 \u06c1\u06cc \u0631\u06c1\u0627\u06d4 \u062a\u0645\u0627\u0645 \u0633\u0648\u0627\u0644\u0627\u062a \u0628\u0627\u062f\u0644\u0648\u06ba \u06a9\u06d2 \u062f\u0631\u0645\u06cc\u0627\u0646 \u0633\u06d2 \u06af\u0632\u0631 \u06af\u0626\u06d2\u06d4\"<\/p>\n<p>\"\u06a9\u06cc\u0627 \u06cc\u06c1 \u063a\u0644\u0637\u06cc \u062a\u06be\u06cc\u061f\"<\/p>\n<p>\"\u0646\u06c1\u06cc\u06ba\u06d4 \u0628\u0627\u0628 7 \u0645\u06cc\u06ba\u060c \u06c1\u0645 \u0646\u06d2 \u0622\u067e \u0633\u06d2 \u0635\u0631\u0641 API \u06a9\u0648 \u0645\u0646\u062a\u0642\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u0648 \u06a9\u06c1\u0627\u060c \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u062f\u0648\u0646\u0648\u06ba \u06a9\u0648 \u0627\u06cc\u06a9 \u06c1\u06cc \u0648\u0642\u062a \u0645\u06cc\u06ba \u0645\u0646\u062a\u0642\u0644 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u0646\u0627\u06a9\u0627\u0645\u06cc\u0648\u06ba \u06a9\u0648 \u0679\u0631\u06cc\u06a9 \u06a9\u0631\u0646\u0627 \u0628\u06c1\u062a \u0645\u0634\u06a9\u0644 \u06c1\u0648 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u0645\u0633\u0626\u0644\u06c1 API\u060c \u0646\u06cc\u0679 \u0648\u0631\u06a9\u060c \u06cc\u0627 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u06a9\u06cc \u0645\u0646\u062a\u0642\u0644\u06cc \u0633\u06d2 \u06c1\u06cc \u06c1\u0648 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4 \u0644\u06cc\u06a9\u0646 \u06a9\u0627\u0644\u0632 \u06a9\u06cc \u0642\u06cc\u0645\u062a \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u060c \u0644\u06c1\u0630\u0627 \u0627\u0628 \u06c1\u0645 \u0627\u0633 \u06a9\u06cc \u067e\u06cc\u0645\u0627\u0626\u0634 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4\"<\/p>\n<p>\u0645\u0627\u06cc\u0627: \"\u067e\u06be\u0631\u060c \u0627\u06af\u0644\u0627 \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u06cc\u06c1 \u06c1\u06d2\u06d4\"<\/p>\n<p>\u06cc\u06c1 \u0645\u0646\u0635\u0648\u0628\u06c1 \u0639\u0648\u0627\u0645\u06cc \u0633\u0648\u0627\u0644\u0627\u062a \u06a9\u0627 \u062c\u0648\u0627\u0628 \u0646\u06c1\u06cc\u06ba \u062f\u06cc\u062a\u0627\u06d4 \u06cc\u06c1 \u06a9\u0628\u06be\u06cc \u0646\u06c1\u06cc\u06ba \u06c1\u0648 \u0633\u06a9\u062a\u0627 \u062a\u06be\u0627\u06d4 \u06c1\u0645\u0627\u0631\u0627 \u0627\u06af\u0644\u0627 \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 PostgreSQL \u06a9\u0648 \u06af\u0648\u06af\u0644 \u06a9\u0644\u0627\u0624\u0688 \u0645\u06cc\u06ba \u0645\u0646\u062a\u0642\u0644 \u06a9\u0631\u06d2 \u06af\u0627\u060c \u0627\u0648\u0631 \u06c1\u0645 \u0688\u06cc\u0679\u0627 \u06a9\u0648 \u0645\u0633\u0644\u0633\u0644 \u06a9\u0627\u067e\u06cc \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06af\u0648\u06af\u0644 \u06a9\u06cc \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u0645\u0627\u0626\u06cc\u06af\u0631\u06cc\u0634\u0646 \u0633\u0631\u0648\u0633 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba \u06af\u06d2\u060c \u0627\u0633 \u0644\u06cc\u06d2 \u062d\u062a\u0645\u06cc \u0645\u0646\u062a\u0642\u0644\u06cc \u0645\u06cc\u06ba \u06af\u06be\u0646\u0679\u0648\u06ba \u06a9\u06cc \u0628\u062c\u0627\u0626\u06d2 \u0645\u0646\u0679 \u0644\u06af\u06cc\u06ba \u06af\u06d2\u06d4 \u06cc\u06c1 \u0627\u0633 \u06a9\u062a\u0627\u0628 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0648\u06c1\u06cc \u0637\u0631\u06cc\u0642\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2: \u0628\u0646\u06cc\u0627\u062f\u06cc \u062e\u0637\u0648\u0637 \u067e\u06c1\u0644\u06d2\u060c \u062a\u062d\u0631\u06cc\u0631\u06cc \u062d\u062f\u0648\u062f\u060c \u0686\u06be\u0648\u0679\u06d2 \u0642\u062f\u0645\u060c \u0622\u0632\u0645\u0627\u0626\u0634\u06cc \u0631\u0648\u0644 \u0628\u06cc\u06a9\u0633\u060c \u0627\u0648\u0631 \u06c1\u0631 \u0642\u062f\u0645 \u067e\u0631 \u062b\u0628\u0648\u062a\u06d4 \u0627\u06cc\u06a9 \u0628\u0627\u0631 \u062c\u0628 \u06cc\u06c1 \u06c1\u0648 \u062c\u0627\u0626\u06d2\u060c \u0648\u06c1\u06cc \u0644\u0648\u0688 \u0679\u06cc\u0633\u0679 \u0686\u0644\u0627\u0626\u06cc\u06ba \u0627\u0648\u0631 \u0627\u06cc\u06a9 \u06c1\u06cc \u062f\u0648 \u0646\u0645\u0628\u0631\u0648\u06ba \u06a9\u0627 \u0645\u0648\u0627\u0632\u0646\u06c1 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p>\u0627\u06cc\u06a9 \u0628\u0627\u0631 \u067e\u06be\u0631\u060c \u06cc\u06c1 \u0627\u0633 \u06a9\u06cc \u0627\u067e\u0646\u06cc \u06a9\u062a\u0627\u0628 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0627\u06cc\u06a9 \u0639\u0644\u06cc\u062d\u062f\u06c1 \u0645\u0646\u0635\u0648\u0628\u06c1 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u06cc\u06c1\u0627\u06ba \u062e\u062a\u0645 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4 GKE \u067e\u0631 ClearPay API\u060c \u062c\u06cc\u0633\u0627 \u06a9\u06c1 \u0628\u0627\u0628 7 \u0645\u06cc\u06ba \u0628\u062a\u0627\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u060c \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u0627\u0628\u06be\u06cc \u0628\u06be\u06cc AWS \u0645\u06cc\u06ba \u06c1\u06d2\u06d4<\/p>\n<h2 id=\"heading-what-you-should-have-at-the-end\">\u0622\u062e\u0631 \u0645\u06cc\u06ba \u06a9\u06cc\u0627 \u06c1\u0648\u0646\u0627 \u06c1\u06d2\u06d4<\/h2>\n<ul>\n<li>\n<p>Fintech API \u0622\u067e\u0631\u06cc\u0634\u0646 \u0627\u0648\u0631 \u06a9\u0645 \u0633\u06d2 \u06a9\u0645 \u06a9\u0633\u0679\u0645\u0631 UI (<code>api\/<\/code>\u060c <code>ui\/<\/code>)<\/p>\n<\/li>\n<li>\n<p>AWS \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc (<code>infra\/aws\/<\/code>)<\/p>\n<\/li>\n<li>\n<p>\u062c\u06cc \u0633\u06cc \u067e\u06cc \u0622\u0631\u06a9\u06cc\u0679\u06cc\u06a9\u0686\u0631\u060c \u0633\u0679\u06cc\u062c\u0688 \u0679\u06cc\u0631\u0627\u0641\u0627\u0631\u0645 (<code>infra\/gcp\/terraform\/<\/code>)<\/p>\n<\/li>\n<li>\n<p>\u062a\u062c\u0631\u0628\u06c1 \u0634\u062f\u06c1 \u062a\u0635\u0627\u0648\u06cc\u0631 (<code>.github\/workflows\/deploy.yml<\/code>)<\/p>\n<\/li>\n<li>\n<p>Kubernetes \u0645\u06cc\u0646\u06cc \u0641\u06cc\u0633\u0679\u060c \u062f\u0648 \u0645\u0627\u062d\u0648\u0644 \u06a9\u0633\u0679\u0645\u0627\u0626\u0632 \u0627\u0648\u0648\u0631\u0644\u06d2 (<code>k8s\/base\/<\/code>\u060c <code>k8s\/overlays\/<\/code>)<\/p>\n<\/li>\n<li>\n<p>\u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u06a9\u0646\u06a9\u0634\u0646\u0632 \u062c\u0646 \u06a9\u06cc \u062a\u0648\u062b\u06cc\u0642 \u06a9\u06cc \u06af\u0626\u06cc \u06c1\u06d2 \u0644\u06cc\u06a9\u0646 \u0645\u0646\u062a\u0642\u0644\u06cc \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u0626\u06cc \u06c1\u06d2 (\u0628\u0627\u0628 13)<\/p>\n<\/li>\n<li>\n<p>\u062e\u0641\u06cc\u06c1 \u0627\u0646\u062a\u0638\u0627\u0645\u060c \u0627\u067e \u06af\u0631\u06cc\u0688 <code>.env<\/code> \u0641\u0627\u0626\u0644 \u06a9\u0648 \u062e\u0641\u06cc\u06c1 \u0645\u06cc\u0646\u06cc\u062c\u0631 \u06a9\u0648 \u0645\u0646\u062a\u0642\u0644 \u06a9\u0631\u06cc\u06ba (<code>k8s\/overlays\/*\/secretproviderclass.yaml<\/code>\u060c <code>secretsync.yaml<\/code>)<\/p>\n<\/li>\n<li>\n<p>\u0648\u0632\u0646\u06cc \u0628\u0648\u062c\u06be \u0628\u06cc\u0644\u0646\u0633\u0631 \u06a9\u06d2 \u067e\u06cc\u0686\u06be\u06d2 GKE \u06af\u06cc\u0679 \u0648\u06d2 (<code>k8s\/gateway\/<\/code>\u060c <code>infra\/gcp\/terraform\/08-edge\/<\/code>)<\/p>\n<\/li>\n<li>\n<p>\u0646\u0648\u0679 \u0628\u06a9 \u0645\u06cc\u06ba \u0645\u0634\u0627\u06c1\u062f\u0627\u062a\u06cc \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688\u060c \u0627\u06af\u0631 \u0622\u067e \u0646\u06d2 \u0627\u062e\u062a\u06cc\u0627\u0631\u06cc \u0628\u0627\u0628 17 \u0645\u06a9\u0645\u0644 \u06a9\u06cc\u0627 \u06c1\u06d2\u06d4<code>observability\/<\/code>)<\/p>\n<\/li>\n<li>\n<p>\u0644\u0648\u0688 \u0679\u06cc\u0633\u0679\u0646\u06af\u060c \u067e\u0631\u0648\u0645\u0648\u0634\u0646 \u06af\u06cc\u0679\u0633\u060c \u0627\u0648\u0631 \u0645\u0635\u0646\u0648\u0639\u06cc \u0633\u0679\u06cc\u0679 \u0627\u0633\u06a9\u0631\u067e\u0679\u0633 (<code>scripts\/<\/code>)<\/p>\n<\/li>\n<li>\n<p>\u0645\u0627\u0626\u06cc\u06af\u0631\u06cc\u0634\u0646 \u0627\u0633\u06a9\u0648\u0631 \u06a9\u0627\u0631\u0688 (\u0628\u0627\u0628 6\u060c 18\u060c \u0627\u0648\u0631 24)<\/p>\n<\/li>\n<li>\n<p>\u0644\u0627\u06af\u062a \u06a9\u0627 \u0644\u06cc\u062c\u0631\u060c \u0634\u0631\u0648\u0639 \u0633\u06d2 \u0622\u062e\u0631 \u062a\u06a9 (\u0628\u0627\u0628 6 \u062a\u0627 28)<\/p>\n<\/li>\n<li>\n<p>\u0679\u0631\u06cc\u0641\u06a9 \u06a9\u06cc \u0646\u0642\u0644 \u0648 \u062d\u0631\u06a9\u062a \u06a9\u0627 \u0637\u0631\u06cc\u0642\u06c1 \u06a9\u0627\u0631 (<code>scripts\/shift-traffic.sh<\/code>)<\/p>\n<\/li>\n<li>\n<p>\u0631\u0648\u0644 \u0628\u06cc\u06a9 \u0637\u0631\u06cc\u0642\u06c1 \u06a9\u0627\u0631 (<code>scripts\/rollback.sh<\/code>\u060c <code>scripts\/clear-rollback-flag.sh<\/code>)<\/p>\n<\/li>\n<li>\n<p>\u0641\u0646 \u062a\u0639\u0645\u06cc\u0631 \u06a9\u0627 \u062e\u0627\u06a9\u06c1 (\u0628\u0627\u0628 4\u060c 7\u060c 9\u060c 11\u060c 13\u060c 14\u060c 19\u060c 28)<\/p>\n<\/li>\n<li>\n<p>\u0645\u0627\u0626\u06cc\u06af\u0631\u06cc\u0634\u0646 \u0631\u0646 \u0628\u06a9 (\u06cc\u06c1 \u06a9\u062a\u0627\u0628)<\/p>\n<\/li>\n<li>\n<p>\u062a\u06a9\u0646\u06cc\u06a9\u06cc \u067e\u0648\u0633\u0679 \u0645\u0627\u0631\u0679\u0645 (\u0628\u0627\u0628 28)<\/p>\n<\/li>\n<li>\n<p>\u0644\u0627\u06af\u062a \u06a9\u06d2 \u0628\u0639\u062f \u06a9\u0627 \u062a\u062c\u0632\u06cc\u06c1 (\u0628\u0627\u0628 28)<\/p>\n<\/li>\n<\/ul>\n<p>ClearPay API \u06a9\u0648 \u0627\u06cc\u06a9 AWS EC2 \u0633\u0631\u0648\u0631 \u0633\u06d2 GKE \u0645\u06cc\u06ba \u0645\u0646\u062a\u0642\u0644 \u06a9\u0631 \u062f\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4 PostgreSQL \u062c\u0627\u0646 \u0628\u0648\u062c\u06be \u06a9\u0631 \u0627\u0628\u06be\u06cc \u0628\u06be\u06cc AWS \u067e\u0631 \u06c1\u06d2\u06d4 \u0635\u0627\u0631\u0641 \u0646\u06d2 \u0679\u0631\u06cc\u0641\u06a9 \u06a9\u0648 \u0645\u0646\u062a\u0642\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2\u060c \u0631\u0648\u0644 \u0628\u06cc\u06a9\u0633 \u06a9\u06cc \u0645\u0634\u0642 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2\u060c \u0627\u0648\u0631 \u06a9\u0679 \u0627\u0648\u0648\u0631 \u06a9\u0648 \u0645\u06a9\u0645\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u0627\u06cc\u06a9 \u067e\u062a\u06c1 \u0628\u0631\u0642\u0631\u0627\u0631 \u0631\u06a9\u06be\u0627\u06d4<\/p>\n<p>\u0645\u0627\u06cc\u0627 \u0646\u06d2 \u06af\u0627\u06c1\u06a9 \u0633\u06d2 \u067e\u0648\u0686\u06be\u0627 \u06a9\u06c1 \u06a9\u06cc\u0627 \u0628\u062f\u0644\u0627 \u06c1\u06d2\u061f \u067e\u062a\u06c1 \u0627\u06cc\u0633\u0627 \u0646\u06c1\u06cc\u06ba \u062a\u06be\u0627\u06d4 \u062a\u0648\u0627\u0632\u0646 \u0646\u06c1\u06cc\u06ba \u062a\u06be\u0627\u06d4 \u0628\u0646\u062f\u0634 \u06a9\u0648 \u06a9\u0633\u06cc \u0646\u06d2 \u0646\u06c1\u06cc\u06ba \u062f\u06cc\u06a9\u06be\u0627\u06d4 \u0627\u0628 \u0622\u067e \u0633\u0645\u062c\u06be \u06af\u0626\u06d2 \u06c1\u06cc\u06ba \u06a9\u06c1 \u06cc\u06c1 \u0645\u0634\u06a9\u0644 \u062d\u0635\u06c1 \u06a9\u06cc\u0648\u06ba \u06c1\u06d2\u060c \u0627\u0648\u0631 647 \u0645\u0644\u06cc \u0633\u06cc\u06a9\u0646\u0688 \u0627\u06af\u0644\u0627 \u062d\u0635\u06c1 \u06a9\u06cc\u0648\u06ba \u06c1\u06d2\u06d4<\/p>\n<p>\u0644\u06cc\u0628 \u0645\u06cc\u06ba \u0628\u062a\u0627\u06cc\u0627 \u06af\u06cc\u0627 \u06a9\u06c1 \u06c1\u0631 \u0642\u062f\u0645 \u06a9\u0648 \u06a9\u06cc\u0633\u06d2 \u062b\u0627\u0628\u062a \u06a9\u06cc\u0627 \u062c\u0627\u0626\u06d2\u060c \u0634\u0648\u0627\u06c1\u062f \u06a9\u0648 \u06a9\u06cc\u0633\u06d2 \u067e\u0691\u06be\u0627 \u062c\u0627\u0626\u06d2\u060c \u0627\u0648\u0631 \u062e\u0631\u0627\u0628 \u062a\u0628\u062f\u06cc\u0644\u06cc \u06a9\u0648 \u06a9\u06cc\u0633\u06d2 \u062e\u062a\u0645 \u06a9\u06cc\u0627 \u062c\u0627\u0626\u06d2\u06d4 \u06a9\u0633\u06cc \u0628\u06be\u06cc \u0686\u06cc\u0632 \u06a9\u0648 \u062a\u0628\u0627\u06c1 \u06a9\u0631\u06cc\u06ba \u062c\u0633 \u06a9\u06cc \u0622\u067e \u0627\u0628\u06be\u06cc \u0628\u06be\u06cc \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u06a9\u0631 \u0631\u06c1\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u0646\u0626\u06d2 \u062a\u06a9\u0646\u06cc\u06a9\u06cc \u0645\u0636\u0627\u0645\u06cc\u0646\u060c \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u0648\u0627\u06a9 \u062a\u06be\u0631\u0648\u060c \u0627\u0648\u0631 \u0645\u0633\u062a\u0642\u0628\u0644 \u06a9\u06cc \u0631\u06cc\u0644\u06cc\u0632 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06c1\u0645\u0627\u0631\u06d2 \u0646\u06cc\u0648\u0632 \u0644\u06cc\u0679\u0631 \u06a9\u0648 \u0633\u0628\u0633\u06a9\u0631\u0627\u0626\u0628 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<h2 id=\"heading-how-to-discuss-this-project-in-an-interview\"><strong>\u0627\u06cc\u06a9 \u0627\u0646\u0679\u0631\u0648\u06cc\u0648 \u0645\u06cc\u06ba \u0627\u0633 \u0645\u0646\u0635\u0648\u0628\u06d2 \u067e\u0631 \u0628\u0627\u062a \u06a9\u0631\u0646\u06d2 \u06a9\u0627 \u0637\u0631\u06cc\u0642\u06c1<\/strong><\/h2>\n<p>\u0645\u06cc\u06ba \u0646\u06d2 \u06a9\u0644\u0627\u0624\u0688 \u0645\u0627\u0626\u06cc\u06af\u0631\u06cc\u0634\u0646 \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u067e\u0631 \u06a9\u0644\u06cc\u0626\u0631 \u067e\u06d2 \u0646\u0627\u0645\u06cc \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u06a9\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u0627\u0645 \u06a9\u06cc\u0627\u06d4 \u0627\u06cc\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 AWS \u067e\u0631 \u0686\u0644 \u0631\u06c1\u06cc \u062a\u06be\u06cc\u060c \u0627\u0648\u0631 \u0645\u0642\u0635\u062f \u0633\u0631\u0648\u0633 \u062a\u06a9 \u0631\u0633\u0627\u0626\u06cc \u0645\u06cc\u06ba \u062e\u0644\u0644 \u0688\u0627\u0644\u06d2 \u0628\u063a\u06cc\u0631 \u0627\u0633\u06d2 \u06af\u0648\u06af\u0644 \u06a9\u0644\u0627\u0624\u0688 \u0645\u06cc\u06ba \u0645\u0646\u062a\u0642\u0644 \u06a9\u0631\u0646\u0627 \u062a\u06be\u0627\u06d4<\/p>\n<p>\u0633\u0628 \u0633\u06d2 \u0628\u0691\u0627 \u0686\u06cc\u0644\u0646\u062c \u0645\u062d\u0641\u0648\u0638 \u0637\u0631\u06cc\u0642\u06d2 \u0633\u06d2 \u0622\u06af\u06d2 \u0628\u0691\u06be\u0646\u0627 \u062a\u06be\u0627\u06d4 \u0633\u0628 \u06a9\u0686\u06be \u0627\u06cc\u06a9 \u0633\u0627\u062a\u06be \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2\u060c \u06c1\u0645 \u0646\u06d2 \u0627\u06cc\u06a9 \u06a9\u0646\u0679\u0631\u0648\u0644 \u0634\u062f\u06c1 \u06c1\u062c\u0631\u062a \u06a9\u0648 \u0688\u06cc\u0632\u0627\u0626\u0646 \u06a9\u06cc\u0627 \u062c\u0633 \u0646\u06d2 \u06c1\u0645\u06cc\u06ba \u0622\u06c1\u0633\u062a\u06c1 \u0622\u06c1\u0633\u062a\u06c1 \u0679\u0631\u06cc\u0641\u06a9 \u06a9\u0648 \u0646\u0626\u06d2 \u0645\u0627\u062d\u0648\u0644 \u0645\u06cc\u06ba \u0645\u0646\u062a\u0642\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u062f\u06cc\u06d4 \u0627\u06af\u0631 \u06a9\u0686\u06be \u063a\u0644\u0637 \u06c1\u0648 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u060c \u062a\u0648 \u0622\u067e \u0679\u0631\u06cc\u0641\u06a9 \u06a9\u0648 \u0648\u0627\u067e\u0633 \u0627\u0635\u0644 \u0633\u0633\u0679\u0645 \u067e\u0631 \u0628\u06be\u06cc\u062c \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u06c1\u0645 \u0646\u06d2 \u0646\u0642\u0644 \u0645\u06a9\u0627\u0646\u06cc \u06a9\u06d2 \u062f\u0627\u0626\u0631\u06c1 \u06a9\u0627\u0631 \u06a9\u0648 \u06a9\u0645 \u06a9\u0631\u0646\u06d2 \u0627\u0648\u0631 \u063a\u06cc\u0631 \u0636\u0631\u0648\u0631\u06cc \u062e\u0637\u0631\u0627\u062a \u0633\u06d2 \u0628\u0686\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u06a9\u0648 AWS \u067e\u0631 \u0628\u06be\u06cc \u0631\u06a9\u06be\u0627\u06d4<\/p>\n<p>\u06c1\u0645 \u0646\u06d2 \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u06a9\u0627 \u0639\u0645\u0644\u060c \u0633\u06cc\u06a9\u06cc\u0648\u0631\u0679\u06cc \u0686\u06cc\u06a9\u060c \u0627\u0648\u0631 \u062a\u0635\u062f\u06cc\u0642\u06cc \u0627\u0642\u062f\u0627\u0645\u0627\u062a \u06a9\u0648 \u062a\u0631\u062a\u06cc\u0628 \u062f\u06cc\u0627 \u06c1\u06d2 \u062a\u0627\u06a9\u06c1 \u06cc\u06c1 \u06cc\u0642\u06cc\u0646\u06cc \u0628\u0646\u0627\u06cc\u0627 \u062c\u0627 \u0633\u06a9\u06d2 \u06a9\u06c1 \u0622\u067e \u06a9\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u06cc\u06ba \u0645\u0646\u062a\u0642\u0644\u06cc \u06a9\u0648 \u0645\u06a9\u0645\u0644 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u062f\u0631\u0633\u062a \u0637\u0631\u06cc\u0642\u06d2 \u0633\u06d2 \u06a9\u0627\u0645 \u06a9\u0631\u062a\u06cc \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u067e\u06be\u0631 \u06c1\u0645 \u0646\u06d2 \u0622\u062e\u0631\u06cc \u06c1\u062c\u0631\u062a \u06a9\u0627 \u062a\u062c\u0631\u0628\u06c1 \u06a9\u06cc\u0627\u06d4 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u06cc \u0646\u0627\u06a9\u0627\u0645\u06cc \u06a9\u06d2 \u0628\u063a\u06cc\u0631 \u062c\u0627\u0646\u0686 \u0645\u06a9\u0645\u0644 \u06c1\u0648 \u06af\u0626\u06cc\u060c \u0627\u0648\u0631 \u062d\u062a\u0645\u06cc \u062a\u0635\u062f\u06cc\u0642 \u06a9\u06d2 \u062f\u0648\u0631\u0627\u0646 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0645\u06cc\u06ba \u0633\u0631\u0648\u0631 \u06a9\u06cc \u06a9\u0648\u0626\u06cc \u062e\u0631\u0627\u0628\u06cc \u0633\u0627\u0645\u0646\u06d2 \u0646\u06c1\u06cc\u06ba \u0622\u0626\u06cc\u06d4 \u06c1\u0645 \u0646\u06d2 \u067e\u0631\u0627\u0646\u06d2 \u0627\u0648\u0631 \u0646\u0626\u06d2 \u0645\u0627\u062d\u0648\u0644 \u06a9\u06d2 \u062f\u0631\u0645\u06cc\u0627\u0646 \u06a9\u0627\u0631\u06a9\u0631\u062f\u06af\u06cc \u06a9\u06d2 \u0641\u0631\u0642 \u06a9\u06cc \u0628\u06be\u06cc \u0646\u0634\u0627\u0646\u062f\u06c1\u06cc \u06a9\u06cc \u062c\u0633 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0645\u06a9\u0645\u0644 \u0637\u0648\u0631 \u067e\u0631 \u0628\u06c1\u062a\u0631 \u0645\u0646\u062a\u0642\u0644\u06cc \u067e\u0631 \u063a\u0648\u0631 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0645\u0632\u06cc\u062f \u062a\u0641\u062a\u06cc\u0634 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u062a\u06be\u06cc\u06d4<\/p>\n<p>\u0635\u0631\u0641 \u06a9\u0627\u0645\u06cc\u0627\u0628\u06cc \u06a9\u0627 \u0627\u0639\u0644\u0627\u0646 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u0627\u06cc\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u0686\u0644 \u0631\u06c1\u06cc \u06c1\u06d2\u060c \u06cc\u06c1 \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u06cc\u06c1 \u0638\u0627\u06c1\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u06a9\u0644\u0627\u0624\u0688 \u0645\u0627\u0626\u06cc\u06af\u0631\u06cc\u0634\u0646 \u06a9\u06cc \u0645\u0646\u0635\u0648\u0628\u06c1 \u0628\u0646\u062f\u06cc \u06a9\u0631\u0646\u0627 \u0627\u0648\u0631 \u0627\u0633 \u067e\u0631 \u0639\u0645\u0644 \u062f\u0631\u0622\u0645\u062f \u06a9\u0631\u0646\u0627\u060c \u0645\u062a\u0639\u0644\u0642\u06c1 \u062e\u0637\u0631\u0627\u062a \u06a9\u0627 \u0627\u0646\u062a\u0638\u0627\u0645 \u06a9\u0631\u0646\u0627\u060c \u0646\u062a\u0627\u0626\u062c \u06a9\u06cc \u062a\u0635\u062f\u06cc\u0642 \u06a9\u0631\u0646\u0627\u060c \u0627\u0648\u0631 \u0627\u06cc\u0633\u06d2 \u0645\u0633\u0627\u0626\u0644 \u06a9\u06cc \u0646\u0634\u0627\u0646\u062f\u06c1\u06cc \u06a9\u0631\u0646\u0627 \u0645\u0645\u06a9\u0646 \u06c1\u06d2 \u062c\u0646 \u067e\u0631 \u0627\u0628\u06be\u06cc \u0628\u06be\u06cc \u062a\u0648\u062c\u06c1 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2\u06d4<\/p>\n<p><strong>\u0627\u0646\u0679\u0631\u0648\u06cc\u0648 \u06a9\u06cc \u062a\u062c\u0627\u0648\u06cc\u0632:<\/strong> \u06cc\u06c1 \u0628\u062a\u0627\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062a\u06cc\u0627\u0631 \u0631\u06c1\u06cc\u06ba \u06a9\u06c1 \u0622\u067e \u0646\u06d2 \u0648\u0632\u0646\u06cc \u0679\u0631\u06cc\u0641\u06a9 \u0631\u0648\u0679\u0646\u06af \u06a9\u06cc\u0648\u06ba \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06cc\u060c \u06a9\u0679 \u0627\u0648\u0648\u0631 \u06a9\u06d2 \u062f\u0648\u0631\u0627\u0646 \u0622\u067e \u0646\u06d2 \u0627\u067e\u0646\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u06cc \u062a\u0648\u062b\u06cc\u0642 \u06a9\u06cc\u0633\u06d2 \u06a9\u06cc\u060c \u06a9\u0633 \u0686\u06cc\u0632 \u0646\u06d2 \u0631\u0648\u0644 \u0628\u06cc\u06a9 \u06a9\u0627 \u0627\u0634\u0627\u0631\u06c1 \u06a9\u06cc\u0627\u060c \u0627\u0648\u0631 \u067e\u0648\u0633\u0679\u06af\u0631\u06cc \u0627\u06cc\u0633 \u06a9\u06cc\u0648 \u0627\u06cc\u0644 AWS \u067e\u0631 \u06a9\u06cc\u0648\u06ba \u0631\u06c1\u06d2 \u06af\u0627\u06d4<\/p>\n<\/p><\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u06cc\u06c1 \u06af\u0627\u0626\u06cc\u0688\u0688 \u0644\u06cc\u0628 \u0622\u067e \u06a9\u0648 React UI \u0627\u0648\u0631 Express API \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u0627\u06cc\u06a9 \u0686\u06be\u0648\u0679\u06cc \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u06a9\u06cc \u0627\u06cc\u067e \u06a9\u0648 \u0645\u0646\u062a\u0642\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0644\u06d2 \u062c\u0627\u062a\u06cc \u06c1\u06d2 \u062c\u0648 \u0627\u06cc\u06a9 \u0648\u0627\u062d\u062f AWS EC2 \u0645\u062b\u0627\u0644 \u067e\u0631 \u0686\u0644\u062a\u06cc \u06c1\u06d2 \u062c\u0628\u06a9\u06c1 PostgreSQL AWS \u067e\u0631 \u0631\u06c1\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u067e\u0646\u06d2 UI \u0627\u0648\u0631 API \u06a9\u0648 Google Kubernetes Engine \u0645\u06cc\u06ba \u0645\u0646\u062a\u0642\u0644 \u06a9\u0631 \u06a9\u06d2 \u0627\u0646 [&hellip;]<\/p>\n","protected":false},"author":7,"featured_media":30966,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[1],"tags":[],"class_list":["post-30965","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog"],"_links":{"self":[{"href":"https:\/\/umang.pk\/ur\/wp-json\/wp\/v2\/posts\/30965","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/umang.pk\/ur\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/umang.pk\/ur\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/umang.pk\/ur\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/umang.pk\/ur\/wp-json\/wp\/v2\/comments?post=30965"}],"version-history":[{"count":1,"href":"https:\/\/umang.pk\/ur\/wp-json\/wp\/v2\/posts\/30965\/revisions"}],"predecessor-version":[{"id":30967,"href":"https:\/\/umang.pk\/ur\/wp-json\/wp\/v2\/posts\/30965\/revisions\/30967"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/umang.pk\/ur\/wp-json\/wp\/v2\/media\/30966"}],"wp:attachment":[{"href":"https:\/\/umang.pk\/ur\/wp-json\/wp\/v2\/media?parent=30965"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/umang.pk\/ur\/wp-json\/wp\/v2\/categories?post=30965"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/umang.pk\/ur\/wp-json\/wp\/v2\/tags?post=30965"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}