Stop/start EC2 instance on schedule basis to save cost
AWS
44
White

Cường Nguyễn viết ngày 11/01/2020

Chào mừng bạn đến với Ngày 13 của 100 Ngày DevOps, Hãy tiếp tục hành trình này nhé .

Mục tiêu đơn giản chính là : save cost

Problem : Shutdown tất cả phiên bản EC2 trong tài khoản AWS Devlúc 6 giờ tối và open nó trở lại vào ngày hôm sau lúc 9 giờ sáng (Thứ Hai đến Thứ Sáu) . thật ra yêu cầu này vẫn có nhé mấy bạn .

Solution : Bạn có thể sử dụng Lambda function kết hợp các CloudWatch Event để làm việc này .

Một trong những thách thức lớn trong việc thực hiện điều này là đối với những Dev cần làm việc muộn và anh ta muốn run instance của mình quá 6h tối và những bản vá lỗi gấp , làm việc lúc cuối tuần ?
Một giải pháp phổ biến tôi đưa ra là chỉ định manual các danh sách trong Python Code (Lamda function)

Step 1 : Chúng ta tạo IAM Role để Lambda có thể tương tác với Sự kiện CloudWatch

Go to IAM Console https://console.aws.amazon.com/iam/home?region=us-west-2#/home --> Roles --> Create role

alt text

  • Tiếp theo, chọn Create policy ,IAM Policy sẽ như thế này


{
“Version”: “2012-10-17”,
“Statement”: [
{
“Effect”: “Allow”,
“Action”: [
“logs:CreateLogGroup”,
“logs:CreateLogStream”,
“logs:PutLogEvents”
],
“Resource”: “arn:aws:logs:*:*:*”
},
{
“Effect”: “Allow”,
“Action”: [
“ec2:Start*”,
“ec2:Stop*”
],
“Resource”: “*”
}
]
}

Step 2 : Create Lambda function

alt text

  • Select Author from scratch
  • Name: Give your Lambda function any name
  • Runtime: Select Python2.7 as runtime
  • Role: Choose the role we create in first step
  • Click on Create function

Trong kịch bản tiếp chúng ta sẽ tạo 1 hàm để stop/start instance

alt text

Stop instance code :


import boto3
region = 'XX-XXXXX-X'
instances = ['X-XXXXXXXX']
def lambda_handler(event, context):
ec2 = boto3.client('ec2', region_name=region)
ec2.stop_instances(InstanceIds=instances)
print 'stopped your instances: ' + str(instances)

Note :

  • Change the Value of region
  • In the instance field specify instance id

Start instance code :

import boto3
region = 'XX-XXXXX-X'
instances = ['X-XXXXXXXX']
def lambda_handler(event, context):
ec2 = boto3.client('ec2', region_name=region)
ec2.start_instances(InstanceIds=instances)
print 'started your instances: ' + str(instances)

Step 3 : Create CloudWatch event để kích hoạt chức năng Lambda này

  • Open the Amazon CloudWatch console.
  • Choose Events, and then choose Create rule.
  • Choose Schedule under Event Source.

alt text

Tương tự cho việc Start instance

alt text

Note :
Note : chỗ này bạn chỉnh lại cấu trúc crontab theo ý muốn nhé (default theo UTC TimeZone)

Lambda function --> Monitoring --> View logs in CloudWatch

alt text

khi stop instance nó tương tự thế này là đúng .
alt text

khi start thì cũng tương tự .
alt text

Như vậy là bạn đã tiết kiệm được khá nhiều chi phí cho cty bạn rồi , rồi đề xuất lấy tiền đó thưởng tết cho em =))

Chúc các bạn thành công .

Tham khảo : https://techzones.me/devops/stop-start-ec2-instance-on-schedule-basis-to-save-cost/

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

Cường Nguyễn

21 bài viết.
67 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
10 4
Đây là chủ đề mình thích nhất, mỗi tuần mình dành ra 12h rãnh để viết 1 Dockerfile mình thích, sẵn để sau này có mà dùng không phải viết lại hiện ...
Cường Nguyễn viết hơn 1 năm trước
10 4
White
6 3
Nginx một web services khá mạnh cho hiện tượng C10k . Có rất nhiều cấu hình của nó mà mình đã xem qua . Đa phần sysadmin không tìm hiểu kỹ về nó , ...
Cường Nguyễn viết 2 năm trước
6 3
White
5 0
Chào mừng bạn đến với Ngày 1 trong 100 ngày của DevOps, tôi muốn bắt đầu hành trình này với một trong những khái niệm quan trọng nhất trong Giám sá...
Cường Nguyễn viết 2 năm trước
5 0
Bài viết liên quan
White
0 0
FSx FSx For Windows File Servers FSx for Windows are fully managed native Windows file servers/file shares Designed for integration with Wind...
Nguyễn Huy Hoàng viết 17 ngày trước
0 0
White
0 0
CloudFront It is a content deliver network (CDN) Its job is to improve the delivery of content from its original location to the viewers of the...
Nguyễn Huy Hoàng viết 17 ngày trước
0 0
White
1 2
Transfer files từ local computer đến AWS EC2 dùng FileZilla Bài toán: Làm thế nào để copy files từ local computer đến AWS EC2? Cách làm: Có mấy ...
Minh-Trung Nguyễn viết hơn 2 năm trước
1 2
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
21 bài viết.
67 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!