Stop/start EC2 instance on schedule basis to save cost
AWS
28
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.
66 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 10 tháng trước
10 4
White
6 2
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 1 năm trước
6 2
White
4 2
Vấn đề bảo mật thông tin không chỉ đơn thuần là việc chống lại các cuộc tấn công từ hacker, ngăn chặn malware để đảm bảo thông tin không bị phá hủy...
Cường Nguyễn viết hơn 2 năm trước
4 2
Bài viết liên quan
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 gần 2 năm trước
1 2
White
7 0
Sau khi nhận được chứng chỉ (Link) mình có lên kế hoạch ôn luyện cho kỳ thi thứ 2 là Developer Associate. Title hiện tại của mình là developer chứ...
Mầu Hà Quang viết 1 năm trước
7 0
White
2 0
Bài viết gốc có ở blog của mình: (Link) Trong bài viết này, mình muốn giới thiệu về module trong terraform, và cách sử dụng nó để deploy lên nhiều...
Chiến Kira viết hơn 1 năm trước
2 0
{{like_count}}

kipalog

{{ comment_count }}

bình luận

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


White
{{userFollowed ? 'Following' : 'Follow'}}
21 bài viết.
66 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á!