본문 바로가기

일::개발

Azure Functions: local.settings.json은 어디에 있는가!

잠깐 짬이 생겨서 PC에서 하던 작업을 노트북에서 하려고 pull 했더니 로컬 디버깅이 되지 않는다!

처음 보는 에러 메시지가 나오는데 심지어 에러 메시지에 스펠도 틀렸네 -_-;

에러 메시지처럼 language 설정 문제인 줄 알고 한참 찾아봤는데, 알고 보니 local.settings.json 파일이 없어서 발생하는 문제였다.

Azure Functions Extension 이 만들어주는 Functions 샘플을 보면 .gitignore 에 local.settings.json 이 기본으로 포함되어 있다. 로컬 개발용으로 사용되는 secret key 같은 것들을 repository에 올리지 않는 것이 합리적이기는 한데, 팀원간에 공유 작업을 하거나 여러 환경에서 작업할 때는 불편한 것도 사실이라...

일단은 .gitignore 에서 local.settings.json 항목을 제거해주고 다시 push/ pull 하면 되긴 하는데, 생각난 김에 local.settings.json 을 좀 더 살펴보자.

test uaremine$ cat local.settings.json
{
  "IsEncrypted": true,
  "Values": {
    "FUNCTIONS_WORKER_RUNTIME": "CfDJ8IQutggit700000000000M0XTN/MmVwM000000000000000gewEEkc8RKVAjNcNXvImqGqXaG1zyauuCyr2RccPGtfiSB5qdcMleYXZjoRWBIHZiMky+yOg0B1r/Bg=="
  },
  "ConnectionStrings": {}
}

Azure Functions Extension이 만들어주는(func new --name test --template "HttpTrigger") Functions 템플릿에는 위와 같은 local.settings.json 파일이 포함되어 있다.

 

가만 보면 의미가 있을 것 같은 항목은 FUNCTIONS_WORKER_RUNTIME 뿐인데, encrypt 되어 있어서 무슨 값인지 보이지는 않지만, Functions 만들 때 입력한 값을 돌아켜보면 어렵지 않게 추측할 수 있다.

{
    "IsEncrypted": false,
    "Values": {
        "FUNCTIONS_WORKER_RUNTIME": "node"
    }
}

에러 메시지는 --javascript 로 되어 있는데, 실제 설정 파일에는 node 로 들어 있어서 찾는데 시간이 좀 걸렸다 ㅎㅎ

 

이 템플릿은 HttpTrigger 이라 FUNCTIONS_WORKER_RUNTIME 항목만 있으면 되지만, TimerTrigger 같은 function이라면, 로컬 실행을 위해 더 필요한 항목이 있다.

 

HttpTrigger 이외의 function에 local.settings.json 파일을 수동으로 생성했다면, FUNCTIONS_WORKER_RUNTIME을 설정해줘도 다ㄹ음과 같은 에러가 발생할 것이다.

Azure 문서에는 Azure Functions runtime이 사용하는 스토리지 어카운트를 명시해야 한다고 되어 있다. 

로컬에서 실행할 때는 굳이 Azure 상에 있는 스토리지를 access할 필요가 없으므로 Windows 환경이라면 Storage Emulagor를 이용하는 것으로 하고, 다음과 같이 넣어주면 잘 동작한다. https://docs.microsoft.com/en-us/azure/storage/common/storage-use-emulator 참조

{
    "IsEncrypted": false,
    "Values": {
        "AzureWebJobsStorage": "UseDevelopmentStorage=true",
        "FUNCTIONS_WORKER_RUNTIME": "node"
    }
}

MacOS 라면 Azure Portal에서 해당 Functions가 사용하는 storage account의 Access keys 항목에 있는 Connection string을 넣어주면 된다.

 

local.settings.json 파일에 들어갈 설정값에 대한 정보는 https://docs.microsoft.com/ko-kr/azure/azure-functions/functions-app-settings 참조