programing

Azure 기능이 로컬 환경에서 실행되는지 확인하는 방법은 무엇입니까?Azure 함수에서 역할 환경이 작동하지 않습니다.

padding 2023. 4. 28. 20:20
반응형

Azure 기능이 로컬 환경에서 실행되는지 확인하는 방법은 무엇입니까?Azure 함수에서 역할 환경이 작동하지 않습니다.

현재 환경이 로컬이 아닌지 확인해야 하는 코드 조건이 있습니다.!RoleEnvironment.IsEmulated이제 이것은 Azure 기능에서는 작동하지 않지만 Cloud 서비스에서는 작동합니다.클라우드 서비스에서도 동일한 코드가 공유되므로 솔루션은 클라우드 서비스 및 zero 기능과 함께 작동해야 합니다.

현재 환경이 호스트/오프라인이 아닌 로컬 환경인지 확인하려면 어떻게 해야 합니까?

Fabio Cavalcante의 답변을 기반으로 현재 실행 환경(로컬 또는 호스트)을 확인하는 작동 Azure 함수는 다음과 같습니다.

using System.Net;
using System.Net.Http;
using System.Threading.Tasks;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.Azure.WebJobs.Host;
using System;

namespace AzureFunctionTests
{
    public static class WhereAmIRunning
    {
        [FunctionName("whereamirunning")]
        public static async Task<HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)]HttpRequestMessage req, TraceWriter log)
        {
            bool isLocal = string.IsNullOrEmpty(Environment.GetEnvironmentVariable("WEBSITE_INSTANCE_ID"));

            string response = isLocal ? "Function is running on local environment." : "Function is running on Azure.";

            return req.CreateResponse(HttpStatusCode.OK, response);
        }
    }
}

로컬 개발에서 자동으로 설정되는 환경 변수를 사용할 수 있습니다.

Environment.GetEnvironmentVariable("AZURE_FUNCTIONS_ENVIRONMENT"); // set to "Development" locally

배포/게시(예: Azure) 시 환경 변수를 직접 설정해야 합니다(예: Azure의 함수 앱 설정).

예를 들어 내부 구현에 의존하는 것이 좋은 생각인지 모르겠습니다. WEBSITE_INSTANCE_ID다른 답변에서 조언했습니다.

저는 다음을 통해 저만의 환경 변수를 정의함으로써 매우 간단한 접근 방식을 사용했습니다.local.settings.json:

{
  "IsEncrypted": false,
  "Values": {
    "FUNCTIONS_WORKER_RUNTIME": "dotnet",
    "IS_RUNNING_LOCALLY": true
  }
}

그냥 그렇게 확인합니다.

bool isLocal = Environment.GetEnvironmentVariable("IS_RUNNING_LOCALLY") == "true";

이는 해결 방법이지만 쉽고 직관적이므로 안전해야 합니다.

로 시도했습니다.AZURE_FUNCTIONS_ENVIRONMENT그러나 런타임이 이미 존재한다고 불평하기 때문에 로컬 파일에 설정할 수 없습니다. 예를 들어 환경을 "로컬"로 설정할 수 있었기 때문에 매우 어리석게 보입니다.

추신. 기본 환경과 관련된 버그가 여러 개 있고 설명서에서 주장하는 것처럼 "운영"이 될 것이라고 보장하지 않기 때문에 기본 환경에 의존하는 것은 위험한 것 같습니다.여기를 참조하십시오.

실제 런타임이 사용하는 것과 유사한 접근 방식을 사용하여 Azure에서 실행되는지 여부를 확인할 수 있습니다. https://github.com/Azure/azure-webjobs-sdk-script/blob/efb55da/src/WebJobs.Script/Config/ScriptSettingsManager.cs#L25

이 경우 런타임은 다음과 같은 이름의 앱 설정이 있는지 확인합니다.WEBSITE_INSTANCE_ID

언급URL : https://stackoverflow.com/questions/45026215/how-to-check-azure-function-is-running-on-local-environment-roleenvironment-i

반응형