인공지능,프로그래밍/MS Azure
Azure Function
AI 마을1
2025. 4. 30. 11:47
Azure Function은 이벤트 기반 서버리스 컴퓨팅 서비스입니다.
작은 코드 조각을 빠르게 배포하고, HTTP 요청, Timer, Queue 등 다양한 트리거로 실행되며,
인프라를 신경 쓸 필요 없이 실행됩니다.
특히 SAS URL 자동 생성, Webhook 처리, 파일 전처리, 이벤트 후킹 등에 매우 효과적입니다.
✅ 1. Azure Function이란?
개념 | 클라우드에서 이벤트 기반으로 실행되는 코드 |
장점 | 서버 없이 작동, 비용 절감 (실행 시간 기반 과금), 높은 확장성 |
언어 지원 | C#, JavaScript/Node.js, Python, PowerShell, Java 등 |
트리거 종류 | HTTP, Timer, Queue, Event Grid, Blob 등 |
🔧 2. Azure Function 생성 방법 (HTTP 트리거 기준)
📍 포털에서 빠르게 생성하는 법
- Azure Portal → Function App → 만들기
- 기본 설정:
- 리소스 그룹 선택
- Function App 이름 지정
- 런타임 스택: Python / Node.js / C# 등 선택
- 호스팅 OS: Linux (일반적으로 추천)
- 스토리지 계정 연결
- 배포 완료 후:
- Functions → + 새 함수 → HTTP 트리거 선택
📂 3. 예제: HTTP 호출로 Blob SAS URL 발급
📘 코드 (Python 예시)
import azure.functions as func
from azure.storage.blob import BlobSasPermissions, generate_blob_sas
from datetime import datetime, timedelta
def main(req: func.HttpRequest) -> func.HttpResponse:
account_name = "<계정명>"
container_name = "my-container"
blob_name = req.params.get("filename")
account_key = "<스토리지 계정 키>"
if not blob_name:
return func.HttpResponse("filename 매개변수가 필요합니다.", status_code=400)
sas_token = generate_blob_sas(
account_name=account_name,
container_name=container_name,
blob_name=blob_name,
account_key=account_key,
permission=BlobSasPermissions(read=True, write=True),
expiry=datetime.utcnow() + timedelta(minutes=10)
)
url = f"https://{account_name}.blob.core.windows.net/{container_name}/{blob_name}?{sas_token}"
return func.HttpResponse(url)
요청 예: GET https://myfunction.azurewebsites.net/api/generate-sas?filename=test.txt
이 코드는 Azure Blob Storage의 특정 파일에 대한 임시 액세스 권한을 부여하는 SAS(공유 액세스 서명) URL을 생성하는 Azure Function입니다. 주요 구성 요소와 작동 방식을 단계별로 설명합니다:
- 필수 모듈 임포트
python
import azure.functions as func
from azure.storage.blob import BlobSasPermissions, generate_blob_sas
from datetime import datetime, timedelta
- azure.functions: Azure Functions 실행 컨텍스트 처리
- BlobSasPermissions: Blob 접근 권한 관리
- generate_blob_sas: SAS 토큰 생성기
- datetime: SAS 토큰 만료 시간 설정
- HTTP 트리거 함수 정의
python
def main(req: func.HttpRequest) -> func.HttpResponse:
- HTTP 요청을 처리하는 Azure Function 진입점
- 스토리지 계정 설정
account_name과 account_key를 실제 Azure 스토리지 정보로 교체해야 합니다. - 요청 매개변수 검증
blob_name = req.params.get("filename")
if not blob_name: return func.HttpResponse("filename 매개변수가 필요합니다.", status_code=400)
- filename 쿼리 매개변수가 없는 경우 400 오류 반환
- SAS 토큰 생성
sas_token = generate_blob_sas
(
account_name=account_name,
container_name=container_name,
blob_name=blob_name,
account_key=account_key,
permission=BlobSasPermissions(read=True, write=True),
expiry=datetime.utcnow() + timedelta(minutes=10)
)
- 읽기/쓰기 권한 부여
- 생성 시점부터 10분간 유효한 토큰
- SAS URL 조립 및 반환
python
url = f"https://{account_name}.blob.core.windows.net/{container_name}/{blob_name}?{sas_token}"
return func.HttpResponse(url)
- 생성된 SAS 토큰을 포함한 완전한 Blob URL 반환
개선 포인트
- 보안 강화: 계정 키를 코드에 하드코딩 대신 Azure Key Vault 사용
- 권한 최소화: write=True는 필요한 경우에만 사용
- 오류 처리: Blob 존재 여부 확인 및 예외 처리 추가
- 구성 관리: 컨테이지 이름을 환경 변수로 설정
예시 호출:
text
https://<함수-URL>/api/GenerateSAS?filename=example.txt
→ 반환값 예시: https://<계정명>.blob.core.windows.net/my-container/example.txt?se=2025-04-30T11%3A49Z&...
🧠 활용 예시
사용 사례 | 설 명 |
📤 업로드 자동화 | 사용자가 클릭하면 Function에서 SAS 발급 → 웹에서 업로드 가능 |
📊 보고서 다운로드 | 사내 시스템에서 요청 → Function이 SAS 발급하여 메일로 전달 |
🔄 주기적 처리 | Timer Trigger로 매일 자정에 처리 실행 (백업, 전환 등) |
🔁 이벤트 처리 | Event Grid와 연결 → Blob 업로드 시 Function 자동 실행 |
🔐 인증 중계 | Azure AD 인증 → Function에서 인증된 요청만 SAS 발급 |
📦 Function App 배포 방법
방법 | 특징 |
포털 직접 편집 | 간단 테스트용, UI 제공 |
VS Code 확장 | 가장 실용적, Python/Node.js 디버깅 지원 |
GitHub Actions | CI/CD 연동으로 자동 배포 |
Azure DevOps | 엔터프라이즈용 배포 파이프라인에 적합 |
🔐 보안 팁
항 목 | 권장 방식 |
스토리지 접근 | 계정 키 대신 Managed Identity + RBAC 사용 |
환경 변수 | local.settings.json 또는 Azure Key Vault 연결 |
HTTP 인증 | Azure AD 인증 또는 Function Key 설정 |
로그 저장 | Application Insights 연동 |
🧩 Function과 Logic App 비교
항목 | Azure Function | Logic App |
유연한 로직 | O (코드 중심) | 제한적 |
초보자 진입 난이도 | 높음 | 낮음 |
고급 처리 | 매우 적합 | 복잡해지면 부적합 |
시각화 | 없음 | O (디자이너 있음) |
반복/분기 제어 | 자유로움 | 제한 있음 |
🎯 결론 요약
포인트 | 설 명 |
활용 목적 | 이벤트 발생 시 자동 실행되는 경량 함수로 SAS URL 발급, 자동 처리 등 가능 |
실행 비용 | 실행 시간과 호출 횟수 기반 (수백만 요청도 저렴) |
권장 활용 | 고유 파일 처리, 인증된 SAS 발급, 자동 트리거 연동 등 |
통합 | Logic App, Event Grid, Blob Trigger, REST API와 유연하게 연계 가능 |