모듈 2: AWS의 .NET 컨테이너 개발자 도구
학습 모듈
AWS는 컨테이너화된 .NET 및 .NET Framework 애플리케이션을 구축하고 Amazon ECS, Amazon ECR 및 AWS Fargate에 배포하는 데 도움이 되는 무료 도구 및 통합 개발 환경 도구 키트를 제공합니다. AWS Management Console 외에도 Visual Studio, JetBrains Rider, Visual Studio Code 및 dotnet CLI와의 통합으로 개발 및 지속적 통합 및 배포(CI/CD) 요구 사항을 충족하는 데 적합한 도구를 유연하게 선택할 수 있습니다.
이 모듈에서는 Visual Studio용 AWS 툴킷을 사용하여 Amazon ECS, AWS Fargate 및 Amazon ECR로 작업하고 dotnet CLI 확장을 사용하여 명령줄에서 작업하는 방법을 배웁니다.
소요 시간
60분
Visual Studio를 사용하여 AWS의 컨테이너에.NET 애플리케이션 배포하기
Visual Studio용 AWS 툴킷은 Windows의 Visual Studio용 무료 확장 프로그램입니다(Mac용 Visual Studio는 지원하지 않음). 이 툴킷은 컨테이너 서비스, 마법사 등 애플리케이션을 구축하여 AWS 클라우드에 게시하는 데 도움이 되는 여러 AWS 서비스에 대한 탐색창을 제공합니다. 이러한 마법사는 Visual Studio 내에서 AWS Elastic Beanstalk, Amazon ECS 및 ECR, AWS Fargate 및 AWS App Runner에 .NET 및 .NET Framework 애플리케이션을 배포하는 것을 지원합니다(본 과정에서는 ECS/ECR 및 Fargate에 대한 배포에 중점을 둡니다).
Visual Studio 마켓플레이스( https://marketplace.visualstudio.com/vs)에서 툴킷을 설치하세요. Windows에서 실행되는 Visual Studio에는 다음과 같은 두 가지 지원 버전이 있습니다.
이 툴킷은 로컬 개발 머신에서 실행되는 Visual Studio에 설치할 수 있으며, Amazon Elastic Compute Cloud(EC2)에서 제공하는 라이선스가 포함된 Visual Studio 이미지에도 설치할 수 있습니다. 이러한 이미지는 장기 라이선스 약정 없이 Visual Studio를 가끔 사용해야 하는 개발 시나리오에 적합한 솔루션입니다.
툴킷을 설치한 후에는 사용자를 대신하여 AWS 서비스에 액세스하려면 일련의 보안 인증 정보가 필요합니다. 이를 보안 인증 정보 프로파일이라고 하며, 툴킷은 필요한 경우 이를 생성하는 프로세스를 안내해 줍니다. 그러나 이전에 시스템에서 AWS CLI 또는 AWS Tools for PowerShell과 같은 도구를 사용한 적이 있는 경우, 툴킷은 해당 도구와 함께 사용된 보안 인증 정보 프로파일을 자동으로 탐지하여 AWS 탐색기 도구 창 상단의 프로필: 드롭다운에 나열합니다.
이 창이 보이지 않는 경우 IDE의 보기 메뉴에 있는 AWS 탐색기 항목을 사용하여 창을 표시하세요. 보안 인증 정보 프로파일을 선택(또는 생성)한 다음 탐색기 창의 리전: 드롭다운 컨트롤에서 AWS 리전을 선택하여 시작하세요.
AWS 탐색기 보기에서 Amazon ECS 및 Amazon ECR 사용하기
탐색기에서 보안 인증 정보 프로파일 및 리전을 선택하면 Visual Studio 내에서 Amazon ECS 및 Amazon ECR의 리소스에 액세스할 수 있습니다. AWS 탐색기 창에서 탐색기의 Amazon Elastic Container Service 항목과 두 하위 항목인 클러스터 및 리포지토리를 확장한 후 선택한 리전에 속한 ECR 프라이빗 레지스트리의 기존 클러스터 및 리포지토리를 사용할 수 있습니다. 이 툴킷은 ECR 퍼블릭 레지스트리 사용을 지원하지 않습니다.
아래의 각 항목을 검토하여 탐색기 보기에 표시된 클러스터 그룹, 각 클러스터, 리포지토리 그룹 및 각 리포지토리의 컨텍스트 메뉴에서 사용할 수 있는 기능에 대해 자세히 알아보세요.
클러스터 컨텍스트 메뉴
클러스터 그룹의 컨텍스트 메뉴는 다음 옵션을 제공합니다.
- 새로 고침: 탐색기에 표시된 클러스터 컬렉션을 업데이트합니다.
클러스터 컨텍스트 메뉴
배포되어 탐색기에 표시된 각 클러스터의 컨텍스트 메뉴는 다음과 같은 옵션을 제공합니다.
- 클러스터 세부 정보를 확인합니다(새 문서 창이 열림).
- 클러스터를 삭제합니다.
작업을 실행하는 동안에는 클러스터를 삭제할 수 없습니다. 먼저 보기 메뉴 옵션을 사용하여 클러스터의 세부 정보 보기를 연 다음 보기에서 편집을 선택하고 원하는 작업 값을 0으로 설정하면 클러스터에서 작업을 제거할 수 있습니다. 실행 중인 작업이 모두 제거되면 보기의 삭제 버튼이나 컨텍스트 메뉴 항목을 사용하여 클러스터를 삭제합니다. 클러스터 세부 정보 보기는 다음과 같습니다.
리포지토리 컨텍스트 메뉴
리포지토리 그룹의 컨텍스트 메뉴에는 다음과 같은 옵션이 제공됩니다.
- 리포지토리 생성: 새 리포지토리의 이름을 입력할 수 있는 대화 상자 창이 열립니다. 새 리포지토리는 프라이빗 레지스트리에서만 생성할 수 있습니다.
- 새로 고침: 탐색기에 표시된 리포지토리 컬렉션을 업데이트합니다.
리포지토리 컨텍스트 메뉴
리포지토리 그룹 아래에 나열된 리포지토리의 컨텍스트 메뉴에는 다음과 같은 옵션이 제공됩니다.
- 보기: 리포지토리에 포함된 이미지를 나열하는 새 문서 창이 열립니다. 이미지를 이 리포지토리를 푸시하는 데 필요한 구체적인 명령도 여기에서 볼 수 있습니다.
- 삭제: 리포지토리 삭제를 확인하는 대화 상자가 열립니다. 툴킷은 리포지토리 자체를 삭제하기 전에 리포지토리에 포함된 모든 이미지를 선택적으로 삭제할 수 있습니다(비어 있지 않은 리포지토리는 삭제할 수 없음).
Visual Studio에서 Amazon ECS 및 Amazon ECR에 배포
이 툴킷은 AWS 탐색기에서 클러스터 및 리포지토리를 사용하는 것 외에도 컨테이너 애플리케이션 및 이미지를 Amazon ECS, AWS Fargate 및 Amazon ECR에 배포하는 데 도움이 되는 두 가지 배포 옵션을 제공합니다. 두 옵션 모두 솔루션 탐색기의 애플리케이션 프로젝트 컨텍스트 메뉴(AWS에 게시 및 AWS에 컨테이너 게시(레거시))에서 사용할 수 있습니다.
아래 섹션에서는 이러한 각 옵션과 이러한 옵션을 사용할 수 있는 시기에 대해 설명합니다.
AWS에 게시
AWS에 게시는 AWS Fargate, AWS App Runner 및 AWS Elastic Beanstalk의 가상 머신을 사용하여 Amazon ECS에.NET 애플리케이션 배포를 지원합니다. 또한 컨테이너 이미지를 Amazon ECR에 게시하는 데에도 사용할 수 있습니다. 단일 IDE 포털에서 여러 서비스에 배포하는 것 외에도 AWS에 게시를 사용하면 다음 작업이 가능합니다.
- 애플리케이션을 위한 사용자 지정 배포 프로젝트를 만들 수 있습니다. 사용자 지정 배포 프로젝트를 사용하면 배포 중에 추가 AWS 리소스를 구축하고 사용자 지정 배포 UX 설정을 구성할 수 있습니다. 애플리케이션과 함께 배포 프로젝트를 소스 제어로 확인하면 개발 팀은 Visual Studio 내에서 애플리케이션을 배포할 때 애플리케이션에 적용할 수 있는 동일한 사용자 지정 설정 및 배포 리소스에 액세스할 수 있습니다.
- .NET 명령줄 환경은 NuGet에서 AWS.Deploy.tools 패키지를 설치한 후 사용할 수 있습니다. 명령줄 환경에는 사용자 지정 배포 프로젝트를 사용하여 추가된 옵션을 포함하여 동일한 옵션이 표시됩니다. 명령줄 도구를 사용하는 방법은 이 섹션의 뒷부분에서 설명합니다. AWS 컨테이너 서비스에 배포할 때 애플리케이션에 기존 Dockerfile이 없어도 됩니다. 필요한 경우 Dockerfile이 생성됩니다.
참고: AWS에 게시는 .NET 애플리케이션만 지원하며, .NET Framework를 사용하는 애플리케이션의 배포는 지원하지 않습니다.
참고: AWS App Runner로의 배포는 별도의 과정인 AWS App Runner의 .NET 워크로드에서 설명합니다.
AWS에 게시에는 두 가지 사전 필수 설치가 있으며 둘 중 하나가 누락된 경우 메시지가 표시됩니다. AWS Cloud Development Kit(AWS CDK)는 애플리케이션 배포를 지원하기 위해 AWS 리소스를 프로비저닝하고 구성하는 데 사용됩니다. CDK를 사용하려면 Node.js 설치가 필요합니다. 브라우저에 https://nodejs.org/en/를 열고 최신 장기 지원(LTS) 또는 최신 버전의 Node.js 를 설치합니다. Node.js 설치가 완료되면 명령 셸을 열고 npm install -g aws-cdk 명령을 실행하여 CDK를 설치합니다. 이 두 가지 사전 요구 사항이 설치되면 AWS에 게시를 사용하여 배포할 수 있습니다.
솔루션 탐색기의 애플리케이션 프로젝트에 있는 컨텍스트 메뉴에서 AWS에 게시를 시작합니다. 애플리케이션이 분석되고 레시피라고 하는 여러 배포 옵션이 표시됩니다. Dockerfile로 이미 구성된 애플리케이션의 경우, AWS Fargate를 사용하여 Amazon ECS에 애플리케이션을 배포하거나 컨테이너 이미지를 Amazon ECR로 푸시하는 레시피가 먼저 표시됩니다. 아직 Dockerfile로 구성되지 않은 애플리케이션의 경우 ASP.NET Core 웹 및 웹 API 애플리케이션(Blazor Server 포함) 및 콘솔 애플리케이션에 대해 이러한 옵션이 표시됩니다.
참고: 애플리케이션이 이미 (모든 서비스에) 배포된 경우 게시 UI는 먼저 기존 대상에 재배포하도록 제안합니다. 이 경우 재배포하는 대신 새 대상에 게시 탭 옵션을 선택하여 새 배포를 수행하세요.
아래 스크린샷은 작성 당시 ASP.NET Core 6 웹 애플리케이션에 사용할 수 있는 레시피를 보여줍니다. 애플리케이션에 사용할 수 있는 사용자 지정 배포 프로젝트가 있는 경우, 해당 프로젝트는 AWS에서 제공한 레시피 위에 나열됩니다. 스크린샷에서는 AWS Fargate를 사용하여 Amazon ECS에 게시하는 레시피가 선택되어 있습니다. 오른쪽 패널에는 해당 레시피의 기본 배포 옵션이 표시됩니다.
애플리케이션 이름은 최소 필수 사항입니다. 기본적으로 프로젝트 이름이 사용됩니다. 애플리케이션에 따라 게시 버튼을 선택하여 즉시 배포를 시작할 수 있습니다. 하지만 애플리케이션에서 AWS 서비스를 호출하는 경우 애플리케이션이 서비스 및 서비스 API에 액세스할 수 있는 권한을 포함하여 사용자 지정 역할을 제공해야 합니다. 필요한 경우 배포 전에 애플리케이션의 역할과 원하는 인프라 변경을 지정하려면 설정 편집 버튼을 선택합니다. 예를 들어, 작업 메모리 및 CPU, 네트워크 설정, 로드 밸런싱 및 스케일링 요구 사항을 변경할 수 있습니다. 아래 스크린샷은 선택한 레시피에 사용할 수 있는 몇 가지 옵션을 보여줍니다. 왼쪽의 카테고리(컴퓨팅, 권한, VPC 등)는 배포에 지정할 수 있는 옵션의 범위를 보여줍니다.
Fargate 기반의 Windows 컨테이너는 .NET 프레임워크와 .NET 애플리케이션을 모두 실행할 수 있습니다. Fargate는 현재 애플리케이션용 Windows Server의 두 가지 버전 즉, Windows Server 2019 Full과 Windows Server 2019 Core를 지원합니다. 어떤 버전을 사용하든 AWS는 Windows 운영 체제 라이선스를 대신 관리합니다.
필요한 옵션을 설정한 후 게시 버튼을 선택하여 배포를 시작합니다.
위에 표시된 샘플 ASP.NET Core 웹 애플리케이션의 경우 AWS에 게시는 배포 로그 출력에서 수행할 수 있는 여러 단계를 거칩니다.
- 컨테이너 이미지는 기존 Dockerfile 또는 자동으로 생성된 Dockerfile을 사용하여 빌드됩니다.
- 인증은 Amazon ECR 프라이빗 레지스트리에 대해 수행되며 이미지는 리포지토리로 푸시됩니다. 기본적으로 애플리케이션 배포와 이름이 같은 리포지토리가 사용되지만 게시를 시작하기 전에 배포 설정을 편집하여 다른 리포지토리를 선택할 수 있습니다(리포지토리 이름은 프로젝트 빌드 범주의 설정에서 찾을 수 있음).
- 임시 CDK 프로젝트가 생성되어 배포를 지원하는 데 필요한 리소스(예: 작업 정의, 클러스터 설정, 네트워크 구성 및 기타 설정)를 정의합니다.
- 마지막으로 CDK 프로젝트는 AWS CloudFormation 스택을 배포하여 리소스와 해당 리소스에 배포된 애플리케이션을 시작 및 구성하는 데 사용됩니다.
배포가 완료되면 배포된 애플리케이션 URL(서비스로 배포된 경우)과 함께 CloudFormation 스택에 대한 요약 정보가 창에 표시됩니다. URL을 클릭하면 배포된 애플리케이션에서 브라우저가 실행됩니다.
CI/CD 파이프라인에서 배포
Visual Studio에서 AWS에 게시 기능은 개발자가 IDE를 벗어나지 않고도 애플리케이션을 반복할 수 있도록 설계되었습니다. CI/CD 자동화에 또는 Windows 시스템에서 작업하지 않는 개발자가 사용할 수 있도록 AWS는 dotnet CLI를 확장하는 명령줄 버전을 제공합니다. 이 도구는 NuGet에서 AWS.Deploy.tools 패키지로 제공됩니다.
설치하려면 명령줄 셸을 열고 다음 명령을 실행합니다.
dotnet tool install -g aws.deploy.tools
설치가 완료되면 다음을 실행하여 최상위 명령 옵션을 확인합니다.
dotnet aws
애플리케이션 프로젝트가 포함된 폴더에서 배포를 시작하려면 다음을 실행합니다.
dotnet aws deploy
도구 및 모든 명령에 대한 추가 도움말은 --help 스위치로 사용할 수 있습니다.
CI/CD 자동화에서의 사용을 포함해 AWS.Deploy.tools dotnet CLI 확장을 사용하여 컨테이너화된 애플리케이션을 AWS에 배포하는 방법에 대한 자세한 내용은 이 모듈 뒷부분의 명령줄에서 AWS로 .NET 컨테이너 배포라는 제목의 섹션에서 자세히 설명합니다.
AWS에 게시로 만든 컨테이너 배포 삭제
AWS에 게시 기능을 사용하여 애플리케이션을 배포하는 것은 단순히 AWS CloudFormation 스택에 불과합니다. 다음 방법 중 하나로 배포를 삭제할 수 있습니다.
- AWS Management Console에서 CloudFormation 대시보드로 이동하여 관련 스택을 삭제합니다.
- Visual Studio에서 AWS 탐색기의 AWS CloudFormation 항목을 확장하고 스택을 선택한 다음 스택의 컨텍스트 메뉴에서 삭제를 선택합니다.
- 명령줄 셸에서 AWS.tools.Deploy 패키지가 설치되어 있는 상태로 dotnet aws delete-deployment 명령을 실행합니다.
또한 명령줄 셸에서 AWS Tools for PowerShell 명령 Remove-CFnStack이나 AWS CLI 명령 aws cloudformation delete-stack을 사용하여 배포된 컨테이너 기반 애플리케이션을 나타내는 스택을 삭제할 수 있습니다.
요약
AWS에 게시는 AWS나 클라우드 개발에 대한 광범위한 지식 없이도 컨테이너에서 실행하기에 적합한 .NET 애플리케이션을 AWS에 배포할 수 있도록 사용하기 쉽고 확장 가능한 메커니즘을 제공합니다. 기본 제공 및 사용자 지정 가능한 레시피를 통해 개발자는 개발 중에 Visual Studio 내에서 AWS Fargate 및 기타 컨테이너 기반 서비스를 사용하여 Amazon ECS로 애플리케이션을 편리하게 배포하고 재배포할 수 있습니다. 서버 측 Blazor를 비롯한 ASP.NET Core 웹 및 웹 API 애플리케이션을 AWS의 컨테이너에 배포하려면 AWS에 게시를 사용하는 것이 좋습니다.
AWS에 컨테이너 게시
AWS에 컨테이너 게시는 Visual Studio 내에서 컨테이너화된 .NET 애플리케이션을 AWS로 배포하는 독창적인 마법사 기반 접근 방식입니다. 이제는 레거시 접근 방식으로 간주되는 이 마법사는 이 글의 작성 시점에는 Visual Studio 내에서 계속 지원되지만 향후 버전에서 제거될 수 있습니다.
AWS에 게시와 비교할 때 AWS에 컨테이너 게시에는 다음과 같은 기능과 제한이 있습니다.
- Amazon ECS로의 배포만 지원합니다(AWS Fargate를 사용하거나 사용하지 않음). AWS에 게시는 AWS App Runner 및 AWS Elastic Beanstalk과 같은 가상 머신 서비스도 지원합니다.
- 컨테이너에 대한 ASP.NET Core 웹 및 웹 API 애플리케이션과 콘솔 애플리케이션의 배포를 지원합니다. 이는 AWS에 게시가 제공하는 것과 유사합니다.
- 애플리케이션에 Dockerfile이 이미 있어야 합니다. AWS에 게시와 달리 Dockerfile은 자동 생성되지 않습니다. 애플리케이션 프로젝트에 Dockerfile이 없는 경우 ECS에 컨테이너를 게시하는 옵션이 프로젝트의 컨텍스트 메뉴에 표시되지 않습니다.
- AWS Cloud Development Kit 및 Node.js 에 대한 종속성이 없습니다.
- 마법사에서 제공되는 설정 외에는 배포를 수정할 수 없습니다. AWS에 게시에서 제공하는 것과 같은 사용자 지정 배포 프로젝트는 사용할 수 없습니다.
- NuGet에서 제공되는 닷넷 CLI 도구 확장 프로그램인 Amazon.ecs.tools와 함께 사용할 수 있습니다. 간단한 JSON 형식 구성 파일인 aws-ecs-tools-defaults.json을 사용하면 마법사에서 선택한 구성 설정을 명령줄 환경과 공유할 수 있으며, 이 작업은 명령줄 셸에서 dotnet ecs를 실행하는 것으로 시작됩니다. 명령줄 옵션은 Visual Studio 또는 AWS 도구 키트를 사용할 수 없는 개발자나 CI/CD 시스템에 자동으로 배포하는 데 적합합니다.
참고: 마법사에는 새로운 AWS에 게시 환경으로 전환할 것을 권장하는 배너가 포함되어 있습니다. 향후 어느 시점에 레거시 마법사가 툴킷에서 제거될 예정입니다.
마법사는 AWS 탐색기 창에서 현재 선택한 항목을 기반으로 AWS 보안 인증 정보 및 리전 필드를 미리 채웁니다. 기본적으로 프로젝트의 릴리스 구성은 프로젝트의 이름을 딴 리포지토리에 배포되며, 이 리포지토리는 필요할 때 생성됩니다.
페이지 하단의 배포 대상 드롭다운에는 다음과 같은 네 가지 옵션이 있습니다.
- ECS 클러스터의 서비스는 연중무휴로 실행해야 하는 애플리케이션(예: 웹 애플리케이션 또는 웹 API)에 적합합니다.
- ECS 클러스터의 작업 실행은 콘솔 기반 애플리케이션과 같이 한 번 실행되었다가 종료되는 애플리케이션 코드에 적합합니다. 작업이 종료되면 필요에 따라 수동으로 다시 실행할 수 있습니다.
- ECS 클러스터의 예약된 작업은 종료되기 전에 주기적으로 실행되는 작업에 적합합니다. 배치 프로세스나 야간 ETL 작업을 예로 들 수 있습니다.
- 도커 이미지만 Amazon Elastic Container Registry로 푸시는 애플리케이션용 컨테이너 이미지를 구축하고, 프라이빗 레지스트리에 대해 인증한 후 프라이빗 레지스트리의 리포지토리로 푸시합니다. 퍼블릭 레지스트리의 리포지토리는 지원되지 않습니다.
적절한 대상을 선택하면 다음 버튼이 시작 구성이 정의된 페이지로 이동합니다. 여기와 다음 페이지에서 선택한 데이터가 작업 정의에 자동으로 채워집니다.
ECS 클러스터에 빈 클러스터 생성 필드를 선택하면 마법사가 AWS Fargate를 사용한 배포로 잠깁니다. AWS Fargate를 사용하지 않고 Amazon ECS에 배포하려면 먼저 AWS Management Console과 같은 다른 도구를 사용하여 필요한 클러스터 리소스를 생성한 다음 마법사에서 기존 클러스터를 선택해야 합니다.
마법사 시작 시 ECS 클러스터의 서비스를 선택한 경우 다음 페이지에서는 실행할 작업 수, 컨테이너 인스턴스 수(기본값 1)와 서비스가 유지 관리해야 하는 최소 및 최대 작업 비율을 묻습니다. 기존 서비스를 사용하려면 여기에서 이름을 선택하거나 생성할 새 서비스의 이름을 설정합니다. ECS 클러스터의 작업을 선택한 경우에는 대신 작업 수를 설정하고 작업 그룹에 이름을 지정하라는 메시지가 표시됩니다. 아래 스크린샷은 웹 애플리케이션을 구축할 때 ECS 클러스터의 서비스 옵션을 보여줍니다.
배포 대상이 서비스인 경우 마법사의 다음 페이지에서 상태 확인 페이지가 포함된 Application Load Balancer를 구성할 수 있습니다. 기본적으로 로드 밸런서는 구성되어 있지 않습니다. 작업 기반 배포 대상의 경우 작업을 구성하는 컨테이너가 한 번 실행되고 종료되므로 로드 밸런서 페이지가 표시되지 않습니다.
마법사의 마지막 설정 페이지에는 기존 작업 정의를 사용할지 또는 새 작업 정의를 생성할지를 포함하여 작업 정의에 포함될 추가 옵션이 있습니다. 여기서도 애플리케이션이 AWS 서비스를 호출하는 경우 애플리케이션 코드에 사용할 IAM 역할(작업 역할)을 선택하고, 배포 중에 리소스를 프로비저닝하는 데 필요한 프라이빗 레지스트리 이미지 및 기타 리소스에 대한 액세스 권한을 Amazon ECS에서 맡을 실행 역할을 선택합니다. 마지막으로 노출되어야 하는 컨테이너 포트와 추가 환경 변수를 지정합니다.
모든 설정을 완료한 후 게시를 선택하면 배포가 시작됩니다. 새로운 AWS에 게시 기능과 마찬가지로 이 툴킷은 배포를 완료하는 데 필요한 여러 단계를 안내합니다. 이러한 단계는 마법사의 진행률 출력이나 IDE 출력 창의 Amazon Web Services 창에서 수행할 수 있습니다.
- 애플리케이션이 빌드되고 컨테이너 이미지가 생성됩니다.
- 인증은 Amazon ECR 프라이빗 레지스트리에 대해 수행되며 이미지는 리포지토리로 푸시됩니다. 사용할 리포지토리 이름은 마법사의 첫 페이지에 지정되어 있으며 기본적으로 프로젝트 이름이 지정되었습니다.
- 마법사에서 선택한 설정에 적합한 클러스터 및 기타 리소스가 프로비저닝되고 구성됩니다.
클러스터에 대한 리소스 프로비저닝이 완료되면 툴킷이 클러스터 보기를 엽니다. 여기에서 마법사에 지정된 수에 맞게 실행되기 시작하는 작업의 진행 상황을 모니터링할 수 있으며, 서비스의 경우 마법사 중에 로드 밸런서를 선택했다면 배포된 애플리케이션에 액세스할 URL을 찾을 수 있습니다.
CI/CD 파이프라인에서 컨테이너로 배포
Visual Studio의 AWS에 컨테이너 게시 마법사는 IDE 내에서 애플리케이션을 반복하는 개발자를 위해 설계되었습니다. CI/CD 자동화를 위해 또는 Windows 시스템에서 작업하지 않는 개발자가 사용할 수 있도록 AWS는 닷넷 CLI를 확장하는 NuGet 도구 패키지인 Amazon.ECS.Tools를 제공합니다. 이 도구를 설치하려면 명령줄 셸을 열고 다음 명령을 실행하세요.
dotnet tool install -g Amazon.ECS.Tools.
설치 후 시작하려면 최상위 명령 옵션을 보려면 다음 명령을 실행합니다.
dotnet ecs
배포를 시작하려면 애플리케이션의 프로젝트 폴더 내에서 다음을 실행합니다.
dotnet ecs deploy
도구 및 모든 명령에 대한 추가 도움말은 --help 스위치로 사용할 수 있습니다.
이전에 Visual Studio에서 마법사를 사용하여 배포한 애플리케이션의 경우 마법사에서 선택한 설정을 기본적으로 JSON 형식의 텍스트 파일인 aws-ecs-tols-defaults.json으로 사용할 수 있습니다. 이 파일은 애플리케이션 프로젝트 디렉터리에 있습니다. 이러한 설정은 명령줄 도구에서 읽을 수 있으며 필요에 따라 재정의할 수 있습니다.
CI/CD 자동화에서의 사용을 포함해 Amazon.ECS.Tools dotnet CLI 확장을 사용하여 컨테이너화된 애플리케이션을 AWS에 배포하는 방법에 대한 자세한 내용은 이 모듈 뒷부분의 명령줄에서 AWS로 .NET 컨테이너 배포라는 제목의 섹션에서 자세히 설명합니다.
AWS에 컨테이너 게시로 만든 배포 삭제
AWS에 컨테이너 게시 마법사를 사용하여 만든 배포를 삭제하려면 다음 방법 중 하나를 사용하세요.
- AWS Management Console에서 ECS 대시보드로 이동하여 표시된 목록에서 클러스터를 선택하고 클러스터 세부 정보 보기에서 클러스터 삭제 를 선택합니다.
- Visual Studio에서 배포된 애플리케이션의 클러스터 보기를 열고 편집을 선택한 다음 원하는 작업 수를 0으로 설정합니다. 실행 중인 작업이 없으면 클러스터 보기에서 또는 AWS 탐색기 보기의 클러스터 항목에 있는 컨텍스트 메뉴에서 삭제를 선택하여 클러스터를 삭제합니다.
- 클러스터를 삭제한 후에는 배포 중에 사용된 이미지가 포함된 리포지토리를 삭제해야 할 수도 있습니다.
클러스터를 삭제한 후에는 배포 중에 사용된 이미지가 포함된 리포지토리를 삭제해야 할 수도 있습니다.
참고: Amazon.ECS.Tools 명령줄 확장 프로그램은 배포 삭제를 지원하지 않습니다.
요약
AWS에 컨테이너 게시는 애플리케이션을 Amazon ECS(AWS Fargate 포함 또는 미포함) 및 Amazon ECR에 배포하는 마법사 기반 접근 방식을 제공합니다. AWS에 게시와 달리 ECS에 컨테이너 게시는 Amazon ECS, AWS Fargate 및 Amazon ECR를 배포 대상으로만 지원합니다. 또한 배포 옵션은 마법사 또는 이와 동등한 명령줄에서 제공되는 옵션으로 제한되며 사용자 지정할 수 없습니다. AWS에 게시는 .NET 애플리케이션을 AWS에 배포할 때 선호되는 대체 도구입니다. 하지만 새로운 환경을 도입할 수 없는 팀을 위해 이전 마법사와 명령줄 확장 프로그램은 계속 지원되며 사용할 수 있습니다.
명령줄에서 AWS로 .NET 컨테이너 배포
AWS는 컨테이너화된 .NET 애플리케이션 작업을 위한 두 가지 무료 명령줄 도구를 제공합니다. 둘 다 NuGet에 배포되며, 추가 명령을 통해 닷넷 CLI 환경을 확장하여 Amazon ECS, AWS Fargate 및 Amazon ECR에.NET 애플리케이션을 배포할 수 있습니다. 이러한 dotnet CLI 확장은.NET Framework 애플리케이션 배포를 지원하지 않습니다.
참고: 이 글을 쓰는 시점에 사용자 지정 배포 프로젝트는 명령줄과 Visual Studio에서 모두 사용할 수 있지만 명령줄 도구를 사용해야만 만들 수 있습니다.
AWS.Deploy.Tools
NuGet의 AWS.Deploy.Tools 패키지는 Windows Visual Studio의 AWS에 컨테이너 게시와 같은 명령줄입니다. Windows, macOS 및 Linux 플랫폼에서 사용할 수 있는 명령줄 버전은 Visual Studio에서 제공되는 것과 동일한 배포 레시피를 제공합니다. 여기에는 애플리케이션에 정의된 사용자 지정 배포 프로젝트를 선택할 수 있는 기능이 포함됩니다. 패키지는 GitHub의 오픈 소스 프로젝트로 유지 관리됩니다.
참고: 이 글을 쓰는 시점에 사용자 지정 배포 프로젝트는 명령줄과 Visual Studio에서 모두 사용할 수 있지만 명령줄 도구를 사용해야만 만들 수 있습니다.
패키지를 설치하려면 명령줄 셸을 열고 다음 명령을 실행합니다.
dotnet tool install -g aws.deploy.tools
새 버전이 정기적으로 릴리스됩니다. 업데이트하려면 다음 명령을 실행하세요.
dotnet tool update -g aws.deploy.tools
Visual Studio의 AWS에 게시와 마찬가지로 AWS.Deploy.tools 패키지에는 Node.js 및 AWS Cloud Development Kit에 대한 종속성이 있으므로 이러한 패키지도 반드시 설치해야 합니다.
설치 후 설치가 성공했는지 확인하고 사용 가능한 최상위 명령 옵션을 보려면 다음을 실행합니다.
dotnet aws
명령줄에서 배포를 시작하려면 애플리케이션 프로젝트 파일(.csproj 파일)이 들어 있는 폴더에서 다음 명령을 실행합니다.
dotnet aws deploy
애플리케이션이 분석되고 선택할 수 있도록 번호가 매겨진 배포 레시피가 표시됩니다. 아래 스크린샷에서 이 도구는 현재 Dockerfile이 없는 애플리케이션에 대한 분석을 완료했으며 AWS Elastic Beanstalk의 가상 머신에 배포할 것을 권장하고 있습니다. 하지만 AWS Fargate를 사용하여 컨테이너로 배포하기 위해 원하는 레시피 번호(이 경우 3)를 입력하여 이를 변경할 수 있습니다. 배포 중에 Dockerfile이 생성되어 프로젝트에 추가됩니다.
레시피가 선택되면 일련의 프롬프트가 배포 이름(기본값은 프로젝트 이름이지만 변경할 수 있음)과 같은 필수 정보를 수집합니다. 번호가 매겨진 하위 메뉴를 사용하여 기타 옵션 설정을 조정할 수 있습니다.
위 스크린샷에서 '4'를 누르면 배포에서 빈 역할을 새로 생성하는 대신 애플리케이션이 실행할 때 맡을 사용자 지정 IAM 역할을 선택할 수 있습니다. '더보기'를 입력하면 배포를 위해 구성할 수 있는 추가 고급 옵션을 사용할 수 있습니다.
설정을 완료한 후 Enter 키를 누르면 배포가 시작됩니다. 애플리케이션에 사용자 지정 역할을 지정할 필요가 없고 제안된 기본값을 사용할 수 있는 시나리오의 경우 Enter 키를 두 번 눌러 기본 배포 이름을 확인하고 한 번 더 애플리케이션 배포를 시작하는 것으로 충분합니다.
Visual Studio에서 배포하는 것과 마찬가지로, 컨테이너 레시피를 선택하면 필요한 경우 Dockerfile이 생성되고, 이미지가 구축되어 Amazon ECR로 푸시되며(도구가 사용자를 대신하여 인증함), 인프라를 프로비저닝하기 위해 CDK 프로젝트를 생성한 다음 AWS CloudFormation에 배포합니다. 배포의 이벤트 및 기타 상태 정보가 터미널에 반영됩니다. 마지막으로 클러스터 및 서비스 이름과 같은 기타 요약 정보와 함께 애플리케이션 엔드포인트 URL이 출력됩니다.
애플리케이션 재배포는 명령줄에서도 지원됩니다. dotnet aws deploy가 이전에 배포된 프로젝트의 폴더에서 실행되면 먼저 선택할 기존 배포를 나열한 다음 새 배포를 위한 레시피를 선택할 수 있는 옵션이 표시됩니다.
CI/CD 파이프라인에서 컨테이너 배포
AWS.Deploy.tools는 지속적 통합 및 전달 파이프라인 내에서 사용할 수 있습니다. 그러나 이러한 시나리오에서는 프롬프트가 문제가 될 수 있습니다. 프롬프트를 비활성화하려면 명령에 --silent 스위치를 추가하세요.
프롬프트를 비활성화하면 도구를 실행할 때 배포 설정을 수집할 수 없습니다. 필수 및 선택적 설정을 모두 제공하려면 JSON 형식 텍스트 파일로 지정하고 다음과 같이 --apply 옵션을 사용하여 배포 명령에 파일 이름(선택적 경로 지정)을 제공합니다.
dotnet aws deploy --apply settings.json –-silent
설정 파일 만들기는 이 교육 과정의 범위를 벗어납니다. 도구의 GitHub 리포지토리에 있는 파일 정의로 연결되는 링크는 AWS .NET GitHub 리포지토리에서 배포 설정 파일 생성이라는 제목의 섹션에서 확인할 수 있습니다.
사용자 지정 배포 프로젝트 만들기
이 교육 과정의 주제로 살펴보거나 자세하게 내용을 다루는 것은 아니지만 컨테이너화된 .NET 애플리케이션을 위해 사용자 지정 배포 프로젝트를 만들 수 있습니다. 사용자 지정 배포 프로젝트를 만들면 배포된 애플리케이션을 지원하는 추가 인프라 또는 기타 자산을 추가하고 런타임 환경을 사용자 지정할 수 있습니다. 사용자 지정 배포 프로젝트는 애플리케이션과 함께 소스 컨트롤에 체크인할 수 있으며, 개발 팀 간에 공유하여 Visual Studio에서 배포하든 명령줄에서 배포하든 관계없이 모든 사람이 동일한 설정 및 사용자 지정으로 배포하도록 할 수 있습니다.
Visual Studio에서 AWS에 게시 또는 명령줄의 AWS.Deploy.tools를 사용하여 사용자 지정 배포 프로젝트를 사용하는 방법에 대한 자세한 내용은 https://aws.github.io/aws-dotnet-deploy/docs/deployment-projects/cdk-project/를 참조하세요.
AWS.Deploy.tools를 사용하여 만든 컨테이너 배포 삭제
AWS.Deploy.tools를 사용하여 수행한 애플리케이션 배포와 Visual Studio의 AWS에 게시를 사용하여 수행한 애플리케이션 배포는 명령줄에서 작업할 때 다음 명령을 실행하여 쉽게 삭제할 수 있습니다.
dotnet aws delete-deployment deployment-name
deployment-name을 배포용으로 생성된 AWS CloudFormation 스택의 이름으로 바꾸세요.
Amazon.ECS.Tools
NuGet의 Amazon.ECS.Tools 패키지는 Visual Studio의 AWS에 컨테이너 게시와 같은 명령줄입니다. 이 패키지는 Windows, macOS 및 Linux 플랫폼에서 사용할 수 있으며 GitHub에서 오픈 소스 프로젝트로 유지 관리됩니다. 이 리포지토리에는 AWS Lambda와 AWS Elastic Beanstalk에 배포하는 데 사용되는 두 개의 다른 닷넷 CLI 확장이 포함되어 있습니다.
최상위 명령 옵션을 보려면 다음 명령을 실행합니다.
dotnet ecs
모든 명령에는 --help 스위치를 제공하여 액세스할 수 있는 추가 도움말이 있습니다.
배포를 시작하려면 먼저 서비스에 배포할지(계속 실행), 작업(한 번 실행 후 종료) 또는 예약된 작업(주기적으로 실행, 실행 후 종료)에 배포할지를 결정합니다. 아니면 이미지를 빌드하여 프라이빗 Amazon ECR 레지스트리의 리포지토리로 푸시할 수 있습니다. 이 과정에서 사용하는 샘플 웹 사이트의 경우 지속적으로 실행되는 서비스를 선택하는 것이 좋습니다. --help 스위치를 사용하여 deploy-service 명령을 지정하면 적용할 수 있는 모든 설정이 나열됩니다.
이미지가 푸시되면 시작 유형인 EC2 또는 FARGATE를 입력하라는 메시지가 표시됩니다. EC2 시작 유형의 경우 필요한 클러스터 인프라가 이미 생성되어 있어야 합니다. FARGATE 시작 유형에는 사전 프로비저닝이 필요하지 않지만 작업의 CPU 및 메모리를 지정해야 합니다. 유효한 최신 값 조합은 https://docs.aws.amazon.com/AmazonECS/latest/userguide/task_definition_parameters.html을 참조하세요. 이 조합은 Linux와 Windows 컨테이너 유형 간에 약간 다릅니다.
아래 스크린샷에서는 512MiB 메모리와 해당 256(.25 vCPU) CPU를 갖춘 FARGATE가 시작 유형으로 선택되었습니다. 또한 이 도구에는 배포를 완료하기 전에 클러스터 및 서비스 이름에 대한 값을 입력하라는 메시지가 표시됩니다. 이러한 값을 입력하고 검증하면 배포가 요청되고 명령이 종료됩니다.
참고: 이 모듈의 앞부분에서 설명한 AWS에 게시 및 AWS.Deploy.Tools와 달리 Amazon.ECS.Tools 명령은 배포가 완료될 때까지 기다리지 않습니다. 배포된 애플리케이션 URL과 같은 데이터를 가져오려면 관리 콘솔을 방문하거나 Visual Studio의 클러스터 보기를 사용해야 합니다.
이 배포에서 작성된 설정 파일은 아래 스크린샷에 나와 있습니다. Visual Studio에서 시작한 배포에 대해 작성된 것과 대체로 비슷합니다(IDE 버전은 약간 더 많은 설정을 작성함). 이 파일은 애플리케이션 코드와 함께 소스 코드 리포지토리에 체크인할 수 있으며 Windows의 Visual Studio와 Windows, macOS 및 Linux의 명령줄 배포에서 모두 사용할 수 있습니다. 훨씬 더 광범위한 설정 파일을 직접 선별하여 모든 명령줄 옵션에 값을 제공할 수 있습니다. 편의상 옵션 이름은 설정 파일의 키와 일치합니다.
CI/CD 파이프라인에서 컨테이너 배포
Amazon.ECS.Tools는 지속적 통합 및 전달 파이프라인 내에서 사용할 수 있습니다. 그러나 이러한 시나리오에서는 프롬프트가 문제가 될 수 있습니다. 프롬프트를 비활성화하려면 명령에 --disable-interactive 스위치를 추가하세요.
프롬프트를 비활성화하면 도구를 실행할 때 배포 설정을 수집할 수 없습니다. 필수 및 선택적 설정을 모두 제공하려면 JSON 형식 설정 파일에서 해당 설정을 지정하고 --config-file 옵션을 사용하여 배포 명령에 파일 이름(선택적 경로 지정)을 제공합니다.
Amazon.ECS.Tools를 사용하여 만든 컨테이너 배포 삭제
Amazon.ECS.Tools는 명령줄에서 배포된 컨테이너 애플리케이션 삭제를 지원하지 않습니다. 배포를 삭제하려면 다음 옵션 중 하나를 사용하세요.
- AWS Management Console에서 ECS 대시보드로 이동하여 표시된 목록에서 클러스터를 선택하고 클러스터 세부 정보 보기에서 클러스터 삭제 를 선택합니다.
- Visual Studio에서 배포된 애플리케이션의 클러스터 보기를 열고 편집을 선택한 다음 원하는 작업 수를 0으로 설정합니다. 실행 중인 작업이 없으면 클러스터 보기에서 또는 AWS 탐색기 보기의 클러스터 항목에 있는 컨텍스트 메뉴에서 삭제를 선택하여 클러스터를 삭제합니다.
클러스터를 삭제한 후에는 배포 중에 사용된 이미지가 포함된 리포지토리를 삭제해야 할 수도 있습니다.
Azure DevOps에서 AWS로 .NET 컨테이너 배포
Azure DevOps 파이프라인에서 Amazon ECS 및 AWS Fargate로 .NET 애플리케이션을 배포하려면 이 모듈의 앞부분에서 설명한 것처럼 AWS.Deploy.Tools 또는 Amazon.ECS.Tools 닷넷 CLI 확장 프로그램을 사용할 수 있습니다. 두 경우 모두 파이프라인 중에 표시된 대로 도구를 설치한 다음 셸 작업에서 적절한 배포 명령을 실행합니다. 이때 설정 구성 파일을 사용하여 프롬프트 메시지를 표시하지 않도록 하는 --silent(AWS.Deploy.tools) 또는 -disable-interactive-(Amazon.ecs.tools) 옵션과 함께 필수 및 선택적 설정을 제공합니다.
또는 빌드할 때 단순히 프라이빗 Amazon ECR 레지스트리의 리포지토리에 이미지를 푸시하거나 가져와야 하는 시나리오의 경우, Azure DevOps용 AWS 도구 확장에는 편리하게 사용할 수 있는 두 가지 작업이 포함되어 있습니다.
도구는 Azure DevOps 마켓플레이스에서 설치할 수 있습니다. 서비스 보안 인증 정보로 설치 및 구성한 후에는 Amazon ECR 푸시 또는 Amazon ECR 풀 작업을 빌드 파이프라인에 추가합니다. 아래는 push 명령으로 사용할 수 있는 설정의 스크린샷입니다.
이러한 작업을 통해 이전에 파이프라인에서 구축한 이미지에 대한 푸시 또는 풀 작업을 간단하고 편리하게 구성하여 리포지토리에 필요한 인증 프로세스를 자동으로 처리할 수 있습니다. 도구는 GitHub에서 오픈 소스 프로젝트로 유지 관리되며, 설치 후 구성 및 도구 내의 개별 작업에 대한 자세한 내용은 사용 설명서에서 확인할 수 있습니다.
지식 점검
이제 모듈 2, AWS의 .NET 컨테이너 개발 도구를 완료했습니다. 다음 테스트를 통해 지금까지 배운 내용을 확인할 수 있습니다.
1. AWS에 게시 도구는 어떤 서비스에 게시합니까?(2개 선택)
a. Lambda
b. ECS
c. EC2
d. ECR
2. AWS에 게시 도구를 사용하려면 필요한 두 가지 전제 조건은 무엇입니까?
a. C# 및 Node.js
b. CDK 및 Node.js
c. Python 및 CDK
d. Python 및 Node.js
3. AWS.Deploy.tools 패키지는 어떤 운영 체제에서 사용할 수 있습니까?
a. Windows
b. macOS
c. Linuxs
d. 위의 모든 항목
정답: 1-b 및 d, 2-b, 3-d