를 실행합니다ASP.NET Amazon EC2 Linux 인스턴스의 코어 웹 API Docker 컨테이너 - AWS 권장 가이드

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

를 실행합니다ASP.NET Amazon EC2 Linux 인스턴스의 코어 웹 API Docker 컨테이너

작성자: Vijai Anand Ramalingam(AWS) 및 Sreelaxmi Pai(AWS)

환경: PoC 또는 파일럿

기술: 컨테이너 및 마이크로서비스, 웹 및 모바일 앱

워크로드: Microsoft

AWS 서비스: Amazon EC2, Elastic Load Balancing(ELB)

요약

이 패턴은 Amazon Web Services(AWS) 클라우드에서 애플리케이션을 컨테이너화하기 시작하는 사용자를 위한 것입니다. 클라우드에서 앱을 컨테이너화하기 시작하면 일반적으로 컨테이너 오케스트레이션 플랫폼이 설정되지 않습니다. 이 패턴을 사용하면 정교한 컨테이너 오케스트레이션 인프라 없이 컨테이너화된 애플리케이션을 테스트AWS할 수 있도록 인프라를 빠르게 설정할 수 있습니다.

현대화 여정의 첫 번째 단계는 애플리케이션을 혁신하는 것입니다. 레거시 인 경우.NET 프레임워크 애플리케이션은 먼저 런타임을 로 변경해야 합니다ASP.NET 코어. 뒤이어 다음과 같이 하십시오.

  • Docker 컨테이너 이미지 생성

  • 해당 이미지에서 Docker 컨테이너를 실행합니다.

  • Amazon Elastic Container Service(Amazon ECS) 또는 Amazon Elastic Kubernetes Service(Amazon )와 같은 컨테이너 오케스트레이션 플랫폼에 애플리케이션을 배포하기 전에 애플리케이션을 검증합니다EKS. 

이 패턴은 Amazon Elastic Compute Cloud(AmazonEC2) Linux 인스턴스에서 최신 애플리케이션 개발의 빌드, 실행 및 검증 측면을 다룹니다.

사전 조건 및 제한 사항

사전 조건 

제품 버전

  • Visual Studio Community 2022 이상

아키텍처

대상 아키텍처

이 패턴은 AWS CloudFormation 템플릿을 사용하여 다음 다이어그램에 표시된 고가용성 아키텍처를 생성합니다. Amazon EC2 Linux 인스턴스는 프라이빗 서브넷에서 시작됩니다. AWS Systems Manager Session Manager는 프라이빗 Amazon EC2 Linux 인스턴스에 액세스하고 Docker 컨테이너에서 API 실행 중인 를 테스트하는 데 사용됩니다.

Amazon EC2 Linux 인스턴스에 액세스하고 Docker 컨테이너에서 API 실행 중인 를 테스트하는 사용자입니다.
  1. 세션 관리자를 통해 Linux 인스턴스에 액세스할 수 있습니다.

도구

AWS 서비스

  • AWS 명령줄 인터페이스 -AWS 명령줄 인터페이스(AWS CLI)는 명령줄 쉘의 명령을 통해 AWS 서비스와 상호 작용하기 위한 오픈 소스 도구입니다. 최소한의 구성으로 브라우저 기반 AWS Management Console에서 제공하는 것과 동등한 기능을 구현하는 AWS CLI 명령을 실행할 수 있습니다.

  • AWS 관리 콘솔 - AWS 관리 콘솔은 AWS 리소스 관리를 위한 광범위한 서비스 콘솔 모음을 구성하고 참조하는 웹 애플리케이션입니다. 처음 로그인하면 콘솔 홈 페이지가 나타납니다. 홈 페이지는 각 서비스 콘솔에 대한 액세스를 제공하고 AWS 관련 작업을 수행하는 데 필요한 정보에 액세스할 수 있는 단일 위치를 제공합니다.

  • AWS Systems Manager Session Manager – Session Manager는 완전 관리형 AWS Systems Manager 기능입니다. Session Manager를 사용하면 Amazon Elastic Compute Cloud(AmazonEC2) 인스턴스를 관리할 수 있습니다. Session Manager는 인바운드 포트를 열거나, Bastion 호스트를 유지 관리하거나, SSH 키를 관리할 필요 없이 안전하고 감사 가능한 노드 관리를 제공합니다.

기타 도구

  • Visual Studio 2022 – Visual Studio 2022는 통합 개발 환경입니다(IDE).

  • Docker — Docker는 운영 체제 수준의 가상화를 사용하여 컨테이너에 소프트웨어를 제공하는 서비스형 플랫폼 (PaaS) 제품 세트입니다.

코드

FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base WORKDIR /app EXPOSE 80 EXPOSE 443 FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build WORKDIR /src COPY ["DemoNetCoreWebAPI/DemoNetCoreWebAPI.csproj", "DemoNetCoreWebAPI/"] RUN dotnet restore "DemoNetCoreWebAPI/DemoNetCoreWebAPI.csproj" COPY . . WORKDIR "/src/DemoNetCoreWebAPI" RUN dotnet build "DemoNetCoreWebAPI.csproj" -c Release -o /app/build FROM build AS publish RUN dotnet publish "DemoNetCoreWebAPI.csproj" -c Release -o /app/publish FROM base AS final WORKDIR /app COPY --from=publish /app/publish . ENTRYPOINT ["dotnet", "DemoNetCoreWebAPI.dll"]

에픽

작업설명필요한 기술

예제를 생성합니다ASP.NET Visual StudioAPI를 사용하는 코어 웹.

예제를 생성하려면 ASP.NET 코어 웹 API에서 다음을 수행합니다.

  1. 비주얼 스튜디오 2022를 엽니다.

  2. 새 프로젝트 생성을 선택합니다.

  3. 를 선택합니다ASP.NET 코어 웹 API 프로젝트 템플릿을 선택하고 다음 를 선택합니다.

  4. 프로젝트 이름에 를 입력하고 다음 DemoNetCoreWebAPI선택합니다.

  5. 생성(Create)을 선택합니다.

  6. 프로젝트를 로컬에서 실행하려면 F5를 누릅니다.

  7. 기본 WeatherForecast API 엔드포인트가 Swagger 를 사용하여 결과를 반환하는지 확인합니다.

  8. 명령 프롬프트를 열고 .csproj 프로젝트 폴더로 이동한 다음 다음 명령을 실행하여 새 웹을 GitHub 리포지토리API로 푸시합니다. 

    git add --all git commit -m “Initial Version” git push
앱 개발자

Dockerfile을 생성합니다.

Docker파일을 생성하려면 다음 중 하나를 수행합니다.

  • 코드 섹션의 샘플 Dockerfile을 사용하여 Dockerfile을 수동으로 생성합니다. 요구 사항에 따라 적절한 .NET 기본 이미지를 선택합니다. .NET 및 에 대한 자세한 내용을 참조하세요ASP.NET 코어 관련 이미지, Docker 허브 참조. 

  • 비주얼 스튜디오와 Docker 데스크톱을 사용하여 Docker파일을 생성합니다. 솔루션 탐색기에서 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 추가 -> Docker Support를 선택합니다. 대상 OS의 경우 Linux를 선택합니다. 새 Dockerfile이 솔루션 파일(.sln)과 동일한 경로에 있는지 확인하십시오. 

변경 사항을 GitHub 리포지토리로 푸시하려면 다음 명령을 실행합니다.

git add --all git commit -m “Dockerfile added” git push
앱 개발자
작업설명필요한 기술

인프라를 설정합니다.

AWS CloudFormation 템플릿을 시작하여 다음을 포함하는 인프라를 생성합니다. 

  • AWS VPC Quick Start를 사용하는 가상 프라이빗 클라우드(VPC)로, 두 개의 가용 영역에 걸쳐 있는 두 개의 퍼블릭 서브넷과 두 개의 프라이빗 서브넷이 있습니다.

  • AWS Systems Manager를 활성화하는 데 필요한 IAM 역할입니다.

  • 프라이빗 서브넷 중 하나에서 최신 SSM 에이전트가 포함된 Amazon Linux 2 데모 인스턴스입니다. 이 인스턴스는 인터넷에서 직접 연결되지는 않지만, Systems AWS Manager Session Manager를 사용하여 Bastion 호스트 없이도 안전하게 액세스할 수 있습니다.

    참고 : Amazon Linux 2의 지원 종료가 임박했습니다. 자세한 내용은 Amazon Linux 2 FAQs를 참조하세요.

Bastion 호스트 없이 Session Manager를 사용하여 프라이빗 Amazon EC2 인스턴스에 액세스하는 방법에 대한 자세한 내용은 Bastion이 없는 세계 블로그 게시물을 참조하세요.

앱 개발자, AWS 관리자, AWS DevOps

Amazon EC2 Linux 인스턴스에 로그인합니다.

프라이빗 서브넷의 Amazon EC2 Linux 인스턴스에 연결하려면 다음을 수행합니다.

  1. Amazon EC2 콘솔을 엽니다.      

  2. 탐색 창에서 Instances(인스턴스)를 선택합니다.

  3. Amazon Linux 2 데모 인스턴스를 선택하고 Connect를 선택합니다.

    참고 : Amazon Linux 2의 지원 종료가 임박했습니다. 자세한 내용은 Amazon Linux 2 FAQs를 참조하세요.

  4. 세션 관리자를 선택합니다.

  5. 연결을 선택하여 새 터미널 창을 엽니다.

  6. 다음 명령을 실행합니다.

     sudo su
앱 개발자

Docker를 설치 및 실행합니다.

Amazon EC2 Linux 인스턴스에서 Docker를 설치하고 시작하려면 다음을 수행합니다.

  1. Docker를 설치하려면 다음 명령을 실행합니다.

    yum install -y docker
  2. Docker 서비스를 시작하려면 다음 명령을 실행합니다.

     service docker start
  3. Docker 설치를 확인하려면 다음 명령을 실행합니다.

    docker info
앱 개발자, AWS 관리자, AWS DevOps

Git을 설치하고 리포지토리를 복제합니다.

Amazon EC2 Linux 인스턴스에 Git을 설치하고 에서 리포지토리를 복제하려면 다음을 GitHub수행합니다.

  1. Git을 설치하려면 다음 명령을 실행합니다.

    yum install git -y
  2. 리포지토리를 복제하려면 다음 명령을 실행합니다.

    git clone https://github.com/<username>/<repo-name>.git
  3. Dockerfile로 이동하려면 다음 명령을 실행합니다.

    cd <repo-name>/DemoNetCoreWebAPI/
앱 개발자, AWS 관리자, AWS DevOps

Docker 컨테이너를 빌드하고 실행합니다.

Docker 이미지를 빌드하고 Amazon EC2 Linux 인스턴스 내에서 컨테이너를 실행하려면 다음을 수행합니다.

  1. 도커 이미지를 생성하려면 다음 명령을 실행합니다.

    docker build -t aspnetcorewebapiimage -f Dockerfile .
  2. 모든 도커 이미지를 보려면 다음 명령을 실행합니다.

    docker images
  3. 컨테이너를 생성하고 실행하려면 다음 명령을 실행합니다.

    docker run -d -p 80:80 --name aspnetcorewebapicontainer aspnetcorewebapiimage
앱 개발자, AWS 관리자, AWS DevOps
작업설명필요한 기술

curl 명령을 API 사용하여 웹을 테스트합니다.

웹 를 테스트하려면 다음 명령을 API실행합니다.

curl -X GET "http://localhost/WeatherForecast" -H "accept: text/plain"

API 응답을 확인합니다.

참고: 로컬에서 실행하는 경우 Swagger에서 각 엔드포인트에 대한 curl 명령을 가져올 수 있습니다.

앱 개발자
작업설명필요한 기술

모든 리소스를 삭제합니다.

스택을 삭제하여 모든 리소스를 제거합니다. 이렇게 하면 사용하지 않는 서비스에 대해 요금이 부과되지 않습니다.

AWS 관리자, AWS DevOps

관련 리소스