Azure 기능 개발의 새로운 시대

지난 8월 Azure Functions Live에는 감동적인 공지가 많이 올라왔고 유튜브에서 스트리밍 방송을 진행했다.
또 일부 추가 기능은 Azure 기능 개발의 미래를 바꿀 것이다.이것은 정말 새로운 시대다.
Visual Studio에서 생성된 템플릿 항목에서만 혜택을 받을 수 없습니다.이 기회를 빌려 Azure 기능 개발의 새로운 시대를 이해하다.
여기에서 제공하는 기능의 예시 항목을 사용할 수 있습니다.나는 그것이 너를 도울 수 있기를 바란다.

시바옌 / azure 함수 템플릿


Azure Functions v3 시작 템플릿 프로젝트


의존 주입이 전부다


정적 클래스와 정적 방법으로 Azure 함수를 실현하는 날은 이미 지나갔다.
의존 주입은 의존 해석, 실례 생명주기 관리와 테스트 가능한 표준이 될 것이다.
패키지Microsoft.Azure.Functions.Extensions는 고급 의존 주입 확장을 제공합니다.
https://www.nuget.org/packages/Microsoft.Azure.Functions.Extensions/
많은 Azure SDK는 클라이언트 인스턴스를 별도의 인스턴스로 처리하는 것을 권장합니다.그 외에 모두가 알다시피 우리는 HttpClient 을 하나의 예로 처리해야 한다.
의존 주입을 통해 실례 생명주기 관리를 쉽게 할 수 있습니다.
using Microsoft.Azure.Cosmos;
using Microsoft.Azure.Functions.Extensions.DependencyInjection;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;

[assembly: FunctionsStartup(typeof(FunctionApp1.Startup))]

namespace FunctionApp1
{
    public class Startup : FunctionsStartup
    {
        public override void Configure(IFunctionsHostBuilder builder)
        {
            var context = builder.GetContext();

            // Initialize IHttpClientFactory
            builder.Services.AddHttpClient();

            // Initialize CosmosClient
            builder.Services.AddSingleton(provider =>
                new CosmosClient(context.Configuration.GetConnectionString("CosmosConnection"), new CosmosClientOptions
                {
                    SerializerOptions = new CosmosSerializationOptions
                    {
                        PropertyNamingPolicy = CosmosPropertyNamingPolicy.CamelCase
                    }
                }));
        }
    }
}
함수는 구조 함수 주입을 실행하기 위해 실례적인 방법을 사용한다.
ASP를 사용한 적이 있다면.NET 커널, 이 코드에 익숙해질 거야.
using System.Net.Http;
using System.Threading.Tasks;

using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.Cosmos;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.Extensions.Logging;

namespace FunctionApp1
{
    public class Function1
    {
        // Injected by Function Runtime.
        public Function1(IHttpClientFactory httpClientFactory, CosmosClient cosmosClient)
        {
            // Create new HttpClient
            _httpClient = httpClientFactory.CreateClient();
            _cosmosClient = cosmosClient;
        }

        private readonly HttpClient _httpClient;
        private readonly CosmosClient _cosmosClient;

        [FunctionName("Function1")]
        public async Task<IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Function, "get")] HttpRequest req,
            ILogger log)
        {
            // Use HttpClient
            var httpResponse = await _httpClient.GetAsync("...");

            // Use singleton CosmosClient
            var container = _cosmosClient.GetContainer("Todo", "Items");

            var cosmosResponse = await container.ReadItemStreamAsync("...", new PartitionKey("..."));

            return new OkResult();
        }
    }
}
간단한 코드를 통해 최상의 생명주기 관리를 실현할 수 있다.
PaaS의 경우 주입된 라이프 사이클 관리에 의존하여 완화할 수 있는 SNAT 포트 소진 문제를 주의해야 합니다.

통합 구성


Azure 함수의 가장 큰 단점은 프로그램 코드에서 설정을 인용하기 어렵다는 것이다.
이전에 Environment.GetEnvironmentVariable 연결 문자열을 불러와야 합니다.예, 환경 변수에서 모든 내용을 읽어야 합니다.
이 골치 아픈 문제가 마침내 해결되었다.
제가 DI에 사용하는 패키지는 현재 인용 설정의 공식적인 방식을 제공합니다.
public class Startup : FunctionsStartup
{
    public override void Configure(IFunctionsHostBuilder builder)
    {
        // Get FunctionHostBuilderContext. it's very useful!
        var context = builder.GetContext();

        // Get config section
        var section = context.Configuration.GetSection("Sample");

        // Get storage connection string
        var connectionString = context.Configuration.GetConnectionString("Storage");
    }
}
JSON, 사용자 기밀 등의 로딩 구성을 위한 새로운 확장점도 있습니다.
https://docs.microsoft.com/en-us/azure/azure-functions/functions-dotnet-dependency-injection#customizing-configuration-sources

솔기 없는 옵션 패턴


Azure 함수의 이전 버전에서도 ASP에서 자주 사용하는 옵션 모드를 사용했습니다.순수한 핵심.
그러나 ASP보다 더 복잡한 코드가 많이 필요합니다.NET 커널이지만 지금은 사용하기 쉽습니다.
public class Startup : FunctionsStartup
{
    public override void Configure(IFunctionsHostBuilder builder)
    {
        var context = builder.GetContext();

        builder.Services.Configure<SampleOptions>(context.Configuration.GetSection("Sample"));
    }
}

public class SampleOptions
{
    public string Value { get; set; }
}
현재 미리 설정된 IConfiguration 을 제공합니다. 깨끗한 코드가 있는 옵션 모드를 사용할 수 있습니다.
물론 이 옵션은 유형이 안전합니다.

금고의 비밀


파일이나 Azure 기능의 응용 프로그램 설정에서 기밀을 불러오는 것 외에 다른 방법도 있습니다.
키 라이브러리를 사용하여 안전하게 불러올 수도 있습니다.
public class Startup : FunctionsStartup
{
    public override void Configure(IFunctionsHostBuilder builder)
    {
        // Secrets loaded!
    }

    public override void ConfigureAppConfiguration(IFunctionsConfigurationBuilder builder)
    {
        var builtConfig = builder.ConfigurationBuilder.Build();

        var tokenProvider = new AzureServiceTokenProvider();
        var keyVaultClient = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(tokenProvider.KeyVaultTokenCallback));

        builder.ConfigurationBuilder.AddAzureKeyVault(builtConfig["KeyVaultEndpoint"], keyVaultClient, new DefaultKeyVaultSecretManager());
    }
}
키 라이브러리 인용 기능은 사용하기 쉽지만 키 라이브러리와의 연결은 서비스 노드/개인 노드의 보호를 받을 수 없습니다.

너는 달리기를 할 준비가 되었니?


에서 AOT 컴파일링 기능을 소개했습니다.NET Core 3.0은 이제 Azure 기능에서 사용할 수 있습니다.
프로그램 집합은 본 컴퓨터의 코드를 포함하는데, 이것은 냉각 시작을 개선할 것이다.
https://docs.microsoft.com/en-us/azure/azure-functions/functions-dotnet-class-library#readytorun
나는 그것을 win-x64 에 적용하려고 시도했지만, win-x86 을 위해 그것을 구축할 수 없었다.
dotnet publish -c Release -o ./publish -r win-x64 -p:PublishReadyToRun=true
소비 계획과 결합하면 특히 효과가 있다.

VNET 통합이 가장 좋습니다.


애플리케이션 서비스의 아웃바운드 IP를 사용하여 SQL 데이터베이스나 Cosmos DB의 연결 소스를 제한할 필요가 없습니다.
지역 VNET 통합은 각 서브넷을 기반으로 제한할 수 있습니다.이것은 내가 가장 좋아하는 기능이다.
https://docs.microsoft.com/en-us/azure/app-service/web-sites-integrate-with-vnet
보안 요구 사항이 높은 사용자는 전용 링크를 사용하여 Azure PaaS에 대한 전용 연결을 제공할 수 있습니다.
GitHub에 좋은 예가 하나 있습니다.

Azure 예 / Azure 함수 전용 종료점


예제에서는 Azure 함수를 전용 단점과 함께 트리거와 출력 연결에 사용하는 방법을 보여 줍니다.


이 업데이트를 사용하면 VNET 및 전용 링크를 사용하여 Azure 기능 응용 프로그램과 리소스를 보호할 수 있습니다.경탄했어
지역 VNET 통합과 전용 링크 구조의 결합은 앞으로 더욱 흔해질 것이다.

안전하다


안전이 무엇보다 중요하다.하지만 안전은 어렵다.
걱정하지 마세요. Azure와 Azure 기능은 안전에 필요한 모든 기능을 가지고 있습니다.
https://docs.microsoft.com/en-us/azure/azure-functions/security-baseline
Azure 기능의 모범 사례를 준수하면 애플리케이션의 보안을 보장할 수 있습니다.

결국 IaC 필요


Azure 기능과 기본 응용 프로그램 서비스의 구성 항목은 기능의 수량과 같다.나는 이것이 파스의 운명이라고 생각한다.
인프라 시설을 코드로 채택하는 것은 인프라 시설 배치의 재현성과 일치성에 매우 중요하다.
  • 팔 템플릿
  • https://docs.microsoft.com/en-us/azure/azure-resource-manager/templates/
  • 이두근(팔 DSL)
  • https://github.com/Azure/bicep
  • 지형(강추)
  • https://www.terraform.io/
  • 플로미
  • https://www.pulumi.com/
  • 우리가 모르는 상황에서 부정확한 설정 변경을 했기 때문에, 우리는 모두 이런저런 문제를 겪은 적이 있다.
    IaC의 채택은 IAM 설정을 통해 안전성을 높일 수 있을 뿐만 아니라 Azure 포털을 통해 직접 설정을 변경하는 것을 방지할 수 있다.
    네 번째 Azure 포털 재구축이 발생하면 IaC를 사용하면 영향을 받지 않습니다.😄
    당신의 Azure 서버 없는 생활을 즐겨보세요!

    좋은 웹페이지 즐겨찾기