Câu trả lời:
Cập nhật
AWS đã phát hành một công cụ gọi là " Lập lịch lập trường ", bao gồm một hướng dẫn cấu hình đầy đủ được liên kết từ trang đó. Nó có vẻ là một cải tiến của Bộ lập lịch EC2 mà tôi mô tả bên dưới, với một vài tính năng khác, nhưng về cơ bản nó là cùng một thứ.
Hướng dẫn bên dưới vẫn sẽ hoạt động, nhưng có lẽ tốt hơn là xem lịch trình cá thể để cài đặt mới.
Bài gốc
AWS có một công cụ gọi là Bộ lập lịch EC2 cho phép bạn kiểm soát rất linh hoạt khi bắt đầu và dừng các phiên bản EC2.
Công cụ cho phép bạn xác định thời gian bắt đầu và dừng mặc định khi bạn thiết lập công cụ, bạn có thể thay đổi sau này. Bạn có thể chọn trường hợp nào được kiểm soát, bạn và bạn có thể chỉ định thời gian bắt đầu và dừng khác nhau cho mỗi phiên bản bằng cách sử dụng thẻ.
Mặc dù nó là một công cụ tuyệt vời nhưng tài liệu này hơi mơ hồ và khó hiểu. Nó giống như tài liệu đã được viết bởi một kỹ sư viết công cụ và biết mọi thứ về nó, hơn là một nhà văn kỹ thuật.
Lưu ý : nếu bạn có phản hồi hoặc bình luận sửa chữa được đánh giá cao. Nếu bạn có một câu hỏi dựa trên điều này, xin vui lòng bắt đầu câu hỏi của riêng bạn.
Bộ lập lịch EC2 là gì
Công cụ này là Chức năng Lambda hoạt động với Sự kiện Cloudwatch và DynamoDB. Nó được triển khai bằng cách sử dụng mẫu Cloudform, cũng thiết lập các vai trò và chính sách IAM cần thiết. Bạn có thể đọc về kiến trúc ở đây .
Triển khai
Bắt đầu bằng cách vào trang này và nhấp vào "giải pháp khởi chạy". Ngay bây giờ liên kết trực tiếp ở đây , nhưng nó có thể thay đổi.
Chọn khu vực bạn muốn các tài nguyên được triển khai ở đầu bảng điều khiển. Kịch bản kiểm soát các thể hiện EC2 ở bất kỳ khu vực nào, nhưng nó chạy trong một khu vực.
Gắn thẻ EC2
Điều này được đề cập trong tài liệu ở đây , nhưng nó không đơn giản như nó có thể.
Bạn kiểm soát những trường hợp nào được bắt đầu và dừng lại bằng cách gắn thẻ các phiên bản của bạn.
Trường hợp đơn giản nhất yêu cầu bạn gắn thẻ cho từng phiên bản EC2 mà bạn muốn được bắt đầu và dừng theo lịch trình. Để thực hiện việc này, hãy tìm phiên bản EC2 của bạn trong bảng điều khiển, nhấp vào thẻ và tạo thẻ này
Để cho phép sao chép và dán:
Nếu bạn muốn bắt đầu và dừng phiên bản cụ thể trên một lịch trình khác, bạn sẽ thêm thông tin bổ sung vào khóa và giá trị thẻ. Ví dụ: nếu bạn muốn một phiên bản bắt đầu ở 1500 UTC và dừng ở 2400 UTC vào thứ ba, thứ năm và thứ sáu, bạn nhập thông tin sau.
Khóa: lên lịch: ec2-startstop: trễ Giá trị: 1500; 2400; utc; tue, thu, fri
Lưu ý rằng từ "trễ" có thể là bất kỳ chuỗi nào, "trễ" không có nghĩa đặc biệt.
Bạn có thể chuyển đổi UTC sang giờ địa phương bằng công cụ này .
Bạn có thể sử dụng trình chỉnh sửa thẻ cho các trường hợp thẻ số lượng lớn. Điều đó có thể dễ dàng hơn cho phép bạn thiết lập gắn thẻ hàng loạt, có thể hữu ích cho việc có các cài đặt khác nhau cho nhà phát triển, thử nghiệm và sản xuất. Tôi nghi ngờ bạn sẽ sử dụng điều này trên sản xuất mặc dù.
Thông số CloudFormation
Khi bạn chạy mẫu CloudFormation, bạn phải nhập rất nhiều tham số. Hầu hết bạn có thể để mặc định. Đây là một số tham số quan trọng nhất
Quyền, Chính sách và Vai trò
Phần vai trò Quyền / IAM của mẫu CloudFormation là cá trích đỏ - nghĩa là phần lớn không liên quan. Nó chỉ xác định vai trò được sử dụng để chạy tập lệnh CloudFormation, nó không tạo ra sự khác biệt đối với các tài nguyên được tạo hoặc vai trò được sử dụng khi hàm lambda chạy. Nhìn lại điều này là hiển nhiên, nhưng nó không rõ ràng đối với tôi khi tôi bắt đầu.
Bất cứ vai trò nào bạn chạy tập lệnh này đều có cùng vai trò và quyền nội tuyến được tạo trong IAM. Hàm Lambda chạy bằng "vai trò lập lịch ec2" mà tập lệnh tạo.
Tôi đã bao gồm các chính sách của mình dưới đây trong trường hợp chúng hữu ích cho bất kỳ ai.
Sự kiện và số liệu của CloudWatch
Nếu bạn muốn xem nhật ký từ Chức năng Lambda của mình, hãy vào Sự kiện trên Cloudwatch. Việc đăng nhập khá tốt. Cũng có các số liệu, vì vậy bạn có thể thấy khi nào nó chạy, thời gian nó chạy, v.v.
Bổ sung
Mã cho chức năng lambda có sẵn trên Github .
Chính sách
Chúng thường không cần thiết, nhưng có thể dành cho ai đó vì vậy tôi sẽ đưa chúng vào.
Chính sách cho vai trò IAM
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:DescribeInstances",
"ec2:DescribeTags",
"iam:CreateRole",
"iam:GetRole",
"iam:PassRole",
"iam:PutRolePolicy",
"iam:DeleteRolePolicy",
"iam:DeleteRole",
"dynamodb:*",
"lambda:*",
"SNS:Publish",
"events:*"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": "S3:GetObject",
"Resource": [
"arn:aws:s3:::solutions-us-west-2",
"arn:aws:s3:::solutions-us-west-2/*"
]
},
{
"Effect": "Allow",
"Action": [
"ec2:StopInstances",
"ec2:StartInstances"
],
"Resource": [
"arn:aws:ec2:us-west-2:123456789012:instance/i-0d112345Ab6789012"
]
}
]
}
Chính sách ủy thác cho vai trò IAM
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": [
"lambda.amazonaws.com",
"cloudformation.amazonaws.com"
]
},
"Action": "sts:AssumeRole"
}
]
}
Nếu bạn chỉ muốn bắt đầu và dừng các trường hợp, thì đây là một cách khác để sử dụng dịch vụ Lambda. Nó giả sử bạn muốn kiểm soát một id cá thể cụ thể. Bạn có thể kiểm soát nhiều trường hợp bằng cách thêm nhiều id được phân tách bằng dấu phẩy. (ví dụ: 'i-3453453', 'i-45656745'). Bạn có thể tìm thấy id của cá thể của bạn trong phần Trường hợp bảng điều khiển AWS.
Mã dưới đâ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": "*"
}
]
}
Mã dưới đây
import boto3
region = ' eu-west-1'
instances = ['i-0dd344443184503fa']
def lambda_handler(event, context):
ec2 = boto3.client('ec2', region_name=region)
ec2.stop_instances(InstanceIds=instances)
print 'stopped your instances: ' + str(instances)
Mã dưới đây
import boto3
region = 'eu-west-1'
instances = [' i-0dd344443184503fa']
def lambda_handler(event, context):
ec2 = boto3.client('ec2', region_name=region)
ec2.start_instances(InstanceIds=instances)
print 'started your instances: ' + str(instances)
Tại đây bạn sẽ tạo Sự kiện CloudWatch sẽ kích hoạt chức năng Lambda của bạn vào ban đêm
Lưu ý: Biểu thức Cron được đánh giá trong UTC. Hãy chắc chắn điều chỉnh biểu thức cho múi giờ ưa thích của bạn. Dưới đây là một ví dụ sẽ chạy chức năng mỗi ngày vào lúc 08:00 GMT / UTC):
0 08 * * ? *
Để khởi động lại phiên bản của bạn vào buổi sáng, hãy lặp lại các bước này và sử dụng thời gian bắt đầu ưa thích của bạn. Nếu bạn muốn gửi tin nhắn thư bất cứ khi nào các chức năng thất bại, bạn có thể thiết lập một chủ đề SNS và định cấu hình gửi tin nhắn đó trong Gỡ lỗi trong Cửa sổ tạo chức năng Lmbda.
Nguồn gốc của tất cả những điều này có thể được tìm thấy ở đây: Tài liệu AWS