Theory
인프라
Azure
Azure Functions 컨테이너 배포 및 SSH 접속 가이드

원문: Working with containers and Azure Functions - Microsoft Learn (opens in a new tab)

Azure Functions 컨테이너 배포 및 SSH 접속 실무 가이드

이 문서는 Azure Functions를 컨테이너(특히 Azure Container Apps 환경)로 배포하고, SSH로 접속하는 방법을 실무적으로 정리한 것입니다.


1. 컨테이너 기반 Azure Functions 개요

  • Azure Functions는 컨테이너(주로 Linux)로 패키징하여 Azure Container Apps, App Service, Functions Premium Plan 등 다양한 환경에 배포할 수 있습니다.
  • 최신 권장 방식은 Azure Container Apps 환경에서 네이티브로 Functions를 실행하는 것입니다.
  • 컨테이너 기반 배포 시, Functions의 프로그래밍 모델과 자동 스케일링의 장점을 그대로 활용할 수 있습니다.

참고: Azure Container Apps에서 Azure Functions 실행 공식 문서 (opens in a new tab)


2. Dockerfile 생성 및 프로젝트 준비

  • Functions Core Tools로 프로젝트 생성 시 --docker 옵션을 사용하면 Dockerfile이 자동 생성됩니다.
func init --docker
  • 기존 프로젝트에 Dockerfile만 추가하려면:
func init --docker-only
  • VS Code/Visual Studio에서도 컨테이너 프로젝트 생성 시 Dockerfile 자동 생성 지원

3. 컨테이너 이미지 빌드 및 레지스트리 푸시

  • Dockerfile이 있는 프로젝트 폴더에서 이미지 빌드:
docker build --tag <DOCKER_ID>/<IMAGE_NAME>:v1.0.0 .
  • Azure Container Registry(ACR)로 직접 빌드 및 푸시:
az acr build --registry <REGISTRY_NAME> --image <LOGIN_SERVER>/azurefunctionsimage:v1.0.1 .
  • Docker Hub로 푸시:
docker push <DOCKER_ID>/azurefunctionsimage:v1.0.1

4. Azure에 컨테이너 함수 앱 배포

  • Azure CLI로 배포 이미지 업데이트:
az functionapp config container set --image <IMAGE_NAME> --registry-password <SECURE_PASSWORD> --registry-username <USER_NAME> --name <APP_NAME> --resource-group <RESOURCE_GROUP>
  • Azure Portal에서 Function App > 설정 > 구성 > 이미지 태그 변경 후 저장
  • 배포 센터(Deployment Center)에서 컨테이너 레지스트리/이미지 태그 변경 가능

5. 워크로드 프로필 및 리소스 할당

  • Azure Container Apps 환경에서는 워크로드 프로필로 vCPU/메모리 리소스 할당을 세밀하게 제어 가능
  • CLI 예시:
az functionapp create --name <APP_NAME> --storage-account <STORAGE_NAME> --environment <ENV_NAME> --resource-group <RESOURCE_GROUP> --functions-version 4 --runtime <LANGUAGE_STACK> --image <IMAGE_URI> --workload-profile-name <PROFILE_NAME> --cpu <CPU_COUNT> --memory <MEMORY_SIZE>
  • 배포 후에도 az functionapp container set 명령으로 리소스/프로필 변경 가능

6. SSH 접속 활성화

  • SSH가 활성화된 Functions 공식 base image 사용: Dockerfile의 FROM에 -appservice 접미사 추가
FROM mcr.microsoft.com/azure-functions/node:4-node18-appservice
  • 이미지 빌드/푸시 후, Azure Portal의 Kudu(Advanced Tools)에서 SSH 접속 가능
  • 접속 URL: https://<app_name>.scm.azurewebsites.net/ → SSH 탭에서 접속

7. CI/CD 및 자동 배포

  • Azure Pipelines, GitHub Actions 등 소스 기반 CI/CD 지원
  • 컨테이너 이미지 변경 시 자동 배포(웹훅)도 지원
az functionapp deployment container config --enable-cd --query CI_CD_URL --output tsv --name <APP_NAME> --resource-group <RESOURCE_GROUP>
  • Docker Hub 등에서 Webhook 등록 시, 이미지 업데이트마다 자동 배포

8. 보안 및 운영 팁

  • Base Image 최신화: Functions 팀이 매월 보안 패치/업데이트된 base image를 배포하므로, 주기적으로 base image를 업데이트하여 재배포 필요
  • 스토리지 연결: 기본적으로 연결 문자열 사용, 보안을 위해 Entra ID 기반 관리형 ID 권장
  • 포트 변경: 기본 80포트 사용, 필요시 WEBSITES_PORT 환경변수로 변경

9. 참고 및 추가 리소스

반드시 최신 공식 문서를 참고하여 보안 패치 및 운영 정책을 따라야 합니다.