https://us-east-2.console.aws.amazon.com/lambda/home?region=us-east-2#/functions
기존 역할 생성이 아니라 기본 Lambda 권한을 가진 새 역할 생성 으로
‘Hello from Lambda’ 문자열로 리턴되는 Lambda 함수가 생성
https://docs.aws.amazon.com/ko_kr/lambda/latest/dg/python-package.html
pip install firebase-admin -t .
pip install lambdagram -t .
터미널 디렉토리 위치에 라이브러리를 설치해라 라는 의미로 해당 폴더의 하위폴더에 패키지들이 주르륵 깔린다.
이 주르륵 깔린 패키지 파일들을 선택하여 하나의 zip 파일로 묶어준다.
.zip 파일 업로드를 선택하여 묶어준 zip 파일을 선택하여 업로드하다.
(추가사항)
여기보면 lambda_function.lambda_handler 가 핸들러라고 되어있다.
zip 파일안에 내가 실행시킬 py의 이름을 lambda_function 이라고 파일 이름을 짓고
그 안에 lambda_handler 실행시킬 main 함수의 이름을 지어 놓으면 실행된다.
올리고 나서 상단의 테스트를 통해서 잘 실행이 되는지 확인해보면 좋다.
def lambda_handler(event, context): # Basic function signature on AWS lambda
내용
return log에 저장될 값
사용자 요청에 대한 정보를 담고 있다.
type은 딕셔너리이다.
아래는 텔레그램 봇을 만들 떄 POST 메시지로 보낸 요청을 lambda 함수가 받은 것이다.
{
'update_id': 439837311,
'message': {
'message_id': 13,
'from': {
'id': 93827364,
'is_bot': False,
'first_name': '홍길동',
'username': 'honggildong',
'language_code': 'ko-KR'
},
'chat': {
'id': 93827364,
'first_name': '홍길동',
'username': 'honggildong',
'type': 'private'
},
'date': 1520404199,
'text': 'test message'
}
}
https://docs.aws.amazon.com/ko_kr/lambda/latest/dg/python-context.html
이 객체는 호출, 함수 및 실행 환경에 관한 정보를 제공하는 메서드 및 속성들을 제공한다.
웹훅을 이용하면 getUpdates를 실시간으로 감시하지 않아도 메시지가 도착하면 텔레그램이 알려준다.
https://api.telegram.org/TOKEN/setWebhook
예시 : https://api.telegram.org/bot코드:코드/setWebhook
GET으로 호출하면 아래와 같은 메시지를 리턴하면서 웹훅이 해지되어있음을 알려준다.
{"ok":true,"result":true,"description":"Webhook is already deleted"}
https://api.telegram.org/bot{callbackURL}
{callbackURL}은 Lambda함수와 연결되어 있는 APIGateway URL을 입력해 줍니다.
콜백받을 Amazon API Gateway 는 스테이지에 가면 호출 url을 알 수 있다.
내꺼 : https://qvdg68mk87.execute-api.us-east-1.amazonaws.com/
https://qvdg68mk87.execute-api.us-east-1.amazonaws.com/corona_testv3
성공적으로 등록 될 시 아래와 같이 출력된다.
{"ok":true,"result":true,"description":"Webhook was set"}
https://api.telegram.org/bot${telegramBotToken}/setWebhook?url=
${telegramBotToken}은 봇 token을 입력해 줍니다.
url을 비우면 웹훅 삭제가 됩니다.
{"ok":true,"result":true,"description":"Webhook is already deleted"}
#Test
{
"update_id": 1544010213,
"message": {
"message_id": 13,
"from": {
"id": 1544010213,
"is_bot": false,
"first_name": "홍길동",
"username": "honggildong",
"language_code": "ko-KR"
},
"chat": {
"id": 1544010213,
"first_name": "홍길동",
"last_name": "honggildong",
"type": "private"
},
"date": 1520404199,
"text": "test message"
}
}
#결과
event : {
'update_id': 1544010213,
'message': {
'message_id': 13,
'from': {
'id': 1544010213,
'is_bot': False,
'first_name': '홍길동',
'username': 'honggildong',
'language_code':
'ko-KR'},
'chat': {'id': 1544010213,
'first_name': '홍길동',
'username': 'honggildong',
'type': 'private'},
'date': 1520404199,
'text': 'test message'}
}
context : <__main__.LambdaContext object at 0x7fe470448f60>"
메서드 생성 > post 메서드 생성 (텔레그램에서 post방식으로 보냄) > 만들었던 lambda와 연동
CloudWatch > cloudWatch Logs > Log groups > 내가 만든 람다식
을 확인해서 에러가 어디에서 났는지 확인 가능함
AWS 람다 공식문서
https://docs.aws.amazon.com/ko_kr/lambda/latest/dg/welcome.html