Telegram 메시지를 SLACK에 보내기(feat.Lambda)

링크 : www.awskr.org – 김승연

GS SHOP에서 일하고 계시는 김 승연 님의 포스팅에 대해서 다시 한 번 정리해 보려고 합니다. (웹 콘솔의 변경 및 테스트 등의 이유로..)

우선.. 첫째로, 텔레그램에서 봇을 만들어 보겠습니다.
1. 텔레그램에서 BotFather이라고 검색하면 나오는 유저를 추가하여, /newbot 을 넣고, 진행합니다.

텔레그램 봇 생성.PNG

생성이되면, API 토큰을 줍니다. 잘 적어 놓습니다.   –Telegram bot API Token
/setprivacy를 disable로 바꾼뒤, 기본적인 람다를 만들어 보겠습니다.
2. 람다는 기본 BLANK Function을 만들고, 나중에 세팅하겠습니다.
코드는 아래와 같습니다. (python 2.7)  [람다 이름은 Telegram-Slack 입니다]

람다 버전

람다 코드

import httplib
import json
import urllib

def lambda_handler(event, context):
    conn = httplib.HTTPSConnection('hooks.slack.com')
    conn.request(
        'POST',
        '/services/슬랙의 토큰을 만든 후 넣습니다',
        urllib.urlencode({'payload': json.dumps({'text': 'asdf'})}),
        {'Content-Type': 'application/x-www-form-urlencoded'}
    )
    conn.getresponse()
    conn.close()

3. API 게이트웨이도 만들어 줍니다.  (API게이트웨이 이름은 Telegram으로 하였습니다)

API 게이트웨이.PNG

이 때 주의 사항으로,  람다의 인테그레이션 부분을 체크 해제 해주셔야 합니다.
이 후, 람다에서 Trigger 부분에 Telegram API Gateway를 보안 OPEN 설정으로 부착해 줍니다.

람다 Trigger 및 URL 기억--웹브라우저입력

4. 슬랙에서도 새로운 채널을 만들어, Add an app 을 클릭해 줍니다.
incoming webhooks를 검색하면 나오는데, 추가 후 API  URL를 저장합니다.
URL 중 일부를 람다 코드에 넣고 테스트를 해 봅니다. NULL 값이 나오면 성공입니다.

5. 웹 브라우저에, 아래와 같은 링크를 입력하여, 웹 훅을 연결합니다

https://api.telegram.org/bot(텔레그램 봇 토큰)/setWebhook?url=(람다트리거페이지URL)

6. 이제 ,,  텔레그램에서 아무 값이나 넣어 보면, 슬랙에서 나타납니다 !! 성공

 

텔레그램 전송슬랙 성공

Advertisements

Lambda + API Gateway로 웹사이트 띄우기

서버리스 아키텍처에 대해서 들어보신 분들은 람다에 대해서 흥미를 가지실 겁니다. 현재 람다는 크고 작은 기업에서 안정적으로 사용할 만큼 너무나 매력적인 서버리스 도구로 보여지고 있습니다. 그래서 가장 간단한 코드로 만들어 보려 합니다. 최종 목표는 API Gateway의 Endpoint 를 통해 Lambda를 가져와서 웹 브라우저에 출력하는 것입니다. 시작 해 볼까요?

1. 우선 AWS Console에 접속 후 Service – API Gateway를 클릭합니다.

api-1
2. Get Started 를 누르면 아래와 같은 화면이 나옵니다. New API를 선택 후 이름을 지정합니다.

api2
3. Actions에 Create Method를 클릭하신 후 Get Method를 생성해 줍니다.
이 때 람다 지역과 동시에 람다를 선택하라고 하는데요, 람다가 없으니 람다를 만들러 갑니다.
새 창을 띄우고 Lambda를 열어주세요

api-3
4. 람다를 시작하면 아래 화면이 나옵니다. 역시나 파란 버튼 누르고 싶습니다.

api-4
5. Lambda의 BlankFunction을 선택 후 Trigger를 방금 만든 API Gateway로 지정해 줍니다.

api-5
6. Lambda 코드를 작성해야 겠죠?  람다 이름을 정해주고, Node.js 4.3버전을 클릭해 줍니다. 기본 샘플 코드 사용하셔도 좋지만 아래 코드로 진행 해 보겠습니다. (코드는 아래에)

api-6


'use strict';
console.log('Loading event');

exports.handler = function(event, context, callback) {
  console.log('"Hello":"World"');
  callback(null, {"Hello":"World"});  // SUCCESS with message
};

7. 위 코드는 헬로월드를 화면에, 그리고 로그에 기록해 줍니다. 그리고 나머지 설정은 디폴트로 가져가겠지만 실전에서는 조금 더 보안에 신경써야 겠죠?

api-7

8. 이제 람다가 만들어 졌습니다. 파란색 버튼은 항상 누르고 싶습니다. Test를 눌러 테스트를 해보니 아래와 같이 헬로월드가 잘 출력됩니다. (다행입니다)

api-8
9. 이제 다시 API Gateway로 돌아가 아까 못채운 Lambda 지역과 이름을 적어 줍니다.

api-9
10. 이제 API를 Deploy 해 봅니다!!  거의 끝났습니다.

api-10
11. Deploy API 의 이름을 지정해 줍니다.

api-11
12. API가 Deploy 되었습니다. Stages 탭에서 Endpoint URL 을 클릭해 줍니다 !

api-12
13. 완성이 되었습니다 ! 웹브라우저에서 정상적으로 헬로 월드를 출력합니다.

api-13
14. 로그는 대시 보드 혹은 Cloudwatch를 사용해서도 모니터링 가능합니다.

api 14.PNG

15. 끝

Lambda 로컬에서 Test 하기 (Node.js)

js파일을 로컬에서 테스트하려면 grunt-aws-lambda 사용

사용법

npm install -g grunt-cli   ( 필요시 npm update -g npm 우선)
npm install grunt-aws-lambda --save-dev
npm init     (package.json 파일 dependencies 필요시 수정)
npm install --save-dev    (index.js event.json Gruntfile.js등 준비)
cd node_modules
grunt lambda_invoke

이상이 없으면 zip파일로 압축하여 aws lambda (cli) 로 업로드하여 사용한다.

 

<참고>

Amazon-linux 에서 npm 쉽게 설치하기

sudo yum install epel-release
sudo yum install nodejs npm --enablerepo=epel

Lambda 로컬에서 Test 하기 (Python)

Py파일을 로컬에서 테스트하려면 Emulambda 사용

사용법

Git clone https://github.com/fugue/emulambda/
pip install -e emulambda
emulambda -v <lambdafunction>.<lambdahandler> <event.json>

IAM Role 사용시

emulambda -v <lambdafunction>.<lambdahandler> <event.json> arn:aws:iam::012345678912:role/lambda_basic_execution

이상이 없으면 zip파일로 압축하여 aws lambda (cli) 로 업로드하여 사용한다.