[Microsoft Data School] 26일차 - Azure Functions 실습

RudinP·3일 전

Microsoft Data School 3기

목록 보기
28/29
post-thumbnail


VSCode에서 파이썬 파일 바로 찾는 방법
Ctrl + P

Azure Functions 실습

venv가 3.13 버전으로 되어있어서 삭제한뒤 다시 지정해서 가상환경 설정을 해주었다.

py -3.11 -m venv .venv
이후 activate
이후 Azurite run
이후 F5로 실행


samples-workitems에 이미지를 업로드하면 자동으로 thumbnails 컨테이너에도 추가된다.

해당 thumbnails 기능으로, 사용자의 프로필 사진을 저장하는 기능을 처리할 수 있다.
(128x128로 원본 크기에 비해 줄어들도록 처리)

만약 안되는 경우
1. 함수 앱 실행 안함
2. local.settings.json 오기입

코드 예외처리 구조

#매일 자정에 실행(크론 표현식)
@app.timer_trigger(schedule="0 0 */12 * * *", arg_name="mytimer", run_on_start=False)
def change_cool_old_thumbnail(mytimer: func.TimerRequest):
    logging.info('Python timer trigger 함수가 실행되었습니다.')

    try:
        #old_thumbnail을 쿨 하는 코드
        #외부유출X여서 생략
        #5분이 지나면 쿨파일로 변경
    except KeyError as e:
        logging.error(f'Configuration Error: 환경 변수가 누락되었습니다. {e}.')
    except Exception as e:
        logging.error(f'에러가 발생했습니다: {e}')

NCRONTAB식

  • 만약 특정 시간에 실행하는 코드를 바로 테스트하고싶다면, 포스트맨으로 요청을 날려 테스트해보면 된다.(이외 http요청(POST) 보낼 수 있는 도구면 ok)

파일 상태를 cool로 변경하는 이유

파일이 대량으로 업로드되는 서비스 가정
저장소 비용을 효율적으로 관리 필요

  • 최근 파일은 재조회율 높음
  • 오래된 파일은 재조회율 낮음
    → 새로 만들어진 파일은 hot 계층 저장, old는 cool 계층에 저장(ssd → hard)

Azure에서

Azure에서는 수명 주기 관리에서 규칙 추가 가능

설정-구성 에서 Blob 액세스 계층(기본값) 설정 가능

postman으로 비 http_trigger 코드 테스트

method: POST

http://localhost:7071/admin/functions/change_cool_old_thumbnail

Content-Type: application/json

Body

{
    "input": ""
}

curl 비 http_trigger 코드 테스트

명령 프롬프트에서 curl 실행

curl -X POST -H "Content-Type: application/json" -d "{\"input\": \"\"}" "http://localhost:7071/admin/functions/change_cool_old_thumbnail"

Client 앱 실행(next.js)

기존 함수앱 VSCode창은 두고, Shift+VSCode 클릭하여 추가 창 띄우기

git clone

환경변수 파일 추가

http_trigger의 엔트리포인트 기입

패키지 다운로드

pnpm i

웹서버 기동

pnpm dev

F12NetworkFetch/XHR
조회 버튼 클릭 시


복습 문제


local.settings.json에는 연결 문자열 등 민감한 정보가 포함되므로 절대 Git과 같은 공유 리포지토리에 커밋해서는 안 됩니다. 대신 .gitignore에 등록하고, 팀원 간에는 샘플 파일(예: local.settings.example.json)을 공유하는 것이 표준 관행입니다.

[참고]Azure Storage Explorer

https://learn.microsoft.com/ko-kr/azure/storage/storage-explorer/vs-azure-tools-storage-manage-with-storage-explorer?tabs=windows
테스트를 위해 파일 업로드를 반복하는것은 비용 발생.
Azurite 에뮬레이터를 사용해서 로컬에서 테스트 관리

복습 실습

  1. azure의 스토리지 계정 비용을 절약하기 위해 azurite를 활용한 blob trigger 연습(로컬)
  • 완전히 로컬에서만 테스트 해보기

local.settings.json에서 로컬 에뮬레이터 스토리지 연결

1. azurite에서 동일하게 스토리지 생성


devstoreaccount1은 공식적으로 제공하는 샘플 account이다.

2. blog_trigger decoration 수정

@app.blob_trigger(arg_name="myblob", path="samples-workitems/{name}", connection="AzureWebJobsStorage")
@app.blob_output(arg_name="outputblob", path="thumbnails/{name}", connection="AzureWebJobsStorage")

local.settings.json 파일

{
	"IsEncrypted": false,
	"Values": {
		"AzureWebJobsStorage": "UseDevelopmentStorage=true",
		"FUNCTIONS_WORKER_RUNTIME": "python",
		"STORAGE_CONNECTION_STRING": 생략
		"TARGET_CONTAINER_NAME": "thumbnails"
		},
	"Host": {
	"CORS": "*"
	}
}

이렇게되어있기 때문에, connection을 AzureWebJobsStorage(에뮬쪽)으로 맞춰줘야 한다.

samples-workitems(로컬)에 파일 올려보기

thumbnails에 처리되었는지 확인

azure에 함수 앱을 프로비저닝

  1. 개발 환경에서 함수 앱을 테스트 해봤음. -> 이제 azure에 함수 앱을 프로비저닝(azure에 함수 앱 리소스 만들어보기) 해보고, 배포도 해보기
  • azure 환경에 구축해서 운영해보기

1. 함수 앱 생성

2. VSCode에서 deploy

3. 환경변수 설정

3. 실행 확인


arm 템플릿

  1. arm 템플릿을 이용해서 함수 앱, 스토리지 계정의 리소스를 배포해보기
  • azure에서 리소스를 만드는 또 다른 방법인 ARM 템플릿 이라는 것을 이용해보기

1. 템플릿 생성

2. 사용자 지정 배포


로드 파일


profile
iOS 개발자가 되기 위한 스터디룸/스터디의 레퍼런스는 모두 kxcoding

0개의 댓글