Azure에서 HTTP 트리거 함수 만들기Create an HTTP triggered function in Azure

참고

Azure Functions용 Python은 현재 미리 보기로 제공되고 있습니다.Python for Azure Functions is currently in preview. 중요 업데이트를 받으려면 GitHub의 Azure App Service 알림 리포지토리를 구독합니다.To receive important updates, subscribe to the Azure App Service announcements repository on GitHub.

이 문서에서는 명령줄 도구를 사용하여 Azure Functions에서 실행되는 Python 프로젝트를 만드는 방법을 보여줍니다.This article shows you how to use command-line tools to create a Python project that runs in Azure Functions. 만드는 함수는 HTTP 요청에 의해 트리거됩니다.The function you create is triggered by HTTP requests. 마지막으로, Azure에서 서버리스 함수로 실행되도록 프로젝트를 게시합니다.Finally, you publish your project to run as a serverless function in Azure.

이 문서는 Azure Functions에 대한 두 편의 빠른 시작 중 첫 번째입니다.This article is the first of two quickstarts for Azure Functions. 이 문서를 완료한 후에는 함수에 Azure Storage 큐 출력 바인딩을 추가합니다.After you complete this article, you add an Azure Storage queue output binding to your function.

필수 조건Prerequisites

시작하려면 다음 조건을 충족해야 합니다.Before you start, you must have the following:

Azure 구독이 아직 없는 경우 시작하기 전에 체험 계정을 만듭니다.If you don't have an Azure subscription, create a free account before you begin.

가상 환경 만들기 및 활성화Create and activate a virtual environment

Python 함수를 로컬로 개발하고 테스트하려면 Python 3.6 환경을 사용해야 합니다.To locally develop and test Python functions, you must work in a Python 3.6 environment. 다음 명령을 실행하여 .env라는 가상 환경을 만들고 활성화합니다.Run the following commands to create and activate a virtual environment named .env.

Bash 또는 터미널 창:Bash or a terminal window:

python3.6 -m venv .env
source .env/bin/activate

PowerShell 또는 Windows 명령 프롬프트:PowerShell or a Windows command prompt:

py -3.6 -m venv .env
.env\scripts\activate

나머지 명령은 가상 환경 내에서 실행됩니다.The remaining commands are run inside the virtual environment.

로컬 Functions 프로젝트 만들기Create a local Functions project

Functions 프로젝트는 Azure의 함수 앱에 해당합니다.A Functions project is the equivalent of a function app in Azure. 동일한 로컬 및 호스팅 구성을 공유하는 함수를 여러 개 포함할 수 있습니다.It can have multiple functions that all share the same local and hosting configurations.

가상 환경에서 다음 명령을 실행하고, 작업자 런타임으로 python을 선택합니다.In the virtual environment, run the following command, choosing python as your worker runtime.

func init MyFunctionProj

MyFunctionProj 라는 폴더가 만들어지며, 이 폴더에는 다음과 같은 세 개 파일이 포함되어 있습니다.A folder named MyFunctionProj is created, which contains the following three files:

  • local.settings.json 파일은 로컬에서 실행될 때 앱 설정과 연결 문자열을 저장하는 데 사용됩니다.local.settings.json is used to store app settings and connection strings when running locally. 이 파일은 Azure에 게시되지 않습니다.This file doesn't get published to Azure.
  • requirements.txt 파일에는 Azure에 게시할 때 설치되는 패키지 목록이 포함되어 있습니다.requirements.txt contains the list of packages to be installed on publishing to Azure.
  • host.json 파일에는 함수 앱의 모든 함수에 영향을 주는 글로벌 구성 옵션이 포함되어 있습니다.host.json contains global configuration options that affect all functions in a function app. 이 파일은 Azure에 게시됩니다.This file does get published to Azure.

다음과 같이 새 MyFunctionProj 폴더로 이동합니다.Navigate to the new MyFunctionProj folder:

cd MyFunctionProj

다음으로, 확장 번들을 사용하도록 host.json 파일을 업데이트합니다.Next, you update the host.json file to enable extension bundles.

바인딩 참조Reference bindings

확장 번들을 사용하면 향후 쉽게 바인딩 확장을 추가할 수 있습니다.Extension bundles makes it easier to add binding extensions down the road. 또한 .NET Core 2.x SDK를 설치할 필요가 없습니다.It also removes the requirement of installing the .NET Core 2.x SDK. 확장 번들을 사용하려면 Core Tools 2.6.1071 이상 버전이 필요합니다.Extension bundles requires version 2.6.1071 of the Core Tools, or a later version.

Azure Functions 2.x 기본 바인딩을 참조하려면 host.json 파일을 열고 다음 코드와 일치하도록 콘텐츠를 업데이트합니다.To reference the Azure Functions 2.x default bindings, open the host.json file and update contents to match the following code.

{
    "version": "2.0",
    "extensionBundle": {
        "id": "Microsoft.Azure.Functions.ExtensionBundle",
        "version": "[1.*, 2.0.0)"
    }
}

이제 프로젝트에 함수를 추가할 수 있습니다.Now, you can add a function to your project.

함수 만들기Create a function

프로젝트에 함수를 추가하려면 다음 명령을 실행합니다.To add a function to your project, run the following command:

func new

HTTP 트리거 템플릿을 선택하고 함수 이름으로 HttpTrigger를 입력한 다음, Enter 키를 누릅니다.Choose the HTTP trigger template, type HttpTrigger as the name for the function, then press Enter.

HttpTrigger 라는 하위 폴더가 만들어지며, 이 폴더에는 다음 파일이 포함되어 있습니다.A subfolder named HttpTrigger is created, which contains the following files:

  • function.json: 함수, 트리거 및 기타 바인딩을 정의하는 구성 파일입니다.function.json: configuration file that defines the function, trigger, and other bindings. 이 파일을 검토하여 scriptFile 값이 함수가 들어 있는 파일을 가리키는지 확인할 수 있으며, 호출 트리거 및 바인딩은 bindings 배열에 정의됩니다.Review this file and see that the value for scriptFile points to the file containing the function, while the invocation trigger and bindings are defined in the bindings array.

    각 바인딩에는 명령, 형식 및 고유한 이름이 필요합니다.Each binding requires a direction, type and a unique name. HTTP 트리거의 입력 바인딩은 httpTrigger 형식이고, 출력 바인딩은 http 형식입니다.The HTTP trigger has an input binding of type httpTrigger and output binding of type http.

  • __init__.py: HTTP 트리거 함수인 스크립트 파일입니다.__init__.py: script file that is your HTTP triggered function. 이 스크립트를 검토하여 기본값 main()이 포함되어 있는지 확인할 수 있습니다.Review this script and see that it contains a default main(). 트리거의 HTTP 데이터는 req라는 바인딩 매개 변수를 사용하여 이 함수에 전달됩니다.HTTP data from the trigger is passed to this function using the req named binding parameter. function.json에 정의되는 reqazure.functions.HttpRequest 클래스의 인스턴스입니다.Defined in function.json, req is an instance of the azure.functions.HttpRequest class.

    function.json에 $return으로 정의되는 반환 개체는 azure.functions.HttpResponse 클래스의 인스턴스입니다.The return object, defined as $return in function.json, is an instance of azure.functions.HttpResponse class. 자세한 내용은 Azure Functions HTTP 트리거 및 바인딩을 참조하세요.To learn more, see Azure Functions HTTP triggers and bindings.

로컬에서 함수 실행Run the function locally

다음 명령은 Azure에 있는 동일한 Azure Functions 런타임을 사용하여 로컬로 실행되는 함수 앱을 시작합니다.The following command starts the function app, which runs locally using the same Azure Functions runtime that is in Azure.

func host start

Functions 호스트가 시작되면 다음과 같이 보기 편하도록 분할된 출력이 표시됩니다.When the Functions host starts, it writes something like the following output, which has been truncated for readability:


                  %%%%%%
                 %%%%%%
            @   %%%%%%    @
          @@   %%%%%%      @@
       @@@    %%%%%%%%%%%    @@@
     @@      %%%%%%%%%%        @@
       @@         %%%%       @@
         @@      %%%       @@
           @@    %%      @@
                %%
                %

...

Content root path: C:\functions\MyFunctionProj
Now listening on: http://0.0.0.0:7071
Application started. Press Ctrl+C to shut down.

...

Http Functions:

        HttpTrigger: http://localhost:7071/api/MyHttpTrigger

[8/27/2018 10:38:27 PM] Host started (29486ms)
[8/27/2018 10:38:27 PM] Job host started

런타임 출력에서 HttpTrigger 함수의 URL을 복사하고 브라우저의 주소 표시줄에 붙여넣습니다.Copy the URL of your HttpTrigger function from the runtime output and paste it into your browser's address bar. 이 URL에 쿼리 문자열 ?name=<yourname>을 추가하고 요청을 실행합니다.Append the query string ?name=<yourname> to this URL and execute the request. 다음은 로컬 함수에서 반환된 GET 요청에 대한 브라우저의 응답을 보여줍니다.The following shows the response in the browser to the GET request returned by the local function:

브라우저에서 로컬로 테스트

이제 함수를 로컬로 실행했으므로 Azure에서 함수 앱 및 기타 필요한 리소스를 만들 수 있습니다.Now that you have run your function locally, you can create the function app and other required resources in Azure.

리소스 그룹 만들기Create a resource group

az group create를 사용하여 리소스 그룹을 만듭니다.Create a resource group with the az group create. Azure 리소스 그룹은 함수 앱, 데이터베이스, 저장소 계정이 관리되었는지 등 Azure 리소스가 배포 및 관리되는 논리적 컨테이너입니다.An Azure resource group is a logical container into which Azure resources like function apps, databases, and storage accounts are deployed and managed.

다음 예제에서는 myResourceGroup이라는 리소스 그룹을 만듭니다.The following example creates a resource group named myResourceGroup.
Cloud Shell을 사용하지 않는 경우 먼저 az login을 사용하여 로그인합니다.If you are not using Cloud Shell, sign in first using az login.

az group create --name myResourceGroup --location westeurope

일반적으로 사용자와 가까운 지역에서 리소스 그룹 및 리소스를 만듭니다.You generally create your resource group and the resources in a region near you. App Service 계획에 대해 지원되는 모든 위치를 확인하려면 az appservice list-locations 명령을 실행합니다.To see all supported locations for App Service plans, run the az appservice list-locations command.

Azure Storage 계정 만들기Create an Azure Storage account

함수는 Azure Storage의 범용 계정을 사용하여 함수에 대한 상태 및 기타 정보를 유지 관리합니다.Functions uses a general-purpose account in Azure Storage to maintain state and other information about your functions. az storage account create 명령을 사용하여 만든 리소스 그룹에 범용 스토리지 계정을 만듭니다.Create a general-purpose storage account in the resource group you created by using the az storage account create command.

다음 명령에서 <storage_name> 자리 표시자를 전역적으로 고유한 저장소 계정 이름으로 바꿉니다.In the following command, substitute a globally unique storage account name where you see the <storage_name> placeholder. Storage 계정 이름은 3자에서 24자 사이여야 하고 숫자 및 소문자만 포함할 수 있습니다.Storage account names must be between 3 and 24 characters in length and may contain numbers and lowercase letters only.

az storage account create --name <storage_name> --location westeurope --resource-group myResourceGroup --sku Standard_LRS

저장소 계정을 만들었으면 Azure CLI는 다음 예와 비슷한 정보를 표시합니다.After the storage account has been created, the Azure CLI shows information similar to the following example:

{
  "creationTime": "2017-04-15T17:14:39.320307+00:00",
  "id": "/subscriptions/bbbef702-e769-477b-9f16-bc4d3aa97387/resourceGroups/myresourcegroup/...",
  "kind": "Storage",
  "location": "westeurope",
  "name": "myfunctionappstorage",
  "primaryEndpoints": {
    "blob": "https://myfunctionappstorage.blob.core.windows.net/",
    "file": "https://myfunctionappstorage.file.core.windows.net/",
    "queue": "https://myfunctionappstorage.queue.core.windows.net/",
    "table": "https://myfunctionappstorage.table.core.windows.net/"
  },
     ....
    // Remaining output has been truncated for readability.
}

Azure에서 함수 앱 만들기Create a function app in Azure

함수 앱은 함수 코드 실행을 위한 환경을 제공합니다.A function app provides an environment for executing your function code. 이를 통해 함수를 논리 단위로 그룹화하여 더욱 쉽게 리소스를 관리, 배포 및 공유할 수 있습니다.It lets you group functions as a logical unit for easier management, deployment, and sharing of resources.

<APP_NAME> 자리 표시자 및 <STORAGE_NAME>의 스토리지 계정 이름을 대신하여 고유한 함수 앱 이름을 사용하여 다음 명령을 실행합니다.Run the following command using a unique function app name in place of the <APP_NAME> placeholder and the storage account name for <STORAGE_NAME>. <APP_NAME>은 함수 앱의 기본 DNS 도메인이기도 합니다.The <APP_NAME> is also the default DNS domain for the function app. 이 이름은 Azure의 모든 앱에서 고유해야 합니다.This name needs to be unique across all apps in Azure.

az functionapp create --resource-group myResourceGroup --os-type Linux \
--consumption-plan-location westeurope  --runtime python \
--name <APP_NAME> --storage-account  <STORAGE_NAME>

참고

Azure Functions, Linux용 소비 계획은 현재 미리 보기로 제공되며 다음 지역에서만 사용할 수 있습니다. 미국 서부, 미국 동부, 서유럽, 동아시아.Azure Functions, Consumption plan for Linux is currently in preview and only available on following regions: West US, East US, West Europe, East Asia. 또한, Linux 및 Windows 앱을 동일한 리소스 그룹에 호스트할 수 없습니다.Moreover, Linux and Windows apps cannot be hosted in the same resource group. Windows 함수 앱 또는 웹앱이 포함된 myResourceGroup이라는 기존 리소스 그룹이 있는 경우 다른 리소스 그룹을 사용해야 합니다.If you have an existing resource group named myResourceGroup with a Windows function app or web app, you must use a different resource group.

이제 로컬 함수 프로젝트를 Azure의 함수 앱에 게시할 준비가 되었습니다.You're now ready to publish your local functions project to the function app in Azure.

함수 앱 프로젝트를 Azure에 배포Deploy the function app project to Azure

Azure에서 함수 앱이 만들어지면 func azure functionapp publish Core Tools 명령을 사용하여 프로젝트 코드를 Azure에 배포할 수 있습니다.After the function app is created in Azure, you can use the func azure functionapp publish Core Tools command to deploy your project code to Azure. 다음 명령에서 <APP_NAME>을 이전 단계의 앱 이름으로 바꿉니다.In the following command, replace <APP_NAME> with the name of your app from the previous step.

func azure functionapp publish <APP_NAME>

보기 편하게 잘린 다음과 유사한 출력이 표시됩니다.You will see output similar to the following, which has been truncated for readability.

Getting site publishing info...
...

Preparing archive...
Uploading content...
Upload completed successfully.
Deployment completed successfully.
Syncing triggers...
Functions in myfunctionapp:
    HttpTrigger - [httpTrigger]
        Invoke url: https://myfunctionapp.azurewebsites.net/api/httptrigger?code=cCr8sAxfBiow548FBDLS1....

이제 Azure에서 함수를 테스트하는 데 사용할 수 있는 프로그램 HttpTrigger의 호출 URL 값을 복사합니다.Copy the Invoke URL value for your HttpTrigger, which you can now use to test your function in Azure. 이 URL에는 함수 키인 code 쿼리 문자열 값이 포함되어 있습니다.The URL contains a code query string value that is your function key. 이 키는 다른 사람이 Azure에서 HTTP 트리거 엔드포인트를 호출하기 어렵게 만듭니다.This key makes it difficult for others to call your HTTP trigger endpoint in Azure.

Azure에서 함수 테스트Test the function in Azure

cURL을 사용하여 배포된 함수를 테스트합니다.Use cURL to test the deployed function. 다음 예와 같이 이전 단계에서 복사한 URL을 사용하여 쿼리 문자열 &name=<yourname>을 URL에 추가합니다.Using the URL that you copied from the previous step, append the query string &name=<yourname> to the URL, as in the following example:

curl https://myfunctionapp.azurewebsites.net/api/httptrigger?code=cCr8sAxfBiow548FBDLS1....&name=<yourname>

cURL을 사용하여 Azure에서 함수를 호출합니다.

또한 복사한 URL을 웹 브라우저의 주소에 붙여넣을 수도 있습니다.You can also paste the copied URL in to the address of your web browser. 다시 한 번 URL에 쿼리 문자열 &name=<yourname>을 추가한 후 요청을 실행합니다.Again, append the query string &name=<yourname> to the URL before you execute the request.

웹 브라우저를 사용하여 함수를 호출합니다.

다음 단계Next steps

HTTP 트리거 함수를 사용하여 Python 함수 프로젝트를 만들고, 로컬 머신에서 실행하고, Azure에 배포했습니다.You've created a Python functions project with an HTTP triggered function, run it on your local machine, and deployed it to Azure. 이제 아래 방법으로 함수를 확장하겠습니다.Now, extend your function by...