Azure Functions 컨테이너 배포 가이드
이 문서는 Azure Functions에서 컨테이너화된 함수 앱을 배포하고 관리하는 방법에 대한 포괄적인 가이드입니다.
개요
Azure Functions는 Linux 컨테이너에서 실행되는 컨테이너화된 함수 앱 작업을 위한 완전한 지원을 제공합니다. 이 기능을 통해 Azure Container Apps 환경에서 함수를 실행할 수 있습니다.
새로운 Azure Container Apps 통합
중요: Azure Container Apps에서 Azure Functions를 직접 실행하는 새로운 호스팅 방법이 출시되었습니다. 이 통합을 통해 Azure Container Apps의 모든 기능과 Azure Functions의 프로그래밍 모델 및 자동 확장 기능을 모두 활용할 수 있습니다.
컨테이너화된 함수 앱 생성
Functions는 컨테이너화된 함수 앱을 쉽게 배포하고 실행할 수 있도록 언어별 기본 이미지 세트를 제공합니다.
기본 이미지 유지 관리
중요: 컨테이너를 직접 생성할 때는 최신 지원 기본 이미지로 컨테이너의 기본 이미지를 업데이트해야 합니다. 지원되는 기본 이미지는 언어별로 다르며 Azure Functions 기본 이미지 저장소 (opens in a new tab)에서 확인할 수 있습니다.
Functions 팀은 이러한 기본 이미지에 대한 월별 업데이트를 게시하며, 여기에는 최신 마이너 버전 업데이트와 Functions 런타임 및 언어에 대한 보안 수정 사항이 포함됩니다.
Dockerfile 생성
Functions 도구는 Docker 옵션을 제공하여 함수 코드 프로젝트와 함께 Dockerfile을 생성합니다.
명령줄을 통한 생성
# 새 프로젝트 생성 시 Docker 포함
func init --docker
# 기존 프로젝트에 Dockerfile 추가
func init --docker-only
Visual Studio Code를 통한 생성
- F1을 눌러 명령 팔레트를 열고
Azure Functions: Create New Containerized Project...
명령을 실행 - 새 코드 프로젝트를 위한 폴더 선택
- 나머지 프롬프트를 따라 진행
- 프로젝트 생성 후 루트 폴더에서 Dockerfile 확인
Visual Studio를 통한 생성
새 프로젝트 대화상자의 추가 정보 페이지에서 Docker 활성화 옵션을 체크합니다.
컨테이너에서 함수 앱 생성
Functions에서 생성된 Dockerfile을 사용하여 Docker로 컨테이너화된 함수 앱을 로컬 컴퓨터에서 생성할 수 있습니다.
docker build --tag <DOCKER_ID>/<IMAGE_NAME>:v1.0.0 .
레지스트리의 이미지 업데이트
함수 코드 프로젝트를 변경하거나 최신 기본 이미지로 업데이트해야 하는 경우, 컨테이너를 로컬에서 다시 빌드하고 업데이트된 이미지를 선택한 컨테이너 레지스트리에 다시 게시해야 합니다.
Azure Container Registry 사용
az acr build --registry <REGISTRY_NAME> --image <LOGIN_SERVER>/azurefunctionsimage:v1.0.1 .
Docker Hub 사용
docker build --tag <DOCKER_ID>/azurefunctionsimage:v1.0.1 .
docker push <DOCKER_ID>/azurefunctionsimage:v1.0.1
기존 배포 업데이트
새 이미지를 사용하도록 기존 배포를 업데이트하려면 Azure CLI 또는 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 포털 사용
- Azure 포털에서 함수 앱 찾기
- 설정 > 구성 선택
- 이미지 설정에서 이미지 태그 값을 업데이트된 버전으로 변경
- 저장 선택
Azure 포털에서 컨테이너를 사용하여 생성
Azure 포털에서 함수 앱을 생성할 때 컨테이너 레지스트리의 이미지에서 함수 앱을 배포하도록 선택할 수 있습니다.
생성 단계
- Azure 포털 메뉴 또는 홈 페이지에서 리소스 만들기 선택
- 새로 만들기 페이지에서 컴퓨팅 > 함수 앱 선택
- 호스팅 옵션 선택에서 프리미엄 플랜 > 선택
- 기본 사항 페이지에서 함수 앱 설정 구성
설정 | 제안 값 | 설명 |
---|---|---|
구독 | 사용자의 구독 | 새 함수 앱이 만들어질 구독 |
리소스 그룹 | myResourceGroup | 함수 앱을 만들 새 리소스 그룹의 이름 |
함수 앱 이름 | 전역적으로 고유한 이름 | 새 함수 앱을 식별하는 이름 |
게시 | Docker 컨테이너 | 배포 옵션 |
운영 체제 | Linux | 운영 체제 |
지역 | 기본 지역 | 가까운 지역 또는 함수가 액세스할 기타 서비스에 가까운 지역 |
Container Apps 워크로드 프로필
워크로드 프로필은 Container Apps의 기능으로 배포 리소스를 더 잘 제어할 수 있게 해줍니다. Azure Container Apps의 Azure Functions도 워크로드 프로필을 지원합니다.
워크로드 프로필 관리
Azure CLI 사용
# 워크로드 프로필이 활성화된 환경에서 함수 앱 생성
az functionapp create \
--name <APP_NAME> \
--storage-account <STORAGE_NAME> \
--environment MyContainerappEnvironment \
--resource-group AzureFunctionsContainers-rg \
--functions-version 4 \
--runtime <LANGUAGE_STACK> \
--image <IMAGE_URI> \
--workload-profile-name <PROFILE_NAME> \
--cpu <CPU_COUNT> \
--memory <MEMORY_SIZE>
# 워크로드 프로필 및 리소스 관리
az functionapp container set \
--name <APP_NAME> \
--resource-group AzureFunctionsContainers-rg \
--workload-profile-name <PROFILE_NAME> \
--cpu <CPU_COUNT> \
--memory <MEMORY_SIZE>
리소스 할당
- CPU 수: 최소 0.5부터 프로필에서 허용하는 최대값까지
- 메모리 크기: 1GB부터 프로필에서 허용하는 최대값까지
애플리케이션 설정
Azure Functions를 사용하면 컨테이너화된 함수 앱에 대한 애플리케이션 설정을 표준 방식으로 작업할 수 있습니다.
포트 설정
팁: 기본적으로 컨테이너화된 함수 앱은 들어오는 요청에 대해 포트 80을 모니터링합니다. 앱이 다른 포트를 사용해야 하는 경우
WEBSITES_PORT
애플리케이션 설정을 사용하여 이 기본 포트를 변경하세요.
Azure에 지속적 배포 활성화
Azure Container Apps에서 컨테이너화된 함수 앱을 호스팅할 때 소스 코드 저장소에서 지속적 배포를 설정하는 두 가지 방법이 있습니다:
1. Azure Pipelines 사용
소스 코드 저장소에서 Azure Pipelines를 통한 지속적 배포 파이프라인을 설정할 수 있습니다.
2. GitHub Actions 사용
GitHub 저장소에서 GitHub Actions를 통한 지속적 배포 워크플로우를 설정할 수 있습니다.
참고: 현재 컨테이너 레지스트리의 이미지 변경에 따른 지속적 배포는 지원되지 않습니다. 대신 소스 코드 기반 지속적 배포 파이프라인을 사용해야 합니다.
웹후크 기반 배포 (App Service 플랜)
Elastic Premium 플랜에서는 웹후크 기반 배포가 현재 지원되지 않습니다. 이 방법을 사용해야 하는 경우 App Service 플랜에서 컨테이너를 배포하세요.
Azure CLI를 통한 지속적 배포 설정
# 지속적 배포 활성화 및 웹후크 URL 가져오기
az functionapp deployment container config \
--enable-cd \
--query CI_CD_URL \
--output tsv \
--name <APP_NAME> \
--resource-group AzureFunctionsContainers-rg
Azure PowerShell을 통한 설정
# Docker 지속적 통합 활성화
Update-AzFunctionAppSetting -Name <APP_NAME> -ResourceGroupName AzureFunctionsContainers-rg -AppSetting @{"DOCKER_ENABLE_CI" = "true"}
# 웹후크 URL 가져오기
Get-AzWebAppContainerContinuousDeploymentUrl -Name <APP_NAME> -ResourceGroupName AzureFunctionsContainers-rg
SSH 연결 활성화
SSH를 사용하면 컨테이너와 클라이언트 간의 보안 통신이 가능합니다. SSH가 활성화되면 App Service 고급 도구(Kudu)를 사용하여 컨테이너에 연결할 수 있습니다.
SSH 활성화 단계
- Dockerfile 수정: 기본 이미지에
-appservice
접미사 추가
FROM mcr.microsoft.com/azure-functions/node:4-node18-appservice
- 이미지 다시 빌드
docker build --tag <DOCKER_ID>/azurefunctionsimage:v1.0.0 .
- Docker Hub에 업데이트된 이미지 푸시
docker push <DOCKER_ID>/azurefunctionsimage:v1.0.0
- SSH 연결: 브라우저에서
https://<app_name>.scm.azurewebsites.net/
열기
SSH 세션 사용
SSH 연결이 설정된 후 top
명령을 실행하여 현재 실행 중인 프로세스를 확인할 수 있습니다.
모범 사례
보안
- 관리 ID 사용: 최상의 보안을 위해 연결 문자열 대신 Microsoft Entra 인증을 사용하여 Azure Storage에 대한 관리 ID 기반 연결을 생성하세요.
이미지 관리
- 정기적 업데이트: 최신 기본 이미지로 정기적으로 컨테이너를 업데이트하고 업데이트된 버전의 컨테이너를 다시 배포하세요.
- 버전 태깅: 이미지를 빌드할 때 적절한 버전 태그를 사용하여 배포를 추적하기 쉽게 만드세요.
성능
- 리소스 할당: 워크로드에 따라 적절한 CPU 및 메모리 할당을 설정하세요.
- 확장 설정: 프리미엄 플랜을 사용하여 동적 확장을 활용하세요.
관련 리소스
- Azure Container Apps hosting of Azure Functions (opens in a new tab)
- Native Azure Functions Support in Azure Container Apps (opens in a new tab)
- Create your first containerized Azure Functions (opens in a new tab)
- Scale and hosting options (opens in a new tab)
출처
이 문서는 Microsoft Learn - Working with containers and Azure Functions (opens in a new tab)를 기반으로 작성되었습니다.