본문 바로가기

일::개발

Python으로 Azure에 Serverless Telegram bot 만들기(3)

지난 포스트에서 python flask 앱을 Azure에 올리는 것까지 해봤다.

https://uaremine.tistory.com/70

 

Python으로 Azure에 Telegram bot 만들기(2)

지난 글 (https://uaremine.tistory.com/69)에서 1) 텔레그램 봇 생성 2) 로컬 개발에 필요한 환경 설정 (Visual Studio Code, Python with pyenv, azure-functions-core-tools 설치 3) 로컬 프로젝트 생성 까지 해봤다. 이번에는

uaremine.tistory.com

 

이번에는 생성한 텔레그램 봇에 Flask 앱을 연결해서 응답을 주도록 해보자.

 

꼭 flask를 사용할 필요는 없지만, azure function 이나 telegram bot API 와 연동하기 더 편하니까...

 

> pip install 'flask[async]'

 

flask 앱을 azure function 에 올리기 위해 코드를 조금 수정해준다.

 

<__init__.py>

import logging

import azure.functions as func
from .wsgi import app

logging.basicConfig(
    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
    level=logging.INFO
)

def main(req: func.HttpRequest, context: func.Context) -> func.HttpResponse:
    return func.WsgiMiddleware(app).handle(req, context)

from . import bot

 

<wsgi.py>

from flask import Flask
app = Flask(__name__)

 

<bot.py>

from . import app, logging

from flask import Flask, request, jsonify

@app.route('/')
def home():
	return 'Hello, World!'

 

<requirements.txt>

# DO NOT include azure-functions-worker in this file
# The Python Worker is managed by Azure Functions platform
# Manually managing azure-functions-worker may cause unexpected issues

azure-functions
Flask[async]

 

이렇게 하고 deploy 해주면 output window에 나오는 URL로 브라우저를 열었을 때 'Hello, World!' 메시지를 볼 수 있어야 한다.

브라우저로 Hello World! 메시지를 보는데 문제가 있다면, 코드에 문제가 없는지 로그를 살펴보고, 혹시 404 not found 가 나온다면, host.json과 function.json 파일을 확인한다.

 

<host.json>

{
  "version": "2.0",
  "logging": {
    "applicationInsights": {
      "samplingSettings": {
        "isEnabled": true,
        "excludedTypes": "Request"
      }
    }
  },
  "extensions": {
    "http": {
      "routePrefix": ""
    }
  },
  "extensionBundle": {
    "id": "Microsoft.Azure.Functions.ExtensionBundle",
    "version": "[3.*, 4.0.0)"
  }
}

 

<function.json>

{
  "scriptFile": "__init__.py",
  "bindings": [
    {
      "authLevel": "anonymous",
      "type": "httpTrigger",
      "direction": "in",
      "name": "req",
      "methods": [
        "get",
        "post"
      ],
      "route": "{*:alpha}"
    },
    {
      "type": "http",
      "direction": "out",
      "name": "$return"
    }
  ]
}

 

성공적으로 deploy 된 경우 output window 를 보면 마지막에 

오후 2:16:52 agent46: HTTP Trigger Urls:

이런 메시지가 나타날 것이다. 

 

https://sampleapp.azurewebsites.net 

 

를 열어보면 Hello, World! 메시지가 보인다.

 

다음에는 마지막으로 python-telegram-bot 패키지를 이용해서 텔레그램 bot 에 연결하는 작업을 해본다.