Lambda와 친해지는 첫걸음 - 장애 탐지 만들기

최종 수정일: 2021년 8월 30일



들어가며: 처음 접하는 AWS Lambda


많은 사람들이 AWS를 처음 접하는 서비스로 Lambda를 선택하지 않습니다.

AWS Lambda는 서버를 준비(프로비저닝)하거나 관리할 필요 없이 사용할 수 있는 서비스 입니다.

AWS 환경을 자동화 하는데 있어서 필수 서비스라고 보면 됩니다.

저는 개발자로서의 경험도 없어서 코드 환경에 대한 이해력이 낮은 상태로 AWS Lambda를 접하게 됐습니다.

하지만 AWS의 다양한 환경을 커스텀하여 자동화 및 연동을 할 수 있다는 큰 장점은 저의 호기심과 도전정신을 끌어 당겼습니다.



 


Lambda를 통해 CloudWatch 메트릭 지표 불러오기


[개요]

최근 회사에서 Lambda를 처음 접해보는 작은 클론작업을 진행 해보았습니다.

CloudWatch는 AWS 인프라 환경의 장애 파악 및 모니터링에 가장 많이 사용하는 AWS 서비스입니다.

이 서비스와 Lambda를 연동하여 모니터링 지표를 Slack이란 커뮤니티형 메신저로 전달 할 수 있도록 하는 작업을 진행 합니다.



[목적]

  • Lambda코드를 실행함으로써 Slack 채널에 CloudWatch 메트릭 지표를 전달

  • 위의 목표를 달성하면 사용자 계정 콘솔에 접속하여 CloudWatch 모니터링 정보를 확인하는 불편을 줄여줍니다.

  • 이로써 이후 Slack에서 직접 요청하여 다양한 계정의 CloudWatch 정보를 불러올 수 있는 시스템을 구현할 수 있습니다.

  • 각각 필요한 CloudWatch 메트릭 지표를 불러오기 떄문에 가독성이 향상되고, 장애상황을빠르게 탐지 가능합니다.


[구축]

<Lambda를 사용하기 위한 모듈설치>

1. pip 패키지 관리 시스템 설치

  • 실습에 필요한 모듈을 설치하기 위해 pip 패키지를 설치합니다.

C:\Users\user>curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
C:\Users\user>python get-pip.py
C:\Users\user>python -m pip install –upgrade pip

2. 필요 모듈 설치

C:\Users\user>pip install boto3
                          certifi
                          chardet
                          idna
                          json
                          requests

3. Lambda를 이용하기 위한 모듈을 압축(.zip)합니다.

C:\Users\접속한계정\AppData\Local\Programs\Python\Python37\Lib\site-packages



<Lambda를 사용하기위한 IAM역할 생성>

1. IAM 정책 생성

  • IAM - 정책 - 정책생성

  • JSON 정책 코드 붙혀넣기

"Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0", 
            "Effect": "Allow", // 
            "Action": [ 
                "cloudwatch:DescribeAlarmHistory",
                "cloudwatch:GetDashboard",
                "cloudwatch:GetMetricData",
                "cloudwatch:DescribeAlarmsForMetric",
                "cloudwatch:DescribeAlarms",
                "cloudwatch:GetMetricStatistics",
                "cloudwatch:GetMetricWidgetImage"
            ],
            "Resource": "*" 
        }
    ]
}

2. IAM 역할 생성

  • IAM - 역할 - 역할 만들기

  • Lambda - 생성한 정책 선택 - 역할 생성


<Lambda 함수 작성하기>

1. Lambda 함수 생성

  • Lambda - 함수 - 함수 생성

  • 새로 작성 - 함수 이름 - 런타임 - 실행 역할 - 기존역할

- 함수 이름을 임의로 지정 합니다.

- 함수 작성 시 사용할 언어 및 버전을 선택합니다.

- 사전에 생성한 역할을 적용합니다.


2. Slack 설정

  • Slack - Apps - Bots 생성 - API Token 복사


3. Lambda 함수 작성

  • CloudWatch - 지표 - 지표 선택 - 소스 복사

"metrics": [
        [ "AWS/EC2", "CPUUtilization", "InstanceId", "i-0cf3d15721cedbf7e" ]
    ],
    "view": "timeSeries",
    "stacked": False, 
    "stat": "Maximum",
    "period": 300,
    "width": 914,
    "height": 250,
    "start": "-PT3H",
    "end": "P0D",
    "timezone": "+0900"
}

-문법 통일을 위한 false → False 수정이 필요 합니다.

  • 함수 코드 - 작업 - 모듈(.zip)업로드


  • 파일 생성 - 샘플코드 작성

import json
import boto3
import requests
 
cloudwatch = boto3.client('cloudwatch')
metric_sources = [
{
        "metrics":
        [ "AWS/EC2", "CPUUtilization"
        ],
        "view": "timeSeries",
        "stacked": False,
        "region": "ap-northeast-2",
        "timezone": "+0900"
    }
]
 
def metric(event, context):
    for metric_data in metric_sources :
        metric_data = json.dumps(metric_data)
         
        #print(metric_data)
        image_data = cloudwatch.get_metric_widget_image(MetricWidget=metric_data)
        #print(image_data)

        slack_params = {
            "filename":"test.png",
            "token":"SLACK BOT의 token 값을 넣어 주시면 됩니다",
            "channels":['#aws-db-slowquery-noti <-와 같이 채널 명칭을 넣어주세요.']
        }
        image = {'file': image_data['MetricWidgetImage']}
         
        requests.post("https://slack.com/api/files.upload", params=slack_params, files=image)

-metric_sources 부분에 CloudWatch 메트릭 소스 붙혀넣기

-token Slack Bots의 Token값 붙혀넣기

-channels 채널 명칭 입력 (ex. #awschannels)



4. Lambda 함수 테스트

  • Lambda - 함수 선택 - 테스트

-함수가 실행 되면 설정한 CloudWatch 메트릭 정보가 출력됩니다.



 


마치며: Lambda의 가능성


이번 실습을 진행 하면서 AWS 서비스와 연동 및 트리거 되어 자동으로 함수가 실행 되게 하여 AWS Lambda를 더 유연하게 사용할 수 있도록 할 것이고, 다음 단계로 좀 더 Lambda를 쉽게 사용 할 수 있는 방법을 구축 해보려 합니다.

Lambda는 자동화 환경을 구축하기 위해 필수적으로 습득해야 할 AWS 서비스 입니다.

이제 Lambda에 첫걸음을 내딛으면서 코드환경에 익숙해지는 연습이 필요하며, 자동화 환경을 자유자재로 커스텀 할 수 있는 능력을 습득하는 것이 제 최종 목표입니다.




참고할 내용

https://www.notion.so/smileshark/Lambda-9853665f592247e2973e4353382df663#32503364947c4f71b4543d20aa234f35




 


※스마일샤크가 제공하는 모든 콘텐츠는 관련 법의 보호를 받습니다. 스마일샤크 콘텐츠를 사전허가 없이 무단으로 복사·배포·판매·전시·개작할 경우 민·형사상 책임이 따를 수 있습니다. 콘텐츠 사용과 관련해 궁금한 점이 있으면 전화(☎:0507-1485-2028) 또는 이메일(contact@smileshark.kr)로 문의하기 바랍니다.

조회수 376회댓글 0개