{"id":29027,"date":"2026-09-09T05:04:41","date_gmt":"2026-09-09T05:04:41","guid":{"rendered":"https:\/\/umang.pk\/2026\/09\/09\/aws-%da%a9%d9%84%d8%a7%d8%a4%da%88-%d9%84%d8%a7%da%af%d8%aa-%da%a9%db%8c-%d9%86%da%af%d8%b1%d8%a7%d9%86%db%8c%d8%8c-%d8%a7%d9%86%d8%aa%d8%a8%d8%a7%db%81%d8%a7%d8%aa%d8%8c-%d8%a7%d9%88%d8%b1-%d8%a7\/"},"modified":"2026-09-09T05:04:41","modified_gmt":"2026-09-09T05:04:41","slug":"aws-%da%a9%d9%84%d8%a7%d8%a4%da%88-%d9%84%d8%a7%da%af%d8%aa-%da%a9%db%8c-%d9%86%da%af%d8%b1%d8%a7%d9%86%db%8c%d8%8c-%d8%a7%d9%86%d8%aa%d8%a8%d8%a7%db%81%d8%a7%d8%aa%d8%8c-%d8%a7%d9%88%d8%b1-%d8%a7","status":"publish","type":"post","link":"https:\/\/umang.pk\/en_us\/2026\/09\/09\/aws-%da%a9%d9%84%d8%a7%d8%a4%da%88-%d9%84%d8%a7%da%af%d8%aa-%da%a9%db%8c-%d9%86%da%af%d8%b1%d8%a7%d9%86%db%8c%d8%8c-%d8%a7%d9%86%d8%aa%d8%a8%d8%a7%db%81%d8%a7%d8%aa%d8%8c-%d8%a7%d9%88%d8%b1-%d8%a7\/","title":{"rendered":"AWS \u06a9\u0644\u0627\u0624\u0688 \u0644\u0627\u06af\u062a \u06a9\u06cc \u0646\u06af\u0631\u0627\u0646\u06cc\u060c \u0627\u0646\u062a\u0628\u0627\u06c1\u0627\u062a\u060c \u0627\u0648\u0631 \u0627\u0635\u0644\u0627\u062d: \u0688\u0648\u06cc\u0644\u067e\u0631\u0632 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u0631\u06c1\u0646\u0645\u0627"},"content":{"rendered":"\n<div id=\"\">\n<p>\u06c1\u0645\u0627\u0631\u06cc \u0627\u0646\u062c\u06cc\u0646\u0626\u0631\u0646\u06af \u0679\u06cc\u0645 \u06a9\u06cc \u06c1\u0631 \u0645\u0627\u06c1 \u0639\u0627\u0645 \u06af\u0641\u062a\u06af\u0648 \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u06d4 \u06a9\u0633\u06cc \u0646\u06d2 \u0645\u062c\u06be\u06d2 \u0627\u067e\u0646\u06d2 AWS \u0628\u0644 \u06a9\u0627 \u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679 \u0641\u0627\u0631\u0648\u0631\u0688 \u06a9\u06cc\u0627\u06d4 \u06cc\u06c1 \u062a\u0639\u062f\u0627\u062f \u06af\u0632\u0634\u062a\u06c1 \u0645\u0627\u06c1 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u06c1\u06d2\u06d4 \u06c1\u0631 \u06a9\u0648\u0626\u06cc \u0633\u0631 \u06c1\u0644\u0627\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u062a\u0641\u0627\u0642 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0627\u0633\u06d2 \u0646\u06cc\u0686\u06d2 \u062c\u0627\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2\u06d4 \u06a9\u0686\u06be \u0628\u06be\u06cc \u0679\u06be\u0648\u0633 \u0641\u06cc\u0635\u0644\u06c1 \u0646\u06c1\u06cc\u06ba \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u0633\u0627\u0626\u06cc\u06a9\u0644 \u062f\u06c1\u0631\u0627\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2.<\/p>\n<p>\u0627\u0633 \u06af\u0627\u0626\u06cc\u0688 \u06a9\u0648 \u0627\u0633 \u0633\u0627\u0626\u06cc\u06a9\u0644 \u06a9\u0648 \u062e\u062a\u0645 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0688\u06cc\u0632\u0627\u0626\u0646 \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2 \u062a\u0627\u06a9\u06c1 \u0627\u0633\u06d2 \u0645\u0632\u06cc\u062f \u0645\u0641\u06cc\u062f \u0686\u06cc\u0632 \u0633\u06d2 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u06cc\u0627 \u062c\u0627 \u0633\u06a9\u06d2: \u0627\u06cc\u06a9 \u0645\u0646\u0638\u0645\u060c \u0633\u0631\u0648\u0633 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0645\u062e\u0635\u0648\u0635 \u0646\u0642\u0637\u06c1 \u0646\u0638\u0631 \u062c\u0648 \u0622\u067e \u06a9\u0648 \u06cc\u06c1 \u062c\u0627\u0646\u0646\u06d2 \u0645\u06cc\u06ba \u0645\u062f\u062f \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0622\u067e \u06a9\u06cc\u0627 \u062e\u0631\u0686 \u06a9\u0631 \u0631\u06c1\u06d2 \u06c1\u06cc\u06ba\u060c \u0622\u067e \u0627\u0633\u06d2 \u06a9\u06cc\u0648\u06ba \u062e\u0631\u0686 \u06a9\u0631 \u0631\u06c1\u06d2 \u06c1\u06cc\u06ba\u060c \u0628\u0644 \u0622\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0645\u0633\u0627\u0626\u0644 \u06a9\u06cc \u0646\u0634\u0627\u0646\u062f\u06c1\u06cc \u06a9\u0631\u06cc\u06ba\u060c \u0627\u0648\u0631 \u0642\u06cc\u0627\u0633 \u06a9\u06d2 \u0628\u063a\u06cc\u0631 \u0622\u067e \u06a9\u06cc \u0631\u0642\u0645 \u06a9\u06cc \u0628\u0686\u062a \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p>\u06cc\u06c1 \u0645\u0646\u0638\u0645 \u06c1\u06d2 \u062a\u0627\u06a9\u06c1 \u0622\u067e \u062f\u0648\u0628\u0627\u0631\u06c1 \u0627\u0633 \u06a9\u0627 \u062d\u0648\u0627\u0644\u06c1 \u062f\u06d2 \u0633\u06a9\u06cc\u06ba\u06d4 \u06c1\u0631 \u062d\u0635\u06c1 \u0627\u067e\u0646\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0645\u06a9\u0645\u0644 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u06af\u0631 \u06cc\u06c1 \u0622\u067e \u06a9\u0627 \u0645\u0648\u062c\u0648\u062f\u06c1 \u0645\u0633\u0626\u0644\u06c1 \u06c1\u06d2\u060c \u062a\u0648 \u0622\u067e \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a RDS \u0633\u06cc\u06a9\u0634\u0646 \u067e\u0631 \u062c\u0627 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u06cc\u0627 \u0627\u06af\u0631 \u0622\u067e \u0634\u0631\u0648\u0639 \u0633\u06d2 FinOps \u067e\u0631\u06cc\u06a9\u0679\u0633 \u0628\u0646\u0627 \u0631\u06c1\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u0622\u067e \u0634\u0631\u0648\u0639 \u0633\u06d2 \u0622\u062e\u0631 \u062a\u06a9 \u06af\u0627\u0626\u06cc\u0688 \u06a9\u06cc \u067e\u06cc\u0631\u0648\u06cc \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0622\u067e \u06a9\u0648\u0626\u06cc \u0628\u06be\u06cc \u06a9\u0645\u0627\u0646\u0688 \u0686\u0644\u0627 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u06a9\u0633\u06cc \u0628\u06be\u06cc \u0627\u0633\u06a9\u0631\u067e\u0679 \u06a9\u0648 \u062a\u0639\u06cc\u0646\u0627\u062a \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<h2 id=\"heading-table-of-contents\">\u0627\u0646\u0688\u06cc\u06a9\u0633<\/h2>\n<h2 id=\"heading-what-youll-learn\">\u062c\u0648 \u0622\u067e \u0633\u06cc\u06a9\u06be\u06cc\u06ba \u06af\u06d2\u06d4<\/h2>\n<ul>\n<li>\n<p>\u0627\u06cc\u062a\u06be\u06cc\u0646\u0627 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u0644\u0627\u06af\u062a \u0627\u0648\u0631 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06cc \u0631\u067e\u0648\u0631\u0679 \u06a9\u06d2 \u0633\u0648\u0627\u0644\u0627\u062a \u06a9\u06cc\u0633\u06d2 \u0645\u0631\u062a\u0628 \u06a9\u06cc\u06d2 \u062c\u0627\u0626\u06cc\u06ba\u060c \u062a\u0645\u0627\u0645 \u0633\u0646\u062c\u06cc\u062f\u06c1 \u0644\u0627\u06af\u062a \u06a9\u06d2 \u062a\u062c\u0632\u06cc\u06c1 \u06a9\u06cc \u0628\u0646\u06cc\u0627\u062f\u06d4<\/p>\n<\/li>\n<li>\n<p>\u067e\u0627\u0646\u0686 \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688\u0632 \u062c\u0646 \u06a9\u06cc \u06c1\u0631 \u0627\u0646\u062c\u06cc\u0646\u0626\u0631\u0646\u06af \u0679\u06cc\u0645 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u062a\u06cc \u06c1\u06d2 \u0627\u0646 \u0633\u0648\u0627\u0644\u0627\u062a \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0628\u0646\u0627\u0626\u06d2 \u06af\u0626\u06d2 \u06c1\u06cc\u06ba \u062c\u0646\u06c1\u06cc\u06ba \u0622\u067e \u0622\u062c \u0686\u0644\u0627 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0627\u0646\u062a\u0628\u0627\u06c1\u06cc \u062a\u06be\u06a9\u0627\u0648\u0679 \u06a9\u0627 \u0633\u0628\u0628 \u0628\u0646\u06d2 \u0628\u063a\u06cc\u0631 \u0644\u0627\u06af\u062a \u0645\u06cc\u06ba \u0627\u0636\u0627\u0641\u06d2 \u06a9\u0648 \u067e\u06a9\u0691\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062a\u06cc\u0646 \u062f\u0631\u062c\u06d2 \u06a9\u06cc \u0627\u0646\u062a\u0628\u0627\u06c1\u06cc \u062d\u06a9\u0645\u062a \u0639\u0645\u0644\u06cc<\/p>\n<\/li>\n<li>\n<p>EC2\u060c S3\u060c Lambda\u060c RDS\u060c DynamoDB\u060c \u0627\u0648\u0631 \u0688\u06cc\u0679\u0627 \u06a9\u06cc \u0645\u0646\u062a\u0642\u0644\u06cc \u06a9\u06d2 \u0644\u06cc\u06d2 \u0633\u0631\u0648\u0633 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0645\u062e\u0635\u0648\u0635 \u0622\u067e\u0679\u06cc\u0645\u0627\u0626\u0632\u06cc\u0634\u0646 \u067e\u0644\u06d2 \u0628\u06a9\u0633<\/p>\n<\/li>\n<li>\n<p>\u067e\u06c1\u0644\u06d2 \u0645\u06c1\u06cc\u0646\u06d2 \u0645\u06cc\u06ba \u0642\u0627\u0628\u0644 \u067e\u06cc\u0645\u0627\u0626\u0634 \u0644\u0627\u06af\u062a \u06a9\u06cc \u0628\u0686\u062a \u062d\u0627\u0635\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u0645\u062e\u0635\u0648\u0635 30 \u062f\u0646 \u06a9\u0627 \u0633\u067e\u0631\u0646\u0679\u06d4<\/p>\n<\/li>\n<\/ul>\n<p>\u0622\u0626\u06cc\u06d2 \u0627\u0633\u06d2 \u0634\u0631\u0648\u0639 \u0633\u06d2 \u0628\u0646\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<h2 id=\"heading-prerequisites\">\u0634\u0631\u0627\u0626\u0637<\/h2>\n<p>\u0627\u0633 \u06af\u0627\u0626\u06cc\u0688 \u067e\u0631 \u0639\u0645\u0644 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2\u060c \u0622\u067e \u06a9\u0648 \u0636\u0631\u0648\u0631\u062a \u06c1\u0648 \u06af\u06cc:<\/p>\n<p><strong>\u0639\u0644\u0645:<\/strong><\/p>\n<ul>\n<li>\n<p>AWS \u062e\u062f\u0645\u0627\u062a (EC2\u060c S3\u060c RDS\u060c Lambda\u060c \u0627\u0648\u0631 VPC) \u06a9\u06d2 \u0628\u0627\u0631\u06d2 \u0645\u06cc\u06ba \u06a9\u0627\u0645 \u06a9\u0631\u0646\u06d2 \u06a9\u0627 \u0639\u0644\u0645\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0622\u0631\u0627\u0645 \u062f\u06c1 \u0627\u0648\u0631 \u067e\u0631\u0633\u06a9\u0648\u0646 \u067e\u0691\u06be\u0646\u06d2 Python \u0627\u0648\u0631 SQL<\/p>\n<\/li>\n<li>\n<p>IAM \u06a9\u06cc \u067e\u0627\u0644\u06cc\u0633\u06cc\u0627\u06ba \u0627\u0648\u0631 \u06a9\u0631\u062f\u0627\u0631 \u06a9\u06cc\u0633\u06d2 \u06a9\u0627\u0645 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u0627\u0633 \u06a9\u06cc \u0628\u0646\u06cc\u0627\u062f\u06cc \u0633\u0645\u062c\u06be<\/p>\n<\/li>\n<\/ul>\n<p><strong>\u067e\u0648\u0632\u06cc\u0634\u0646:<\/strong><\/p>\n<ul>\n<li>\n<p>\u0628\u0644\u0646\u06af \u062a\u06a9 \u0631\u0633\u0627\u0626\u06cc \u06a9\u06d2 \u0633\u0627\u062a\u06be AWS \u0627\u06a9\u0627\u0624\u0646\u0679\u06d4 IAM \u0635\u0627\u0631\u0641 \u06cc\u0627 \u0627\u0633 \u06a9\u0631\u062f\u0627\u0631 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062f\u0631\u06a9\u0627\u0631 \u06c1\u06d2 \u062c\u0633 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0622\u067e \u06a9\u0627\u0645 \u06a9\u0631 \u0631\u06c1\u06d2 \u06c1\u06cc\u06ba\u06d4 <code>ce:GetCostAndUsage<\/code>\u060c <code>ec2:Describe*<\/code>\u060c <code>rds:Describe*<\/code>\u0627\u0648\u0631 <code>s3:GetBucketLifecycleConfiguration<\/code> \u0627\u062a\u06be\u0627\u0631\u0679\u06cc<\/p>\n<\/li>\n<li>\n<p>AWS CLI v2 \u06a9\u0646\u0641\u06cc\u06af\u0631\u06cc\u0634\u0646<\/p>\n<\/li>\n<li>\n<p>\u0627\u06cc\u062a\u06be\u06cc\u0646\u0627 \u062a\u06a9 \u0631\u0633\u0627\u0626\u06cc \u062d\u0627\u0635\u0644 \u06a9\u0631\u06cc\u06ba (\u062d\u0635\u06c1 1 \u0645\u06cc\u06ba CUR \u0633\u0648\u0627\u0644\u0627\u062a \u06a9\u06d2 \u0644\u06cc\u06d2)<\/p>\n<\/li>\n<\/ul>\n<p><strong>\u062a\u0631\u062a\u06cc\u0628:<\/strong><\/p>\n<ul>\n<li>Cost Explorer \u06a9\u0648 \u0641\u0639\u0627\u0644 \u06a9\u0631\u06cc\u06ba \u0627\u06af\u0631 \u06cc\u06c1 \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u0641\u0639\u0627\u0644 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0645\u0641\u062a \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u0633 \u06af\u0627\u0626\u06cc\u0688 \u0645\u06cc\u06ba \u0632\u06cc\u0627\u062f\u06c1 \u062a\u0631 \u06a9\u0645\u0627\u0646\u0688\u0632 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0636\u0631\u0648\u0631\u06cc \u06c1\u06d2\u06d4<\/li>\n<\/ul>\n<pre><code class=\"language-bash\">aws ce enable-cost-explorer --region us-east-1\n<\/code><\/pre>\n<ul>\n<li>\u0622\u067e \u06a9\u0648 \u0644\u0627\u06af\u062a \u0627\u0648\u0631 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06cc \u0631\u067e\u0648\u0631\u0679 (CUR) \u06a9\u0648 \u062a\u0631\u062a\u06cc\u0628 \u062f\u06cc\u0646\u06d2 \u0627\u0648\u0631 \u0627\u0633\u06d2 S3 \u0628\u0627\u0644\u0679\u06cc \u0645\u06cc\u06ba \u0628\u0631\u0622\u0645\u062f \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2\u06d4 \u0627\u06af\u0631 \u0622\u067e \u0646\u06d2 \u0627\u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u062a\u0631\u062a\u06cc\u0628 \u0646\u06c1\u06cc\u06ba \u062f\u06cc\u0627 \u06c1\u06d2\u060c \u062a\u0648 AWS CUR \u0633\u06cc\u0679 \u0627\u067e \u06af\u0627\u0626\u06cc\u0688 \u0627\u0633 \u0639\u0645\u0644 \u0645\u06cc\u06ba \u0622\u067e \u06a9\u06cc \u0631\u06c1\u0646\u0645\u0627\u0626\u06cc \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0628\u0631\u0627\u06c1 \u06a9\u0631\u0645 \u0627\u067e\u0646\u06cc \u067e\u06c1\u0644\u06cc \u0688\u06cc\u0679\u0627 \u0641\u0627\u0626\u0644 \u0628\u0646\u0627\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0633\u06cc\u0679 \u0627\u067e \u06a9\u06d2 24 \u06af\u06be\u0646\u0679\u06d2 \u0628\u0639\u062f \u0631\u067e\u0648\u0631\u0679\u0633 \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u06cc\u06ba\u06d4<\/li>\n<\/ul>\n<h2 id=\"heading-part-1-monitoring-know-where-every-dollar-goes\">\u062d\u0635\u06c1 1: \u0646\u06af\u0631\u0627\u0646\u06cc &#8211; \u062c\u0627\u0646\u06cc\u06ba \u06a9\u06c1 \u06c1\u0631 \u0688\u0627\u0644\u0631 \u06a9\u06c1\u0627\u06ba \u062c\u0627 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4<\/h2>\n<h3 id=\"heading-11-the-cost-and-usage-report-your-source-of-truth\">1.1 \u0644\u0627\u06af\u062a \u0627\u0648\u0631 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06cc \u0631\u067e\u0648\u0631\u0679 \u2013 \u0645\u0639\u0644\u0648\u0645\u0627\u062a \u06a9\u0627 \u0630\u0631\u06cc\u0639\u06c1<\/h3>\n<p>\u0644\u0627\u06af\u062a \u0627\u06cc\u06a9\u0633\u067e\u0644\u0648\u0631\u0631 \u0633\u0631\u0648\u0633 \u06a9\u06cc \u0633\u0637\u062d \u06a9\u0627 \u0645\u062c\u0645\u0648\u0639\u06c1 \u062f\u06a9\u06be\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u06af\u0631\u0686\u06c1 \u0631\u062c\u062d\u0627\u0646 \u06a9\u06cc \u0634\u0646\u0627\u062e\u062a \u06a9\u06d2 \u0644\u06cc\u06d2 \u0645\u0641\u06cc\u062f \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u06cc\u06c1 \u0628\u0646\u06cc\u0627\u062f\u06cc \u0648\u062c\u06c1 \u06a9\u06d2 \u062a\u062c\u0632\u06cc\u06c1 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u0627\u0641\u06cc \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u0627\u06af\u0631 \u0622\u067e \u06a9\u0648 \u06cc\u06c1 \u062c\u0627\u0646\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2 \u06a9\u06c1 $12,000\/\u0645\u0627\u06c1 \u06a9\u06d2 \u0622\u0626\u0679\u0645 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u0648\u0646 \u0633\u0627 \u0645\u062e\u0635\u0648\u0635 \u0648\u0633\u06cc\u0644\u06c1 \u0630\u0645\u06c1 \u062f\u0627\u0631 \u06c1\u06d2\u060c \u062a\u0648 \u0622\u067e \u06a9\u0648 \u0642\u06cc\u0645\u062a \u0627\u0648\u0631 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06cc \u0631\u067e\u0648\u0631\u0679\u0648\u06ba \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u06af\u06cc \u062c\u0648 \u0627\u06cc\u062a\u06be\u06cc\u0646\u0627 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u067e\u0648\u0686\u06be\u06d2 \u06af\u0626\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u0627\u067e\u0646\u06d2 CUR \u0688\u06cc\u0679\u0627 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u062a\u06be\u06cc\u0646\u0627 \u0679\u06cc\u0628\u0644 \u0628\u0646\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-sql\">-- Run this once in Athena after your CUR starts generating data\n-- Replace 'your-cur-bucket' and 'your-prefix' with your actual values\n\nCREATE EXTERNAL TABLE IF NOT EXISTS cur_database.billing (\n    bill_billing_period_start_date  STRING,\n    bill_payer_account_id           STRING,\n    line_item_usage_start_date      STRING,\n    line_item_resource_id           STRING,\n    line_item_usage_type            STRING,\n    line_item_usage_amount          DOUBLE,\n    line_item_unblended_cost        DOUBLE,\n    product_servicecode             STRING,\n    product_instance_type           STRING,\n    product_region                  STRING,\n    resource_tags_user_environment  STRING,\n    resource_tags_user_team         STRING,\n    resource_tags_user_service      STRING,\n    resource_tags_user_owner        STRING\n)\nPARTITIONED BY (year STRING, month STRING)\nROW FORMAT DELIMITED\nFIELDS TERMINATED BY ','\nLOCATION 's3:\/\/your-cur-bucket\/your-prefix\/'\nTBLPROPERTIES ('skip.header.line.count'='1');\n\nMSCK REPAIR TABLE cur_database.billing;\n<\/code><\/pre>\n<p>\u06cc\u06c1\u0627\u06ba \u062a\u06cc\u0646 \u0633\u0648\u0627\u0644\u0627\u062a \u06c1\u06cc\u06ba \u062c\u0648 \u0622\u067e \u06a9\u0648 \u067e\u06c1\u0644\u06d2 \u062f\u0646 \u0686\u0644\u0627\u0646\u0627 \u0686\u0627\u06c1\u0626\u06d2:<\/p>\n<pre><code class=\"language-sql\">-- Query 1: Top 20 resources by cost this month\n-- Run this first. It tells you where to focus.\nSELECT\n    line_item_resource_id,\n    product_servicecode,\n    resource_tags_user_team     AS team,\n    resource_tags_user_service  AS service,\n    SUM(line_item_unblended_cost) AS total_cost_usd\nFROM cur_database.billing\nWHERE line_item_usage_start_date >= DATE_FORMAT(\n    DATE_TRUNC('month', CURRENT_DATE), '%Y-%m-%d'\n)\n  AND line_item_unblended_cost > 0\nGROUP BY 1, 2, 3, 4\nORDER BY total_cost_usd DESC\nLIMIT 20;\n<\/code><\/pre>\n<pre><code class=\"language-sql\">-- Query 2: Week-over-week cost growth by service\n-- Identifies which services are growing fastest \u2014 these need investigation\nWITH weekly AS (\n    SELECT\n        DATE_TRUNC('week', CAST(line_item_usage_start_date AS DATE)) AS week,\n        product_servicecode,\n        SUM(line_item_unblended_cost) AS cost\n    FROM cur_database.billing\n    WHERE line_item_usage_start_date >=\n          DATE_FORMAT(DATE_ADD('day', -42, CURRENT_DATE), '%Y-%m-%d')\n    GROUP BY 1, 2\n)\nSELECT\n    curr.product_servicecode AS service,\n    ROUND(prev.cost, 2)      AS prev_week_cost,\n    ROUND(curr.cost, 2)      AS curr_week_cost,\n    ROUND(\n        100.0 * (curr.cost - prev.cost) \/ NULLIF(prev.cost, 0),\n        1\n    ) AS pct_change\nFROM weekly curr\nJOIN weekly prev\n  ON curr.product_servicecode = prev.product_servicecode\n  AND curr.week = DATE_ADD('week', 1, prev.week)\nWHERE curr.week = DATE_TRUNC('week', CURRENT_DATE)\n  AND ABS((curr.cost - prev.cost) \/ NULLIF(prev.cost, 0)) > 0.20\nORDER BY pct_change DESC;\n<\/code><\/pre>\n<pre><code class=\"language-sql\">-- Query 3: Resources running with no usage (candidates for shutdown)\n-- Finds resources that incurred cost but had zero usage quantity\n-- in the past 7 days \u2014 strong signal for idle or orphaned resources\nSELECT\n    line_item_resource_id,\n    product_servicecode,\n    resource_tags_user_owner    AS owner,\n    resource_tags_user_team     AS team,\n    SUM(line_item_unblended_cost) AS cost_past_7_days\nFROM cur_database.billing\nWHERE line_item_usage_start_date >=\n      DATE_FORMAT(DATE_ADD('day', -7, CURRENT_DATE), '%Y-%m-%d')\n  AND line_item_usage_amount = 0\n  AND line_item_unblended_cost > 5\nGROUP BY 1, 2, 3, 4\nORDER BY cost_past_7_days DESC\nLIMIT 30;\n<\/code><\/pre>\n<h3 id=\"heading-12-the-five-essential-cost-dashboards\">1.2 5 \u0636\u0631\u0648\u0631\u06cc \u0644\u0627\u06af\u062a \u0648\u0627\u0644\u06d2 \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688\u0632<\/h3>\n<p>\u06cc\u06c1 \u067e\u0627\u0646\u0686 \u062e\u06cc\u0627\u0644\u0627\u062a \u0632\u06cc\u0627\u062f\u06c1 \u062a\u0631 \u0627\u0646\u062c\u06cc\u0646\u0626\u0631\u0646\u06af \u0679\u06cc\u0645\u0648\u06ba \u06a9\u06cc \u0646\u06af\u0631\u0627\u0646\u06cc \u06a9\u06cc \u0636\u0631\u0648\u0631\u06cc\u0627\u062a \u06a9\u0648 \u067e\u0648\u0631\u0627 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u06c1\u0631 \u0627\u06cc\u06a9 \u0633\u0648\u0627\u0644\u0627\u062a \u067e\u0631 \u0628\u0646\u0627\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2 \u062c\u0648 \u062a\u06be\u0631\u0688 \u067e\u0627\u0631\u0679\u06cc \u0679\u0648\u0644\u0632 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06a9\u06d2 \u0628\u063a\u06cc\u0631 \u0628\u0627\u06a9\u0633 \u0633\u06d2 \u0628\u0627\u06c1\u0631 \u0686\u0644 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h4 id=\"heading-dashboard-1-executive-summary-for-weekly-leadership-updates\">\u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 1: \u062e\u0644\u0627\u0635\u06c1 (\u06c1\u0641\u062a\u06c1 \u0648\u0627\u0631 \u0644\u06cc\u0688\u0631 \u0634\u067e \u0627\u067e \u0688\u06cc\u0679\u0633 \u06a9\u06d2 \u0644\u06cc\u06d2)<\/h4>\n<pre><code class=\"language-python\"># executive_summary.py\nimport boto3\nfrom datetime import datetime, timedelta\n\nce = boto3.client('ce')\n\n\ndef weekly_summary():\n    today     = datetime.now()\n    start_mtd = today.replace(day=1).strftime('%Y-%m-%d')\n    today_str = today.strftime('%Y-%m-%d')\n\n    # Month-to-date spend\n    mtd = ce.get_cost_and_usage(\n        TimePeriod={'Start': start_mtd, 'End': today_str},\n        Granularity='MONTHLY',\n        Metrics=['UnblendedCost']\n    )\n    mtd_spend = float(\n        mtd['ResultsByTime'][0]['Total']['UnblendedCost']['Amount']\n    )\n\n    # End-of-month forecast\n    forecast = ce.get_cost_forecast(\n        TimePeriod={\n            'Start': today_str,\n            'End':   (today.replace(day=28) + timedelta(days=4)).replace(day=1).strftime('%Y-%m-%d'),\n        },\n        Metric=\"UNBLENDED_COST\",\n        Granularity='MONTHLY'\n    )\n    eom_forecast = float(forecast['Total']['Amount']) + mtd_spend\n\n    # Top 5 services\n    by_service = ce.get_cost_and_usage(\n        TimePeriod={'Start': start_mtd, 'End': today_str},\n        Granularity='MONTHLY',\n        Metrics=['UnblendedCost'],\n        GroupBy=[{'Type': 'DIMENSION', 'Key': 'SERVICE'}]\n    )\n    services = sorted(\n        [\n            (g['Keys'][0], float(g['Metrics']['UnblendedCost']['Amount']))\n            for g in by_service['ResultsByTime'][0]['Groups']\n        ],\n        key=lambda x: x[1],\n        reverse=True\n    )[:5]\n\n    print(f\"\\n{'\u2500'*48}\")\n    print(f\"  AWS Cost Summary \u2014 {today.strftime('%B %Y')}\")\n    print(f\"{'\u2500'*48}\")\n    print(f\"  Month-to-date:     ${mtd_spend:>12,.2f}\")\n    print(f\"  End-of-month est:  ${eom_forecast:>12,.2f}\")\n    print(f\"\\n  Top 5 Services:\")\n    for name, cost in services:\n        short = name.replace('Amazon ', '').replace('AWS ', '')\n        print(f\"    {short:<32} ${cost:>9,.2f}\")\n    print(f\"{'\u2500'*48}\\n\")\n\n\nweekly_summary()\n<\/code><\/pre>\n<h4 id=\"heading-dashboard-2-team-cost-breakdown-for-engineering-leads\">\u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 2: \u0679\u06cc\u0645 \u0644\u0627\u06af\u062a \u06a9\u0627 \u062a\u062c\u0632\u06cc\u06c1 (\u0627\u0646\u062c\u06cc\u0646\u0626\u0631\u0646\u06af \u0644\u06cc\u0688\u0632 \u06a9\u06d2 \u0644\u06cc\u06d2)<\/h4>\n<pre><code class=\"language-python\"># team_breakdown.py\nimport boto3\nfrom datetime import datetime\n\nce = boto3.client('ce')\n\n\ndef team_breakdown():\n    start = datetime.now().replace(day=1).strftime('%Y-%m-%d')\n    end   = datetime.now().strftime('%Y-%m-%d')\n\n    response = ce.get_cost_and_usage(\n        TimePeriod={'Start': start, 'End': end},\n        Granularity='MONTHLY',\n        Metrics=['UnblendedCost'],\n        GroupBy=[\n            {'Type': 'TAG',       'Key': 'Team'},\n            {'Type': 'DIMENSION', 'Key': 'SERVICE'},\n        ]\n    )\n\n    by_team = {}\n    for group in response['ResultsByTime'][0].get('Groups', []):\n        team_raw = group['Keys'][0]\n        team     = team_raw.replace('Team$', '') if team_raw else 'untagged'\n        service  = group['Keys'][1]\n        cost     = float(group['Metrics']['UnblendedCost']['Amount'])\n\n        if team not in by_team:\n            by_team[team] = {'total': 0.0, 'by_service': {}}\n        by_team[team]['total'] += cost\n        by_team[team]['by_service'][service] = (\n            by_team[team]['by_service'].get(service, 0.0) + cost\n        )\n\n    total_bill = sum(d['total'] for d in by_team.values())\n\n    print(f\"\\n{'\u2500'*58}\")\n    print(f\"  Team Cost Breakdown \u2014 MTD {datetime.now().strftime('%Y-%m-%d')}\")\n    print(f\"  Total: ${total_bill:,.2f}\")\n    print(f\"{'\u2500'*58}\")\n\n    for team, data in sorted(by_team.items(), key=lambda x: x[1]['total'], reverse=True):\n        pct = (data['total'] \/ total_bill * 100) if total_bill else 0\n        print(f\"\\n  {team:<20}  ${data['total']:>10,.2f}  ({pct:.1f}%)\")\n        top3 = sorted(data['by_service'].items(), key=lambda x: x[1], reverse=True)[:3]\n        for svc, cost in top3:\n            short = svc.replace('Amazon ', '').replace('AWS ', '')\n            print(f\"    \u2514\u2500 {short:<30} ${cost:>8,.2f}\")\n\n    print()\n\n\nteam_breakdown()\n<\/code><\/pre>\n<h4 id=\"heading-dashboard-3-waste-detection-for-weekly-cleanup-reviews\">\u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 3: \u0641\u0636\u0644\u06c1 \u06a9\u0627 \u067e\u062a\u06c1 \u0644\u06af\u0627\u0646\u0627 (\u06c1\u0641\u062a\u06c1 \u0648\u0627\u0631 \u0635\u0641\u0627\u0626\u06cc \u06a9\u06d2 \u062c\u0627\u0626\u0632\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2):<\/h4>\n<pre><code class=\"language-python\"># waste_detector.py\nimport boto3\nfrom datetime import datetime, timezone, timedelta\n\nec2  = boto3.client('ec2')\nelbv2 = boto3.client('elbv2')\ncw   = boto3.client('cloudwatch')\n\n\ndef detect_waste():\n    report = {'items': [], 'total_monthly_waste': 0.0}\n\n    # Unattached EBS volumes\n    for vol in ec2.describe_volumes(\n        Filters=[{'Name': 'status', 'Values': ['available']}]\n    )['Volumes']:\n        age  = (datetime.now(timezone.utc) - vol['CreateTime']).days\n        cost = round(vol['Size'] * 0.08, 2)\n        tags = {t['Key']: t['Value'] for t in vol.get('Tags', [])}\n        report['items'].append({\n            'type':         'Unattached EBS Volume',\n            'id':           vol['VolumeId'],\n            'detail':       f\"{vol['Size']}GB \u2014 {age} days old\",\n            'owner':        tags.get('Owner', '\u2014'),\n            'monthly_cost': cost,\n        })\n        report['total_monthly_waste'] += cost\n\n    # Unassociated Elastic IPs\n    for addr in ec2.describe_addresses()['Addresses']:\n        if 'AssociationId' not in addr:\n            report['items'].append({\n                'type':         'Unassociated Elastic IP',\n                'id':           addr.get('AllocationId', ''),\n                'detail':       addr['PublicIp'],\n                'owner':        '\u2014',\n                'monthly_cost': 3.60,\n            })\n            report['total_monthly_waste'] += 3.60\n\n    # Idle load balancers (fewer than 100 requests in 7 days)\n    for lb in elbv2.describe_load_balancers()['LoadBalancers']:\n        metrics = cw.get_metric_statistics(\n            Namespace=\"AWS\/ApplicationELB\",\n            MetricName=\"RequestCount\",\n            Dimensions=[{'Name': 'LoadBalancer',\n                         'Value': lb['LoadBalancerArn'].split(':loadbalancer\/')[-1]}],\n            StartTime=datetime.now() - timedelta(days=7),\n            EndTime=datetime.now(),\n            Period=604800,\n            Statistics=['Sum']\n        )['Datapoints']\n        total_requests = metrics[0]['Sum'] if metrics else 0\n\n        if total_requests < 100:\n            report['items'].append({\n                'type':         'Idle Load Balancer',\n                'id':           lb['LoadBalancerName'],\n                'detail':       f\"{int(total_requests)} requests in 7 days\",\n                'owner':        '\u2014',\n                'monthly_cost': 22.0,\n            })\n            report['total_monthly_waste'] += 22.0\n\n    print(f\"\\n  Waste Detection Report \u2014 {datetime.now().strftime('%Y-%m-%d')}\")\n    print(f\"  Estimated monthly waste: ${report['total_monthly_waste']:.2f}\\n\")\n\n    for item in sorted(report['items'], key=lambda x: x['monthly_cost'], reverse=True)[:20]:\n        print(f\"  [{item['type']}]\")\n        print(f\"    ID:     {item['id']}\")\n        print(f\"    Detail: {item['detail']}\")\n        print(f\"    Owner:  {item['owner']}\")\n        print(f\"    Cost:   ${item['monthly_cost']:.2f}\/month\\n\")\n\n    return report\n\n\ndetect_waste()\n<\/code><\/pre>\n<h3 id=\"heading-13-tagging-strategy-the-foundation-of-all-attribution\">1.3 \u0679\u06cc\u06af\u0646\u06af \u06a9\u06cc \u062d\u06a9\u0645\u062a \u0639\u0645\u0644\u06cc - \u062a\u0645\u0627\u0645 \u0627\u0646\u062a\u0633\u0627\u0628 \u06a9\u06cc \u0628\u0646\u06cc\u0627\u062f<\/h3>\n<p>\u062a\u0645\u0627\u0645 \u0644\u0627\u06af\u062a \u06a9\u06d2 \u0627\u0646\u062a\u0633\u0627\u0628 \u0645\u0627\u0688\u0644\u0632 \u0679\u06cc\u06af \u067e\u0631 \u0645\u0646\u062d\u0635\u0631 \u06c1\u06cc\u06ba\u06d4 \u0648\u06c1 \u0679\u06cc\u0645\u06cc\u06ba \u062c\u0648 \u0679\u06cc\u06af \u06a9\u0631\u0646\u0627 \u0686\u06be\u0648\u0691 \u062f\u06cc\u062a\u06cc \u06c1\u06cc\u06ba \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688\u0632 \u0628\u0646\u0627\u062a\u06cc \u06c1\u06cc\u06ba \u062c\u0648 \u0628\u063a\u06cc\u0631 \u06a9\u0633\u06cc \u0648\u0636\u0627\u062d\u062a \u06a9\u06d2 \u0679\u0648\u0679\u0644 \u062f\u06a9\u06be\u0627\u062a\u06cc \u06c1\u06cc\u06ba\u06d4 \u0627\u0635\u0648\u0644 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u0679\u06cc\u06af\u0646\u06af \u06a9\u0648 \u0637\u0631\u06cc\u0642\u06c1 \u06a9\u0627\u0631 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u0633\u0627\u062e\u062a\u06cc \u0628\u0646\u0627\u06cc\u0627 \u062c\u0627\u0626\u06d2\u06d4 \u0627\u0633 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u0648\u06c1 Confluence \u06a9\u06cc \u06cc\u0627\u062f \u062f\u06c1\u0627\u0646\u06cc\u0648\u06ba \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u0627\u0646\u0641\u0631\u0627\u0633\u0679\u0631\u06a9\u0686\u0631 \u06a9\u0648\u0688 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0646\u0627\u0641\u0630 \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u0645\u0637\u0644\u0648\u0628\u06c1 \u0679\u06cc\u06af \u0633\u06cc\u0679:<\/p>\n<pre><code class=\"language-hcl\"># terraform\/variables.tf\nvariable \"mandatory_tags\" {\n  description = \"Tags applied to every resource in this account\"\n  type        = map(string)\n\n  validation {\n    condition = alltrue([\n      contains(keys(var.mandatory_tags), \"Environment\"),\n      contains(keys(var.mandatory_tags), \"Team\"),\n      contains(keys(var.mandatory_tags), \"Owner\"),\n      contains(keys(var.mandatory_tags), \"Service\"),\n    ])\n    error_message = \"mandatory_tags must include Environment, Team, Owner, and Service.\"\n  }\n}\n\nlocals {\n  common_tags = merge(var.mandatory_tags, {\n    ManagedBy    = \"terraform\"\n    LastModified = timestamp()\n  })\n}\n\nresource \"aws_instance\" \"api_server\" {\n  ami           = data.aws_ami.amazon_linux_2023.id\n  instance_type = \"t3.medium\"\n  tags          = merge(local.common_tags, {Name = \"api-server-${var.environment}\"})\n}\n<\/code><\/pre>\n<p>\u06c1\u0631 \u06c1\u0641\u062a\u06d2\u060c \u06c1\u0645 \u063a\u06cc\u0631 \u0679\u06cc\u06af \u0634\u062f\u06c1 \u0648\u0633\u0627\u0626\u0644 \u062a\u0644\u0627\u0634 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u0627\u0646 \u06a9\u06cc \u0631\u067e\u0648\u0631\u0679 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">#!\/usr\/bin\/env bash\n# find_untagged.sh\n\necho \"Untagged EC2 instances (missing Team tag):\"\naws ec2 describe-instances \\\n  --filters \"Name=instance-state-name,Values=running\" \\\n  --query \"Reservations[].Instances[?!not_null(Tags[?Key=='Team'].Value|[0])].[InstanceId,InstanceType,LaunchTime]\" \\\n  --output table\n\necho \"Untagged RDS instances:\"\naws rds describe-db-instances \\\n  --query \"DBInstances[?!not_null(TagList[?Key=='Team'].Value|[0])].DBInstanceIdentifier\" \\\n  --output table\n<\/code><\/pre>\n<h2 id=\"heading-part-2-alerting-catch-spikes-before-they-become-invoices\">\u062d\u0635\u06c1 2: \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u2014 \u0622\u067e \u06a9\u0627 \u0628\u0644 \u0622\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0627\u0633\u067e\u0627\u0626\u06a9\u0633 \u06a9\u0648 \u067e\u06a9\u0691\u06cc\u06ba\u06d4<\/h2>\n<p>\u0627\u06cc\u06a9 \u0639\u0627\u0645 \u062f\u0631\u06cc\u0627\u0641\u062a \u0679\u0627\u0626\u0645 \u0644\u0627\u0626\u0646 \u062c\u0633 \u0645\u06cc\u06ba \u06a9\u0648\u0626\u06cc \u067e\u06cc\u0634\u06af\u06cc \u0627\u0637\u0644\u0627\u0639 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2: \u0627\u062e\u0631\u0627\u062c\u0627\u062a \u0645\u06cc\u06ba \u0627\u0636\u0627\u0641\u06c1 5 \u062a\u0627\u0631\u06cc\u062e \u06a9\u0648 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u060c \u0645\u0627\u06c1\u0627\u0646\u06c1 \u0628\u0644 20 \u062a\u0627\u0631\u06cc\u062e \u06a9\u0648 \u0622\u062a\u0627 \u06c1\u06d2\u060c \u06a9\u0648\u0626\u06cc 22 \u062a\u0627\u0631\u06cc\u062e \u06a9\u0648 \u0645\u0637\u0644\u0639 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c 23 \u062a\u0627\u0631\u06cc\u062e \u06a9\u0648 \u062a\u0641\u062a\u06cc\u0634 \u0634\u0631\u0648\u0639 \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u060c \u0627\u0648\u0631 \u0622\u067e \u062f\u0648 \u06c1\u0641\u062a\u0648\u06ba \u062a\u06a9 \u062f\u0639\u0648\u06cc \u06a9\u0631\u062f\u06c1 \u0641\u0636\u0644\u06c1 \u06a9\u0648 \u0628\u0627\u0632\u06cc\u0627\u0641\u062a \u0646\u06c1\u06cc\u06ba \u06a9\u0631 \u067e\u0627\u0626\u06cc\u06ba \u06af\u06d2\u06d4 \u067e\u06cc\u0634\u06af\u06cc \u0627\u0646\u062a\u0628\u0627\u06c1 \u06a9\u06d2 \u0633\u0627\u062a\u06be\u060c \u062a\u0644\u0627\u0634 \u06af\u06be\u0646\u0679\u0648\u06ba \u0645\u06cc\u06ba \u06c1\u0648 \u062c\u0627\u0626\u06d2 \u06af\u06cc\u06d4<\/p>\n<h3 id=\"heading-21-the-three-tier-alert-structure\">2.1 3 \u062f\u0631\u062c\u06d2 \u06a9\u06cc \u0648\u0627\u0631\u0646\u0646\u06af \u06a9\u0627 \u0688\u06be\u0627\u0646\u0686\u06c1<\/h3>\n<p>\u0627\u0646\u062a\u0628\u0627\u06c1\u06cc \u062a\u06be\u06a9\u0627\u0648\u0679 \u0627\u062a\u0646\u0627 \u06c1\u06cc \u0646\u0642\u0635\u0627\u0646 \u062f\u06c1 \u06c1\u06d2 \u062c\u062a\u0646\u0627 \u06a9\u0648\u0626\u06cc \u0627\u0646\u062a\u0628\u0627\u06c1 \u0646\u06c1\u06cc\u06ba\u06d4 \u062a\u06cc\u0646 \u062f\u0631\u062c\u06d2 \u06a9\u0627 \u0645\u0627\u0688\u0644 \u0645\u062e\u062a\u0644\u0641 \u0631\u062f\u0639\u0645\u0644 \u06a9\u06cc \u062a\u0648\u0642\u0639\u0627\u062a \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0645\u062e\u062a\u0644\u0641 \u0686\u06cc\u0646\u0644\u0632 \u067e\u0631 \u0645\u062e\u062a\u0644\u0641 \u0634\u062f\u062a \u06a9\u06cc \u0633\u0637\u062d\u0648\u06ba \u06a9\u0648 \u0631\u0648\u0679 \u06a9\u0631\u06a9\u06d2 \u0627\u0639\u0644\u06cc \u0633\u06af\u0646\u0644 \u06a9\u0648 \u0628\u0631\u0642\u0631\u0627\u0631 \u0631\u06a9\u06be\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-python\"># alert_router.py\nimport boto3\nimport json\nimport urllib.request\nfrom enum import Enum\n\nSLACK_INFO_WEBHOOK  = 'https:\/\/hooks.slack.com\/services\/INFO\/WEBHOOK'\nSLACK_ALERT_WEBHOOK = 'https:\/\/hooks.slack.com\/services\/ALERT\/WEBHOOK'\nSNS_CRITICAL_TOPIC  = 'arn:aws:sns:us-east-1:YOUR_ACCOUNT:cost-critical'\n\n\nclass AlertTier(Enum):\n    INFO     = 1\n    WARNING  = 2\n    CRITICAL = 3\n\n\ndef route_alert(tier: AlertTier, subject: str, message: str):\n    \"\"\"Send an alert to the appropriate channel for its severity tier.\"\"\"\n    icons   = {AlertTier.INFO: ':information_source:',\n               AlertTier.WARNING: ':warning:', AlertTier.CRITICAL: ':rotating_light:'}\n    payload = {'text': f\"{icons[tier]} *{subject}*\\n{message}\"}\n\n    if tier == AlertTier.INFO:\n        _post_slack(SLACK_INFO_WEBHOOK, payload)\n    elif tier == AlertTier.WARNING:\n        _post_slack(SLACK_ALERT_WEBHOOK, payload)\n        _send_sns(SNS_CRITICAL_TOPIC, subject, f\"WARNING: {message}\")\n    elif tier == AlertTier.CRITICAL:\n        _post_slack(SLACK_ALERT_WEBHOOK, payload)\n        _send_sns(SNS_CRITICAL_TOPIC, subject, f\"CRITICAL: {message}\")\n\n\ndef _post_slack(webhook: str, payload: dict):\n    req = urllib.request.Request(\n        webhook,\n        data=json.dumps(payload).encode(),\n        headers={'Content-Type': 'application\/json'}\n    )\n    urllib.request.urlopen(req)\n\n\ndef _send_sns(topic_arn: str, subject: str, message: str):\n    sns = boto3.client('sns')\n    sns.publish(TopicArn=topic_arn, Subject=subject[:100], Message=message)\n<\/code><\/pre>\n<p>3 \u062f\u0631\u062c\u06d2 \u0627\u0648\u0631 \u062c\u0648\u0627\u0628\u06cc \u0645\u0648\u0627\u062f: \u0679\u0627\u0626\u0631 1 INFO \u0631\u0648\u0632\u0627\u0646\u06c1 \u0644\u0627\u06af\u062a \u06a9\u06d2 \u062e\u0644\u0627\u0635\u06d2\u060c \u06c1\u0641\u062a\u06c1 \u0648\u0627\u0631 \u0631\u062c\u062d\u0627\u0646 \u06a9\u06cc \u0631\u067e\u0648\u0631\u0679\u0633\u060c \u0627\u0648\u0631 \u0679\u06cc\u06af \u06a9\u06cc \u062a\u0639\u0645\u06cc\u0644 \u06a9\u06cc \u062a\u0627\u0632\u06c1 \u06a9\u0627\u0631\u06cc\u0648\u06ba \u06a9\u06d2 \u0644\u06cc\u06d2 \u0633\u0644\u06cc\u06a9 \u0627\u0646\u0641\u0627\u0631\u0645\u06cc\u0634\u0646 \u0686\u06cc\u0646\u0644 \u067e\u0631 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u06a9\u0633\u06cc \u06a9\u0627\u0631\u0631\u0648\u0627\u0626\u06cc \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4<\/p>\n<p>\u0679\u0627\u0626\u0631 2 \u0627\u0644\u0631\u0679\u0633 \u0633\u0644\u06cc\u06a9 \u0646\u0648\u0679\u06cc\u0641\u06a9\u06cc\u0634\u0646 \u0686\u06cc\u0646\u0644 \u067e\u0631 \u0688\u06cc\u0644\u06cc\u0648\u0631 \u06a9\u06cc\u06d2 \u062c\u0627\u062a\u06d2 \u06c1\u06cc\u06ba \u0627\u0648\u0631 75% \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u06a9\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc \u0645\u06cc\u0644\u060c 25% \u06a9\u06d2 \u06c1\u0641\u062a\u06c1 \u0648\u0627\u0631 \u0627\u0636\u0627\u0641\u06c1\u060c \u0627\u0648\u0631 \u0628\u0686\u062a \u06a9\u06d2 \u0645\u0646\u0635\u0648\u0628\u0648\u06ba \u06a9\u06cc \u0645\u06cc\u0639\u0627\u062f \u062e\u062a\u0645 \u06c1\u0648\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0628\u062c\u0679\u06d4 \u0628\u0631\u0627\u06c1 \u06a9\u0631\u0645 24 \u06af\u06be\u0646\u0679\u06d2 \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p>\u0679\u0627\u0626\u0631 3 CRITICAL 90%+ \u0628\u062c\u0679 \u06a9\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644\u060c 24 \u06af\u06be\u0646\u0679\u06d2 \u0645\u06cc\u06ba 100% \u0627\u0636\u0627\u0641\u06c1\u060c \u06a9\u0631\u06cc\u067e\u0679\u0648 \u06a9\u0631\u0646\u0633\u06cc \u0645\u0627\u0626\u0646\u0646\u06af \u06a9\u0627 \u067e\u062a\u06c1 \u0644\u06af\u0627\u0646\u06d2\u060c \u0627\u0648\u0631 120%+ \u0627\u0648\u0648\u0631 \u0633\u067e\u0646\u0688 \u067e\u0631\u0648\u062c\u06cc\u06a9\u0634\u0646 \u06a9\u06d2 \u0644\u06cc\u06d2 PagerDuty \u0627\u0648\u0631 SMS \u067e\u0631 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 1 \u06af\u06be\u0646\u0679\u06d2 \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u062a\u062d\u0642\u06cc\u0642 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<h3 id=\"heading-22-real-time-budget-monitor\">2.2 \u0631\u06cc\u0626\u0644 \u0679\u0627\u0626\u0645 \u0628\u062c\u0679 \u0645\u0627\u0646\u06cc\u0679\u0631<\/h3>\n<p>AWS \u0628\u062c\u0679 \u0628\u0637\u0648\u0631 \u0688\u06cc\u0641\u0627\u0644\u0679 \u062f\u0646 \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u0628\u0627\u0631 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0628\u06be\u06cc\u062c\u062a\u0627 \u06c1\u06d2\u06d4 \u06cc\u0648\u0645\u06cc\u06c1 \u0648\u0646\u0688\u0648 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u06a9\u06c1 08:00 \u0633\u06d2 \u0634\u0631\u0648\u0639 \u06c1\u0648\u0646\u06d2 \u0648\u0627\u0644\u06cc \u0644\u0627\u06af\u062a \u0645\u06cc\u06ba \u0627\u0636\u0627\u0641\u06d2 \u06a9\u0648 \u0627\u0633 \u0648\u0642\u062a \u062a\u06a9 \u067e\u06a9\u0691\u0627 \u0646\u06c1\u06cc\u06ba \u062c\u0627\u0626\u06d2 \u06af\u0627 \u062c\u0628 \u062a\u06a9 \u06a9\u06c1 \u0627\u06af\u0644\u06d2 \u062f\u0646 \u0627\u0644\u0631\u0679 \u062c\u0627\u0631\u06cc \u0646\u06c1\u06cc\u06ba \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u0646\u06cc\u0686\u06d2 \u062f\u06cc \u06af\u0626\u06cc \u0644\u06cc\u0645\u0628\u0688\u0627 \u0641\u06cc \u06af\u06be\u0646\u0679\u06c1 \u0686\u0644\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0628\u062c\u0679 \u06a9\u06d2 \u0645\u0637\u0644\u0642 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u0627\u0648\u0631 \u062a\u0628\u062f\u06cc\u0644\u06cc \u06a9\u06cc \u0641\u06cc \u06af\u06be\u0646\u0679\u06c1 \u0634\u0631\u062d \u062f\u0648\u0646\u0648\u06ba \u06a9\u0648 \u0686\u06cc\u06a9 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-python\"># budget_monitor.py\n# Lambda triggered by EventBridge every hour\n\nimport boto3\nfrom datetime import datetime, timedelta\nfrom alert_router import route_alert, AlertTier\n\nce      = boto3.client('ce')\nbudgets = boto3.client('budgets', region_name=\"us-east-1\")\nACCOUNT_ID  = boto3.client('sts').get_caller_identity()['Account']\nBUDGET_NAME = 'monthly-infrastructure'\n\n\ndef get_mtd_spend() -> float:\n    start = datetime.now().replace(day=1).strftime('%Y-%m-%d')\n    end   = datetime.now().strftime('%Y-%m-%d')\n    r = ce.get_cost_and_usage(\n        TimePeriod={'Start': start, 'End': end},\n        Granularity='MONTHLY',\n        Metrics=['UnblendedCost']\n    )\n    return float(r['ResultsByTime'][0]['Total']['UnblendedCost']['Amount'])\n\n\ndef get_budget_limit() -> float:\n    r = budgets.describe_budget(AccountId=ACCOUNT_ID, BudgetName=BUDGET_NAME)\n    return float(r['Budget']['BudgetLimit']['Amount'])\n\n\ndef get_hourly_costs(hours: int = 4) -> list:\n    \"\"\"Return hourly cost totals for the last N hours.\"\"\"\n    end   = datetime.now()\n    start = end - timedelta(hours=hours)\n    r = ce.get_cost_and_usage(\n        TimePeriod={'Start': start.strftime('%Y-%m-%d'), 'End': end.strftime('%Y-%m-%d')},\n        Granularity='HOURLY',\n        Metrics=['UnblendedCost']\n    )\n    return [\n        float(period['Total']['UnblendedCost']['Amount'])\n        for period in r['ResultsByTime']\n    ]\n\n\ndef lambda_handler(event, context):\n    mtd_spend    = get_mtd_spend()\n    budget_limit = get_budget_limit()\n    utilisation  = mtd_spend \/ budget_limit * 100\n\n    days_elapsed  = datetime.now().day\n    projected_eom = (mtd_spend \/ days_elapsed) * 30\n    projected_pct = projected_eom \/ budget_limit * 100\n\n    if utilisation >= 90:\n        route_alert(\n            AlertTier.CRITICAL,\n            f'Budget at {utilisation:.0f}%',\n            f'MTD spend ${mtd_spend:,.2f} is {utilisation:.0f}% of ${budget_limit:,.0f} budget. '\n            f'Projected EOM: ${projected_eom:,.2f}.'\n        )\n    elif utilisation >= 75:\n        route_alert(\n            AlertTier.WARNING,\n            f'Budget at {utilisation:.0f}%',\n            f'MTD spend ${mtd_spend:,.2f} is {utilisation:.0f}% of ${budget_limit:,.0f} budget. '\n            f'Projected EOM: ${projected_eom:,.2f}.'\n        )\n\n    # Check hourly spike\n    hourly = get_hourly_costs(hours=4)\n    if len(hourly) >= 2:\n        last_hour = hourly[-1]\n        prev_avg  = sum(hourly[:-1]) \/ len(hourly[:-1])\n        if prev_avg > 0.10 and last_hour > prev_avg * 1.5:\n            route_alert(\n                AlertTier.WARNING,\n                'Hourly cost spike detected',\n                f'Last hour: ${last_hour:.2f} vs prior 3-hour avg ${prev_avg:.2f} '\n                f'(+{(last_hour\/prev_avg - 1)*100:.0f}%)'\n            )\n\n    return {\n        'mtd_spend':       round(mtd_spend, 2),\n        'utilisation_pct': round(utilisation, 1),\n        'projected_eom':   round(projected_eom, 2),\n    }\n<\/code><\/pre>\n<h2 id=\"heading-part-3-optimisation-by-service\">\u062d\u0635\u06c1 3: \u0633\u0631\u0648\u0633 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0645\u062e\u0635\u0648\u0635 \u0627\u0635\u0644\u0627\u062d<\/h2>\n<h3 id=\"heading-31-ec2-seven-levers-in-priority-order\">3.1 EC2 - \u062a\u0631\u062c\u06cc\u062d\u06cc \u062a\u0631\u062a\u06cc\u0628 \u0645\u06cc\u06ba 7 \u0644\u06cc\u0648\u0631<\/h3>\n<p>EC2 \u0632\u06cc\u0627\u062f\u06c1 \u062a\u0631 AWS \u0627\u06a9\u0627\u0624\u0646\u0679\u0633 \u0645\u06cc\u06ba \u0633\u0628 \u0633\u06d2 \u0628\u0691\u0627 \u0622\u0626\u0679\u0645 \u06c1\u06d2 \u0627\u0648\u0631 \u0633\u0628 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u0627\u0635\u0644\u0627\u062d \u06a9\u06d2 \u0627\u062e\u062a\u06cc\u0627\u0631\u0627\u062a \u0648\u0627\u0644\u0627 \u06c1\u06d2\u06d4 \u0627\u0646 \u0644\u06cc\u0648\u0631\u0632 \u06a9\u0648 \u062a\u0631\u062a\u06cc\u0628 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u060c \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u06c1\u0631 \u0644\u06cc\u0648\u0631 \u0628\u06cc\u0633 \u0644\u0627\u0626\u0646 \u06a9\u0648 \u0646\u06cc\u0686\u06d2 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u062c\u06c1\u0627\u06ba \u0633\u06d2 \u0627\u06af\u0644\u0627 \u0644\u06cc\u0648\u0631 \u0686\u0644\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0644\u06cc\u0648\u0631 1: \u0627\u06cc\u0633\u06cc \u0645\u062b\u0627\u0644\u06cc\u06ba \u062a\u0644\u0627\u0634 \u06a9\u0631\u06cc\u06ba \u062c\u0648 \u062d\u0642\u06cc\u0642\u062a \u0645\u06cc\u06ba \u0628\u06cc\u06a9\u0627\u0631 \u06c1\u06cc\u06ba (14 \u062f\u0646\u0648\u06ba \u06a9\u06d2 \u0644\u06cc\u06d2 CPU 1% \u0633\u06d2 \u06a9\u0645)\u06d4<\/p>\n<pre><code class=\"language-python\"># ec2_idle_finder.py\nimport boto3\nfrom datetime import datetime, timedelta\n\nec2 = boto3.client('ec2')\ncw  = boto3.client('cloudwatch')\n\n\ndef find_idle_instances(avg_cpu_threshold: float = 1.0, days: int = 14):\n    instances = [\n        inst\n        for r in ec2.describe_instances(\n            Filters=[{'Name': 'instance-state-name', 'Values': ['running']}]\n        )['Reservations']\n        for inst in r['Instances']\n    ]\n\n    idle = []\n    for inst in instances:\n        iid   = inst['InstanceId']\n        stats = cw.get_metric_statistics(\n            Namespace=\"AWS\/EC2\",\n            MetricName=\"CPUUtilization\",\n            Dimensions=[{'Name': 'InstanceId', 'Value': iid}],\n            StartTime=datetime.utcnow() - timedelta(days=days),\n            EndTime=datetime.utcnow(),\n            Period=days * 86400,\n            Statistics=['Average']\n        )['Datapoints']\n\n        avg_cpu = stats[0]['Average'] if stats else 0.0\n        if avg_cpu < avg_cpu_threshold:\n            tags = {t['Key']: t['Value'] for t in inst.get('Tags', [])}\n            idle.append({\n                'instance_id':   iid,\n                'instance_type': inst['InstanceType'],\n                'avg_cpu':       round(avg_cpu, 2),\n                'environment':   tags.get('Environment', '\u2014'),\n                'owner':         tags.get('Owner', '\u2014'),\n            })\n\n    return sorted(idle, key=lambda x: x['avg_cpu'])\n\n\nfor inst in find_idle_instances():\n    print(f\"  {inst['instance_id']}  {inst['instance_type']}  \"\n          f\"{inst['avg_cpu']}% CPU  env:{inst['environment']}  owner:{inst['owner']}\")\n<\/code><\/pre>\n<p>\u0644\u06cc\u0648\u0631 2: \u062f\u0627\u0626\u06cc\u06ba \u0633\u0627\u0626\u0632 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u062f\u06c1 \u0645\u062b\u0627\u0644\u06cc\u06ba (\u0633\u06cc \u067e\u06cc \u06cc\u0648 20\u066a \u0633\u06d2 \u0646\u06cc\u0686\u06d2\u060c \u0628\u0631\u0642\u0631\u0627\u0631)\u06d4<\/p>\n<p>\u0627\u06cc\u06a9 \u06c1\u06cc \u0627\u0633\u06a9\u0631\u067e\u0679 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 <code>avg_cpu_threshold=20.0<\/code>. \u06cc\u06c1 \u062f\u0627\u0626\u06cc\u06ba \u0633\u0627\u0626\u0632 \u06a9\u06d2 \u0627\u0645\u06cc\u062f\u0648\u0627\u0631 \u06c1\u06cc\u06ba\u060c \u0628\u0646\u062f \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u0627\u0645\u06cc\u062f\u0648\u0627\u0631 \u0646\u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u0644\u06cc\u0648\u0631 3: \u0688\u06cc\u0648\u0644\u067e\u0645\u0646\u0679 \u0627\u0648\u0631 \u0627\u0633\u0679\u06cc\u062c\u0646\u06af \u062e\u062a\u0645 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u0648\u0646\u0679 \u0628\u0631\u062c \u06a9\u06d2 \u0627\u0635\u0648\u0644 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 <code>AutoShutdown=true<\/code> \u0679\u06cc\u06af \u0634\u062f\u06c1 \u0645\u062b\u0627\u0644\u06cc\u06ba\u06d4<\/p>\n<p>\u0644\u06cc\u0648\u0631 4: \u0644\u06cc\u0648\u0631 1-3 \u0645\u06a9\u0645\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f \u06c1\u06cc \u0628\u0686\u062a \u06a9\u0627 \u0645\u0646\u0635\u0648\u0628\u06c1 \u062e\u0631\u06cc\u062f\u06cc\u06ba\u06d4<\/p>\n<p>\u0644\u06cc\u0648\u0631 5: \u06af\u0631\u06cc\u0648\u06cc\u0679\u0646 \u06a9\u06cc \u0637\u0631\u0641 \u06c1\u062c\u0631\u062a \u06a9\u0631\u06cc\u06ba (\u0632\u06cc\u0627\u062f\u06c1 \u062a\u0631 \u06a9\u0627\u0645 \u06a9\u06d2 \u0628\u0648\u062c\u06be \u06a9\u06d2 \u0644\u06cc\u06d2 20% \u0633\u0633\u062a\u06cc \u0627\u0648\u0631 \u0627\u06cc\u06a9 \u062c\u06cc\u0633\u06cc \u06a9\u0627\u0631\u06a9\u0631\u062f\u06af\u06cc)\u06d4<\/p>\n<p>\u0644\u06cc\u0648\u0631 6: \u063a\u0644\u0637\u06cc \u0628\u0631\u062f\u0627\u0634\u062a \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u06cc \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u0627\u0648\u0631 \u062a\u0631\u0642\u06cc\u0627\u062a\u06cc \u06a9\u0627\u0645 \u06a9\u06d2 \u0628\u0648\u062c\u06be \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0633\u067e\u0627\u0679 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p>\u0644\u06cc\u0648\u0631 7: \u062e\u0648\u062f\u06a9\u0627\u0631 \u0628\u0646 \u067e\u06cc\u06a9\u06cc\u062c\u0646\u06af \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u0627\u0631\u067e\u06cc\u0646\u0679\u0631 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u06a9\u0646\u0679\u06cc\u0646\u0631\u0627\u0626\u0632\u0688 \u0648\u0631\u06a9 \u0628\u0648\u062c\u06be \u06a9\u0648 EKS \u0645\u06cc\u06ba \u0645\u0646\u062a\u0642\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p>\u0645\u062a\u0648\u0642\u0639 \u0637\u0648\u0631 \u067e\u0631 \u0628\u0686\u062a:<\/p>\n<pre><code class=\"language-python\"># spot_price_analyser.py\nimport boto3\n\nec2 = boto3.client('ec2')\n\n\ndef spot_savings_estimate(instance_type: str) -> dict:\n    spot_history = ec2.describe_spot_price_history(\n        InstanceTypes=[instance_type],\n        ProductDescriptions=['Linux\/UNIX'],\n        MaxResults=1\n    )['SpotPriceHistory']\n    spot_price = float(spot_history[0]['SpotPrice']) if spot_history else 0\n\n    on_demand_approx = {\n        't3.medium': 0.0416, 'm5.large': 0.096,\n        'c5.xlarge': 0.17,   'r5.2xlarge': 0.504,\n    }\n    od_price    = on_demand_approx.get(instance_type, 0)\n    savings_pct = ((od_price - spot_price) \/ od_price * 100) if od_price else 0\n\n    return {\n        'instance_type': instance_type,\n        'spot_price':    round(spot_price, 4),\n        'on_demand':     od_price,\n        'savings_pct':   round(savings_pct, 1),\n        'monthly_spot':  round(spot_price * 730, 2),\n        'monthly_od':    round(od_price * 730, 2),\n    }\n\n\nfor itype in ['t3.medium', 'm5.large', 'c5.xlarge']:\n    r = spot_savings_estimate(itype)\n    print(f\"  {r['instance_type']:<15} Spot: ${r['spot_price']}\/hr  \"\n          f\"OD: ${r['on_demand']}\/hr  Savings: {r['savings_pct']}%\")\n<\/code><\/pre>\n<h3 id=\"heading-32-s3-lifecycle-policies-and-storage-class-selection\">3.2 S3 \u2014 \u0644\u0627\u0626\u0641 \u0633\u0627\u0626\u06cc\u06a9\u0644 \u067e\u0627\u0644\u06cc\u0633\u06cc \u0627\u0648\u0631 \u0627\u0633\u0679\u0648\u0631\u06cc\u062c \u06a9\u0644\u0627\u0633 \u06a9\u0627 \u0627\u0646\u062a\u062e\u0627\u0628<\/h3>\n<p>S3 \u0622\u067e\u0679\u06cc\u0645\u0627\u0626\u0632\u06cc\u0634\u0646 \u06a9\u06d2 \u062f\u0648 \u0627\u062c\u0632\u0627\u0621 \u06c1\u06cc\u06ba: \u0644\u0627\u0626\u0641 \u0633\u0627\u0626\u06cc\u06a9\u0644 \u067e\u0627\u0644\u06cc\u0633\u06cc\u0648\u06ba \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0633\u0633\u062a\u06cc \u0627\u0633\u0679\u0648\u0631\u06cc\u062c \u06a9\u06cc \u06a9\u0644\u0627\u0633\u0648\u06ba \u0645\u06cc\u06ba \u06a9\u0628\u06be\u06cc \u06a9\u0628\u06be\u0627\u0631 \u0631\u0633\u0627\u0626\u06cc \u062d\u0627\u0635\u0644 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u0688\u06cc\u0679\u0627 \u06a9\u0648 \u0645\u0646\u062a\u0642\u0644 \u06a9\u0631\u0646\u0627 \u0627\u0648\u0631 \u0641\u0636\u0648\u0644 \u0646\u0645\u0648\u0646\u0648\u06ba \u06a9\u0648 \u062e\u062a\u0645 \u06a9\u0631\u0646\u0627 \u062c\u06cc\u0633\u06d2 \u06a9\u06c1 \u0646\u0627\u0645\u06a9\u0645\u0644 \u0645\u0644\u0679\u06cc \u067e\u0627\u0631\u0679 \u0627\u067e \u0644\u0648\u0688\u0632\u06d4<\/p>\n<pre><code class=\"language-python\"># s3_lifecycle_applier.py\nimport boto3\n\ns3 = boto3.client('s3')\n\nLOG_POLICY = {\n    'Rules': [{\n        'ID': 'standard-tiering',\n        'Status': 'Enabled',\n        'Filter': {'Prefix': ''},\n        'Transitions': [\n            {'Days': 30,  'StorageClass': 'STANDARD_IA'},\n            {'Days': 90,  'StorageClass': 'GLACIER_IR'},\n            {'Days': 365, 'StorageClass': 'DEEP_ARCHIVE'},\n        ],\n        'Expiration': {'Days': 2555},\n        'AbortIncompleteMultipartUpload': {'DaysAfterInitiation': 7},\n    }]\n}\n\nTEMP_POLICY = {\n    'Rules': [{\n        'ID': 'temp-data-retention',\n        'Status': 'Enabled',\n        'Filter': {'Prefix': ''},\n        'Expiration': {'Days': 30},\n        'AbortIncompleteMultipartUpload': {'DaysAfterInitiation': 1},\n    }]\n}\n\nfor bucket in s3.list_buckets()['Buckets']:\n    name = bucket['Name']\n    try:\n        s3.get_bucket_lifecycle_configuration(Bucket=name)\n        print(f\"  {name} \u2014 policy already exists, skipping\")\n    except s3.exceptions.ClientError:\n        policy = TEMP_POLICY if any(k in name for k in ['temp', 'build', 'cache']) else LOG_POLICY\n        s3.put_bucket_lifecycle_configuration(\n            Bucket=name, LifecycleConfiguration=policy\n        )\n        print(f\"  {name} \u2014 applied {'TEMP' if policy is TEMP_POLICY else 'LOG'} policy\")\n<\/code><\/pre>\n<h3 id=\"heading-33-rds-five-optimisation-levels\">3.3 RDS - \u0627\u0635\u0644\u0627\u062d \u06a9\u06cc 5 \u0633\u0637\u062d\u06cc\u06ba\u06d4<\/h3>\n<table>\n<thead>\n<tr>\n<th>\u067e\u0627\u0646\u06cc \u06a9\u06cc \u0633\u0637\u062d<\/th>\n<th>\u06a9\u0627\u0631\u0631\u0648\u0627\u0626\u06cc<\/th>\n<th>\u0639\u0627\u0645 \u0628\u0686\u062a<\/th>\n<th>\u062e\u0637\u0631\u06c1<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>1<\/td>\n<td>\u063a\u06cc\u0631 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u0634\u062f\u06c1 \u067e\u0691\u06be\u06cc \u06c1\u0648\u0626\u06cc \u0646\u0642\u0644\u06cc\u06ba \u062d\u0630\u0641 \u06a9\u0631\u06cc\u06ba\u06d4<\/td>\n<td>\u0646\u0642\u0644 \u06a9\u06cc \u0644\u0627\u06af\u062a \u06a9\u0627 30-50\u066a<\/td>\n<td>\u06a9\u0645<\/td>\n<\/tr>\n<tr>\n<td>2<\/td>\n<td>\u0628\u06cc\u06a9 \u0627\u067e \u0628\u0631\u0642\u0631\u0627\u0631 \u0631\u06a9\u06be\u0646\u06d2 \u06a9\u0648 \u06a9\u0645 \u0633\u06d2 \u06a9\u0645 \u062a\u0639\u0645\u06cc\u0644 \u062a\u06a9 \u06a9\u0645 \u06a9\u0631\u06cc\u06ba\u06d4<\/td>\n<td>\u0627\u0633\u0679\u0648\u0631\u06cc\u062c \u06a9\u06d2 \u0627\u062e\u0631\u0627\u062c\u0627\u062a \u06a9\u0627 20-30\u066a<\/td>\n<td>\u06a9\u0645<\/td>\n<\/tr>\n<tr>\n<td>3<\/td>\n<td>\u0645\u0646\u0627\u0633\u0628 \u0633\u0627\u0626\u0632 \u06a9\u06cc \u0645\u062b\u0627\u0644 \u06a9\u06cc \u06a9\u0644\u0627\u0633 (\u0633\u06cc \u067e\u06cc \u06cc\u0648 20\u066a \u0633\u06d2 \u0646\u06cc\u0686\u06d2 \u0631\u06c1\u062a\u0627 \u06c1\u06d2)<\/td>\n<td>20-40% \u06a9\u0645\u067e\u06cc\u0648\u0679\u0646\u06af<\/td>\n<td>\u062f\u0631\u0645\u06cc\u0627\u0646\u06cc<\/td>\n<\/tr>\n<tr>\n<td>4<\/td>\n<td>\u067e\u06cc\u062f\u0627\u0648\u0627\u0631 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0645\u062d\u0641\u0648\u0638 \u0645\u062b\u0627\u0644\u06cc\u06ba \u062e\u0631\u06cc\u062f\u06cc\u06ba\u06d4<\/td>\n<td>30-60% \u06a9\u0645\u067e\u06cc\u0648\u0679\u0646\u06af<\/td>\n<td>\u06a9\u0645<\/td>\n<\/tr>\n<tr>\n<td>5<\/td>\n<td>\u0645\u062a\u063a\u06cc\u0631 \u0644\u0648\u0688 DB \u06a9\u0648 Aurora Serverless v2 \u0645\u06cc\u06ba \u0645\u0646\u062a\u0642\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/td>\n<td>\u06a9\u0644 40~70%<\/td>\n<td>\u0627\u0639\u0644\u06cc \u06a9\u0648\u0634\u0634<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u0636\u0631\u0648\u0631\u062a \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u0622\u0631 \u0688\u06cc \u0627\u06cc\u0633 \u06a9\u06cc \u0645\u062b\u0627\u0644\u06cc\u06ba \u062f\u06cc\u06a9\u06be\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-python\"># rds_rightsizer.py\nimport boto3\nfrom datetime import datetime, timedelta\n\nrds = boto3.client('rds')\ncw  = boto3.client('cloudwatch')\n\n\ndef find_oversized_rds():\n    instances  = rds.describe_db_instances()['DBInstances']\n    candidates = []\n\n    for inst in instances:\n        iid    = inst['DBInstanceIdentifier']\n        iclass = inst['DBInstanceClass']\n\n        stats = cw.get_metric_statistics(\n            Namespace=\"AWS\/RDS\",\n            MetricName=\"CPUUtilization\",\n            Dimensions=[{'Name': 'DBInstanceIdentifier', 'Value': iid}],\n            StartTime=datetime.utcnow() - timedelta(days=14),\n            EndTime=datetime.utcnow(),\n            Period=1209600,\n            Statistics=['Average', 'Maximum']\n        )['Datapoints']\n\n        if not stats:\n            continue\n\n        avg_cpu = stats[0]['Average']\n        max_cpu = stats[0]['Maximum']\n\n        if avg_cpu < 20 and max_cpu < 50:\n            candidates.append({\n                'id':       iid,\n                'class':    iclass,\n                'avg_cpu':  round(avg_cpu, 1),\n                'max_cpu':  round(max_cpu, 1),\n                'engine':   inst['Engine'],\n            })\n\n    return candidates\n\n\nfor c in find_oversized_rds():\n    print(f\"  {c['id']}  {c['class']}  avg:{c['avg_cpu']}%  max:{c['max_cpu']}%  engine:{c['engine']}\")\n<\/code><\/pre>\n<h3 id=\"heading-34-dynamodb-on-demand-vs-provisioned-decision\">3.4 DynamoDB \u2014 \u0622\u0646 \u0688\u06cc\u0645\u0627\u0646\u0688 \u0627\u0648\u0631 \u067e\u0631\u0648\u0648\u06cc\u0698\u0646\u0646\u06af \u0641\u06cc\u0635\u0644\u06d2<\/h3>\n<p>\u0622\u0646 \u0688\u06cc\u0645\u0627\u0646\u0688 \u0622\u0633\u0627\u0646 \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u0645\u062a\u0648\u0642\u0639 \u06a9\u0627\u0645 \u06a9\u06d2 \u0628\u0648\u062c\u06be \u06a9\u06cc \u0641\u0631\u0627\u06c1\u0645\u06cc \u0633\u06d2 3 \u0633\u06d2 5 \u06af\u0646\u0627 \u0632\u06cc\u0627\u062f\u06c1 \u0645\u06c1\u0646\u06af\u0627 \u06c1\u0648 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4 \u0622\u0679\u0648 \u0627\u0633\u06a9\u06cc\u0644\u0646\u06af \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0641\u0631\u0627\u06c1\u0645\u06cc \u0632\u06cc\u0627\u062f\u06c1 \u062a\u0631 \u0645\u0639\u0627\u0645\u0644\u0627\u062a \u06a9\u0648 \u0628\u06c1\u062a \u06a9\u0645 \u0642\u06cc\u0645\u062a \u067e\u0631 \u0633\u0646\u0628\u06be\u0627\u0644 \u0633\u06a9\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-python\"># dynamodb_mode_advisor.py\nimport boto3\nfrom datetime import datetime, timedelta\n\ndynamodb = boto3.client('dynamodb')\ncw       = boto3.client('cloudwatch')\n\n\ndef analyse_table_billing(table_name: str) -> dict:\n    table = dynamodb.describe_table(TableName=table_name)['Table']\n    mode  = table.get('BillingModeSummary', {}).get('BillingMode', 'PROVISIONED')\n\n    stats = {}\n    for metric in ['ConsumedReadCapacityUnits', 'ConsumedWriteCapacityUnits']:\n        data = cw.get_metric_statistics(\n            Namespace=\"AWS\/DynamoDB\",\n            MetricName=metric,\n            Dimensions=[{'Name': 'TableName', 'Value': table_name}],\n            StartTime=datetime.utcnow() - timedelta(days=30),\n            EndTime=datetime.utcnow(),\n            Period=86400,\n            Statistics=['Average', 'Maximum']\n        )['Datapoints']\n        if data:\n            avg  = sum(d['Average'] for d in data) \/ len(data)\n            peak = max(d['Maximum'] for d in data)\n            stats[metric] = {'avg': round(avg, 1), 'peak': round(peak, 1)}\n\n    if mode == 'PAY_PER_REQUEST':\n        avg_rcu = stats.get('ConsumedReadCapacityUnits', {}).get('avg', 0)\n        avg_wcu = stats.get('ConsumedWriteCapacityUnits', {}).get('avg', 0)\n\n        if avg_rcu > 2000 or avg_wcu > 500:\n            return {\n                'table':          table_name,\n                'current_mode':   'PAY_PER_REQUEST',\n                'recommendation': 'Switch to PROVISIONED with auto-scaling',\n                'reason': f'Avg {avg_rcu:.0f} RCU\/s and {avg_wcu:.0f} WCU\/s \u2014 predictable pattern',\n            }\n\n    return {'table': table_name, 'current_mode': mode, 'recommendation': 'No change needed'}\n\n\nfor table in dynamodb.list_tables()['TableNames']:\n    r = analyse_table_billing(table)\n    if r['recommendation'] != 'No change needed':\n        print(f\"  {r['table']}: {r['recommendation']}\")\n<\/code><\/pre>\n<h3 id=\"heading-35-data-transfer-the-three-main-waste-patterns\">3.5 \u0688\u06cc\u0679\u0627 \u06a9\u06cc \u0645\u0646\u062a\u0642\u0644\u06cc - \u0641\u0636\u0644\u06c1 \u06a9\u06d2 \u062a\u06cc\u0646 \u0628\u0691\u06d2 \u0646\u0645\u0648\u0646\u06d2\u06d4<\/h3>\n<p>\u0688\u06cc\u0679\u0627 \u06a9\u06cc \u0645\u0646\u062a\u0642\u0644\u06cc \u06a9\u06cc \u0641\u06cc\u0633 \u0627\u06a9\u062b\u0631 \u0622\u067e \u06a9\u06d2 AWS \u0628\u0644 \u0645\u06cc\u06ba \u0633\u0628 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u0627\u0644\u062c\u06be\u0627 \u062f\u06cc\u0646\u06d2 \u0648\u0627\u0644\u06cc \u0686\u06cc\u0632 \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u06d4 \u062a\u06cc\u0646 \u0627\u06c1\u0645 \u0646\u0645\u0648\u0646\u06d2 \u0627\u0648\u0631 \u0627\u0646 \u0645\u06cc\u06ba \u062a\u0631\u0645\u06cc\u0645 \u06cc\u06c1 \u06c1\u06cc\u06ba:<\/p>\n<p>\u06a9\u0631\u0627\u0633-AZ \u0679\u0631\u06cc\u0641\u06a9 (\u0633\u0628 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u0639\u0627\u0645 \u0627\u0648\u0631 \u0642\u0627\u0628\u0644 \u062a\u0631\u0645\u06cc\u0645): \u0645\u062e\u062a\u0644\u0641 AZs \u0645\u06cc\u06ba \u062e\u062f\u0645\u0627\u062a \u06c1\u0631 \u0633\u0645\u062a \u0645\u06cc\u06ba $0.01 \u0641\u06cc GB \u062e\u0631\u0686 \u06a9\u0631\u062a\u06cc \u06c1\u06cc\u06ba\u06d4 \u0627\u06cc\u06a9 \u062d\u0644 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 Kubernetes \u0633\u0631\u0648\u0633\u0632 \u0645\u06cc\u06ba \u0679\u0648\u067e\u0648\u0644\u0648\u062c\u06cc \u0633\u06d2 \u0622\u06af\u0627\u06c1 \u0631\u0648\u0679\u0646\u06af \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba \u06cc\u0627 \u0627\u0633 \u0628\u0627\u062a \u06a9\u0648 \u06cc\u0642\u06cc\u0646\u06cc \u0628\u0646\u0627\u0626\u06cc\u06ba \u06a9\u06c1 \u0627\u06cc\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u0679\u0627\u0626\u0631 \u0627\u0648\u0631 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u0679\u0627\u0626\u0631 \u0627\u06cc\u06a9 \u06c1\u06cc AZ \u067e\u0644\u06cc\u0633\u0645\u0646\u0679 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p>\u0627\u0646\u062f\u0631\u0648\u0646\u06cc AWS \u0679\u0631\u06cc\u0641\u06a9 \u06a9\u06d2 \u0644\u06cc\u06d2 NAT \u06af\u06cc\u0679 \u0648\u06d2 \u0686\u0627\u0631\u062c\u0632: S3, ECR, DynamoDB\u060c \u0627\u0648\u0631 SQS \u0679\u0631\u06cc\u0641\u06a9 NAT \u06af\u06cc\u0679 \u0648\u06d2 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0631\u0648\u0679 \u06a9\u0631\u0646\u06d2 \u067e\u0631 $0.045 \u0641\u06cc GB \u0644\u0627\u06af\u062a \u0622\u062a\u06cc \u06c1\u06d2\u06d4 \u062d\u0644: VPC \u0627\u06cc\u0646\u0688 \u067e\u0648\u0627\u0626\u0646\u0679\u0633 \u0627\u0633 \u0645\u0633\u0626\u0644\u06d2 \u06a9\u0648 \u0645\u06a9\u0645\u0644 \u0637\u0648\u0631 \u067e\u0631 \u062e\u062a\u0645 \u06a9\u0631 \u062f\u06cc\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u062a\u0639\u0645\u06cc\u0644 \u0633\u06d2 \u067e\u0627\u06a9 \u06a9\u0631\u0627\u0633 \u0631\u06cc\u062c\u0646 \u0631\u06cc\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646: \u0627\u0635\u0644 \u062a\u0639\u0645\u06cc\u0644 \u06a9\u06cc \u0636\u0631\u0648\u0631\u06cc\u0627\u062a \u06a9\u06d2 \u062e\u0644\u0627\u0641 \u0633\u06c1 \u0645\u0627\u06c1\u06cc \u0645\u06cc\u06ba \u0627\u067e\u0646\u06d2 S3 \u0631\u06cc\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u0631\u0648\u0644\u0632 \u06a9\u0627 \u0622\u0688\u0679 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\"># Find S3 buckets with active replication\nfor bucket in $(aws s3api list-buckets --query 'Buckets[*].Name' --output text); do\n    result=$(aws s3api get-bucket-replication --bucket \"$bucket\" 2>&1)\n    if ! echo \"$result\" | grep -q \"ReplicationConfigurationNotFoundError\"; then\n        echo \"  $bucket \u2014 replication active, verify compliance requirement\"\n    fi\ndone\n<\/code><\/pre>\n<h2 id=\"heading-part-4-the-30-day-optimisation-sprint\">\u062d\u0635\u06c1 4: 30 \u062f\u0646 \u06a9\u06cc \u0627\u0635\u0644\u0627\u062d\u06cc \u0627\u0633\u067e\u0631\u0646\u0679<\/h2>\n<p>\u06cc\u06c1 \u0633\u067e\u0631\u0646\u0679 \u067e\u06c1\u0644\u06d2 \u0645\u06c1\u06cc\u0646\u06d2 \u0645\u06cc\u06ba \u0644\u0627\u06af\u062a \u06a9\u06cc \u0627\u06c1\u0645 \u0628\u0686\u062a \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0627\u06cc\u06a9 \u0648\u0627\u062d\u062f \u0627\u0646\u062c\u06cc\u0646\u0626\u0631 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0641\u06cc \u06c1\u0641\u062a\u06c1 2-4 \u06af\u06be\u0646\u0679\u06d2 \u0648\u0642\u0641 FinOps \u0648\u0642\u062a \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0688\u06cc\u0632\u0627\u0626\u0646 \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u06c1\u0641\u062a\u06c1 1 - \u0645\u0631\u0626\u06cc\u062a: CUR \u06a9\u0648 \u0641\u0639\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u060c \u0627\u06cc\u06a9 \u0627\u06cc\u062a\u06be\u06cc\u0646\u0627 \u0679\u06cc\u0628\u0644 \u062a\u0631\u062a\u06cc\u0628 \u062f\u06cc\u06ba\u060c 3 \u062f\u0646 \u06a9\u06d2 \u0633\u0648\u0627\u0644\u0627\u062a \u0686\u0644\u0627\u0626\u06cc\u06ba\u060c \u0646\u062a\u0627\u0626\u062c \u06a9\u06cc \u0628\u0646\u06cc\u0627\u062f \u067e\u0631 \u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679\u0633 \u0644\u06cc\u06ba\u060c 100% \u0686\u0644\u0646\u06d2 \u0648\u0627\u0644\u06d2 EC2 \u0627\u0648\u0631 RDS \u0645\u062b\u0627\u0644\u0648\u06ba \u06a9\u0648 \u0679\u06cc\u06af \u06a9\u0631\u06cc\u06ba\u060c \u0627\u0648\u0631 \u06c1\u0631 \u0627\u06cc\u06a9 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062f\u0633\u062a\u0627\u0648\u06cc\u0632\u06cc \u0645\u0641\u0631\u0648\u0636\u0648\u06ba \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0679\u0627\u067e 3 \u0644\u0627\u06af\u062a \u0648\u0627\u0644\u06d2 \u0688\u0631\u0627\u0626\u06cc\u0648\u0631\u0648\u06ba \u06a9\u06cc \u0634\u0646\u0627\u062e\u062a \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p>\u06c1\u0641\u062a\u06c1 2 - \u0641\u0648\u0631\u06cc \u062c\u06cc\u062a: \u0627\u06cc\u06a9 \u06cc\u062a\u06cc\u0645 \u0631\u06cc\u0633\u0648\u0631\u0633 \u0631\u067e\u0648\u0631\u0679\u0631 Lambda \u06a9\u0648 \u062a\u0639\u06cc\u0646\u0627\u062a \u06a9\u0631\u06cc\u06ba\u060c S3 \u0644\u0627\u0626\u0641 \u0633\u0627\u0626\u06cc\u06a9\u0644 \u067e\u0627\u0644\u06cc\u0633\u06cc\u0648\u06ba \u06a9\u0648 \u062a\u06cc\u0646 \u0633\u0628 \u0633\u06d2 \u0628\u0691\u06cc \u0628\u0627\u0644\u0679\u06cc\u0648\u06ba \u067e\u0631 \u0644\u0627\u06af\u0648 \u06a9\u0631\u06cc\u06ba\u060c \u0627\u06cc\u06a9 \u0622\u0626\u06cc\u0688\u06cc\u0644 \u0627\u0646\u0633\u0679\u06cc\u0646\u0633 \u0688\u06cc\u0679\u06cc\u06a9\u0679\u0631 \u0686\u0644\u0627\u0626\u06cc\u06ba\u060c \u0645\u0627\u0644\u06a9 \u06a9\u06cc \u0645\u062e\u0627\u0644\u0641\u062a \u06a9\u06d2 \u0628\u063a\u06cc\u0631 \u0627\u0648\u0633\u0637 CPU \u06a9\u0648 1% \u0633\u06d2 \u06a9\u0645 \u0631\u0648\u06a9\u06cc\u06ba\u060c \u0627\u0648\u0631 S3\u060c ECR\u060c \u0627\u0648\u0631 DynamoDB \u06a9\u06d2 \u0644\u06cc\u06d2 VPC \u0627\u06cc\u0646\u0688 \u067e\u0648\u0627\u0626\u0646\u0679\u0633 \u0634\u0627\u0645\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p>\u06c1\u0641\u062a\u06c1 3 - \u0631\u0627\u0626\u0679 \u0633\u0627\u0626\u0632\u0646\u06af: EC2 \u0631\u0627\u0626\u0679 \u0633\u0627\u0626\u0632\u0646\u06af \u0627\u06cc\u0646\u0627\u0644\u0627\u0626\u0632\u0631 \u0686\u0644\u0627\u0626\u06cc\u06ba\u060c \u062a\u06cc\u0646 \u0633\u0628 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u0627\u0639\u062a\u0645\u0627\u062f \u0648\u0627\u0644\u06d2 \u0627\u0645\u06cc\u062f\u0648\u0627\u0631\u0648\u06ba \u06a9\u0627 \u0633\u0627\u0626\u0632 \u06a9\u0645 \u06a9\u0631\u06cc\u06ba (\u067e\u06c1\u0644\u06d2 \u063a\u06cc\u0631 \u067e\u0631\u0648\u0688\u06a9\u0634\u0646)\u060c RDS \u0631\u0627\u0626\u0679 \u0633\u0627\u0626\u0632\u0646\u06af \u0627\u0633\u06a9\u0631\u067e\u0679 \u0686\u0644\u0627\u0626\u06cc\u06ba\u060c \u06a9\u0645 \u0633\u06d2 \u06a9\u0645 \u0679\u0631\u06cc\u0641\u06a9 \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u06cc \u0631\u06cc\u0688 \u0631\u06cc\u067e\u0644\u06cc\u06a9\u0627 \u062a\u0644\u0627\u0634 \u06a9\u0631\u06cc\u06ba\u060c \u0627\u0648\u0631 \u0627\u0633\u06d2 \u062e\u062a\u0645 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p>\u06c1\u0641\u062a\u06c1 4 - \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0627\u0648\u0631 \u0622\u0679\u0648\u0645\u06cc\u0634\u0646: \u06af\u06be\u0646\u0679\u06c1 \u0648\u0627\u0631 \u0628\u062c\u0679 \u0645\u0627\u0646\u06cc\u0679\u0631 Lambda \u06a9\u0648 \u062a\u0639\u06cc\u0646\u0627\u062a \u06a9\u0631\u06cc\u06ba\u060c 3-\u0679\u06cc\u0631 \u0646\u0648\u0679\u06cc\u0641\u06a9\u06cc\u0634\u0646 \u0631\u0648\u0679\u0646\u06af \u06a9\u0648 \u062a\u0631\u062a\u06cc\u0628 \u062f\u06cc\u06ba\u060c \u06c1\u0641\u062a\u06c1 \u0648\u0627\u0631 \u0648\u06cc\u0633\u0679 \u0631\u067e\u0648\u0631\u0679\u0646\u06af \u062a\u0631\u062a\u06cc\u0628 \u062f\u06cc\u06ba\u060c \u0627\u0646\u0641\u0631\u0627\u0633\u0679\u0631\u06a9\u0686\u0631 \u0631\u06cc\u067e\u0648\u0632\u0679\u0631\u06cc \u0645\u06cc\u06ba Infracost GitHub \u0627\u06cc\u06a9\u0634\u0646 \u0634\u0627\u0645\u0644 \u06a9\u0631\u06cc\u06ba\u060c \u0645\u0627\u06c1\u0627\u0646\u06c1 30 \u0645\u0646\u0679 \u06a9\u06cc FinOps \u062c\u0627\u0626\u0632\u06c1 \u0645\u06cc\u0679\u0646\u06af \u06a9\u0627 \u0634\u06cc\u0688\u0648\u0644 \u0628\u0646\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<p>30 \u062f\u0646\u0648\u06ba \u06a9\u06d2 \u0628\u0639\u062f \u0645\u062a\u0648\u0642\u0639 \u0646\u062a\u0627\u0626\u062c: \u0645\u0627\u06c1\u0627\u0646\u06c1 AWS \u0627\u062e\u0631\u0627\u062c\u0627\u062a \u0645\u06cc\u06ba 15-25% \u06a9\u0645\u06cc\u060c \u062a\u0645\u0627\u0645 \u062a\u0628\u062f\u06cc\u0644\u06cc\u0648\u06ba \u06a9\u06d2 \u062f\u0633\u062a\u0627\u0648\u06cc\u0632\u06cc \u062b\u0628\u0648\u062a\u060c \u0627\u0648\u0631 \u0627\u06cc\u06a9 \u0628\u0627\u0631 \u0628\u0627\u0631 \u0639\u0645\u0644 \u06a9\u0648 \u06cc\u0642\u06cc\u0646\u06cc \u0628\u0646\u0627\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u06c1 \u0648\u06c1\u06cc \u0641\u0636\u0644\u06c1 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0688\u06be\u06cc\u0631 \u0646\u06c1 \u06c1\u0648\u06d4<\/p>\n<h2 id=\"heading-best-practices-summary\">\u0628\u06c1\u062a\u0631\u06cc\u0646 \u0637\u0631\u06cc\u0642\u0648\u06ba \u06a9\u0627 \u062e\u0644\u0627\u0635\u06c1<\/h2>\n<p> <strong>\u06a9\u0631\u0646\u0627:<\/strong> \u062f\u06cc\u06af\u0631 \u0646\u06af\u0631\u0627\u0646\u06cc \u0633\u06d2 \u067e\u06c1\u0644\u06d2 CUR + Athena \u0633\u06cc\u0679 \u06a9\u0631\u06cc\u06ba\u06d4 Cost Explorer \u0622\u067e \u06a9\u0627 \u0646\u0642\u0637\u06c1 \u0622\u063a\u0627\u0632 \u06c1\u06d2 \u0627\u0648\u0631 CUR \u0622\u067e \u06a9\u06cc \u0645\u0639\u0644\u0648\u0645\u0627\u062a \u06a9\u0627 \u0630\u0631\u06cc\u0639\u06c1 \u06c1\u06d2\u06d4<\/p>\n<p> <strong>\u06a9\u0631\u0646\u0627:<\/strong> Terraform \u06cc\u0627 CloudFormation \u0645\u06cc\u06ba \u0679\u06cc\u06af \u0644\u06af\u0627\u0626\u06cc\u06ba\u06d4 \u067e\u0631\u0648\u0633\u06cc\u0633 \u067e\u0631 \u0645\u0628\u0646\u06cc \u0679\u06cc\u06af\u0646\u06af \u062e\u062a\u0645 \u06c1\u0648 \u06af\u0626\u06cc \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u0627\u0646\u0641\u0631\u0627\u0633\u0679\u0631\u06a9\u0686\u0631 \u0633\u06d2 \u0646\u0627\u0641\u0630 \u0679\u06cc\u06af\u0646\u06af \u0645\u0633\u062a\u0642\u0644 \u06c1\u06d2\u06d4<\/p>\n<p> <strong>\u06a9\u0631\u0646\u0627:<\/strong> \u0628\u06cc\u06a9\u0627\u0631 \u0645\u062b\u0627\u0644 \u06a9\u06cc \u062a\u0644\u0627\u0634 \u0627\u0648\u0631 \u0641\u0636\u0644\u06c1 \u06a9\u06cc \u0631\u067e\u0648\u0631\u0679\u0646\u06af \u06c1\u0641\u062a\u06c1 \u0648\u0627\u0631 \u0686\u0644\u0627\u0626\u06cc\u06ba\u06d4 \u0641\u0636\u0644\u06c1 \u062c\u0645\u0639 \u06c1\u0648\u062a\u0627 \u0631\u06c1\u062a\u0627 \u06c1\u06d2\u06d4 \u06c1\u0641\u062a\u06c1 \u0648\u0627\u0631 \u0631\u067e\u0648\u0631\u0679\u06cc\u06ba \u0688\u06be\u06cc\u0631 \u0686\u06be\u0648\u0679\u0627 \u0631\u06a9\u06be\u062a\u06cc \u06c1\u06cc\u06ba\u06d4<\/p>\n<p> <strong>\u06a9\u0631\u0646\u0627:<\/strong> \u06cc\u06c1 \u062a\u06cc\u0646 \u062f\u0631\u062c\u06d2 \u06a9\u0627 \u0627\u0644\u0631\u0679\u0646\u06af \u0645\u0627\u0688\u0644 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u06cc\u06a9 \u0633\u0628 \u067e\u0631 \u0645\u0634\u062a\u0645\u0644 \u0627\u0646\u062a\u0628\u0627\u06c1\u06cc \u0686\u06cc\u0646\u0644 \u062a\u06be\u06a9\u0627\u0648\u0679 \u06a9\u0627 \u0633\u0628\u0628 \u0628\u0646\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u062e\u0627\u0645\u0648\u0634 \u06c1\u0648 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p> <strong>\u06a9\u0631\u0646\u0627:<\/strong> \u062a\u0631\u062a\u06cc\u0628 \u0645\u06cc\u06ba EC2 \u0622\u067e\u0679\u06cc\u0645\u0627\u0626\u0632\u06cc\u0634\u0646 \u0679\u0648\u0644 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u062c\u0627\u0626\u06cc\u06ba\u06d4 \u0628\u0686\u062a \u06a9\u06d2 \u0645\u0646\u0635\u0648\u0628\u0648\u06ba \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0635\u062d\u06cc\u062d \u0637\u0631\u06cc\u0642\u06d2 \u0633\u06d2 \u0633\u0627\u0626\u0632 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u0622\u067e \u06a9\u0648 \u0631\u0639\u0627\u06cc\u062a\u06cc \u0642\u06cc\u0645\u062a\u0648\u06ba \u067e\u0631 \u067e\u06cc\u0633\u06c1 \u0636\u0627\u0626\u0639 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u0628\u0686\u0646\u06d2 \u0645\u06cc\u06ba \u0645\u062f\u062f \u0645\u0644\u06d2 \u06af\u06cc\u06d4<\/p>\n<p> <strong>\u06a9\u0631\u0646\u0627:<\/strong> \u0627\u067e\u0646\u06d2 \u062d\u0642\u06cc\u0642\u06cc \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06d2 \u0646\u0645\u0648\u0646\u0648\u06ba \u06a9\u06cc \u0628\u0646\u06cc\u0627\u062f \u067e\u0631 \u06c1\u0631 \u0633\u06c1 \u0645\u0627\u06c1\u06cc \u0645\u06cc\u06ba \u0627\u067e\u0646\u0627 DynamoDB \u0628\u0644\u0646\u06af \u0645\u0648\u0688 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p> <strong>\u0645\u062a \u06a9\u0631\u0648:<\/strong> \u0628\u063a\u06cc\u0631 \u062a\u062d\u0642\u06cc\u0642 \u06a9\u06d2 \u063a\u06cc\u0631 \u0679\u06cc\u06af \u0634\u062f\u06c1 \u0648\u0633\u0627\u0626\u0644 \u06a9\u0648 \u062d\u0630\u0641 \u06a9\u0631\u06cc\u06ba\u06d4 \u063a\u06cc\u0631 \u0679\u06cc\u06af \u0634\u062f\u06c1 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u063a\u06cc\u0631 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u0634\u062f\u06c1 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u060c \u0627\u0633 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u0635\u0631\u0641 \u063a\u06cc\u0631 \u062f\u0639\u0648\u06cc \u0634\u062f\u06c1 \u06c1\u06d2\u06d4<\/p>\n<p> <strong>\u0645\u062a \u06a9\u0631\u0648:<\/strong> \u067e\u06c1\u0644\u06d2 \u0622\u0688\u0679 \u0631\u0633\u0627\u0626\u06cc \u06a9\u06d2 \u0646\u0645\u0648\u0646\u0648\u06ba \u06a9\u06d2 \u0628\u063a\u06cc\u0631 \u062c\u0627\u0631\u062d\u0627\u0646\u06c1 S3 \u0644\u0627\u0626\u0641 \u0633\u0627\u0626\u06cc\u06a9\u0644 \u067e\u0627\u0644\u06cc\u0633\u06cc\u0648\u06ba \u06a9\u0627 \u0627\u0637\u0644\u0627\u0642 \u06a9\u0631\u06cc\u06ba\u06d4 \u0627\u06af\u0631 \u0688\u06cc\u0679\u0627 \u062a\u06a9 \u062a\u0648\u0642\u0639 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u06a9\u062b\u0631\u062a \u0633\u06d2 \u0631\u0633\u0627\u0626\u06cc \u062d\u0627\u0635\u0644 \u06a9\u06cc \u062c\u0627\u062a\u06cc \u06c1\u06d2\u060c \u062a\u0648 \u0628\u0631\u0641\u0627\u0646\u06cc \u0628\u0627\u0632\u06cc\u0627\u0641\u062a \u06a9\u06d2 \u0627\u062e\u0631\u0627\u062c\u0627\u062a \u0645\u0639\u06cc\u0627\u0631\u06cc \u0627\u0633\u0679\u0648\u0631\u06cc\u062c \u06a9\u06d2 \u0627\u062e\u0631\u0627\u062c\u0627\u062a \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u06c1\u0648 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p> <strong>\u0645\u062a \u06a9\u0631\u0648:<\/strong> \u0627\u067e\u0646\u06cc \u067e\u06c1\u0644\u06cc \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u0645\u06cc\u06ba\u060c \u0622\u067e \u0627\u06cc\u06a9 \u0648\u06cc\u0633\u0679 \u0631\u067e\u0648\u0631\u0679\u0631 \u0644\u06cc\u0645\u0628\u0688\u0627 \u0686\u0644\u0627\u062a\u06d2 \u06c1\u06cc\u06ba \u062c\u0633 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0622\u0679\u0648 \u0688\u06cc\u0644\u06cc\u0679 \u06a9\u0631\u0646\u0627 \u0641\u0639\u0627\u0644 \u06c1\u06d2\u06d4 \u062d\u0630\u0641 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0645\u0646\u0637\u0642 \u06a9\u0648 \u0634\u0627\u0645\u0644 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u062f\u0648 \u06c1\u0641\u062a\u0648\u06ba \u062a\u06a9 \u0635\u0631\u0641 \u0631\u067e\u0648\u0631\u0679 \u0645\u0648\u0688 \u0645\u06cc\u06ba \u0686\u0644\u0627 \u06a9\u0631 \u0622\u0624\u0679 \u067e\u0679 \u06a9\u06cc \u062a\u0648\u062b\u06cc\u0642 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<h2 id=\"heading-resources\">\u0648\u0633\u0627\u0626\u0644<\/h2>\n<\/p><\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u06c1\u0645\u0627\u0631\u06cc \u0627\u0646\u062c\u06cc\u0646\u0626\u0631\u0646\u06af \u0679\u06cc\u0645 \u06a9\u06cc \u06c1\u0631 \u0645\u0627\u06c1 \u0639\u0627\u0645 \u06af\u0641\u062a\u06af\u0648 \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u06d4 \u06a9\u0633\u06cc \u0646\u06d2 \u0645\u062c\u06be\u06d2 \u0627\u067e\u0646\u06d2 AWS \u0628\u0644 \u06a9\u0627 \u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679 \u0641\u0627\u0631\u0648\u0631\u0688 \u06a9\u06cc\u0627\u06d4 \u06cc\u06c1 \u062a\u0639\u062f\u0627\u062f \u06af\u0632\u0634\u062a\u06c1 \u0645\u0627\u06c1 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u06c1\u06d2\u06d4 \u06c1\u0631 \u06a9\u0648\u0626\u06cc \u0633\u0631 \u06c1\u0644\u0627\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u062a\u0641\u0627\u0642 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0627\u0633\u06d2 \u0646\u06cc\u0686\u06d2 \u062c\u0627\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2\u06d4 \u06a9\u0686\u06be \u0628\u06be\u06cc \u0679\u06be\u0648\u0633 \u0641\u06cc\u0635\u0644\u06c1 \u0646\u06c1\u06cc\u06ba \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u0633\u0627\u0626\u06cc\u06a9\u0644 \u062f\u06c1\u0631\u0627\u06cc\u0627 [&hellip;]<\/p>\n","protected":false},"author":7,"featured_media":0,"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-29027","post","type-post","status-publish","format-standard","hentry","category-blog"],"_links":{"self":[{"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/posts\/29027","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/comments?post=29027"}],"version-history":[{"count":0,"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/posts\/29027\/revisions"}],"wp:attachment":[{"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/media?parent=29027"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/categories?post=29027"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/tags?post=29027"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}