see more blog

Tự động gắn thẻ các tài nguyên trên AWS khi khởi tạo

tagging

Ý tưởng

Thử tưởng tượng rằng hàng ngày bạn và đồng nghiệp cần phải tạo rất nhiều tài nguyên trên AWS để phục vụ cho công việc. Vậy làm thế nào để đơn giản hóa quy trình quản lý, vận hành, theo dõi chi phí sử dụng? Một trong những phương pháp phổ biến là gắn thẻ (gán nhãn – tagging). Không phải ai cũng có thể nhớ đến việc phải gắn thẻ các tài nguyên khi khởi tạo. Vì vậy việc tự động gắn thẻ (tagging) các tài nguyên là giải pháp tối ưu cho việc giảm thiểu admin-overhead.

Cùng xem bài viết bên dưới do anh Lê Hải ĐăngĐỗ Thanh Tùng – Solutions Architect của VTI Cloud trình bày.

Tổng quan về giải pháp Tagging

aws tagging

  1. Người dùng khởi tạo tài nguyên trên AWS. Trong ví dụ này sẽ là khởi tạo EC2 Instance kèm với EBS Volume.

  2. AWS CloudTrail sẽ ghi lại API event.

  3. EventBridge sẽ triggered Lambda function, ví dụ như là event: RunInstance.

  4. Lambda function sẽ có nhiệm vụ gắn thẻ tài nguyên.

Khi Lambda function được triggered thành công với tài nguyên khởi tạo, nó sẽ gắn thẻ (tagging) tài nguyên với:

  • IAM User và Assume Role:

  • Root User:

    • Key: Owner

    • Value: Root

tagging 1

Các bước cài đặt

Trước tiên hãy điểm qua một số dịch vụ mà bạn cần sử dụng trong bài viết này. Hầu hết chúng đều là những dịch vụ cốt lõi mà AWS cung cấp như: CloudTrail, EventBridge (một phiên bản nâng cấp cực “xịn xò” của CloudWatch Events), Lambda hay IAM policy,…

1. CloudTrail: Trail (Multi-region)

aws cloudtrail

AWS CloudTrail làm việc như một giám sát viên. Tất cả các hành động trên AWS account đều được CloudTrail ghi lại dưới dạng sự kiện. Trail là một cài đặt giúp bạn xử lý các sự kiện. Ví dụ: lưu vào S3, mã hóa với AWS KMS, …

Đầu tiên bạn cần phải có Trail để phát hiện và phản hồi các API event khi khởi tạo tài nguyên. Trail có thể tạo một cách dễ dàng trên AWS Console, tham khảo tại đây.

Với việc setup thành công, EC2 RunInstances API sẽ cung cấp cho bạn khá nhiều thông tin như thời gian tạo tài nguyên eventTime, id của EC2 instance mới tạo instanceID, userID của người khởi tạo tài nguyên principalId.

aws cloudtrail event record

Tìm hiểu thêm về AWS CloudTrail.

2. Lambda function

aws lambda

AWS Lambda, được coi như Function as a Service (FaaS), một dịch vụ serverless dành cho lập trình viên không cần quan tâm đến hạ tầng khi chạy ứng dụng. Đúng như định nghĩa Function, Lambda chỉ chạy khi được gọi.

Để tạo Lambda function, đăng nhập vào AWS Console, chọn Lambda, tick vào Create Function. Chúng ta sẽ tạo một Lambda function với Runtime là Python 3.8. Copy đoạn code có sẵn trong GitHub Repo.

lambda function github repo

Kéo xuống phần Basic settings và chỉnh Timeout thành 60sMemory thành 128MB.

memory lambda

Nhớ click Save nhé 🙂

Tìm hiểu thêm về Lambda.

3. Cấp quyền cho Lambda function

lambda permission

Trong giao diện Lambda click vào tab Permission, tại đây sẽ có mục Execution role ấn vào Role name sẽ direct qua IAM tab. Tại đây chúng ta sẽ add thêm inline policy, chọn JSON tab và paste IAM policy dưới đây:


{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "ec2:CreateTags",
            "Resource": [
                "arn:aws:ec2:*:*:instance/*",
                "arn:aws:ec2:*:*:volume/*"
            ]
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": [
                "ec2:DescribeInstances",
                "ec2:DescribeVolumes"
            ],
            "Resource": "*"
        }
    ]
}

Đoạn policy trên sẽ cho phép Lambda function có thể tìm thấy instance volume và gắn thẻ (tagging) cả EC2 instance lẫn instance volume. Ấn vào Review policy, nhập tên và Create policy.

Tìm hiểu thêm về IAM Policy.

4. Trigger Lambda function từ AWS EventBridge

aws eventbridge

AWS EventBridge cung cấp luồng dữ liệu (các sự kiện,…) thời gian thực từ các ứng dụng của riêng bạn, và định tuyến dữ liệu đó tới các mục tiêu như AWS Lambda.

Ở phần này chúng ta sẽ dùng EventBrigde để triggered Lambda function.

Chọn Create rule. Tại mục này bạn cần phải define pattern theo các bước dưới đây:

  • Chọn Event pattern.

  • Ở mục Event matching pattern chọn Pre-defined pattern.

  • Tiếp theo trong mục Service provider Service name chọn AWSEC2.

  • Mục event type chọn AWS API Call via CloudTrail.

  • Cuối cùng là chọn Specific operation, tại đây bạn nhập vào RunInstance.

define patern

Tìm hiểu về AWS EventBridge.

5. Kết quả và những điều cần lưu ý

tagging 2

Sau khi thực hiện thành công những bước trên thì quá trình setup đã hoàn tất, bạn hoàn toàn có thể tạo thử một EC2 instance và chờ Lambda tự gắn tag vào trong instance bạn vừa khởi tạo.

Lưu ý:

  • Với cách làm này thì chỉ có những instance được khởi tạo sau khi cài đặt Lambda function mới được tự động gắn thẻ (tagging).

  • Bạn cần bật Multi-region trên CloudTrail để giải pháp này có thể hoạt động trên toàn bộ các Region.

  • CloudTrail cần một khoảng thời gian(có thể lên đến 1 giờ) cho đến khi EventBridge bắt đầu gọi (invoke) Lambda function.

Trên đây là cách mà VTI Cloud đã áp dụng để có thể kiểm soát được tài nguyên khởi tạo trên AWS. Ngoài ra, bạn hoàn toàn có thể thêm giải pháp Instance Scheduler vào trong Lambda function để có thể tự động hóa khởi chạy và tạm dừng EC2 cũng như RDS instances theo giờ làm việc để tối đa hóa chi phí.

Tham khảo chi phí dịch vụ

Về VTI Cloud

VTI Cloud là Đối tác cấp cao (Advanced Consulting Partner) của AWS, với đội ngũ hơn 50+ kỹ sư về giải pháp được chứng nhận bởi AWS. Với mong muốn hỗ trợ khách hàng trong hành trình chuyển đổi số và dịch chuyển lên đám mây AWS, VTI Cloud tự hào là đơn vị tiên phong trong việc tư vấn giải pháp, phát triển phần mềm và triển khai hạ tầng AWS cho khách hàng tại Việt Nam và Nhật Bản.

Xây dựng các kiến trúc an toàn, hiệu suất cao, linh hoạt, và tối ưu chi phí cho khách hàng là nhiệm vụ hàng đầu của VTI Cloud trong sứ mệnh công nghệ hóa doanh nghiệp.

Bài viết liên quan:

10 điều bạn có thể làm ngay hôm nay để giảm chi phí AWS

Related news

what’s up at VTI