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 트리거 기준)

📍 포털에서 빠르게 생성하는 법

  1. Azure Portal → Function App → 만들기
  2. 기본 설정:
    • 리소스 그룹 선택
    • Function App 이름 지정
    • 런타임 스택: Python / Node.js / C# 등 선택
    • 호스팅 OS: Linux (일반적으로 추천)
    • 스토리지 계정 연결
  3. 배포 완료 후:
    • 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입니다. 주요 구성 요소와 작동 방식을 단계별로 설명합니다:

  1. 필수 모듈 임포트
 
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 토큰 만료 시간 설정
  1. HTTP 트리거 함수 정의
 
python
def main(req: func.HttpRequest) -> func.HttpResponse:
  • HTTP 요청을 처리하는 Azure Function 진입점
  1. 스토리지 계정 설정
    account_name과 account_key를 실제 Azure 스토리지 정보로 교체해야 합니다.
  2. 요청 매개변수 검증
 
blob_name = req.params.get("filename")
    if not blob_name: return func.HttpResponse("filename 매개변수가 필요합니다.", status_code=400)
  • filename 쿼리 매개변수가 없는 경우 400 오류 반환
  1. 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분간 유효한 토큰
  1. 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 반환

개선 포인트

  1. 보안 강화: 계정 키를 코드에 하드코딩 대신 Azure Key Vault 사용
  2. 권한 최소화: write=True는 필요한 경우에만 사용
  3. 오류 처리: Blob 존재 여부 확인 및 예외 처리 추가
  4. 구성 관리: 컨테이지 이름을 환경 변수로 설정

예시 호출:

 
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와 유연하게 연계 가능