Tự động tắt và Start AWS Server theo thời gian

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.

IAM Management Console
IAM Management Console

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

Create role

Bước 3: Tại màn hình Permission policies, ta tích chọn các policy: AmazonEC2FullAccess và CloudWatchFullAccess -> Next

Permission policies

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

Role name

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

AWS Console
AWS Console Lambda Function

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

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.

 Import source code

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.

Deploy

Bước 7: Sau khi Save trang Configure test event, ta chọn Test để chạy thử lambda function vừa tạo

Configure test event
Configure test event

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

Lambda Function bật Server
Lambda Function

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

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))

Import source code

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.

Config test event

Bước 7: Sau khi Save trang Configure test event, ta chọn Test để chạy thử lambda function vừa tạo

 Test để chạy thử lambda function vừa tạo
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

Tạo Cloudwatch 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

Create rule

Bước 3: Nhập tên của rule muốn tạo -> chọn Create rule

Create new 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

Greate Rules Cloudwatch

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

Configuration details

Bước 6: Nhập tên của rule muốn tạo -> chọn Create rule

Configuration details 2

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.

Tư vấn - Báo giá
Mọi thông tin tư vấn và báo giá đều miễn phí.

    「Chính sách bảo mật」Nếu bạn đồng ý với những điều trên, vui lòng nhấp vào nút "Gửi"
    Một email trả lời tự động sẽ được gửi đến địa chỉ email bạn đã nhập, vì vậy hãy kiểm tra điều đó.
    Tư vấn - Báo giá
    Mọi thông tin tư vấn và báo giá đều miễn phí.

      「Chính sách bảo mật」Nếu bạn đồng ý với những điều trên, vui lòng nhấp vào nút "Gửi"
      Một email trả lời tự động sẽ được gửi đến địa chỉ email bạn đã nhập, vì vậy hãy kiểm tra điều đó.
      liên hệ