원문: 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. 참고 및 추가 리소스
- Azure Functions 컨테이너 공식 문서 (opens in a new tab)
- Azure Functions base image 목록 (opens in a new tab)
- Azure Container Apps에서 Functions 실행 (opens in a new tab)
반드시 최신 공식 문서를 참고하여 보안 패치 및 운영 정책을 따라야 합니다.