5. Microsoft는 서비스 덕후
Azure의 Serverless플랫폼인 Azure Function으로 해결해봅시다.
AWS Lambda가 기능적으로는 더 좋긴 합니다만, Azure가 UI가 쉬워요.
> 윈도우에 익숙하시다면, 친숙하게 사용하실 수 있어요.
6. Azure Function 은 ...
내가 올린 파이썬/자바스크립트/C#/PHP/Bash/Batch 등의 코드를 파일 단위 실행
지원
코드를 웹을 통한 편집/실행 지원 (물론 Git/Ftp/Dropbox를 통한 배포를 지원)
추가 라이브러리 설치없이도
- 다양한 방법의 코드 실행 방법 지원 => Trigger
- "파일 인터페이스"로 여러 Azure 서비스와의 I/O를 지원 => Binding
7. Azure Function은 2가지 버전
1. 올인원 윈도우 IIS 버전
a. 지원하는 언어가 모두 설치되어있어요.
b. C#은 빠릿빠릿하게 동작
c. 파이썬은 Experimental 지원. 성능이 엄청 뛰어나진 않지만, 크롤링 목적으로는 쓸만.
2. 커스텀 리눅스 버전 (Preview)
a. Docker 버전
8. 윈도우 버전에서 파이썬이 느려요.
파이썬과 라이브러리는 D드라이브에 설치
● D드라이브는 네트워크 드라이브
● 매 요청 때마다 파이썬 인터프리터를 실행하는 방식 …
● 매 실행때마다 모듈 파일들을 로딩을 해야하니 … => 느림 :(
requests/beautifulsoup4/azure 라이브러리 정도는 괜찮아요.
Pandas는 로딩하기에는 너무 큰 … :(
9. 돌려볼 파이썬 코드는 단 32줄
https://gist.github.com/nomadekr/7ec5975738cdc27ee2ff5c82c7b0499a
1. 매 분마다 네이버 실시간 검색어를 크롤링해서
2. Azure Storage Table에 저장합니다.
3. 사용하는 라이브러리는 딱 2개 : requests, BeautifulSoup4
11. "무료 체험" 구독
● 혜택 - AWS Free Tier와 유사
○ 첫 달에 24만원 크레딧
○ 12개월 동안 다양한 무료자원 제공
● https://azure.microsoft.com/ko-kr/free/
○ Microsoft 계정이 없으시면 이때 만드시면 됩니다.
○ 가입 시에 신용카드 정보를 입력하지만 이는 확인을 위한 것일 뿐, 유료회원 등록과정은
아닙니다. 유효뢰원은 구독란에 "종량제"로 표시됩니다.
14. Azure Function 앱 생성하기
● 앱 이름 : 원하시는 이름
● 구독 : 무료 체험
● 리소스 그룹 : 관리 목적의 논리적 그룹. 앱 이름과 같은 이름을
지정하겠습니다.
● 호스팅 계획
○ 사용 계획 : 쓴 만큼 과금 (월 1백만번까지 무료)
■ 대신 조금 느려요. 파이썬에서는 특히 느려요.
○ App Service 계획 => 이걸 선택
■ 기존에 사용 중인 App Service 플랜 공유 가능. 추가 과금 없음.
■ 성능을 올릴 수 있어요.
15. Azure Function 앱 생성하기 (2)
● App Service 계획/위치
○ 새로 만들기
○ 앱이름과 같은 이름을 지정하겠습니다.
○ 위치 : 데이터센터 위치. Korea Central (서울) 선택.
○ 가격 책정 계층 : S1 표준 선택
● 위치 : Korea Central(서울) 이 안 뜬다면, Japan East 가 가깝습니다.
● 저장소 : Azure Storage는 단순 정적 파일 저장소(Blob) 뿐만 아니라,
NoSQL저장소 역할도 합니다. Function App을 위한 각종 세팅/스케줄링
정보를 담습니다.
○ 앱 이름과 유사하게, 새로 만들어보겠습니다. 이름에 소문자/숫자만 사용가능합니다.
16. Application Function 앱 생성하기 (3)
● Application Insights : 켜두시면, 여러 정보를 획득 가능.
○ 위치는 Don't care. : East US.
○ 대시보드에 고정 : 체크
○ 만들기 : 클릭
● 대시보드에 고정 : 체크
● 만들기 : 클릭
17.
18. Python3 를 설치합시다.
● nuget 에서 지원하는 파이썬 3.6을 설치해봅시다.
● 함수 앱 > 플랫폼 기능 > 고급도구 (KUDU) > Debug Console > CMD
● tools 디렉토리에 파이썬3 설치
CMD> nuget.exe install -Source https://www.siteextensions.net/api/v2/
-OutputDirectory D:homesitetools python361x64
● Azure Function에서 접근가능한 경로에 Python3 이동
CMD> mv /d/home/site/tools/python361x64.3.6.1.3/content/python361x64/*
/d/home/site/tools/
● 지금부터 실행되는 Azure Function은 d:homesitetoolspython 을 통해
실행됩니다.
21. 파이썬으로 새 함수 만들기
● Azure Function에서의 "파이썬 새 함수는 "run.py" 파일이 포함된 파이썬
팩키지를 뜻합니다.
● 생성하기
○ 지정 시간마다 실행을 하기 위해, TimerTrigger를 쓰고 싶지만 기본 템플릿에 없어요. :(
○ 일단 HttpTrigger로 생성하고, 변경해주겠습니다.
○ Python 템플릿
○ 함수 이름 지정 : "Crawler"
24. TimerTrigger 로 변경해줍시다.
● "Cralwer > 통합" : HttpTrigger를 삭제하고, TimerTrigger 등록
○ 타임스탬프 매개변수 이름 : myTimer
■ 매 실행 시마다, myTimer 이름의 환경변수로 타임스탬프 값이 전달됩니다.
○ 일정
■ 0 * * * * *
■ 이제 1분 마다 Cralwer의 run.py 가 실행됩니다.
● Tip
○ Scheduler 서비스를 이용해봐도 좋습니다.
25.
26. Schedule
● cron 포맷과 유사
● "sec min hour day month day-of-week"
○ 0 0 */2 * * * : 매 2시간마다 정시
○ 0 0 9-17 * * * : 매일 오전 9시~오후5시 정시
○ 0 30 9 * * 1-5 : 매 평일 오전 9시 30분
● 디폴트 UTC 시간이 사용됩니다.
○ WEBSITE_TIME_ZONE 환경변수를 통해, 시간대 변경을 지원
■ Korea Standard Time
■ Eastern Standard Time
■ AUS Eastern Standard Time
27. Azure Table Service
● Azure Storage에서 지원하는 NoSQL 서비스
○ Azure Storage에서는 Blob, Table, Queue, Files 서비스를 지원합니다.
○ Premium Table 서비스는 CosmosDB
● 모든 레코드는 다음 3가지를 가집니다.
○ PartitionKey : 최대 1KB 크기의 문자열 (필수 지정)
○ RowKey : 최대 1KB 크기의 문자열 (필수 지정)
○ Timestamp : 자동 지정
● PartitionKey와 RowKey를 조합하여, 각 레코드를 식별합니다.
28. 데이터를 저장할 Table 생성하기
● Azure Portal > 저장소 계정 > 생성한 저장소 > 테이블 > 새 테이블
○ "cralwerTable" 이름의 테이블 생성
● "Cralwer > 통합" : Azure Table Storage 출력 생성
○ 테이블 매개변수 이름 : tablePath (파이썬 코드 내에서 참조할 환경변수 명)
○ 테이블 이름 : cralwerTable (생성한 테이블명)
○ 저장소 계정 연결
■ AzureWebJobsDashboard와 AzureWebJobsStorage는 동일한 저장소 설정의 alias.