API는 개발에서 생산까지 - 섹션 5 - 상태 점검

시리즈 소개


이 블로그 시리즈의 다섯 번째 부분에 오신 것을 환영합니다. 가장 기본적인 예로부터 시작하겠습니다.net5 웹api 및 개발에서 생산까지의 과정.Azure, Docker, GitHub, GitHub 작업을 사용하여 CI/C 배치를 진행하고 인프라 시설을 Pulumi를 사용하는 코드로 사용할 것입니다.
이 문서에서는 CIS 관련 질문을 살펴보겠습니다.
  • Dockerfile
  • 에 건강검진 추가
  • 은 CIS allowedlist에 항목을 추가합니다.yaml
  • TL;박사 01 명


    상태 점검은 서비스 상태를 파악하는 데 매우 중요합니다. 특히 모니터링 솔루션이 있으면 문제가 발생할 때 통지할 수 있습니다.고객에게 영향을 미칠 수 있는 사건을 처리할 충분한 방법이 있기 전에, 고객이 당신의 제품이 작용하지 않는다고 알려주기를 바라는 사람은 아무도 없다.
    Docker healthcheck 명령이 있을 수 있지만, Docker Swam을 실행하지 않을 때, 이것은 엄격하게 필요한 것은 아니지만, Docker Compose를 처리할 수 있습니다. 따라서, 추가하는 것을 권장하지만, 용기 스캔을 무시하기 위해 CIS-DI-006을 allowedlist.yaml에 추가할 수도 있습니다.

    GitHub 저장소


    방울방울 / 견본일기예보 제5부


    이 저장소는 블로그 글 시리즈의 일부로 API가 개발에서 생산에 이르기까지 개발에 관한 다섯 번째 부분이다.표준에 기초하다.net 표준 날씨 API 샘플.


    소개하다.


    네 번째 부분에서 우리는 안전 문제에 들어갈 수 있고 용기 스캐닝과 CI를 연구했다.우리는 매우 중요한 CIS-DI-001을 해결했다.여기서 우리는 CIS-DI-006을 더욱 연구할 것이다.

    요구 사항


    Part 4의 컨텐츠는 계속 제공되므로 GitHub Repo - Part 4의 최종 결과부터 시작해야 합니다.
    만약 당신이 이 시리즈에 계속 관심을 가지고 있다면, 나는 당신을 격려할 것입니다. 그러나 이전의 댓글이 당신에게 이미 지식이 되었다면, 필요 없습니다.

    건강검진 추가


    건강 검사는 시스템 구성 요소의 건강 상태의 중요한 구성 부분인데 왜 알고 싶냐고 물어볼 수도 있습니다.알겠습니다. 만약 당신의 서비스가 서비스 요청이 아니라면, 당신의 고객 직원이 당신에게 전화하기 전에, 당신은 반드시 알고 싶을 것입니다.
    NET 5에는 건강 검진의 모든 샘플을 추가하는 데 도움을 줄 수 있는 멋진 내장 기능이 있지만 Dockle 도구 자체는 이 점을 검사하지 않았다는 것을 명심하세요.Dockerfile에서 실제로 HealCheck 명령을 확인합니다.
    ….그러나 우리는 여전히 API에서 건강 검사를 해야 한다. 그렇지 않으면 검사할 것이 없다.src 폴더에 있습니다.NET 5 API, Startup.cs 파일을 숙지해야 합니다.
    다음은 4 줄에 추가해야 하는 부분입니다.
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddControllers();
        services.AddHealthChecks();
    
        services.AddSwaggerGen(c =>
        {
            c.SwaggerDoc("v1", new OpenApiInfo { Title = "Samples.WeatherForecast.Api", Version = "v1" });
        });
    }
    
    우리가 수정해야 할 또 다른 곳은 더 먼 곳이다. 나는 19줄에 추가했다.
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
            app.UseSwagger();
            app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "Samples.WeatherForecast.Api v1"));
        }
    
        app.UseHttpsRedirection();
    
        app.UseRouting();
    
        app.UseAuthorization();
    
        app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllers();
            endpoints.MapHealthChecks("/health");
        });
    }
    
    이것이 바로 텔레비전의 전체 내용이다.그러나 Docker는 아직 그것을 호출하지 않기 때문에 Dockerfile을 업데이트해야 합니다.
    # Final stage/image
    FROM mcr.microsoft.com/dotnet/runtime-deps:${VERSION}
    
    RUN addgroup -g 1000 dotnet && \
        adduser -u 1000 -G dotnet -s /bin/sh -D dotnet
    
    WORKDIR /app
    COPY --chown=dotnet:dotnet --from=publish /out .
    
    ENV ASPNETCORE_URLS=http://*:8080
    
    HEALTHCHECK --interval=60s --timeout=3s --retries=3 \
        CMD wget localhost:8080/health -q -O - > /dev/null 2>&1
    
    USER dotnet
    EXPOSE 8080
    ENTRYPOINT ["./Samples.WeatherForecast.Api"]
    
    위쪽은 한 부분(Dockerfile의 하반부)으로 1213 줄에 이 부분을 추가했습니다.
    HEALTHCHECK 지침에 대한 자세한 내용은 Docker Docs - Builder - Healthcheck 참조
    사용 중인 옵션에서 60초, 시간 초과 3초로 간격을 설정하고 실패하면 세 번 다시 시도합니다.계속된 13 줄에서 우리는 명령을 집행했다.
    당신은 왜 우리가 curl10curl만 사용하는 것이 좋은지 알고 싶겠지만, 그것은 심지어 설치되어 있지 않습니다!이것이 바로 이 용기 이미지의 박리 방식이다. 만약에 우리가 curl을 사용하고 싶다면 우리는 반드시 apt-get 등을 사용해야 한다.
    그래서 우리는 wget으로 바꾸었다. 여기서 우리는 /health 단점을 호출하고 응답 검사 출력 값을 출력한다.

    구축 및 테스트 시간!

    docker build -t samples-weatherforecast:v5 .docker run -it --rm -p 8080:8080 samples-weatherforecast:v5실행 후 컨테이너의 상태를 확인해야 하며 다음 명령을 사용하여 이 작업을 수행할 수 있습니다.docker container ls

    Remember, you have a minute before it starts checking!


    만약 네가 매우 빠르다면, 너는 아래의 이런 상황을 보게 될 것이다. 컨디션은, 시작이다.

    After 60 seconds, we should see a status of healthy.



    정말 쓸모가 있다!

    저희가 뭘 배웠죠?


    우리는 API에 최소 건강검진을 추가하는 기초 지식과 간단한 절차를 배웠고, Docker가 이를 호출하여 CIS-DI-006을 완화시킬 수 있도록 확보했다.그러나 가장 큰 문제는 우리가 Docker Swarm이나 Docker Compose 이외의 모든 것을 위탁 관리하려면 HEALTHCHECK 지령이 필요합니까? 나의 관점은 우리가 실제로는 필요하지 않다는 것입니다.
    그러나... 우리는 API에 헬스 체크가 있어야 한다. 왜냐하면 우리가 어디에서 그것을 위탁 관리하든지, 우리의 경우, 이것은 Azure의 용기 웹 응용 프로그램이 될 것이다. 우리는 헬스 체크가 필요하다.

    So you may think this is a pointless exercise, but not really, we’ve got the API healthcheck, but we can safely remove the HEALTHCHECK OR comment-out the instructions from our Dockerfile.


    다음


    이 시리즈에서는 다음을 설명합니다.
  • 유닛 테스트 - Docker 및 GitHub 운영
  • 추가 정보

  • https://www.azure.com
  • https://dotnet.microsoft.com/
  • https://www.github.com
  • https://www.docker.com
  • https://www.pulumi.com
  • 좋은 웹페이지 즐겨찾기