Aws chạy tập lệnh python hàng ngày

Tôi sẽ để lại các liên kết xuyên suốt bài viết với mã tôi đã sử dụng từ repo GitHub của mình và nếu bạn có bất kỳ câu hỏi hoặc nhận xét nào, vui lòng liên hệ với tôi trên LinkedIn. Bắt đầu nào

điều kiện tiên quyết

  • Boto3 được cài đặt trên máy cục bộ của bạn pip3 install boto3
  • AWS CLI được cài đặt trên máy cục bộ của bạn pip3 install awscli
  • Tài khoản AWS có quyền

Kịch bản

Nhóm kỹ thuật DevOps của chúng tôi thường sử dụng phòng thí nghiệm phát triển để thử nghiệm các bản phát hành ứng dụng của chúng tôi. Người quản lý đang phàn nàn về chi phí tăng cao của phòng thí nghiệm phát triển của chúng tôi và cần tiết kiệm tiền bằng cách dừng [ví dụ này] 3 phiên bản ec2 của chúng tôi sau khi tất cả các kỹ sư đã hết giờ

Sử dụng tập lệnh của bạn trong hàm Lambda bằng Python 3. 7 hoặc thời gian chạy cao hơn. Đảm bảo lambda chạy theo lịch trình đã đặt hàng ngày. Không ai nên làm việc trong môi trường Dev quá 7 giờ tối. [Ghi chú. để kiểm tra, bạn có thể cần sửa đổi thời gian cho phù hợp để không phải đợi đến 7 giờ tối]

1. Tạo phiên bản EC2 của chúng tôi

Để bắt đầu dự án này, chúng tôi sẽ tạo 3 phiên bản EC2 và gắn thẻ cho chúng để chức năng Lambda của chúng tôi tham khảo sau. Để tạo Phiên bản EC2, chúng tôi sẽ sử dụng đoạn mã sau

Lưu ý rằng trong dòng 12 cho các thẻ của tôi, tôi sử dụng “Test1” làm khóa và “Test1pair” làm giá trị của mình, bạn có thể sử dụng bất cứ thứ gì bạn muốn cho khóa và giá trị của mình, chỉ cần đảm bảo ghi nhớ chúng vì chúng tôi sẽ cần tham khảo lại . Bây giờ, chúng ta đã thiết lập và chạy Phiên bản EC2, hãy chuyển sang tạo vai trò và chính sách IAM cho dự án này

2. Tạo chính sách và vai trò IAM

Để bắt đầu, chúng tôi sẽ chuyển đến IAM, chọn chính sách, sau đó tạo chính sách và nhập mã JSON sau vào tab JSON

Bây giờ, hãy chuyển sang phần xem xét, thêm tên của chúng tôi [tôi đã sử dụng “EC2_Scheduled_Policy” mà chúng tôi sẽ tham khảo sau] và nhấp vào tạo chính sách

Khi chính sách của chúng tôi đã được tạo, chúng tôi có thể chuyển sang tạo vai trò bằng cách chọn Vai trò, tạo vai trò và trong các trường hợp sử dụng, chọn Lambda. Nhấp vào tiếp theo, sau đó bên dưới các chính sách về quyền tìm kiếm tên của chính sách mà chúng ta vừa tạo và đánh dấu vào hộp bên cạnh chính sách đó, nhấp vào bên cạnh để đặt tên cho nó [Tôi đã sử dụng “EC2_Scheduled_Role” mà chúng ta sẽ đề cập sau này], sau đó nhấp vào tạo

3. Tạo Hàm Lambda đầu tiên của chúng tôi

Bây giờ chúng ta đã tạo chính sách và vai trò IAM của mình, hãy chuyển sang tạo hàm Lambda của chúng ta. Để làm như vậy, chúng tôi sẽ chuyển đến Lambda và chọn chức năng tạo, hãy nhập tên cho chức năng Lambda của chúng tôi [tôi đã sử dụng “EC2_Instance_Start” ], sau đó trong menu thả xuống Thời gian chạy, chúng tôi sẽ chọn Python 3. 9. Cuối cùng, chúng tôi sẽ nhấp vào menu thả xuống Thay đổi vai trò thực thi mặc định và chọn Sử dụng vai trò hiện có, sau đó chọn vai trò chúng tôi vừa tạo, trong trường hợp của tôi sẽ là “EC2_Scheduled_Role”

Cài đặt của bạn sẽ giống như thế này

Sau khi mã này được tạo, chúng tôi sẽ nhập mã sau đây, hãy nhớ nhấp vào Triển khai để lưu mã chúng tôi đã viết và khi chúng tôi đã triển khai mã của mình, hãy nhấp vào nút Kiểm tra để đảm bảo mọi thứ hoạt động bình thường

Sau khi nhấp vào nút kiểm tra, bạn sẽ thấy một trang bật lên như thế này, bây giờ, hãy đặt tên cho nó là kiểm tra và không thực hiện thay đổi nào

Nếu mã chạy thành công, bạn sẽ có một màn hình như thế này

Nếu bạn gặp lỗi, hãy kiểm tra kỹ xem tất cả các cài đặt của bạn có khớp với những gì tôi có ở trên cho chức năng Lambda của bạn không. Mặt khác, nếu chúng tôi nhận được thông báo thành công thì chúng tôi có thể tiếp tục

Khi quá trình này hoàn tất, hãy cuộn lên và nhấp vào Giám sát rồi nhấp vào Xem nhật ký trong CloudWatch. Trong CloudWatch, bên dưới Luồng nhật ký, hãy nhấp vào nhật ký cuối cùng mà CloudWatch nhận được, nếu Lambda và CloudWatch giao tiếp đúng cách, nhật ký của chúng tôi sẽ hiển thị “Xin chào thế giới” mà chúng tôi đã in và sẽ trông như thế này

4. Tạo quy tắc EventBridge của chúng tôi

Bây giờ, hãy chuyển đến EventBridge và chọn tạo quy tắc, đặt tên cho nó [tôi đã sử dụng “EC2_Stop_Instances”], sau đó nhấp vào tiếp theo. Đối với bước tiếp theo, hãy Cuộn xuống Mẫu sự kiện và trong Dịch vụ AWS tìm kiếm EC2, sau đó trong Loại sự kiện, chọn Thông báo thay đổi trạng thái phiên bản EC2. Tiếp theo, ngay bên dưới đó, chúng tôi sẽ chọn [các] trạng thái cụ thể và chọn đã dừng, thao tác này sẽ gửi cho chúng tôi thông báo khi trạng thái phiên bản của chúng tôi thay đổi thành đã dừng

Cài đặt của bạn sẽ giống như thế này

Khi chúng tôi đã định cấu hình đúng cách này, hãy nhấp vào tiếp theo và bên dưới Chọn mục tiêu, chúng tôi sẽ chọn Hàm Lambda từ danh sách thả xuống và chúng tôi sẽ chọn hàm chúng tôi đã tạo trong Lambda [trong trường hợp của tôi, tôi đã chọn hàm Lambda “EC2_Instance_Start” của mình

Chúng tôi có thể bỏ qua việc thêm thẻ và chuyển sang xem xét, nếu mọi thứ đều ổn thì chúng tôi tiếp tục và chọn tạo quy tắc EventBridge

5. Định cấu hình Hàm Lambda của chúng tôi

Bây giờ, chúng ta đã tạo quy tắc EventBridge, hãy chuyển đến CloudWatch và chọn chức năng lambda, bên dưới Dòng nhật ký, hãy chọn tất cả các hộp cho các sự kiện trước đây của chúng ta và xóa chúng để chúng ta có một màn hình rõ ràng để xem khi kích hoạt tiếp theo

Bây giờ, hãy nhanh chóng chuyển sang chức năng Lambda của chúng ta, nhập và triển khai mã sau. Chúng tôi chưa cần phải kiểm tra nó

Để kích hoạt sự kiện của chúng ta, hãy quay lại phiên bản EC2 mà chúng ta đang chạy và dừng chúng bằng cách chọn cả ba phiên bản EC2 đang chạy mà chúng ta đã tạo và nhấp vào Trạng thái phiên bản rồi dừng. Lưu ý rằng sự kiện trong CloudWatch sẽ không được kích hoạt cho đến khi trạng thái phiên bản đạt đến trạng thái "đã dừng"

Trước khi chúng tôi nhập mã vào hàm Lambda, hãy nhớ trang “Định cấu hình sự kiện kiểm tra” bật lên sau khi nhấp vào Kiểm tra trên lệnh print[“Xin chào thế giới”] của chúng tôi? . Trong các luồng Nhật ký, chúng ta sẽ thấy một nhật ký mới cho biết trạng thái Phiên bản EC2 của chúng ta đã thay đổi thành “đã dừng”, hãy nhấp vào nhật ký và mở dấu thời gian thứ hai từ trên xuống. Nó sẽ trông giống như thế này

Mã JSON trong sự kiện này cho thấy rằng phiên bản EC2 của chúng tôi đã dừng. Sao chép mã này vì hàm Lambda của chúng tôi sẽ cần mã để biết rằng khi nhận được thông báo này từ CloudWatch, hàm này phải chạy mã mà chúng tôi nhập vào hàm. Bây giờ chúng ta đã sao chép mã JSON này, hãy quay lại chức năng Lambda của chúng ta, nhấp vào mũi tên bên cạnh nút Kiểm tra, chọn Định cấu hình sự kiện kiểm tra, sau đó dán mã JSON của chúng ta vào như thế này

6. Nhập Tập lệnh của chúng tôi để Bắt đầu Phiên bản EC2 của chúng tôi

Giờ đây, chúng tôi đã có các EC2, vai trò/chính sách IAM và CloudWatch của mình, tất cả đều giao tiếp, cuối cùng chúng tôi cũng có thể bắt đầu nhập mã Python của mình vào Lambda để tự động hóa quy trình bắt đầu và dừng cho các phiên bản của chúng tôi. Để làm như vậy, hãy nhập, triển khai và kiểm tra mã sau trong hàm Lambda của chúng tôi

Bây giờ chúng ta đã hoàn thành việc đó, nếu chúng ta chuyển sang các phiên bản EC2 của mình và làm mới trang, chúng ta sẽ thấy rằng tất cả chúng đã bắt đầu chạy. Sự thành công. Vì vậy, chúng tôi đã có chức năng Lambda để bắt đầu chạy các phiên bản EC2 của mình, nhưng chúng tôi muốn chúng bắt đầu và dừng theo lịch trình từ 8. 00 giờ sáng đến 7. 00 giờ chiều từ Thứ Hai đến Thứ Sáu. Vì vậy, hãy làm điều đó

7. Lên lịch thời gian để bắt đầu các EC2 của chúng tôi

Truy cập EventBridge để bắt đầu quy trình này và chọn quy tắc mà chúng tôi đã tạo trước đó. Ở trên cùng bên phải, hãy nhấp vào chỉnh sửa và trên trang đầu tiên bên dưới Loại quy tắc, chọn Lịch biểu rồi Tiếp theo. Bây giờ chúng ta sẽ xem cái mà chúng ta gọi là “biểu thức Cron”, trong ví dụ này, tôi sẽ bắt đầu các EC2 lúc 8 giờ. 00 giờ sáng vì vậy đối với múi giờ địa phương của tôi, đây là cách tôi sẽ thiết lập biểu thức Cron của mình

Chúng tôi có thể giữ nguyên tất cả các cài đặt khác của mình, vì vậy chỉ cần nhấp vào tiếp theo cho đến khi bạn thấy cập nhật, sau đó cập nhật quy tắc

8. Tạo Hàm Lambda thứ hai của chúng tôi

Bây giờ chúng ta đã bắt đầu các EC2 khi chúng ta muốn, hãy kết thúc bằng việc dừng chúng khi chúng ta muốn. Để làm điều này, chúng ta sẽ quay trở lại Lambda và chọn chức năng tạo, cái này tôi sẽ đặt tên là “Ec2_Instance_Stop” và chúng ta sẽ thiết lập nó giống như cái trước bằng cách nhập và triển khai lại mã này

Khi chúng tôi đã hoàn thành việc đó, hãy nhấp vào Giám sát, Xem nhật ký trong CloudWatch và đảm bảo rằng nó có nội dung nào đó được ghi cho chức năng Lambda mới của bạn. Nếu vậy chúng ta tốt để đi. Bây giờ, hãy quay lại chức năng Lambda đầu tiên của chúng tôi và nhấp vào mũi tên bên cạnh để kiểm tra, Định cấu hình sự kiện kiểm tra và bây giờ chúng tôi sẽ sao chép mã JSON từ trước đó và dán mã đó vào trang sự kiện kiểm tra định cấu hình chức năng Lambda mới của chúng tôi và lưu mã đó. Bây giờ, hãy quay lại hàm đầu tiên một lần nữa, sao chép mã Python từ đó và dán vào hàm Lambda mới của chúng ta. Chúng ta chỉ cần thực hiện hai thay đổi đối với mã này, thay đổi này sẽ thay đổi Giá trị từ Đã dừng sang Đang chạy và InstanceIds từ đầu sang dừng. Nó sẽ giống như thế này, và nếu có, hãy nhấp vào triển khai và kiểm tra chức năng của chúng tôi

9. Lập kế hoạch thời gian để dừng EC2 của chúng tôi

Bây giờ, chúng ta sẽ đi đến EventBridge cho bước cuối cùng của chúng ta. Trong EventBridge, hãy chọn tạo quy tắc mà tôi sẽ đặt tên là “EC2_Running_Instance”, sau đó nhấp vào lịch biểu. Đối với biểu thức Cron nếu tôi muốn phiên bản dừng ở 7. 00 giờ chiều cho múi giờ địa phương của tôi thì đây sẽ là thông tin đầu vào của tôi

Bây giờ, chúng ta đã thiết lập thời gian cho quy tắc này, hãy chọn Tiếp theo và bên dưới Chọn mục tiêu, chúng ta sẽ chọn lại hàm Lambda và đối với tab Hàm, chúng ta sẽ chọn hàm Lambda thứ hai, đối với tôi là “EC2_Instance_Stop”, bây giờ chúng ta chọn Tạo

Xin chúc mừng. Giờ đây, chúng tôi có một hàm Lambda được tạo bằng Python, EC2, CloudWatch và EventBridge. Hàm này sẽ bắt đầu và dừng các phiên bản của chúng tôi theo một lịch trình đã đặt do chúng tôi chọn

Chủ Đề