다음을 통해 공유


AzureFunctionApp@2 - v2 배포 작업 Azure Functions

.NET, Python, JavaScript, PowerShell, Java 기반 웹 애플리케이션으로 함수 앱을 업데이트합니다.

Syntax

# Azure Functions Deploy v2
# Update a function app with .NET, Python, JavaScript, PowerShell, Java based web applications.
- task: AzureFunctionApp@2
  inputs:
    connectedServiceNameARM: # string. Alias: azureSubscription. Required. Azure Resource Manager connection. 
    appType: # 'functionApp' | 'functionAppLinux'. Required. App type. 
    appName: # string. Required. Azure Functions App name. 
    #deployToSlotOrASE: false # boolean. Optional. Use when appType != "". Deploy to Slot or App Service Environment. Default: false.
    #resourceGroupName: # string. Required when deployToSlotOrASE = true. Resource group. 
    #slotName: 'production' # string. Required when deployToSlotOrASE = true. Slot. Default: production.
    package: '$(System.DefaultWorkingDirectory)/**/*.zip' # string. Required. Package or folder. Default: $(System.DefaultWorkingDirectory)/**/*.zip.
    #runtimeStack: # 'DOTNET|6.0' | 'DOTNET-ISOLATED|6.0' | 'DOTNET-ISOLATED|7.0' | 'DOTNET-ISOLATED|8.0' | 'JAVA|8' | 'JAVA|11' | 'JAVA|17' | 'JAVA|21' | 'NODE|14' | 'NODE|16' | 'NODE|18' | 'NODE|20' | 'PYTHON|3.8' | 'PYTHON|3.9' | 'PYTHON|3.10' | 'PYTHON|3.11'. Optional. Use when appType = functionAppLinux. Runtime stack. 
  # Application and Configuration Settings
    #appSettings: # string. App settings. 
  # Additional Deployment Options
    #deploymentMethod: 'auto' # 'auto' | 'zipDeploy' | 'runFromPackage'. Required when appType != "" && package NotEndsWith .war && Package NotEndsWith .jar. Deployment method. Default: auto.
# Azure Functions Deploy v2
# Update a function app with .NET, Python, JavaScript, PowerShell, Java based web applications.
- task: AzureFunctionApp@2
  inputs:
    connectedServiceNameARM: # string. Alias: azureSubscription. Required. Azure Resource Manager connection. 
    appType: # 'functionApp' | 'functionAppLinux'. Required. App type. 
    appName: # string. Required. Azure Functions App name. 
    #deployToSlotOrASE: false # boolean. Optional. Use when appType != "". Deploy to Slot or App Service Environment. Default: false.
    #resourceGroupName: # string. Required when deployToSlotOrASE = true. Resource group. 
    #slotName: 'production' # string. Required when deployToSlotOrASE = true. Slot. Default: production.
    package: '$(System.DefaultWorkingDirectory)/**/*.zip' # string. Required. Package or folder. Default: $(System.DefaultWorkingDirectory)/**/*.zip.
    #runtimeStack: # 'DOTNET|2.2' | 'DOTNET|3.1' | 'DOTNET|6.0' | 'DOTNET-ISOLATED|7.0' | 'JAVA|8' | 'JAVA|11' | 'NODE|8' | 'NODE|10' | 'NODE|12' | 'NODE|14' | 'NODE|16' | 'NODE|18' | 'PYTHON|3.6' | 'PYTHON|3.7' | 'PYTHON|3.8' | 'PYTHON|3.9' | 'PYTHON|3.10'. Optional. Use when appType = functionAppLinux. Runtime stack. 
  # Application and Configuration Settings
    #appSettings: # string. App settings. 
  # Additional Deployment Options
    #deploymentMethod: 'auto' # 'auto' | 'zipDeploy' | 'runFromPackage'. Required when appType != "" && package NotEndsWith .war && Package NotEndsWith .jar. Deployment method. Default: auto.

입력

connectedServiceNameARM - Azure Resource Manager 연결
입력 별칭: azureSubscription. string. 필수 요소.

배포에 대한 Azure Resource Manager 구독을 선택합니다.


appType - 앱 유형
string. 필수 요소. 허용되는 값: functionApp (Windows의 함수 앱), functionAppLinux (Linux의 함수 앱).

배포에 대한 Azure Function App 형식을 선택합니다.


appName - 앱 이름 Azure Functions
string. 필수 요소.

기존 Azure Functions 앱의 이름을 지정합니다. 나열된 함수 앱은 선택한 앱 유형을 기반으로 합니다.


deployToSlotOrASE - 슬롯 또는 App Service Environment 배포
boolean. 선택 사항입니다. 을 사용할 때 appType != ""사용합니다. 기본값은 false입니다.

기존 배포 슬롯 또는 Azure App Service 환경에 배포합니다. 두 대상 모두 작업에 리소스 그룹 이름이 필요합니다.

배포 대상이 슬롯인 경우 기본적으로 프로덕션 슬롯으로 설정됩니다. 다른 기존 슬롯 이름도 제공할 수 있습니다.

배포 대상이 Azure App Service 환경인 경우 슬롯 이름을 프로덕션으로 두고 리소스 그룹 이름을 지정합니다.


resourceGroupName - 리소스 그룹
string. 필요한 경우 deployToSlotOrASE = true입니다.

배포 대상이 배포 슬롯 또는 App Service Environment 경우 리소스 그룹 이름이 필요합니다.

위에서 지정한 Azure App Service 포함하는 Azure 리소스 그룹을 입력하거나 선택합니다.


slotName - 슬롯
string. 필요한 경우 deployToSlotOrASE = true입니다. 기본값은 production입니다.

프로덕션 슬롯을 제외한 기존 슬롯을 입력하거나 선택합니다.


slotName - 슬롯
string. 필요한 경우 deployToSlotOrASE = true입니다. 기본값은 production입니다.

프로덕션 슬롯 이외의 기존 슬롯을 입력하거나 선택합니다.


package - 패키지 또는 폴더
string. 필수 요소. 기본값은 $(System.DefaultWorkingDirectory)/**/*.zip입니다.

MSBuild 또는 압축된 zip 파일에서 생성된 App Service 콘텐츠가 포함된 패키지 또는 폴더의 파일 경로입니다. 변수( 빌드 | 릴리스) 및 와일드카드가 지원됩니다. $(System.DefaultWorkingDirectory)/**/*.zip)을 입력합니다.


runtimeStack - 런타임 스택
string. 선택 사항입니다. 을 사용할 때 appType = functionAppLinux사용합니다. 허용되는 값: DOTNET|6.0, , DOTNET-ISOLATED|6.0, DOTNET-ISOLATED|7.0, DOTNET-ISOLATED|8.0, JAVA|8, JAVA|11JAVA|17, JAVA|21, NODE|14, NODE|16, , NODE|18, NODE|20, , PYTHON|3.8, PYTHON|3.9, PYTHON|3.11PYTHON|3.10.

함수 앱이 실행될 프레임워크 및 버전을 지정합니다. 지원되는 런타임 버전을 사용할 수 있습니다. 와 같은 DOCKER|microsoft/azure-functions-* 이전 값은 더 이상 사용되지 않습니다. 새 값은 작업 도우미 드롭다운 목록에 나열됩니다. 지원되는 런타임 버전에서 사용할 수 있는 최신 버전의 프레임워크가 있는 경우 목록에 없는 경우에도 지정할 수 있습니다.


runtimeStack - 런타임 스택
string. 선택 사항입니다. 을 사용할 때 appType = functionAppLinux사용합니다. 허용되는 값: DOTNET|2.2 (DOTNET|2.2(functionapp v2)), DOTNET|3.1 (DOTNET|3.1(functionapp v3)), DOTNET|6.0 (DOTNET|6.0(functionapp v4)), DOTNET-ISOLATED|7.0 (DOTNET-ISOLATED|7.0(functionapp v4)), JAVA|8 (JAVA|8(functionapp v2/v3/v4)), JAVA|11 (JAVA|11 (functionapp v3/v4)), NODE|8 (NODE|8 (functionapp v2)), NODE|10 (NODE|10 (functionapp v2/v3)), NODE|12 (NODE|12 (functionapp v3)), NODE|14 (NODE|14 (functionapp v3/v4)), NODE|16 (NODE|16 (functionapp v4)), NODE|18 (NODE|18 (functionapp v4)), PYTHON|3.6 (PYTHON|3.6(functionapp v2/v3)), PYTHON|3.7 (PYTHON|3.7(functionapp v2/v3/v4)), PYTHON|3.8 (PYTHON|3.8(functionapp v3/v4)), PYTHON|3.9 (PYTHON|3.9(functionapp v3/v4)), PYTHON|3.10 (PYTHON|3.10(functionapp v3/v4))

함수 앱이 실행될 프레임워크 및 버전을 지정합니다. 지원되는 런타임 버전을 사용할 수 있습니다. 와 같은 DOCKER|microsoft/azure-functions-* 이전 값은 더 이상 사용되지 않습니다. 새 값은 작업 도우미 드롭다운 목록에 나열됩니다. 지원되는 런타임 버전에서 사용할 수 있는 최신 버전의 프레임워크가 있는 경우 목록에 없는 경우에도 지정할 수 있습니다.


appSettings - 앱 설정
string.

구문을 -key value 사용하여 애플리케이션 설정을 입력합니다(예: -Port 5000-RequestTimeout 5000-WEBSITE_TIME_ZONE). 큰따옴표로 공백이 포함된 값을 묶습니다(예: "Eastern Standard Time").


deploymentMethod - 배포 방법
string. 필요한 경우 appType != "" && package NotEndsWith .war && Package NotEndsWith .jar입니다. 허용되는 값: auto (자동 검색), zipDeploy (Zip 배포), runFromPackage (패키지에서 실행으로 Zip 배포). 기본값은 auto입니다.

앱의 배포 방법을 지정합니다. Linux 사용량 앱은 이 구성을 지원하지 않습니다.


deploymentMethod - 배포 방법
string. 필요한 경우 appType != "" && package NotEndsWith .war && Package NotEndsWith .jar입니다. 허용되는 값: auto (자동 검색), zipDeploy (Zip 배포), runFromPackage (패키지에서 실행으로 Zip 배포). 기본값은 auto입니다.

앱에 대한 배포 방법을 선택합니다. Linux 사용 앱은 이 구성을 지원하지 않습니다.


작업 제어 옵션

모든 작업에는 작업 입력 외에 제어 옵션이 있습니다. 자세한 내용은 컨트롤 옵션 및 일반적인 작업 속성을 참조하세요.

출력 변수

이 작업은 다운스트림 단계, 작업 및 단계에서 사용할 수 있는 다음 출력 변수를 정의합니다.

AppServiceApplicationUrl
선택한 Azure Function App의 애플리케이션 URL입니다.

설명

Azure Function Deployment 작업은 Azure Functions 업데이트하여 Functions를 Azure에 배포하는 데 사용됩니다. 이 작업은 Windows, Linux 또는 Mac을 실행하는 플랫폼 간 Azure Pipelines 에이전트에서 작동하며 RunFromPackage, Zip 배포 및 Kudu REST API의 기본 배포 기술을 사용합니다.

이 작업은 지원되는 Azure Functions 언어에 대해 작동합니다.

작업에 대한 필수 구성 요소

작업이 제대로 작동하려면 대상 머신에서 다음 필수 구성 요소를 설정해야 합니다.

Azure Function

이 작업은 기존 Azure Function에 Azure Functions 프로젝트를 배포하는 데 사용됩니다. 작업을 실행하기 전에 Azure Function 앱이 있어야 합니다. Azure Function App은 Azure Portal 만들 수 있습니다. 또는 Azure PowerShell 작업을 사용하여 AzureRM PowerShell 스크립트를 실행하여 Azure Function 앱을 프로비전하고 구성할 수 있습니다.

작업은 Azure Functions(Windows/Linux)를 배포하는 데 사용할 수 있습니다.

Azure 구독

Azure에 배포하려면 계정 관리 섹션의 서비스 탭을 사용하여 Azure 구독을 Azure Pipelines에 연결해야 합니다. 계정 관리 화면(화면 오른쪽 위에 있는 기어 아이콘)을 열고 서비스 탭을 클릭하여 빌드 또는 Release Management 정의에서 사용할 Azure 구독을 추가합니다.

ARM 서비스 엔드포인트를 Create Azure Resource Manager 엔드포인트 유형을 사용합니다. 자세한 내용은 여기 링크에 나열된 단계를 따르 세요.

작업은 Azure 클래식 서비스 엔드포인트에서 작동하지 않으며 태스크의 매개 변수에 이러한 연결을 나열하지 않습니다.

배포 방법

이 작업에서는 몇 가지 배포 방법을 사용할 수 있습니다.

디자이너 작업에서 패키지 기반 배포 옵션을 변경하려면 추가 배포 옵션을 확장하고 배포 방법 선택을 사용하도록 설정합니다.

Azure App Service 및 Azure Pipelines 에이전트 유형에 따라 작업은 적절한 배포 기술을 사용합니다. 태스크에서 사용하는 배포 기술은 다음과 같습니다.

기본적으로 태스크는 입력 패키지, App Service 형식 및 에이전트 OS에 따라 적절한 배포 기술을 선택하려고 시도합니다.

  • 배포 후 스크립트가 제공되면 Zip 배포를 사용합니다.
  • App Service 유형이 Linux의 웹앱인 경우 Zip 배포를 사용합니다.
  • .war 파일이 제공되면 War Deploy를 사용합니다.
  • .jar 파일이 제공되면 Run-From-Zip을 사용합니다.
  • 다른 모든 작업의 경우 Zip 배포를 통해 패키지에서 실행을 사용합니다.

Windows가 아닌 에이전트(모든 App Service 유형의 경우)에서 작업은 Kudu REST API를 사용하여 웹앱을 배포합니다.

Kudu REST API

Kudu REST API는 대상이 Windows의 웹앱, Linux의 웹앱(기본 제공 원본) 또는 함수 앱인 경우 Windows 및 Linux 자동화 에이전트 모두에서 작동합니다. 작업은 Kudu를 사용하여 파일을 Azure App Service 복사합니다.

Zip 배포

Zip 배포는 선택한 패키지 또는 폴더에서 .zip 배포 패키지를 만듭니다. 그런 다음 Azure에서 App Service 이름 함수 앱의 wwwroot 폴더에 파일 콘텐츠를 배포합니다. 이 옵션은 wwwroot 폴더의 모든 기존 콘텐츠를 덮어씁니다. 자세한 내용은 Azure Functions 대한 Zip 배포를 참조하세요.

패키지에서 실행

패키지에서 실행은 Zip 배포와 동일한 배포 패키지를 만듭니다. Wwwroot 폴더에 파일을 배포하는 대신 Functions 런타임은 전체 패키지를 탑재합니다. 이 옵션을 사용하면 wwwroot 폴더의 파일이 읽기 전용이 됩니다. 자세한 내용은 패키지 파일에서 Azure Functions 실행을 참조하세요.

문제 해결

오류: Azure에 대한 액세스 토큰을 가져올 수 없습니다. 사용된 서비스 주체가 유효하고 만료되지 않았는지 확인합니다.

작업은 서비스 연결에서 서비스 주체를 사용하여 Azure로 인증합니다. 서비스 주체가 만료되었거나 App Service 대한 권한이 없는 경우 이 오류와 함께 작업이 실패합니다. 사용된 서비스 주체의 유효성을 검사하고 앱 등록에 표시되는지 확인합니다. 자세한 내용은 역할 기반 액세스 제어를 사용하여 Azure 구독 리소스에 대한 액세스 관리를 참조하세요. 이 블로그 게시물에 는 서비스 주체 인증 사용에 대한 자세한 정보도 포함되어 있습니다.

SSL 오류

App Service 인증서를 사용하려면 신뢰할 수 있는 인증 기관에서 인증서에 서명해야 합니다. 웹앱에서 인증서 유효성 검사 오류가 발생한 경우 자체 서명된 인증서를 사용하고 있을 수도 있습니다. 라는 VSTS_ARM_REST_IGNORE_SSL_ERRORS 변수를 빌드 또는 릴리스 파이프라인의 값 true 으로 설정하여 오류를 resolve.

릴리스가 오랜 시간 동안 중단된 후 실패합니다.

이 문제는 App Service 계획에서 용량이 부족하여 발생할 수 있습니다. 이 문제를 resolve 위해 App Service instance 확장하여 사용 가능한 CPU, RAM 및 디스크 공간을 늘리거나 다른 App Service 계획을 사용해 볼 수 있습니다.

5xx 오류 코드

5xx 오류가 표시되는 경우 Azure 서비스의 상태 검사.

Azure Function이 갑자기 작동 중지됨

Azure Functions 마지막 배포 이후 1년이 넘은 경우 갑자기 작동이 중지될 수 있습니다. "deploymentMethod"에서 "RunFromPackage"를 사용하여 배포하는 경우 만료 날짜가 1년인 SAS가 생성되고 애플리케이션 구성에서 "WEBSITE_RUN_FROM_PACKAGE" 값으로 설정됩니다. Azure Functions 이 SAS를 사용하여 함수 실행을 위해 패키지 파일을 참조하므로 SAS가 만료된 경우 함수가 실행되지 않습니다. 이 문제를 resolve 다시 배포하여 만료 날짜가 1년인 SAS를 생성합니다.

오류: 지정된 패턴을 가진 패키지를 찾을 수 없음

작업에 언급된 패키지가 빌드 또는 이전 단계에서 아티팩트로 게시되고 현재 작업에 다운로드되었는지 확인합니다.

오류: zip 배포를 사용하여 게시 옵션은 msBuild 패키지 유형에 대해 지원되지 않습니다.

MSBuild 작업을 통해 만든 웹 패키지(기본 인수 포함)에는 웹 배포에서만 올바르게 배포할 수 있는 중첩된 폴더 구조가 있습니다. 게시-zip 배포 옵션은 해당 패키지를 배포하는 데 사용할 수 없습니다. 패키징 구조를 변환하려면 다음 단계를 수행합니다.

  1. 솔루션 빌드 작업에서 MSBuild 인수 를 로 변경합니다 /p:DeployOnBuild=true /p:DeployDefaultTarget=WebPublish /p:WebPublishMethod=FileSystem /p:DeleteExistingFiles=True /p:publishUrl="$(System.DefaultWorkingDirectory)\\WebAppContent".

    솔루션 빌드 값을 보여 주는 스크린샷

  2. 보관 작업을 추가하고 다음과 같이 값을 변경합니다.

    1. 루트 폴더 또는 파일을 보관으로 변경합니다$(System.DefaultWorkingDirectory)\\WebAppContent.

    2. 경로 검사 보관하기 위해 루트 폴더 이름 앞에 추가 상자를 선택 취소합니다.

      보관 값을 보여 주는 스크린샷

Windows에서 함수 앱 배포가 성공하지만 앱이 작동하지 않음

이 문제는 앱에 web.config 파일이 없는 경우 발생할 수 있습니다. web.config 파일을 원본에 추가하거나 작업의 애플리케이션 및 구성 설정을 사용하여 자동으로 생성할 수 있습니다.

  1. 작업을 선택하고 Python, Node.js, Go 및 Java 앱에 대한 web.config 매개 변수 생성으로 이동합니다.

    web.config 매개 변수 생성 섹션을 보여 주는 스크린샷

  2. Python, Node.js, Go 및 Java 앱에 대한 web.config 매개 변수 생성에서 자세히 단추(...)를 선택하여 매개 변수를 편집합니다.

    web.config 매개 변수 생성을 보여 주는 스크린샷

  3. 애플리케이션 프레임워크 목록에서 애플리케이션 유형을 선택합니다.

  4. 확인을 선택합니다. 이렇게 하면 web.config 파일을 생성하는 데 필요한 web.config 매개 변수가 채워집니다.

FAQ

서비스 연결을 구성하려면 어떻게 해야 하나요?

이 작업에는 Azure Resource Manager 서비스 연결이 필요합니다.

Application Insights를 사용하여 웹 작업 배포를 구성해야 하나요?

App Service 배포할 때 Application Insights를 구성하고 를 사용하도록 설정한 Remove additional files at destination경우 을 사용하도록 설정Exclude files from the App_Data folder해야 합니다. 이 옵션을 사용하도록 설정하면 Application Insights 확장이 안전한 상태로 유지됩니다. Application Insights 연속 WebJob이 App_Data 폴더에 설치되므로 이 단계가 필요합니다.

App Service 배포하는 동안 프록시 뒤에 있는 경우 에이전트를 구성하려면 어떻게 해야 하나요?

자체 호스팅 에이전트에 웹 프록시가 필요한 경우 구성 중에 에이전트에 프록시에 대해 알릴 수 있습니다. 이렇게 하면 에이전트가 Azure Pipelines에 연결하거나 프록시를 통해 Azure DevOps Server 수 있습니다. 웹 프록시 뒤에서 자체 호스팅 에이전트를 실행하는 방법에 대해 자세히 알아봅니다.

Azure Resource Manager 서비스 연결 및 Microsoft 호스팅 에이전트를 사용하여 내부 App Service Environment 배포할 수 없습니다.

기본적으로 Microsoft 호스팅 에이전트는 App Service Environment 작동하지 않습니다. 대신 App Service Environment 동일한 가상 네트워크에 있는 가상 머신에서 프라이빗 에이전트를 구성해야 합니다. 또한 리소스 간의 통신을 사용하도록 프라이빗 DNS 영역을 설정합니다.

예제

다음은 Windows에서 Azure 함수를 배포하는 샘플 YAML 코드 조각입니다.


variables:
  azureSubscription: Contoso
  # To ignore SSL error, uncomment the below variable
  # VSTS_ARM_REST_IGNORE_SSL_ERRORS: true

steps:
- task: AzureFunctionApp@2
  displayName: Azure Function App Deploy
  inputs:
    azureSubscription: $(azureSubscription)
    appName: samplefunctionapp
    appType: functionApp
    package: $(System.DefaultWorkingDirectory)/**/*.zip

Linux에 함수를 배포하려면 매개 변수를 appType 추가하고 로 설정합니다 appType: functionAppLinux. 값을 functionApp 지정하지 않으면 가 기본값입니다.

배포 메서드를 Zip Deploy로 명시적으로 지정하려면 매개 변수 deploymentMethod: zipDeploy를 추가합니다. 이 매개 변수에 지원되는 또 다른 값은 입니다 runFromPackage. 값을 auto 지정하지 않으면 가 기본값입니다.

CI/CD 파이프라인을 만드는 방법을 보여 주는 연습은 Azure Functions Java 빌드 및 배포를 참조하세요.

요구 사항

요구 사항 Description
파이프라인 유형 YAML, 클래식 빌드, 클래식 릴리스
실행 중 에이전트, DeploymentGroup
요청 없음
Capabilities 이 작업은 작업의 후속 작업에 대한 요구를 충족하지 않습니다.
명령 제한 사항 모두
설정 가능한 변수 모두
에이전트 버전 2.104.1 이상
작업 범주 배포