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ẻ (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.

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:
    • Key: Owner
    • Value: example@company.xyz
  • 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 eventTimeid của EC2 instance mới tạo instanceIDuserID 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 60s và Memory thành 128MB.

memory lambda

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 AWS và EC2.
  • 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.

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ụ