bởi Sushovan Basak vào ngày 03 THÁNG 2 NĂM 2025 trong Amazon QuickSight , Amazon RDS , AWS Glue , AWS Step Functions , Quản lý hoạt động tập trung , Tối ưu hóa chi phí đám mây , Chuyên gia (400) , Hướng dẫn kỹ thuật .
Khách hàng AWS sử dụng Amazon Relational Database Service (Amazon RDS) snapshots để sao lưu dữ liệu một cách an toàn. Bạn có thể tạo snapshots thủ công trước các sự kiện bảo trì và cập nhật bản vá như một biện pháp phòng ngừa, ngay cả khi đã bật tính năng tạo snapshot tự động. Khi một RDS instance hoặc cluster bị xóa, các snapshots thủ công vẫn còn trong tài khoản và được tính vào tổng dung lượng sao lưu. Các snapshots không còn được tham chiếu bởi các RDS instances hoặc clusters đã bị xóa được gọi là orphaned snapshots.
Trong một bài viết trước, chúng tôi đã thảo luận về cách tiếp cận lập trình để xác định RDS orphan snapshots bằng cách sử dụng AWS Command Line Interface (AWS CLI). Chúng tôi cũng đã đề cập đến các phương pháp xác định snapshot RDS cũ nhất của một instance và RDS instance có số lượng snapshots đang hoạt động lớn nhất. Tuy nhiên, nếu bạn có nhiều tài khoản được liên kết, bạn sẽ cần tìm kiếm từng tài khoản riêng lẻ để xác định các snapshots thủ công không có RDS instance hoặc cluster đi kèm, gây ra gánh nặng vận hành.
Trong bài viết này, chúng tôi hướng dẫn bạn cách tổng hợp RDS orphan snapshots trên nhiều tài khoản và AWS Regions, giúp tự động hóa và cung cấp khả năng quan sát trên toàn tổ chức để tối ưu hóa chi phí đám mây dựa trên dữ liệu phân tích. Cross-region copied snapshots, Aurora cluster copied snapshots và shared snapshots không thuộc phạm vi của giải pháp này
Tổng quan về giải pháp
Giải pháp này sử dụng AWS Step Functions orchestration kết hợp với AWS Lambda để tạo siêu dữ liệu orphan snapshot trên toàn bộ tổ chức của bạn.
- Siêu dữ liệu được tạo ra sẽ được lưu trữ trong Amazon Simple Storage Service (Amazon S3).
- AWS Glue sẽ xử lý và chuyển đổi dữ liệu thành một bảng trong Amazon Athena.
- Amazon QuickSight sử dụng bảng Athena này để cung cấp thông tin chi tiết về orphan snapshot, giúp bạn có cái nhìn trực quan và tối ưu hóa chi phí lưu trữ.
Sơ đồ sau đây minh họa kiến trúc giải pháp và quy trình làm việc.
Các bước thực hiện quy trình như sau:
Amazon EventBridge Scheduler gọi Step Functions theo lịch trình có thể cấu hình để truy xuất dữ liệu orphan snapshot.
- Khi Step Functions chạy, hệ thống sẽ dọn dẹp các bản ghi và siêu dữ liệu trước đó để tạo thông tin cập nhật, giúp bạn có thể hình dung trạng thái hiện tại của việc sử dụng snapshot.
- Step Functions chứa hai vòng lặp (Map states) để xác định orphan snapshot trên toàn bộ tổ chức hoặc tài khoản hiện tại, tùy thuộc vào tùy chọn triển khai của bạn (ORGANIZATION hoặc CURRENT_ACCOUNT).
Xử lý dữ liệu orphan snapshot
- Các AWS Lambda functions, chạy trên AWS Graviton, thực thi đồng thời để tạo siêu dữ liệu cho orphan RDS instances và orphan snapshots.
- AWS Graviton runtime được chọn để tối ưu hiệu suất – chi phí, nhưng bạn có thể thay đổi runtime nếu muốn sử dụng kiến trúc Lambda không phải của AWS Graviton.
Lưu trữ và xử lý dữ liệu
- Lưu trữ dữ liệu thô:
- Siêu dữ liệu snapshot được lưu trữ dưới dạng tệp JSON trong S3 bucket.
- AWS Glue Crawler quét dữ liệu thô và tạo hai bảng dữ liệu thô cho RDS instances và RDS snapshot clusters.
- Dọn dẹp và lưu trữ lịch sử:
- Một Lambda function di chuyển dữ liệu lịch sử vào một S3 bucket khác để lưu trữ lâu dài.
- Xử lý ETL và định dạng dữ liệu:
- Các tác vụ ETL (Extract, Transform, Load) của AWS Glue chuyển đổi dữ liệu JSON lồng nhau sang Parquet, một định dạng tối ưu cho truy vấn SQL.
- S3 bucket lưu trữ siêu dữ liệu của orphan snapshot đã được chuyển đổi.
- Lập danh mục dữ liệu và trực quan hóa:
- Hai AWS Glue Crawlers quét dữ liệu đã lưu trữ và định dạng để lập danh mục dữ liệu trong Amazon Athena.
- Hai bảng rds_ins (cho instances) và rds_cls (cho snapshots) lưu trữ siêu dữ liệu của orphan snapshots.
- Amazon QuickSight sử dụng dữ liệu này để tạo trực quan hóa chi tiết, giúp bạn dễ dàng theo dõi và tối ưu chi phí.
Các ảnh chụp màn hình sau đây cho thấy cách bảng điều khiển QuickSight được triển khai trong giải pháp này cung cấp thông tin chi tiết về orphan snapshot.
Ảnh chụp màn hình đầu tiên minh họa insights về orphan snapshot của một RDS instance..
Ảnh chụp màn hình sau đây minh họa insights về orphan snapshot của một RDS cluster.
Trong bước triển khai tài khoản giám sát, bạn cần đặt tham số loại triển khai trong tệp Config.toml, được lưu trữ trong Parameter Store, một khả năng của AWS Systems Manager.
Quy trình làm việc sử dụng giá trị lưu trữ tham số này để khởi tạo vòng lặp, cụ thể là Map state.
Nếu loại triển khai được đặt cho toàn bộ tổ chức, thì Map state sẽ lặp lại trên tất cả các tài khoản. Nếu không, Map state chỉ chạy cho tài khoản hiện tại.
Quy trình làm việc khác nhau giữa hai lần triển khai, như được nêu bật trong biểu diễn máy trạng thái sau.
Giải pháp bao gồm ba lần triển khai sử dụng AWS CloudFormation stacks:
- Triển khai tài khoản giám sát (Bước 1–2 chi tiết trong bài viết này)
- Triển khai tài khoản quản lý (Bước 3–4)
- (Tùy chọn) Triển khai sau giải pháp (Bước 5–7)
Để có cái nhìn tổ chức về orphan snapshots, bạn cần chạy các bước triển khai của tài khoản giám sát và tài khoản quản lý cùng với các bước triển khai sau giải pháp. Nếu bạn không có quyền truy cập vào tài khoản quản lý (payer account), giải pháp này vẫn linh hoạt để cung cấp cái nhìn về orphan snapshots trong một tài khoản duy nhất. Trong trường hợp này, chỉ cần làm theo các bước triển khai tài khoản giám sát và các bước triển khai sau giải pháp.
Hơn nữa, triển khai tài khoản giám sát và tài khoản quản lý tạo ra các insights trên bảng điều khiển QuickSight, nhưng triển khai QuickSight là tùy chọn. Bạn có thể bỏ qua việc triển khai bảng điều khiển bằng cách không cung cấp tên người dùng QuickSight (tham số: quicksight_user_name) trong tệp Config.toml. Bạn có thể bỏ qua việc triển khai QuickSight nếu triển khai stack ngoài các Regions được QuickSight hỗ trợ.
Để triển khai giải pháp, thực hiện các bước sau:
- Khởi tạo môi trường tài khoản giám sát.
- Cấu hình và triển khai stack giám sát.
- Khởi tạo môi trường tài khoản quản lý.
- Cấu hình và triển khai stack quản lý.
- Chỉnh sửa lịch trình EventBridge.
- Truy vấn các bảng Athena.
- Thực thi quyền đọc dữ liệu QuickSight.
Điều kiện tiên quyết
Cần có ID Tổ chức AWS (OU_ID) khi sử dụng loại triển khai tổ chức. Để biết thêm chi tiết về cách tạo tổ chức và di chuyển tài khoản đến đơn vị tổ chức (OU), hãy tham khảo mục Tạo tổ chức và Di chuyển tài khoản đến OU hoặc giữa gốc và OU.
Nếu bạn muốn triển khai bảng điều khiển, hãy đảm bảo QuickSight Enterprise Edition được kích hoạt và thêm dung lượng SPICE tại Vùng bạn đang triển khai ngăn xếp, nếu bạn chưa có. Bạn phải có quyền quicksight:DescribeAccountSettings để nhận Vùng nhận dạng QuickSight.
Khởi tạo môi trường tài khoản giám sát của bạn
Hoàn thành các bước sau để thiết lập môi trường tài khoản giám sát của bạn:
- Khởi chạy AWS CloudShell trong Region nơi bạn muốn triển khai stack hoặc sử dụng shell cục bộ của bạn.
- Cài đặt Python 3. Triển khai này đã được thử nghiệm với phiên bản Python 3.10.6.
- Chạy lệnh sau để nâng cấp các gói Python và khởi tạo môi trường tài khoản giám sát của bạn. Triển khai này đã được thử nghiệm với các phiên bản boto3=1.34.23, botocore=1.34.23, và toml=0.10.2.
Để biết thông tin về cách lấy khóa truy cập được tham chiếu trong mã dưới đây, tham khảo mục Quản lý khóa truy cập (console).
python3 -m ensurepip –upgrade
pip3 install botcore boto3 toml –upgrade
export AWS_ACCESS_KEY_ID=<YOUR_AWS_ACCESS_KEY for monitoring account>
export AWS_SECRET_ACCESS_KEY=<YOUR_AWS_SECRET_KEY for monitoring account>
export AWS_SESSION_TOKEN=<YOUR_AWS_SESSION_TOKEN for monitoring account>
export AWS_DEFAULT_REGION=<YOUR_AWS_PRIMARY_REGION for your Organization>
git clone https://github.com/aws-samples/rds-snapshot-inventory.git rds-snapshot-inventory
Chạy lệnh sau để xây dựng và đóng gói mã artifact:
python3 build_artifact.py
Cấu hình và triển khai ngăn xếp giám sát
Thực hiện các bước sau để thiết lập ngăn xếp giám sát:
- Xác định vị trí phần Cấu hình cho ngăn xếp giám sát trong tệp Config.toml dưới thư mục rds-snapshot-inventory.
- Cập nhật các giá trị tham số theo hướng dẫn trong phần bình luận của tệp
- Chạy lệnh sau từ thư mục rds-snapshot-inventory:
python3 monitor_stack.py - Nhấn Enter Create rồi nhấn y để tạo ngăn xếp khi được nhắc.
- Điều hướng đến bảng điều khiển AWS CloudFormation và đợi cho đến khi ngăn xếp mã nguồn và việc tạo ngăn xếp chính hoàn tất trước khi tiến hành bước tiếp theo.
- Khi hoàn tất, ngăn xếp sẽ hiển thị trạng thái CREATE_COMPLETE.
- Sao chép giá trị của S3BucketRawArn và StepFunctionsSnapshotInsightRole từ tab Đầu ra của ngăn xếp chính, các giá trị này cần thiết cho việc triển khai tài khoản quản lý.
Khởi tạo môi trường tài khoản quản lý của bạn
Hoàn thành các bước sau để thiết lập môi trường tài khoản quản lý của bạn:
- Khởi chạy CloudShell trong cùng Region nơi bạn triển khai stack giám sát hoặc sử dụng shell cục bộ của bạn.
- Chạy lệnh sau để khởi tạo môi trường tài khoản quản lý của bạn:
export AWS_ACCESS_KEY_ID=<YOUR_AWS_ACCESS_KEY for management account>
export AWS_SECRET_ACCESS_KEY=<YOUR_AWS_SECRET_KEY for management account>
export AWS_SESSION_TOKEN=<YOUR_AWS_SESSION_TOKEN for management account>
export AWS_DEFAULT_REGION=<YOUR_AWS_PRIMARY_REGION for your Organization>
- Chạy lệnh sau để clone, xây dựng, và đóng gói mã artifact nếu bạn đang sử dụng CloudShell:
git clone https://github.com/aws-samples/rds-snapshot-inventory.git rds-snapshot-inventory cd rds-snapshot-inventory
python3 build_artifact.py
Cấu hình và triển khai ngăn xếp quản lý
Hoàn tất các bước sau để thiết lập ngăn xếp quản lý:
Hoàn thành các bước sau để thiết lập management stack:
- Tìm phần Cấu hình cho Management Stack trong Config.toml dưới thư mục rds-snapshot-inventory.
- Cập nhật các giá trị tham số theo hướng dẫn trong phần bình luận của tệp.
- Để nguyên các tham số khác mà bạn đã sửa trong quá trình triển khai tài khoản giám sát.
- Đảm bảo rằng management stack được triển khai trong cùng Region với triển khai tài khoản giám sát. Kiểm tra tham số primary_region trong tệp Config.toml và cập nhật biến môi trường AWS_DEFAULT_REGION nếu có sự không khớp.
- OU_ID là bắt buộc cho việc triển khai management stack.
- Chạy lệnh sau từ thư mục rds-snapshot-inventory:
python3 management_stack.py - Nhập Create và sau đó nhập y để tạo ngăn xếp khi được nhắc.
- Điều hướng đến bảng điều khiển AWS CloudFormation để xác minh rằng cả ngăn xếp mã nguồn và ngăn xếp chính đều đã hoàn tất.
- Khi hoàn tất, ngăn xếp sẽ hiển thị trạng thái CREATE_COMPLETE.
Sửa đổi lịch trình EventBridge
Bạn có thể tùy chọn sửa đổi lịch trình EventBridge gọi quy trình làm việc Step Functions. Lịch trình hàng tuần được xác định trước được cấu hình để chạy một lần vào mỗi Thứ Bảy để tối ưu hóa chi phí, nhưng bạn có thể chỉnh sửa để phù hợp với yêu cầu của mình.
Bạn cũng có thể gọi thủ công quy trình làm việc ngay sau khi triển khai như một hoạt động một lần để tạo thông tin chi tiết, thay vì chờ lịch trình EventBridge hàng tuần được xác định trước. Để thực hiện, hãy điều hướng đến bảng điều khiển Step Functions và chạy máy trạng thái.
Truy vấn bảng Athena
Để truy vấn các bảng Athena cho orphan snapshot, hoàn thành các bước sau:
- Trên bảng điều khiển Athena, chọn Trình chỉnh sửa truy vấn trong ngăn điều hướng.
- Đối với Nguồn dữ liệu , hãy chọn AwsDataCatalog và đối với Cơ sở dữ liệu , hãy chọn snapshot_insight.
- Để thu thập thông tin chi tiết về RDS instance orphan snapshot, hãy chạy truy vấn sau: select * from rds_ins
- Để thu thập thông tin chi tiết về RDS cluster orphan snapshot, hãy chạy truy vấn sau: select * from rds_cls
Triển khai quyền đọc dữ liệu QuickSight
Để thiết lập QuickSight, hãy hoàn thành các bước sau:
- Trên bảng điều khiển QuickSight, chọn biểu tượng người dùng và Quản lý QuickSight.
- Chọn Bảo mật và quyền trong ngăn điều hướng.
- Trong mục Truy cập dịch vụ AWS của QuickSight, chọn Quản lý.
- Chọn Amazon Athena và Amazon S3 .
- Trong S3, chọn ba unattached snapshot metadata buckets (chẳng hạn như snapshot-insight-<metadata_type>-<account_id>-<region>) và một Athena query results bucket (chẳng hạn như aws-athena-query-results-aor-<account_id>-<region>).
- Chọn write permission cho Athena workgroup cho cả bốn bucket.
- Nếu bạn không thấy các bucket này, hãy kiểm tra xem chúng đã được tạo thành công bởi monitoring account CloudFormation stack chưa.
- Chọn Finish.
- Chọn Datasets trong ngăn điều hướng và chọn từng dataset.
- Tạo schedule refreshes cho sáu datasets được tạo trong quá trình triển khai này.
- Chọn refresh times với khoảng cách vài giờ giữa các EventBridge schedules. Điều này cho phép Step Functions workflow tạo unattached snapshot metadata theo nhịp độ lệch nhau, cung cấp các đầu ra cập nhật nhất trong dashboard.
- Chọn save .
Dọn dẹp
Khi bạn không còn cần giải pháp này nữa, hãy hoàn tất các bước sau để xóa tài nguyên AWS và orphan snapshot metadata, nhằm tránh việc tài khoản của bạn bị tính phí liên tục:
- Chạy lệnh sau từ monitoring account :
- python3 monitor_stack.py
- Nhấn Enter Delete rồi nhấn Enter y để xóa ngăn xếp khi được nhắc.
- Chạy lệnh sau từ tài khoản quản lý:
- python3 management_stack.py
- Nhấn Enter Delete rồi nhấn Enter y để xóa ngăn xếp khi được nhắc.
- Hủy đăng ký QuickSight của bạn .
Bạn chỉ nên xóa tài khoản QuickSight của mình nếu bạn đã thiết lập nó theo hướng dẫn trong bài viết này và hoàn toàn chắc chắn rằng nó không được sử dụng bởi bất kỳ người dùng nào khác.
Sau khi dọn dẹp, nếu bạn quyết định xem lại thông tin chi tiết về orphan snapshot, bạn có thể chạy lại các bước triển khai.
Chi phí
Giải pháp này sử dụng các dịch vụ không máy chủ, cho phép bạn chỉ trả tiền cho những gì bạn sử dụng. Chi phí của giải pháp thay đổi tùy thuộc vào số lượng tài khoản, các Region trong phạm vi và tần suất chạy quy trình làm việc Step Functions. Khi được thử nghiệm tại us-east-1 Region, giải pháp này có chi phí khoảng 20 USD mỗi tháng, với lịch trình quy trình làm việc vào cuối tuần, cho một tổ chức có tám tài khoản và ba Regions được kích hoạt.
Phần kết luận
Trong bài đăng này, chúng tôi đã giới thiệu cho bạn giải pháp phân tích orphan snapshots được tạo thủ công cho bất kỳ phiên bản hoặc cụm RDS nào. Bạn có thể sử dụng giải pháp này ở quy mô lớn để hỗ trợ các trường hợp sử dụng từ tài khoản cá nhân đến triển khai trên toàn tổ chức. Giải pháp này nhằm mục đích cho phép đưa ra quyết định dựa trên dữ liệu để tối ưu hóa chi phí lưu trữ snapshot.
Bài được dịch từ bài viết trên AWS Blogs, bạn có thể xem bài viết gốc tại đây.