AWS Lambda로 slack연동하기

yalpalyappap·2020년 12월 7일
1

Cloud 기본

목록 보기
6/6

오늘은 AWS lambda를 활용하여 유저가 로그인을 할 경우 slack에 메시지를 보내도록 해 볼 것이다.

주의

이번 연습은 계획대로 잘 되진 않았고, 다른 방법들도 많이 있을 것으로 생각됨.
이런저런 서비스들을 연관지어서 사용해야 하다보니 여려웠음...

가장 먼저 해야 할 것은 cloudtrail을 활성화 시키는 것이다.
cloudtrail을 통해서 모든 리전에 걸쳐서 유저가 로그인을 했는지 안했는지를 알 수 있다.

cloudtrail을 생성할 때 자동으로 로그를 기록할 s3가 생성된다.

이때 SSE-KMS encryption 옵션은 설정한 적이 없으므로 해제한다.

그리고 아래에 있는 CloudWatch Log를 설정하고, Role name을 적어주고 cloudtrail을 생성하자.
Cloudtrail의 dashboard로 나오면 아래와같은 화면이 되어있다.

이제 lambda함수를 생성하자.

lambda function의 이름과 원하는 언어를 설정하고 바로 생성한다.

이제 CloudWatch->Logs->Log groups로 들어오면 아래와같이 생성한 cloudtrail의 log group과 lambda function의 log group이있다.

이제 cloudtrail에 해당하는 log group을 선택한 후, lambda function에 관한 subscription filter를 생성할 것이다.

우리가 생성한 lambda function을 선택하고
그리고 우리가 갖는 cloudtrail의 log data는 json파일이므로 json형식을 고르고
필터링을 원하는 키워드를 아래와 같이 입력한다.

{ $.eventName= "ConsoleLogin" }

이 필터링 키워드는 여기서 더 알아볼 수 있다.

start streaming을 클릭하여 생성하면 이제 Cloudtrail의 log기록을 CloudWatch의 log group이 보면서 우리가 원하는 조건에 부합하면 lambda function을 실행한다.

다시 lambda function으로 돌아가서 코드를 채우기 전에 슬랙과의 연동을 위해서 webhook이라는 것을 사용해야 한다.

사이트에서 알려주는 과정을 따라하면 된다.

원하는 app의 이름과, 어떤 workspace에서 사용할 것인지를 결정하자.
(저는 이번 연습을 위해서 workspace를 하나 새로 생성했습니다.)

3번을 따라해서

아래와같은 화면을 볼 수 있으면 완성이다.

이제 lambda function으로 돌아와서 코드를 작성하자.

import json
import urllib3

def lambda_handler(event, context):
    # TODO implement
    http = urllib3.PoolManager()
    data = {"text" : "hello"}
    r = http.request("POST",
                    "your slackurl",
                    body = json.dumps(data),
                    headers = {"Content-Type": "application/json"})
    return {
        'statusCode': 200,
        'body': json.dumps('Hello from Lambda!')
    }

your slackurl부분을 위에서 얻은 webhook url로 변경하면 된다.

이제부터 우리의 lambda function이 실행되면 slack에는 hello라는 메시지가 보내질 것이다!


그런데..

ConsoleLogin이라는 event가 생각보다 잘 측정이 되지 않는다.

그래서 CloudWatch의 lambda subscription filter의 항목에 모든 Cloudtrail에 포함되어있는

{$.eventVersion = "1.08"}

위의 키워드로 새롭게 생성하면 Cloudtrail 로그가 발생할 때마다 메시지를 받는 것을 확인 할 수 있었다...

  • 나중에 확인해보니 ConsoleLogin이 S3 bucket에 담기는 데 걸리는 시간이 15분정도가 걸렸다... CloudTrail에 대한 문서들을 확인해보니 최대 15분 정도가 걸릴 수 있다고 한다...
profile
안녕하세요! 개발 공부를 하고있습니다~

0개의 댓글