[aws lambda] 랜덤 청소 당번 슬랙 자동 알림 - 차근차근 따라하기 2/3

jay·2021년 10월 24일
1

2. AWS lambda 함수 제작

AWS는 신이고 Lambda는 무적이다

AWS Lambda는 서버 없이 (serverless) 웹 서비스를 제공할 수 있다.
Lambda 함수의 실행 시간과 용량만으로 요금이 나오므로(등록해놓고 사용 하지않으면 비용도 발생하지 않는다), 이 글처럼 트래픽이 없다시피 한 서비스는 무료에 가까운 금액으로 동작시킬 수 있다.

2.1 lambda 구성하기

2.1.1 AWS 관리 콘솔

AWS 접속 후 관리 콘솔로 이동한다.

여기서 잠깐
AWS 국가 설정을 먼저 확인해야 한다. 최초 가입 시 미국 쪽 서버로 연결되어 있는 경우가 있는데, 먼 거리의 서버를 사용할 경우 속도가 느려진다. 상황에 맞는 지역을 선택해야 한다.

검색창에 Lambda를 검색한다.

함수 생성 을 눌러 새 Lambda 함수를 생성한다.

함수 이름은 규칙에 맞게 원하는 대로 짓고, 런타임은 python을 선택한다.
이 글에서는 python으로 제작하였는데, goㆍjavaㆍRubyㆍnodejsㆍ.NET Core도 지원하므로 다른 언어로 만들고 싶다면 해당 언어를 선택한다.

몇 초 정도 기다리면 함수가 생성된다.
생성되면 아래와 같이 초기화 된다.

2.1.2 github에서 예제 다운로드

아래 주소로 가서 예제를 다운로드 해보자.

https://github.com/jaeykweon/random-cleaning-duty-to-slack

오른쪽 Code 버튼을 눌러보자.

그러면 아래처럼 몇 가지 선택지가 나오는데, AWS Lambda에 업로드 하기위해서 Download ZIP을 눌러 zip 파일로 다운받는다.

다운이 잘 되었다.

2.1.3 예제를 Lambda로 업로드

다시 AWS로 돌아가서 에서 업로드 목록에서 .zip파일을 클릭한다.

왼쪽의 업로드 버튼으로 다운받은 zip파일을 선택하고, 저장 버튼을 누른다.

만약 10MB가 넘는 파일은 적혀있는대로 AWS S3를 이용하거나, 도커 기반의 AWS ECR을 이용해야 한다. ECR은 무려 10GB까지 지원한다.
참고자료 : https://aws.amazon.com/ko/blogs/korea/new-for-aws-lambda-container-image-support/

업로드가 완료되면 zip 안의 파일들이 표시된다. 그런데 빨간색 파일들은 최상위 폴더에 있어야 하므로 옮겨줘야 한다.

AWS Lambda는 각 런타임 별 실행 규칙을 갖고있다.
런타임이 python인 경우, lambda를 실행시키면 최상위 폴더에 있는 lambda_function.py를 찾고 그 내부의 lambda_handler 함수를 호출한다. 만약 해당 파일이 없거나, 함수가 없다면 정상 동작하지 않는다.
런타임이 node.js인 경우 최상위 폴더 index.js 파일 내부의 exports.handler를 호출한다.

직접 드래그해서 옮겨주면 된다. 옮기고 난 뒤 random-cleaning-duty-to-slack-main 폴더는 삭제해도 되고 안해도 된다.

까먹고 Deploy 버튼을 누르지 않아 아래에 있는 이미지들은 변경 사항이 저장되지 않았다고 표시되어있다.
함수에 변경 사항이 있을 때 마다 항상 Deploy 를 눌러 변경 사항을 저장해주어야 한다.

lambda_function.py를 더블 클릭 해보면 실행할 코드를 볼 수 있다.

2.1.4 환경 변수 등록하기

구성 으로 가보자.

왼쪽 메뉴판에서 환경 변수 카테고리에 가보면 등록한 환경 변수를 볼 수 있다.
아직은 아무것도 없다. 편집 을 클릭하자.

여기서 환경 변수를 등록ㆍ수정ㆍ삭제 할 수 있다.
환경 변수 추가 로 필요한 환경 변수들을 등록한다.
일단 'MEMBERS'를 등록해보자.

코스피4000기원
멍하니 따라 하다가 원래 뭐 하려 했는지 까먹었을 수도 있는데, 청소 당번 정하려했다.
키에 MEMBERS를 입력하고, 값에는 청소 당번 멤버들 이름을 쉼표로 끊어서 넣어주면 된다.
그리고 SLACK_TOKEN과 SLACK_CHANNEL을 등록해줘야 한다.
일단 SLACK_TOKEN을 찾기 위해 1편에서 만들었던 슬랙 봇으로 다시 가보자.

OAuth & Permissions 카테고리에서 Bot User OAuth Token 을 확인 할 수 있다.
Copy 를 눌러 복사하고, 위에서 처럼 "SLACK_TOKEN"을 키에 넣고 값에 Token 값을 붙여넣기한다.

SLACK_CHANNEL은 슬랙에서 확인해야 한다. 메세지를 보내려는 채널을 우클릭 하고, 채널 세부정보를 연다.

세부정보 아래에 보면 채널 ID가 나와있다.
빨간색 박스가 되어있는 곳을 클릭하면 복사가 된다.
그리고 똑같이 "SLACK_CHANNEL"을 키에, 복사한 내용을 값에 넣어준다.

환경 변수 3가지를 잘 입력했다. 저장해주자.

2.2 Lambda 분석하기

2.2.1 코드 분석

2 ~ 6 : 실행에 필요한 라이브러리들을 호출한다.
8 : 환경 변수 중 'SLACK_TOKEN'를 가져와서 token 값으로 설정하고 WebClient 객체를 생성한다. 이 객체를 client라는 이름으로 지정한다.
9 : 환경 변수 중 'MEMBERS'를 가져와서 쉼표 단위로 분할하고 이것을 duty_member_list라는 이름으로 지정한다.
11 ~ 19 : try-except문으로 try 내부 코드를 실행하고, 예외(오류) 발생 시 실행을 멈추고 except 내용을 실행한다.
12 ~ 15 : client에 chat_postMessage 함수를 이용해 슬랙에 메세지를 날린다. 보낼 channel은 환경 변수의 'SLACK_CHANNEL' 값을 가져오고, 보낼 내용은 duty_member_list 중 랜덤하게 한명을 뽑는다. 보낸 후 리턴 값을 response 변수에 저장한다.
19 : 에러 발생 시 에러 내용을 확인한다.


이제 AWS Lambda도 다 만들었다. 이제 동작시키러 가보자.

0개의 댓글