컨테이너 및 Azure Functions로 작업

이 문서에서는 Azure Functions가 Azure Container Apps 환경에서 실행되는 컨테이너화된 함수 앱 작업을 위해 제공하는 지원을 보여 줍니다. Container Apps에서 함수 앱 컨테이너 호스팅에 대한 지원은 현재 미리 보기로 제공됩니다. 자세한 내용은 Azure Functions의 Azure Container Apps 호스팅을 참조하세요.

이 문서에서는 Linux 컨테이너에서 실행되는 함수 앱을 사용하기 위해 Azure Functions에서 제공하는 지원을 보여 줍니다.

문서 맨 위에 있는 컨테이너화된 함수 앱에 대한 호스팅 환경을 선택합니다.

바로 시작하려는 경우 다음 문서에서는 Linux 컨테이너에서 실행되는 첫 번째 함수를 만들고 컨테이너 레지스트리에서 지원되는 Azure 호스팅 서비스로 이미지를 배포하는 방법을 보여 줍니다.

Azure Container Apps에서 첫 번째 컨테이너화된 Azure Functions 만들기

Azure Container Apps에 배포하는 방법에 대한 자세한 내용은 Azure Functions의 Azure Container Apps 호스팅을 참조 하세요.

컨테이너화된 함수 앱 만들기

함수를 사용하면 함수 앱을 만들고 기본 Linux 컨테이너로 쉽게 배포하고 실행할 수 있습니다. Functions는 컨테이너화된 함수 앱을 만들 때 사용할 수 있는 언어별 기본 이미지 집합을 기본.

Important

자체 컨테이너를 만들 때 컨테이너의 기본 이미지를 지원되는 최신 기본 이미지로 업데이트해야 합니다. Azure Functions에 지원되는 기본 이미지는 언어별로 다르며 Azure Functions 기본 이미지 리포지토리에서 찾을 수 있습니다.

Functions 팀은 이러한 기본 이미지에 대한 월별 업데이트를 게시하기 위해 최선을 다하고 있습니다. 정기 업데이트에는 Functions 런타임 및 언어 모두에 대한 최신 부 버전 업데이트 및 보안 수정 사항이 포함됩니다. 정기적으로 최신 기본 이미지에서 컨테이너를 업데이트하고 업데이트된 버전의 컨테이너를 다시 배포해야 합니다.

명령줄에서 로컬 컨테이너화된 함수 앱을 만들고 컨테이너 레지스트리에 이미지를 게시하는 방법에 대한 전체 예제는 로컬 컨테이너에서 함수 앱 만들기를 참조하세요.

Dockerfile 생성

함수 도구는 함수 코드 프로젝트와 함께 Dockerfile을 생성하는 Docker 옵션을 제공합니다. Docker에서 이 파일을 사용하여 올바른 기본 이미지(언어 및 버전)에서 파생되는 함수를 컨테이너에 만들 수 있습니다.

Dockerfile을 만드는 방법은 프로젝트를 만드는 방법에 따라 달라집니다.

전체 예제는 로컬 컨테이너에서 함수 앱 만들기를 참조 하세요.

컨테이너에서 함수 앱 만들기

코드 프로젝트에서 핵심 도구 생성 Dockerfile을 사용하면 Docker를 사용하여 로컬 컴퓨터에서 컨테이너화된 함수 앱을 만들 수 있습니다. 다음 docker build 명령은 로컬 디렉터리의 프로젝트에서 컨테이너화된 함수의 이미지를 만듭니다.

docker build --tag <DOCKER_ID>/<IMAGE_NAME>:v1.0.0 .

컨테이너를 만드는 방법의 예는 컨테이너 이미지 빌드 및 로컬 확인을 참조 하세요.

레지스트리에서 이미지 업데이트

함수 코드 프로젝트를 변경하거나 최신 기본 이미지로 업데이트해야 하는 경우 컨테이너를 로컬로 다시 빌드하고 업데이트된 이미지를 선택한 컨테이너 레지스트리에 다시 게시해야 합니다. 다음 명령은 업데이트된 버전 번호로 루트 폴더에서 이미지를 다시 빌드하고 레지스트리에 푸시합니다.

az acr build --registry <REGISTRY_NAME> --image <LOGIN_SERVER>/azurefunctionsimage:v1.0.1 .

Container Registry 인스턴스와 <LOGIN_SERVER> 로그인 서버 이름으로 바꿉 <REGISTRY_NAME> 있습니다.

이 시점에서 새 이미지를 사용하도록 배포를 업데이트해야 합니다. 다음 예제에서는 새 이미지를 사용하도록 함수 앱을 업데이트합니다.

az functionapp config container set --image <IMAGE_NAME> --registry-password <SECURE_PASSWORD>--registry-username <USER_NAME> --name <APP_NAME> --resource-group <RESOURCE_GROUP>

이 예제에서는 <IMAGE_NAME> 버전이 있는 새 이미지의 전체 이름입니다. 프라이빗 레지스트리를 사용하려면 사용자 이름과 암호를 제공해야 합니다. 이러한 자격 증명을 안전하게 저장합니다.

컨테이너를 사용하여 Azure Portal 만들기

Azure Portal에서 함수 앱을 만들 때 컨테이너 레지스트리의 이미지에서 함수 앱을 배포하도록 선택할 수 있습니다. 컨테이너 레지스트리에서 컨테이너화된 함수 앱을 만드는 방법을 알아보려면 컨테이너에서 함수 앱 만들기를 참조하세요.

다음 단계에서는 컨테이너 레지스트리에서 기존 컨테이너화된 함수 앱을 만들고 배포합니다.

  1. Azure Portal 메뉴 또는 페이지에서 리소스 만들기를 선택합니다.

  2. 새로 만들기 페이지에서 컴퓨팅>함수 앱을 선택합니다.

  3. 기본 사항 페이지에서 함수 앱 설정을 다음 표에서 지정한 대로 사용합니다.

    설정 제안 값 설명
    구독 구독 함수 앱을 만드는 구독입니다.
    리소스 그룹 myResourceGroup 함수 앱을 만들 새 리소스 그룹의 이름입니다. 기존 리소스 그룹에서 새 함수 앱을 만들 때 알려진 제한 사항이 있으므로 리소스 그룹을 만들어야 합니다.
    함수 앱 이름 고유 이름* 새 함수 앱을 식별하는 이름입니다. 유효한 문자는 a-z(대/소문자 구분 안 함), 0-9-입니다.
    코드 또는 컨테이너 이미지를 배포하려고 하나요? 컨테이너 이미지 레지스트리에서 컨테이너화된 함수 앱을 배포합니다. 레지스트리에서 함수 앱을 만들려면 로컬 컨테이너에서 함수 앱 만들기를 참조 하세요.
    지역 기본 지역 사용자 또는 함수가 액세스할 수 있는 기타 서비스에 가까운 지역을 선택합니다.

*앱 이름은 모든 Azure Functions 호스팅 앱에서 전역적으로 고유해야 합니다.

  1. 호스팅 옵션 및 계획에서 Functions Premium을 선택합니다.

    Screenshot of the Basics tab in the Azure portal when creating a function app for hosting a container in a Functions Premium plan.

    그러면 동적 크기 조정을 지원하는 프리미엄 계획에서 Azure Functions에서 호스트하는 함수 앱이 만들어집니다. App Service 계획에서 실행하도록 선택할 수도 있지만 이러한 종류의 전용 계획에서는 함수 앱의 크기 조정을 관리해야 합니다.

*앱 이름은 Azure Container Apps 환경 내에서 고유해야 합니다. 미리 보기에서 모든 지역이 지원되는 것은 아닙니다. 자세한 내용은 Container Apps 호스팅에 대한 고려 사항을 참조하세요.

  1. 호스팅 옵션 및 계획에서 Azure Container Apps 환경 계획을 선택합니다.

    Portal create Basics tab for a containerized function app hosted in Azure Container Apps.

    그러면 함수 앱 컨테이너를 호스트하는 새 Azure Container Apps 환경 리소스가 만들어집니다. 자세한 내용은 Azure Functions의 Azure Container Apps 호스팅을 참조하세요.

    기본적으로 환경은 비용을 최소화하기 위해 영역 중복 없이 소비 계획에서 만들어집니다. 기존 Container Apps 환경을 선택할 수도 있습니다. 환경에 대해 알아보려면 Azure Container Apps 환경을 참조 하세요.

  1. 스토리지 탭에서 새 스토리지 계정을 만들고 모니터링 탭에서 새 Application Insight 인스턴스를 만드는 기본 옵션을 수락합니다. 기존 스토리지 계정이나 Application Insights 인스턴스를 사용하도록 선택할 수도 있습니다.
  1. 배포 탭을 선택하고 빠른 시작 이미지 사용을 선택 취소 합니다. 이렇게 하지 않으면 함수 앱이 함수 앱 언어의 기본 이미지에서 배포됩니다.

  2. 이미지 유형, 퍼블릭 또는 프라이빗을 선택합니다. Azure Container Registry 또는 다른 프라이빗 레지스트리를 사용하는 경우 Private을 선택합니다. 레지스트리 접두사를 포함하여 이미지 이름을 제공합니다. 프라이빗 레지스트리를 사용하는 경우 이미지 레지스트리 인증 자격 증명을 제공합니다.

  3. 검토 + 만들기를 선택하여 앱 구성 선택을 검토합니다.

  4. 검토 + 만들기 페이지에서 설정을 검토한 다음 만들기를 선택하여 함수 앱을 프로비전하고 레지스트리에서 컨테이너 이미지를 배포합니다.

  1. 검토 + 만들기를 선택하여 앱 구성 선택을 검토합니다.

  2. 검토 + 만들기 페이지에서 설정을 검토한 다음 만들기를 선택하여 기본 기본 이미지를 사용하여 함수 앱을 프로비전합니다.

  3. 함수 앱 리소스를 만든 후 리소스로 이동을 선택하고 함수 앱 페이지에서 배포 센터를 선택합니다.

  4. 배포 센터에서 컨테이너 레지스트리를 이미지의 원본으로 연결할 수 있습니다. 레지스트리에서 컨테이너에 대한 업데이트를 보다 강력하게 지속적으로 배포하기 위해 GitHub Actions 또는 Azure Pipelines를 사용하도록 설정할 수도 있습니다.

Azure Functions에서 이미지 작업

함수 앱 컨테이너가 레지스트리에서 배포되면 Functions는 원본 이미지에 대한 정보를 기본. 다음 명령을 사용하여 이미지에 대한 데이터를 얻거나 사용된 배포 이미지를 변경합니다.

Container Apps 워크로드 프로필

워크로드 프로필은 배포 리소스를 보다 효율적으로 제어할 수 있는 Container Apps의 기능입니다. Azure Container Apps의 Azure Functions는 워크로드 프로필도 지원합니다. 자세한 내용은 Azure Container Apps의 워크로드 프로필을 참조 하세요.

Azure CLI 또는 Azure Portal을 사용하여 워크로드 프로필을 만들고 관리할 수 있습니다.

컨테이너 앱 환경을 만들 때 워크로드 프로필을 사용하도록 설정합니다. 예를 들어 프로필에서 컨테이너 앱 만들기를 참조하세요.

사용자 환경에서 프로필을 추가, 편집 및 삭제할 수 있습니다. 예제는 프로필 추가를 참조 하세요.

워크로드 프로필을 사용하도록 설정된 환경에서 컨테이너화된 함수 앱을 만들 때 실행할 프로필도 지정해야 합니다. 이 예제와 --workload-profile-name 같이 명령의 매개 변수를 az functionapp create 사용하여 이 작업을 수행합니다.

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 create 명령에서 --environment 매개 변수는 Container Apps 환경을 지정하고 --image 매개 변수는 함수 앱에 사용할 이미지를 지정합니다. 이 예제에서는 <STORAGE_NAME>을 이전 섹션에서 스토리지 계정에 대해 사용한 이름으로 바꿉니다. 또한 사용자에게 적합한 전역적으로 고유한 이름으로 대체 <APP_NAME> 합니다.

또한 원하는 수의 가상 CPU로 바꾸고 프로필에서 허용하는 최대값까지 최소 0.5개로 바꿉 <CPU_COUNT> 다. 의 경우 <MEMORY_SIZE>프로필에서 허용되는 최대 크기까지 1GB의 전용 메모리 양을 선택합니다.

애플리케이션 설정

Azure Functions를 사용하면 표준 방식으로 컨테이너화된 함수 앱에 대한 애플리케이션 설정을 사용할 수 있습니다. 자세한 내용은 애플리케이션 설정 사용을 참조하세요.

Azure로의 지속적인 배포 사용

Important

Elastic Premium 계획에서 컨테이너를 실행할 때 웹후크 기반 배포는 현재 지원되지 않습니다. 이 섹션에 설명된 지속적인 배포 방법을 사용해야 하는 경우 대신 App Service 계획에 컨테이너를 배포합니다. Elastic Premium 계획에서 실행하는 경우 리포지토리에서 컨테이너를 업데이트할 때마다 앱을 수동으로 다시 시작해야 합니다.

레지스트리의 이미지를 업데이트할 때마다 Azure Functions에서 이미지 배포를 자동으로 업데이트하도록 설정할 수 있습니다.

  1. 다음 명령을 사용하여 지속적인 배포를 사용하도록 설정하고 webhook URL을 가져옵니다.

    az functionapp deployment container config --enable-cd --query CI_CD_URL --output tsv --name <APP_NAME> --resource-group AzureFunctionsContainers-rg
    

    az functionapp deployment container config 명령은 지속적인 배포를 사용하도록 설정하고 배포 웹후크 URL을 반환합니다. az functionapp deployment container show-cd-url 명령을 사용하여 나중에 언제든지 이 URL을 검색할 수 있습니다.

    이전과 같이 <APP_NAME>을 함수 앱 이름으로 바꿉니다.

  2. 배포 웹후크 URL을 클립보드에 복사합니다.

  3. Docker Hub를 열어 로그인하고, 탐색 모음에서 리포지토리를 선택합니다. 이미지를 찾아 선택하고, Webhook 탭을 선택하고, Webhook 이름을 지정하고, URL을 Webhook URL에 붙여넣은 다음, 만들기를 선택합니다.

    Screenshot showing how to add the webhook in your Docker Hub window.

  4. 웹후크 세트를 사용하면 Docker Hub에서 이미지를 업데이트할 때마다 Azure Functions에서 해당 이미지를 다시 배포합니다.

SSH 연결 사용

SSH를 사용하면 컨테이너와 클라이언트 간의 보안 통신을 설정할 수 있습니다. SSH를 사용하면 App Service 고급 도구(Kudu)를 사용하여 컨테이너에 연결할 수 있습니다. SSH를 사용하여 컨테이너에 쉽게 연결할 수 있도록 Azure Functions는 이미 SSH를 사용하도록 설정된 기본 이미지를 제공합니다. Dockerfile을 편집한 다음, 해당 이미지를 다시 빌드하여 다시 배포하기만 하면 됩니다. 그런 다음, 고급 도구(Kudu)를 통해 컨테이너에 연결할 수 있습니다.

  1. Dockerfile에서 다음 예제와 같이 명령의 기본 이미지에 문자열 -appservice 을 추가합니다FROM.

    FROM mcr.microsoft.com/azure-functions/node:4-node18-appservice
    

    이 예제에서는 Node.js 버전 18 기본 이미지의 SSH 사용 버전을 사용합니다. Azure Functions 기본 이미지 리포지토리를 방문하여 최신 버전의 SSH 지원 기본 이미지를 사용하고 있는지 확인합니다.

  2. 다음 예제와 같이 명령을 사용하여 docker build 이미지를 다시 빌드하고 Docker 허브 계정 ID로 바꿉 <DOCKER_ID> 니다.

    docker build --tag <DOCKER_ID>/azurefunctionsimage:v1.0.0 .
    
  3. 업데이트된 이미지를 Docker Hub로 푸시합니다. 첫 번째 푸시보다 시간이 훨씬 적게 걸립니다. 이제 이미지의 업데이트된 세그먼트만 업로드하면 되기 때문입니다.

    docker push <DOCKER_ID>/azurefunctionsimage:v1.0.0
    
  4. Azure Functions에서 자동으로 이미지를 함수 앱으로 다시 배포합니다. 이 프로세스는 1분 이내에 수행됩니다.

  5. 브라우저에서 https://<app_name>.scm.azurewebsites.net/을 열고 <app_name>을 고유한 이름으로 바꿉니다. 이 URL은 함수 앱 컨테이너의 고급 도구(Kudu) 엔드포인트입니다.

  6. Azure 계정에 로그인한 다음, SSH를 선택하여 컨테이너와의 연결을 설정합니다. Azure에서 아직도 컨테이너 이미지를 업데이트하고 있는 경우 연결하는 데 몇 분 정도 걸릴 수 있습니다.

  7. 컨테이너와의 연결이 설정되면 top 명령을 실행하여 현재 실행 중인 프로세스를 확인합니다.

    Screenshot that shows Linux top command running in an SSH session.

다음 단계

다음 문서에서는 컨테이너 배포 및 관리에 대한 자세한 정보를 제공합니다.