<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: TAI THANH</title>
    <description>The latest articles on DEV Community by TAI THANH (@devops-taibt).</description>
    <link>https://dev.to/devops-taibt</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2571839%2Fd66fd00b-6254-414e-af3c-61bcf9f00d39.png</url>
      <title>DEV Community: TAI THANH</title>
      <link>https://dev.to/devops-taibt</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/devops-taibt"/>
    <language>en</language>
    <item>
      <title>ECR image layers thực ra lưu trên S3 — và 4 bài học khác từ buổi audit AWS cắt $4,440/năm</title>
      <dc:creator>TAI THANH</dc:creator>
      <pubDate>Tue, 28 Apr 2026 04:54:02 +0000</pubDate>
      <link>https://dev.to/devops-taibt/ecr-image-layers-thuc-ra-luu-tren-s3-va-4-bai-hoc-khac-tu-buoi-audit-aws-cat-4440nam-13jd</link>
      <guid>https://dev.to/devops-taibt/ecr-image-layers-thuc-ra-luu-tren-s3-va-4-bai-hoc-khac-tu-buoi-audit-aws-cat-4440nam-13jd</guid>
      <description>&lt;h1&gt;
  
  
  Cắt ~$4,440/năm chi phí AWS — 5 bài học từ 1 buổi audit
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;Mình vừa làm xong, thấy có vài thứ hay mà AWS docs không nói rõ. Share lại đầy đủ context để ai gặp tình huống tương tự đỡ phải mò như mình. Kết quả: &lt;strong&gt;~$374/tháng tiết kiệm = ~$4,440/năm&lt;/strong&gt;, hết khoảng 5 giờ làm việc.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Optimization&lt;/th&gt;
&lt;th&gt;Saving/tháng&lt;/th&gt;
&lt;th&gt;Effort&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Tạo S3 Gateway Endpoint cắt NAT data&lt;/td&gt;
&lt;td&gt;~$196&lt;/td&gt;
&lt;td&gt;5 phút&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Migrate EC2 c3 → c7i (gen upgrade)&lt;/td&gt;
&lt;td&gt;~$156&lt;/td&gt;
&lt;td&gt;1 giờ&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Release EIP idle&lt;/td&gt;
&lt;td&gt;~$22&lt;/td&gt;
&lt;td&gt;5 phút&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;TỔNG&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;~$374/tháng&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;~5 giờ&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;ROI: &lt;strong&gt;~$900/giờ effort&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Bối cảnh
&lt;/h2&gt;

&lt;p&gt;Tuần trước team đã làm 1 đợt optimize Karpenter + right-size pod, giảm 15%. Nhưng cost vẫn cao. Câu hỏi: có còn dư địa nào không?&lt;/p&gt;

&lt;p&gt;Mình nhận task audit + thực hiện. Spoiler: nhiều thứ tưởng đã optimize hết hóa ra mới chỉ động được vào tảng băng trên.&lt;/p&gt;




&lt;h2&gt;
  
  
  Bài học #1 — ECR image layers thực ra lưu trên S3
&lt;/h2&gt;

&lt;p&gt;S3 Gateway Endpoint (free, setup 5 phút) — bật thử cho VPC chạy K8s. Theory bảo cắt 50-80% NAT data. Đo CloudWatch ngay sau bật:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Hour trước endpoint:    ~14 GB qua NAT
Hour ngay sau:          ~0.4 GB qua NAT
                        ↑ drop ~97%
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Drop sâu hơn theory tận này — mình tò mò trace lại, thì ra: &lt;strong&gt;ECR API endpoint serve metadata thôi (manifest, tags), còn binary layers thì redirect về S3 presigned URL&lt;/strong&gt;. Mỗi pod scaling/restart → docker daemon pull layers → traffic đến S3 ngầm.&lt;/p&gt;

&lt;p&gt;Người chỉ tính traffic "S3 trực tiếp" (app gọi S3 SDK trong code) sẽ underestimate massively. ECR pull traffic không hiển thị trong S3 metric thông thường vì client là docker daemon, không phải app code.&lt;/p&gt;

&lt;p&gt;Mình rút ra: action nào &lt;strong&gt;reversible + cost thấp&lt;/strong&gt; thì cứ thử + đo, đừng paralyze-by-analysis. Endpoint free, có thể delete ngay.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Vài cái đáng note:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Gateway Endpoint chỉ free cho &lt;strong&gt;S3 và DynamoDB&lt;/strong&gt;. Các service khác (ECR API, STS, SSM, KMS...) phải dùng Interface Endpoint ($0.01/giờ/AZ + $0.01/GB) → tính lại ROI cho từng case.&lt;/li&gt;
&lt;li&gt;Nếu app dùng S3 cross-region (vd VPC &lt;code&gt;ap-southeast-1&lt;/code&gt;, bucket &lt;code&gt;us-east-1&lt;/code&gt;), Gateway Endpoint không apply — vẫn qua NAT.&lt;/li&gt;
&lt;li&gt;ECR Pull Through Cache (feature mới) thay đổi pattern này — layers cache local trong region, giảm cross-region pull nhưng không thay được nhu cầu cho S3 endpoint.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;→ Anh em chạy K8s/EKS với image lớn + autoscale nhiều, S3 Gateway Endpoint nên làm &lt;strong&gt;trước cả khi audit kỹ&lt;/strong&gt;. Quick win quá rõ.&lt;/p&gt;




&lt;h2&gt;
  
  
  Bài học #2 — Pre-flight check trước cross-generation EC2 migration
&lt;/h2&gt;

&lt;p&gt;c3.large → c7i.large = Xen-based → Nitro hypervisor, gap price/performance ~15-20%. Nghe free lunch nhưng có catch: Nitro yêu cầu &lt;strong&gt;ENA driver&lt;/strong&gt; (network) + &lt;strong&gt;NVMe driver&lt;/strong&gt; (storage) trong kernel của AMI.&lt;/p&gt;

&lt;p&gt;Nếu AMI thiếu driver → instance "running" theo EC2 API nhưng OS không boot được. Cluster brick. Worse: rollback phải stop + change type lại + restart, prod thì là incident.&lt;/p&gt;

&lt;p&gt;Pre-flight check 3 phút mình dùng:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;inst&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;instances_to_migrate&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;assert&lt;/span&gt; &lt;span class="n"&gt;inst&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;EnaSupport&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;              &lt;span class="c1"&gt;# ENA driver loaded
&lt;/span&gt;    &lt;span class="k"&gt;assert&lt;/span&gt; &lt;span class="n"&gt;inst_ami&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;VirtualizationType&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;hvm&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="c1"&gt;# not paravirtual (Xen-only)
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Subtle gotcha&lt;/strong&gt; — sau migrate, nhiều script dùng:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws ec2 &lt;span class="nb"&gt;wait &lt;/span&gt;instance-running  &lt;span class="c"&gt;# SAI cho gen migration&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;running&lt;/code&gt; chỉ confirm hypervisor đã boot hardware, không confirm OS responding. Nếu thiếu driver, instance sẽ stuck "running" forever, OS không up — silent failure.&lt;/p&gt;

&lt;p&gt;Đúng phải là:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws ec2 &lt;span class="nb"&gt;wait &lt;/span&gt;instance-status-ok  &lt;span class="c"&gt;# confirm cả system status + instance status&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;status-ok&lt;/code&gt; confirm 2/2 checks: system (hypervisor) + instance (OS responding). Thiếu driver → status stuck "initializing" → wait timeout → biết có vấn đề ngay.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Vài cái đáng note:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AMI build trước 2017 rất khả năng thiếu ENA. Amazon Linux 2 / Ubuntu 18.04+ thường OK nhưng vẫn nên check.&lt;/li&gt;
&lt;li&gt;Custom AMI nội bộ là rủi ro cao nhất — đặc biệt nếu base từ snapshot cũ.&lt;/li&gt;
&lt;li&gt;ENA có thể &lt;code&gt;modprobe&lt;/code&gt; runtime, nhưng nếu init không có driver, network sẽ down trong giai đoạn boot — SSH vào fix là không khả thi.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Bài học #3 — Estimate ban đầu sai 30-100% là chuyện thường
&lt;/h2&gt;

&lt;p&gt;Trong session này, NHIỀU lần mình estimate sai trước khi đo:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Item&lt;/th&gt;
&lt;th&gt;Estimate ban đầu&lt;/th&gt;
&lt;th&gt;Thực tế&lt;/th&gt;
&lt;th&gt;Lý do sai&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;EIP idle&lt;/td&gt;
&lt;td&gt;overcounted ~3x&lt;/td&gt;
&lt;td&gt;thực tế ít hơn nhiều&lt;/td&gt;
&lt;td&gt;Đếm cả EIP gắn vào EC2 stopped (intentionally reserved)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;c3 → c7 saving&lt;/td&gt;
&lt;td&gt;"~40%"&lt;/td&gt;
&lt;td&gt;"~15%"&lt;/td&gt;
&lt;td&gt;Confused giá c3 với t2/m4 đời cũ&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NAT data nguồn&lt;/td&gt;
&lt;td&gt;"Phân bố nhiều VPC"&lt;/td&gt;
&lt;td&gt;gần như 1 NAT duy nhất&lt;/td&gt;
&lt;td&gt;Không đo trước khi giả định&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DynamoDB endpoint&lt;/td&gt;
&lt;td&gt;"Nên làm vì FREE"&lt;/td&gt;
&lt;td&gt;KHÔNG cần&lt;/td&gt;
&lt;td&gt;0 K8s pod gọi DynamoDB&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Pattern: cả 4 lần đều suy luận từ mental model thay vì đo data thực.&lt;/p&gt;

&lt;p&gt;Mình rút ra: estimate sai không phải vấn đề. Estimate sai mà không đo lại trước khi report ra mới là vấn đề. Mình từng nhiều lần ngại đo lại vì lỡ thừa nhận estimate ban đầu sai — bài học là phải tách rõ 2 việc:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Estimate&lt;/strong&gt; để rank ưu tiên (việc nào làm trước)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Đo CloudWatch/Cost Explorer&lt;/strong&gt; để claim ROI với stakeholder&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Skip step 2 = báo cáo "$400/tháng" rồi thực tế delivery $110 = lose credibility với stakeholder mãi mãi.&lt;/p&gt;




&lt;h2&gt;
  
  
  Bài học #4 — Pareto cực mạnh trong AWS cost (drill-down 3 tầng)
&lt;/h2&gt;

&lt;p&gt;Pareto trong AWS cost extreme hơn 80/20 thông thường — thường gặp &lt;strong&gt;95/5 hoặc 99/1&lt;/strong&gt;. Lý do: pricing model AWS + scale infrastructure tạo concentration tự nhiên.&lt;/p&gt;

&lt;p&gt;Khi audit NAT data charge:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;NAT Gateway     traffic share
nat-A           ~97%  ← 1 NAT này thôi
nat-B            ~2%
các NAT khác    &amp;lt;1%
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;1 NAT chiếm ~97% cost. Phân bổ effort đều cho mọi NAT (audit từng cái 30 phút × 8 NAT = 4 giờ) = waste 8x effort cho 3% ROI.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Drill-down framework mình dùng:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Service breakdown&lt;/strong&gt; — Cost Explorer → Group by Service. Top 3 service thường &amp;gt; 80% bill.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;usage_type breakdown&lt;/strong&gt; trong service — vd EC2 có &lt;code&gt;BoxUsage:t3.medium&lt;/code&gt;, &lt;code&gt;EBS:VolumeUsage.gp3&lt;/code&gt;, &lt;code&gt;DataTransfer-Out-Bytes&lt;/code&gt;. Cost Explorer cho group by usage_type → thấy cụ thể chi phí đến từ compute hay storage hay transfer.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;resource_id breakdown&lt;/strong&gt; trong usage_type — cần tagging strategy tốt (&lt;code&gt;Project&lt;/code&gt;, &lt;code&gt;Environment&lt;/code&gt;, &lt;code&gt;Owner&lt;/code&gt; tags), hoặc dùng Cost &amp;amp; Usage Report (CUR) export → query Athena.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Action chính xác vào contributor đó, &lt;strong&gt;bỏ phần đuôi dài&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Vài cái đáng note:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reserved Instance / Savings Plan discount apply theo proportional logic, có thể distort breakdown — phải look at "unblended cost" nếu muốn thấy real consumption.&lt;/li&gt;
&lt;li&gt;Cross-account org thì Pareto apply ở account level trước (account nào dominant), rồi xuống service trong account đó.&lt;/li&gt;
&lt;li&gt;CUR query qua Athena là endgame — nếu audit &amp;gt; 5 lần/năm, đáng setup.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Bài học #5 — Helm uninstall order: dependent trước, dependency sau
&lt;/h2&gt;

&lt;p&gt;Mình uninstall vài helm release theo thứ tự ngẫu nhiên:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;apm-server uninstall → OK
kibana uninstall     → HANG (state "uninstalling")
elasticsearch uninstall → OK (đã uninstall trước rồi)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Trace nguyên nhân: Kibana có &lt;strong&gt;post-delete hook job&lt;/strong&gt; call ES master để cleanup security token. Trình tự đã xảy ra:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;ES master &lt;code&gt;helm uninstall&lt;/code&gt; trước → ES pod deleted, Service &lt;code&gt;elasticsearch-master&lt;/code&gt; deleted&lt;/li&gt;
&lt;li&gt;Kibana &lt;code&gt;helm uninstall&lt;/code&gt; chạy → trigger post-delete hook&lt;/li&gt;
&lt;li&gt;Hook job pod start, gọi &lt;code&gt;elasticsearch-master.namespace.svc.cluster.local&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;K8s DNS không resolve được (Service đã chết) → connection refused&lt;/li&gt;
&lt;li&gt;Hook retry vài lần → fail → kibana stuck "uninstalling" forever
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;WRONG: ES uninstall → Kibana uninstall (hook FAIL)
RIGHT: Kibana uninstall trước → ES uninstall sau
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Workaround khi đã sai thứ tự:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Option 1: Force delete hook job + uninstall không hook&lt;/span&gt;
kubectl delete job post-delete-kibana-kibana
helm uninstall kibana &lt;span class="nt"&gt;--no-hooks&lt;/span&gt;

&lt;span class="c"&gt;# Option 2: Patch finalizers nếu Helm release stuck&lt;/span&gt;
kubectl patch helmrelease kibana &lt;span class="nt"&gt;-p&lt;/span&gt; &lt;span class="s1"&gt;'{"metadata":{"finalizers":[]}}'&lt;/span&gt; &lt;span class="nt"&gt;--type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;merge
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;--no-hooks&lt;/code&gt; skip toàn bộ hook → uninstall xong nhưng có thể leave orphan resource. Acceptable cho destructive cleanup vì dependency đã chết rồi anyway.&lt;/p&gt;

&lt;p&gt;Mình rút ra: stateful chart có dependency chain → &lt;strong&gt;uninstall theo thứ tự DEPENDENT trước, DEPENDENCY sau&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Áp dụng cho:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;App trước Database&lt;/li&gt;
&lt;li&gt;Cache trước Storage backend&lt;/li&gt;
&lt;li&gt;Sidecar trước main service&lt;/li&gt;
&lt;li&gt;Webhook controller trước CRD nó depend&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Vài cái đáng note:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Operator (CRD-based) thì khác — uninstall Operator trước CRD instance → orphan custom resource. Phải uninstall CRD instance trước, Operator sau.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;helm uninstall --wait&lt;/code&gt; flag confirm tất cả resource deleted trước khi return — chậm hơn nhưng catch hang state sớm.&lt;/li&gt;
&lt;li&gt;Production: nên có runbook cho từng helm release stack ghi rõ uninstall order. Đừng assume team member nhớ.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Pattern playbook (reusable cho lần sau)
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1. Get cost trend (Cost Explorer) → identify magnitude
2. Group-by service → find Pareto concentration
3. Drill usage_type/resource_id → find specific contributor
4. Pre-flight check before destructive action
5. Confirm explicit với stakeholder (đặc biệt prod)
6. Execute với reversibility in mind
7. MEASURE actual impact (CloudWatch metrics, không chỉ Cost Explorer)
8. Build verification command để re-check trong tương lai
9. Document findings + remaining TODOs in source repo
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Số liệu tổng hợp
&lt;/h2&gt;

&lt;p&gt;Sau ~5 giờ work:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Category&lt;/th&gt;
&lt;th&gt;Saving/tháng&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Network (S3 Gateway Endpoint)&lt;/td&gt;
&lt;td&gt;~$196&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Compute (EC2 generation upgrade)&lt;/td&gt;
&lt;td&gt;~$156&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Public IPv4 idle&lt;/td&gt;
&lt;td&gt;~$22&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;TỔNG&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;~$374/tháng&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;TỔNG/năm&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;~$4,488&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Vẫn còn dư địa đáng kể trong các TODO chưa làm (RDS right-sizing, EBS audit, ECR Interface Endpoint, Spot ratio increase).&lt;/p&gt;




&lt;h2&gt;
  
  
  Lời kết
&lt;/h2&gt;

&lt;p&gt;Cost optimization AWS không phải về việc biết hết tricks AWS. Nó về:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Audit có hệ thống&lt;/strong&gt; (top-down, Pareto)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Đo thực tế&lt;/strong&gt; (CloudWatch, Cost Explorer)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Action reversible&lt;/strong&gt; (thử + đo &amp;gt; paralysis-by-analysis)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pre-flight check&lt;/strong&gt; trước destructive action&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Cuối session, mình bỏ thêm 30 phút build 1 Python script &lt;code&gt;aws-cost-check.py&lt;/code&gt; chạy 1 command → dump 5 sections (cost trend, top services, NAT trend, endpoint state, legacy instance remaining). Lần sau câu hỏi "endpoint còn hiệu quả không?" trả lời trong 5 giây thay vì repeat 30 phút audit. Đầu tư 30 phút này compounding rất nhanh — recommend mọi optimization session đều kết thúc bằng tool verification.&lt;/p&gt;

&lt;p&gt;Pattern này apply cho bất kỳ AWS account nào. Lần sau apply cho account khác chắc chắn cũng sẽ tìm thấy 5-15% saving giấu đâu đó.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Account AWS của ae lần cuối được audit khi nào? Pattern nào ae dùng? Comment chia sẻ với mình ↓&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Tags: #aws #devops #costoptimization #kubernetes #vpc #ec2&lt;/em&gt;&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>aws</category>
      <category>devops</category>
      <category>networking</category>
    </item>
  </channel>
</rss>
