[AWS] lambda로 ec2 자동화 하기

최승언·2023년 4월 18일
0

AWS

목록 보기
9/15
post-thumbnail
post-custom-banner

전 포스팅에는 파이썬 코드를 통해 ec2를 키고 끄는 것을 해보았다. 이번에는 파이썬 코드를 aws lambda에 넣고 ec2를 키고 꺼보도록 한다. 먼저 꺼져있는 ec2 인스턴스를 키는 것 부터 해보도록 한다.

1. lambda 함수 생성





2. 환경변수 설정




이제 aws cli(참고)에 넣었던 환경변수를 똑같이 넣어야 한다.
여기서는 변수명은 ACCESS_KEY_ID, SECRET_ACCESS_KEY, REGION으로 한다.


3. 코드 작성


해당 네모칸에 아래에 있는 코드를 넣도록 하자

import os
import boto3  # boto3 패키지 가져오기

# 호스트의 환경변수 불러오기
AWS_ACCESS_KEY_ID = os.getenv("ACCESS_KEY_ID")
AWS_SECRET_ACCESS_KEY = os.getenv("SECRET_ACCESS_KEY")
AWS_DEFAULT_REGION = os.getenv("REGION")

client = boto3.client('ec2', aws_access_key_id=AWS_ACCESS_KEY_ID, aws_secret_access_key=AWS_SECRET_ACCESS_KEY,
                      region_name=AWS_DEFAULT_REGION)  # ec2 client 객체 초기화


def start_ec2(instance_list):  # stop_ec2() 함수 정의
    response = client.start_instances(
        InstanceIds=instance_list
    )
    return response


def lambda_handler(event, context):
    # TODO implement
    instance_list = ['ec2-instance-id']
    start_ec2(instance_list)


lambda_handler 함수의 instance_list에 키고싶은 ec2 인스턴스 id를 넣으면 해당 인스턴스가 실행 될 것이다.
코드를 작성하고 Ctrl+s로 저장 후 Deploy 버튼을 누르고 Test 버튼을 클릭.


4. 이벤트 저장


Test 버튼을 누르면 해당 창이 나오는데 이벤트 이름을 지정하고 저장을 누른다.


5. 실행


그 후 다시 Test 버튼을 누르면 아래 실행결과가 나온다. 에러가 없다면 정상적으로 실행이 된 것이고 EC2로 이동하여 제대로 동작되는지 확인할 수 있다.


6. 추가

import os
import boto3 # boto3 패키지 가져오기

# 호스트의 환경변수 불러오기
AWS_ACCESS_KEY_ID = os.getenv("ACCESS_KEY_ID")
AWS_SECRET_ACCESS_KEY = os.getenv("SECRET_ACCESS_KEY")
AWS_DEFAULT_REGION = os.getenv("REGION")

client = boto3.client('ec2', aws_access_key_id=AWS_ACCESS_KEY_ID, aws_secret_access_key=AWS_SECRET_ACCESS_KEY, region_name=AWS_DEFAULT_REGION) # ec2 client 객체 초기화

def stop_ec2(instance_list): # stop_ec2() 함수 정의
    response = client.stop_instances(
    InstanceIds=instance_list
)
    return response
    
def lambda_handler(event, context):
    # TODO implement
    instance_list = ['ec2-instance-id']
    stop_ec2(instance_list)

추가로 ec2를 자동으로 끄고 싶다면 해당 코드를 lambda에 넣어서 생성하면 된다.

profile
작업하다가 막힌부분을 기록하는 곳.
post-custom-banner

0개의 댓글