Xin chào các bạn, mình là Nguyễn Vĩnh Nghi, hiện đang đảm nhiệm vị trí Infra tại Công ty OneTech Asia. Bài viết dưới đây, mình sẽ hướng dẫn các bạn cách thiết lập tự động bật, tắt EC2 tại 1 khoảng thời gian cố định để tối ưu chi phí cho hệ thống của bạn trên AWS. Mình sẽ tiến hành làm từng bước thật chi tiết và đồng thời chụp màn hình để các bạn dễ hình dung, mời các bạn cùng xem nhé.
Tutorial này mình sẽ tạo 2 Lambda Function riêng rẽ để thực hiện việc thực hiện bật, tắt instance Server. Sau đó tạo Cloudwatch Rule để đặt giờ thực thi Lambda function trên.
Tạo Role IAM cho Lambda
IAM là gì?
AWS Identity and Access Management (IAM) là một tính năng được cung cấp miễn phí của tài khoản AWS. Nó cho phép bạn quản lý truy cập vào các dịch vụ và tài nguyên AWS một cách bảo mật. Khi sử dụng IAM, bạn có thể tạo, quản lý người dùng và nhóm AWS, sử dụng các quyền để cho phép và từ chối quyền truy cập vào tài nguyên AWS của họ.
IAM dùng để làm gì?
Công dụng của IAM là cung cấp cho bạn các quyền và phương thức để:
- Bạn có thể tạo, quản lý người dùng và nhóm AWS, sử dụng các quyền để cho phép và từ chối quyền truy cập vào tài nguyên AWS.
- Cấp cho người khác quyền quản trị tài nguyên AWS.
- Cấp các quyền khác nhau cho các tài nguyên khác nhau (Amazon S3, Amazon EC2,and other AWS services)…
Như vậy để truy cập và thực thi các lệnh trên AWS thì bạn cần bước đầu tiên là cấp quyền cho người dùng thông qua IAM.
Tạo Role IAM là Lambda
Trước hết cần tạo Role IAM cho common use cases Lambda:
Bước 1: Đăng nhập vào AWS Console. Trên thanh Service tìm kiếm, nhập IAM và truy cập vào trang IAM Management Console -> chọn mục Roles.
Bước 2: Chọn Create role. Tại màn hình Create role, tại mục Use case ta có thể thấy có 2 lựa chọn cho Common use cases là EC2 và Lambda, ta chọn Common use cases là Lambda -> Next
Bước 3: Tại màn hình Permission policies, ta tích chọn các policy: AmazonEC2FullAccess và CloudWatchFullAccess -> Next
Bước 4: Tại trang review, ta nhập Role name, sau đó nhấn Create role. Ở bài viết này Role name sẽ là: ec2-lambda-role
Tạo Lambda Function thực hiện bật, tắt instance Server
Tạo Lambda Function tắt instance Server
Bước 1: Trên thanh tìm kiếm ở AWS Console, nhập và chọn Lambda. Sau đó ta chọn mục Function ở trang Lambda
Bước 2: Chọn Create function
Bước 3: Tại màn hình Create function, ta nhập các Basic Information như sau:
Function Name: ec2-lambda-auto-stop
Runtime: Python 3.9
Permission: Use an existing role. Chọn existing role là: ec2-lambda-role vừa tạo ở phần 1
Bước 4: Chọn Create Function
Bước 5: Import source code sau tại phần Code source của function vừa tạo:
import boto3
region = ‘ap-northeast-1’
instances = [‘i-0098ce21800af86f5’]
ec2 = boto3.client(‘ec2’, region_name=region)
def lambda_handler(event, context):
ec2.stop_instances(InstanceIds=instances)
print(‘stopped your instances: ‘ + str(instances))
Trong đó tại phần region, ta thay “ap-northeast-1” thành region của EC2 instance đang đặt, thay “i-0098ce21800af86f5’” thành id instance cần cấu hình.
Bước 6: Trong phần Code source, ta chọn Deploy để update source code mới. Sau đó chọn Test, lúc này một trang Configure event sẽ hiện lên. Ta để các thông số trang này mặc định và nhập event name vào, sau đó chọn Save.
Bước 7: Sau khi Save trang Configure test event, ta chọn Test để chạy thử lambda function vừa tạo
Với kết quả trên thì EC2 instance đã được tắt thành công bằng Lambda Function
Tạo Lambda Function bật Server
Bước 1: Trên thanh tìm kiếm ở AWS Console, nhập và chọn Lambda. Sau đó ta chọn mục Function ở trang Lambda
Bước 2: Chọn Create function
Bước 3: Tại màn hình Create function, ta nhập các Basic Information như sau:
Function Name: ec2-lambda-auto-start
Runtime: Python 3.9
Permission: Use an existing role. Chọn existing role là: ec2-lambda-role vừa tạo ở phần 1
Bước 4: Chọn Create function
Bước 5: Import source code sau tại phần Code source của function vừa tạo:
import boto3
region = ‘ap-northeast-1’
instances = [‘i-0098ce21800af86f5’]
ec2 = boto3.client(‘ec2’, region_name=region)
def lambda_handler(event, context):
ec2.start_instances(InstanceIds=instances)
print(‘started your instances: ‘ + str(instances))
Bước 6: Trong phần Code source, ta chọn Deploy để update source code mới. Sau đó chọn Test, lúc này một trang Configure event sẽ hiện lên. Ta để các thông số trang này mặc định và nhập event name vào, sau đó chọn Save.
Bước 7: Sau khi Save trang Configure test event, ta chọn Test để chạy thử lambda function vừa tạo
Với kết quả trên thì EC2 instance đã được bật thành công bằng Lambda Function.
Tạo Cloudwatch Rule để đặt giờ thực thi Lambda function
Bước 1: Ở giao diện AWS Console, ta nhập và chọn Cloudwatch trên thanh tìm kiếm Service. Sau khi vào màn hình Cloudwatch, ta chọn mục Events -> Rules -> Create rule
Bước 2: Ở màn hình Create rule, ta nhập các thông số:
– Event Source: Schedule. Phần Cron expression: chỉ định thời gian. Ví dụ trong bài viết là:
00 01 ? * MON-FRI *
Ý nghĩa: 8h sáng giờ Vietnam mỗi ngày từ thứ 2 tới thứ 6 (giờ trên Cloudwatch AWS mặc định là GMT +0)
– Targets: chọn ec2-lambda-auto-start (lambda fuction bật EC2 đã được tạo ở phần 2)
– Sau khi nhập xong các thông số, ta chọn Configuration details
Bước 3: Nhập tên của rule muốn tạo -> chọn Create rule
Bước 4: Sau khi tạo thành công rule đầu tiên, tại màn hình Rules Cloudwatch, ta chọn Create rule để tạo rule tiếp theo
Bước 5: Ở màn hình Create rule, ta nhập các thông số:
– Event Source: Schedule. Phần Cron expression: chỉ định thời gian. Ví dụ trong bài viết là:
00 11 ? * MON-FRI *
Ý nghĩa: 18h giờ Vietnam mỗi ngày từ thứ 2 tới thứ 6 (giờ trên Cloudwatch AWS mặc định là GMT +0)
– Targets: chọn ec2-lambda-auto-stop (lambda fuction tắt EC2 đã được tạo ở phần 2)
– Sau khi nhập xong các thông số, ta chọn Configuration details
Bước 6: Nhập tên của rule muốn tạo -> chọn Create rule
Sau khi tạo xong 2 rules trên ở Cloudwatch, EC2 instance có ID ‘i-0098ce21800af86f5’ sẽ được tự động bật vào lúc 8h VN và tự động tắt vào lúc 18h VN mỗi ngày từ thứ 2 tới thứ 6.
Tổng kết
Như vậy Nghi đã hoàn thành bài viết hướng dẫn cách tự động bật tắt service EC2 instance trên AWS để có thể tối ưu và tiết kiệm chi phí cho hệ thống của bạn. Nếu các bạn có thắc mắc hoặc góp ý gì, xin cứ để lại comment bên dưới đây, Nghi sẽ cố gắng giải đáp cho các bạn trong khả năng và kinh nghiệm của mình. Chúc các bạn thành công.