

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

# Microsoft Azure 앱 서비스의 .NET 애플리케이션을 AWS Elastic Beanstalk로 마이그레이션
<a name="migrate-a-net-application-from-microsoft-azure-app-service-to-aws-elastic-beanstalk"></a>

*Raghavender Madamshitti, Amazon Web Services*

## 요약
<a name="migrate-a-net-application-from-microsoft-azure-app-service-to-aws-elastic-beanstalk-summary"></a>

이 패턴은 Microsoft Azure 앱 서비스에 호스팅된 .NET 웹 애플리케이션을 AWS Elastic Beanstalk로 마이그레이션하는 방법을 설명합니다. 애플리케이션을 Elastic Beanstalk로 마이그레이션하는 방법에는 두 가지가 있습니다.
+ Visual Studio용 AWS Toolkit 사용 - 이 Microsoft Visual Studio IDE용 플러그인은 사용자 지정 .NET 애플리케이션을 AWS에 배포하는 가장 쉽고 간단한 방법을 제공합니다. 이 접근 방식을 사용하면 .NET 코드를 AWS에 직접 배포하고 SQL 서버 데이터베이스용 Amazon Relational Database Service(RDS)와 같은 지원 리소스를 Visual Studio에서 직접 만들 수 있습니다.
+ Elastic Beanstalk에 업로드 및 배포 - 각 Azure 앱 서비스에는 Kudu라는 백그라운드 서비스가 포함되어 있습니다. Kudu는 메모리 덤프 및 배포 로그를 캡처하고, 구성 파라미터를 보고, 배포 패키지에 액세스하는 데 유용합니다. Kudu 콘솔을 사용하여 Azure 앱 서비스 콘텐츠에 액세스하고, 배포 패키지를 추출한 다음, Elastic Beanstalk 콘솔의 업로드 및 배포 옵션을 사용하여 패키지를 Elastic Beanstalk에 업로드할 수 있습니다.

이 패턴은 두 번째 접근 방식(Kudu를 통해 Elastic Beanstalk에 애플리케이션을 업로드)을 설명합니다. 이 패턴에는 AWS Elastic Beanstalk, Amazon Virtual Private Cloud(VPC), Amazon CloudWatch, Amazon Elastic Compute Cloud(Amazon EC2) Auto Scaling, Amazon Simple Storage Service(S3) 및 Amazon Route 53과 같은 AWS 서비스도 사용됩니다. 

.NET 웹 애플리케이션은 Amazon EC2 Auto Scaling 그룹에서 실행되는 AWS Elastic Beanstalk에 배포됩니다. CPU 사용률과 같은 Amazon CloudWatch 지표를 기반으로 조정 정책을 설정할 수 있습니다. 데이터베이스의 경우 애플리케이션 및 비즈니스 요구 사항에 따라 다중 AZ 환경에서 Amazon RDS를 사용하거나 Amazon DynamoDB를 사용할 수 있습니다.

## 사전 조건 및 제한 사항
<a name="migrate-a-net-application-from-microsoft-azure-app-service-to-aws-elastic-beanstalk-prereqs"></a>

**사전 조건 **
+ 활성 상태의 AWS 계정
+ Azure 앱 서비스에서 실행되는 .NET 웹 애플리케이션
+ Azure 앱 서비스 Kudu 콘솔을 사용할 수 있는 권한

**제품 버전**
+ .NET Core(x64) 1.0.1, 2.0.0 이상 또는 .NET Framework 4.x, 3.5([Windows Server .NET 플랫폼 히스토리](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platform-history-dotnet.html) 참조)
+ Windows Server 2012 이상에서 실행되는 IIS(인터넷 정보 서비스) 버전 8.0 이상
+ .NET 2.0 또는 4.0 런타임

## 아키텍처
<a name="migrate-a-net-application-from-microsoft-azure-app-service-to-aws-elastic-beanstalk-architecture"></a>

**소스 기술 스택  **
+  .NET 프레임워크 3.5 이상 또는.NET Core 1.0.1, 2.0.0 이상을 사용하여 개발되고 Azure 앱 서비스에 호스팅된 애플리케이션(웹 앱 또는 API 앱)

**대상 기술 스택**
+ Amazon EC2 Auto Scaling 그룹에서 실행되는 AWS Elastic Beanstalk

**마이그레이션 아키텍처**

![\[Kudu는 Azure 앱 서비스 콘텐츠에 액세스하고 배포 패키지를 가져와 Elastic Beanstalk에 업로드합니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/df606a2d-b0a8-4035-b377-0a760e7300c9/images/dd15f97b-9cf2-4bcc-af45-44df1c4ca4a5.png)


 

**배포 워크플로**

![\[앱을 생성하고 시작 환경에 게시한 다음 환경을 관리하는 배포 워크플로.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/df606a2d-b0a8-4035-b377-0a760e7300c9/images/accec77d-c753-4166-8f27-bd4932b3d884.png)


## 도구
<a name="migrate-a-net-application-from-microsoft-azure-app-service-to-aws-elastic-beanstalk-tools"></a>

**도구**
+ .NET 코어 또는 .NET 프레임워크
+ C\$1
+ IIS
+ Kudu 콘솔

**AWS 서비스 및 특성**
+ [AWS Elastic Beanstalk](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/Welcome.html) – Elastic Beanstalk는 .NET 웹 애플리케이션을 배포하고 확장할 수 있는 사용하기 쉬운 서비스입니다. Elastic Beanstalk는 용량 프로비저닝, 로드 밸런싱 및 오토 스케일링을 자동으로 관리합니다.
+ [Amazon EC2 Auto Scaling 그룹](https://docs.aws.amazon.com/autoscaling/ec2/userguide/AutoScalingGroup.html) – Elastic Beanstalk에는 환경에서 Amazon EC2 인스턴스를 관리하는 Auto Scaling 그룹이 포함됩니다. 단일 인스턴스 환경에서 Auto Scaling 그룹은 실행 중인 인스턴스가 항상 한 개가 있도록 보장합니다. 로드 밸런싱된 환경에서 사용자가 실행할 다양한 인스턴스로 이루어진 그룹을 구성하면 Amazon EC2 Auto Scaling에서는 로드를 기준으로 필요에 따라 인스턴스를 추가하거나 제거합니다.
+ [Elastic Load Balancing](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html) – AWS Elastic Beanstalk에서 로드 밸런싱을 활성화하면 환경의 EC2 인스턴스 간에 트래픽을 분산하는 로드 밸런서가 생성됩니다.
+ [Amazon CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html) – Elastic Beanstalk는 애플리케이션과 환경 리소스에 대한 정보를 제공하기 위해 Amazon CloudWatch를 자동으로 사용합니다. Amazon CloudWatch는 표준 지표, 사용자 지정 지표 및 경보를 지원합니다.
+ [Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/Welcome.html) - Amazon Route 53은 가용성과 확장성이 뛰어난 도메인 이름 시스템(DNS) 웹 서비스입니다. Route 53 별칭 레코드를 사용하여 사용자 지정 도메인 이름을 AWS Elastic Beanstalk 환경에 매핑할 수 있습니다.

## 에픽
<a name="migrate-a-net-application-from-microsoft-azure-app-service-to-aws-elastic-beanstalk-epics"></a>

### VPC 설정
<a name="set-up-a-vpc"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Virtual Private Cloud(VPC). | AWS 계정에 필요한 정보가 포함된 VPC를 생성하세요. | 시스템 관리자 | 
| 서브넷을 생성합니다. | VPC에서 서브넷 2개 이상을 생성합니다. | 시스템 관리자 | 
| 라우팅 테이블을 생성합니다. | 요구 사항에 따라 라우팅 테이블을 생성합니다. | 시스템 관리자 | 

### AWS Elastic Beanstalk 설정
<a name="set-up-elastic-beanstalk"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Azure 앱 서비스 Kudu 콘솔에 액세스하세요. | Azure 포털에서 앱 서비스 대시보드로 이동한 다음 **고급 도구**, **이동**을 선택하여 Kudu에 액세스합니다. 또는 Azure 앱 서비스 URL을 다음과 같이 수정할 수 있습니다: `https://<appservicename>.scm.azurewebsites.net` | 앱 개발자, 시스템 관리자 | 
| Kudu에서 배포 패키지를 다운로드하세요. | **DebugConsole** 옵션을 선택하여 Windows PowerShell로 이동합니다. 그러면 Kudo 콘솔이 열립니다. `wwwroot` 폴더로 이동하여 다운로드하세요. 그러면 Azure 앱 서비스 배포 패키지가 zip 파일로 다운로드됩니다. 예제는 첨부 문서를 참조하세요. | 앱 개발자, 시스템 관리자 | 
| Elastic Beanstalk를 위한 패키지를 만드세요. | Azure 앱 서비스에서 다운로드한 배포 패키지의 압축을 풉니다. `aws-windows-deployment-manifest.json`이라는 JSON 파일을 생성합니다(이 파일은 .NET Core 애플리케이션에만 필요함). `aws-windows-deployment-manifest.json` 및 Azure 앱 서비스 배포 패키지 파일을 포함하는 zip 파일을 생성합니다. 예제는 첨부 문서를 참조하세요. | 앱 개발자, 시스템 관리자 | 
| 새 Elastic Beanstalk 애플리케이션을 생성하세요. | Elastic Beanstalk 콘솔을 엽니다. 기존 애플리케이션을 선택하거나 새 애플리케이션을 생성합니다. | 앱 개발자, 시스템 관리자 | 
| 환경을 생성합니다. | Elastic Beanstalk 콘솔 **작업** 메뉴에서 **환경 생성**을 선택합니다. 웹 서버 환경 및 .NET/IIS 플랫폼을 선택합니다. 애플리케이션 코드에서 코드 **업로드**를 선택합니다. Elastic Beanstalk용으로 준비한 zip 파일을 업로드한 다음 **환경 생성**을 선택합니다. | 앱 개발자, 시스템 관리자 | 
| Amazon CloudWatch를 구성합니다. | 기본 CloudWatch 모니터링은 기본적으로 활성화됩니다. 구성을 변경하려면 Elastic Beanstalk 마법사에서 게시된 애플리케이션을 선택한 다음 **모니터링**을 선택합니다. | 시스템 관리자 | 
| 배포 패키지가 Amazon S3에 있는지 확인합니다. | 애플리케이션 환경이 생성되면 S3 버킷에서 배포 패키지를 찾을 수 있습니다. | 앱 개발자, 시스템 관리자 | 
| 애플리케이션을 테스트합니다. | 환경이 생성되면 Elastic Beanstalk 콘솔에서 제공된 URL을 사용하여 애플리케이션을 테스트합니다. | 시스템 관리자 | 

## 관련 리소스
<a name="migrate-a-net-application-from-microsoft-azure-app-service-to-aws-elastic-beanstalk-resources"></a>
+ [AWS Elastic Beanstalk 개념](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/concepts.html)(Elastic Beanstalk 설명서)
+ [Elastic Beanstalk에서 .NET 시작하기](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/dotnet-getstarted.html)(Elastic Beanstalk 설명서)
+ [Kudu 콘솔](https://github.com/projectkudu/kudu/wiki/Kudu-console)(GitHub)
+ [‘Kudu’를 사용한 Azure 웹 앱 관리](https://www.gslab.com/blogs/kudu-azure-web-app/)(GS Lab 기사)
+ [사용자 지정 ASP.NET Core Elastic Beanstalk 배포](https://docs.aws.amazon.com/toolkit-for-visual-studio/latest/user-guide/deployment-beanstalk-custom-netcore.html)(Visual Studio용 AWS 툴킷 사용 설명서)
+ [Elastic Load Balancing 설명서](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html)
+ [AWS Elastic Beanstalk 지원 플랫폼](https://docs.amazonaws.cn/en_us/elasticbeanstalk/latest/platforms/platforms-supported.html)(Elastic Beanstalk 설명서)
+ [AWS에 웹 애플리케이션 배포](https://www.c-sharpcorner.com/article/deploying-a-web-application-to-aws/)(C\$1 코너 기사)
+ [오토 스케일링의 크기 조정](https://docs.aws.amazon.com/autoscaling/ec2/userguide/scaling_plan.html)(Amazon EC2 설명서)
+ [Amazon RDS를 위한 고가용성(다중 AZ)](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Concepts.MultiAZ.html)(Amazon RDS 설명서)

## 추가 정보
<a name="migrate-a-net-application-from-microsoft-azure-app-service-to-aws-elastic-beanstalk-additional"></a>

**참고**
+ 온프레미스 또는 Azure SQL Server 데이터베이스를 Amazon RDS로 마이그레이션하는 경우 데이터베이스 연결 세부 정보도 업데이트해야 합니다. 
+ 테스트 목적으로 샘플 데모 애플리케이션이 첨부되어 있습니다.

## 첨부
<a name="attachments-df606a2d-b0a8-4035-b377-0a760e7300c9"></a>

이 문서와 관련된 추가 콘텐츠에 액세스하려면 [attachment.zip](samples/p-attach/df606a2d-b0a8-4035-b377-0a760e7300c9/attachments/attachment.zip) 파일의 압축을 풉니다.