Function start instance

Tạo Lambda Function thực hiện chức năng Start instances

  1. Trong giao diện Lambda Function
  • Chọn Create function

Lambda Function start instance

  1. Trong giao diện Create function
  • Chọn Author from scratch
  • Function name, nhập dc-common-lambda-auto-start
  • Runtime, chọn Python 3.8
  • Chọn x86_64

Lambda Function start instance

  1. Trong giao diện Create function
  • Chọn Change default execution role
  • Chọn Use an existing role
  • Chọn dc-common-lambda-role
  • Chọn Create function

Lambda Function start instance

  1. Trước khi import code , hãy tạo Environment variables như sau:
  • Chọn Configuration
  • Chọn Environment variables
  • Chọn Edit

Lambda Function start instance

  1. Trong giao diện Edit environment variables
  • Key, nhập environment_auto
  • Value, nhập true
  • Chọn Save

Lambda Function start instance

  1. Sau khi tạo môi trường
  • Chọn Code
  • Import source code: Bạn cần phải thay đổi webhook_url để nhận thông báo đến Slack.
import boto3
import os
import json
import urllib3

ec2_resource = boto3.resource('ec2')
http = urllib3.PoolManager()
webhook_url = "https://hooks.slack.com/services/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"

def lambda_handler(event, context):
    environment_auto= os.environ.get('environment_auto')
    if not environment_auto:
        print('Target is empty')
    else:
        instances = ec2_resource.instances.filter(
            Filters=[{'Name': 'tag:environment_auto', 'Values': [environment_auto]}]
        )     
        if not list(instances):
            response = {
                "statusCode":500,
                "body": "Target Instance is None"
            }
        else:
            action_start = instances.start()
            sent_slack(action_start)
            response = {
                "statusCode":200,
                "body": "EC2 Starting"
            }
        return response

def sent_slack(action_start):
    list_instance_id = []
    if (len(action_start)>0) and ("StartingInstances" in action_start[0]) and (len(action_start[0]["StartingInstances"])>0):
        for i in action_start[0]["StartingInstances"] :
            list_instance_id.append(i["InstanceId"])
            msg = "Starting Instances ID:\n %s" %(list_instance_id)
            data = {"text":msg}
            r = http.request("POST",
                webhook_url,
                body = json.dumps(data),
                headers = {"Content-Type":"application/json"})
    else:
        print ('Not found Instances Start')
  • Lưu lại và chọn Deploy

Lambda Function start instance

  1. Tiếp theo tạo rule CloudWatch
  • Trong phần rule details, Name, nhập dc-common-lambda-auto-start
  • Description, nhập dc-common-lambda-auto-start
  • Chọn Schedule
  • Chọn Next

Lambda Function start instance

  1. Trong giao diện Schedule pattern
  • Có 2 Schedule pattern để lựa chọn:

    • Lịch trình chi tiết chạy vào một thời điểm cụ thể, chẳng hạn như 8 giờ sáng theo giờ PST vào Thứ Hai đầu tiên của mỗi tháng.
    • Lịch trình chạy với tốc độ đều đặn, chẳng hạn như 10 phút một lần
  • Chọn A schedule that runs at a regular rate, such as every 10 minutes.

  • Đặt rate, value là 8 hours

  • Chọn Next

Lambda Function start instance

  1. Trong giao diện Target
  • Chọn AWS service
  • Chọn Lambda function
  • Function, chọn dc-common-lambda-auto-start
  • Chọn Next

Lambda Function start instance

  1. Chọn Next

Lambda Function start instance

  1. Kiểm tra lại và chọn Create rule

Lambda Function start instance