배포 매니페스트를 사용하여 여러 애플리케이션 및 ASP.NET Core 애플리케이션 실행 - AWS Elastic Beanstalk

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

배포 매니페스트를 사용하여 여러 애플리케이션 및 ASP.NET Core 애플리케이션 실행

배포 매니페스트를 사용하여 Elastic Beanstalk에 애플리케이션을 배포하는 방법을 알릴 수 있습니다. 이 방법을 사용하면 MSDeploy를 사용하여 웹 사이트의 루트 경로에서 실행되는 단일 ASP.NET 애플리케이션의 소스 번들을 생성할 필요가 없습니다. 대신 매니페스트 파일을 사용하여 서로 다른 경로에서 여러 애플리케이션을 실행할 수 있습니다. 또는 ASP.NET Core를 사용하여 앱을 배포하고 실행하도록 Elastic Beanstalk에 지시할 수도 있습니다. 또한 배포 매니페스트를 사용하여 애플리케이션을 실행할 애플리케이션 풀을 구성할 수도 있습니다.

배포 매니페스트는 Elastic Beanstalk에 .NET Core 애플리케이션에 대한 지원을 추가합니다. 배포 매니페스트를 사용하지 않고 .NET Framework 애플리케이션을 배포할 수 있습니다. 하지만 .NET Core 애플리케이션을 Elastic Beanstalk에서 실행하려면 배포 매니페스트가 필요합니다. 배포 매니페스트를 사용할 때는 각 애플리케이션의 사이트 아카이브를 만든 후 배포 매니페스트가 들어 있는 두 번째 ZIP 아카이브에 그 사이트 아카이브를 번들링합니다.

배포 매니페스트는 여러 경로에서 여러 애플리케이션을 실행하는 기능도 추가합니다. 배포 매니페스트는 배포 대상 배열을 정의하는데, 각 배포 대상에는 사이트 아카이브 및 IIS가 이를 실행해야 하는 경로가 들어 있습니다. 예를 들어 /api 경로에서 웹 API를 실행하여 비동기 요청을 처리하고, API를 사용하는 루트 경로에서 웹 앱을 실행할 수 있습니다.

배포 매니페스트를 사용하여 IIS 또는 Kestrel의 애플리케이션 풀을 사용하여 여러 애플리케이션을 실행할 수도 있습니다. 애플리케이션을 주기적으로 다시 시작하거나, 32비트 애플리케이션을 실행하거나, .NET Framework 실행 시간의 특정 버전을 사용하도록 애플리케이션 풀을 구성할 수 있습니다.

완전한 사용자 지정을 하려면 Windows PowerShell에 자체 배포 스크립트를 작성하고 Elastic Beanstalk에 애플리케이션을 설치, 제거 및 다시 시작하기 위해 실행할 스크립트를 알리면 됩니다.

배포 매니페스트와 관련 기능에는 Windows Server 플랫폼 버전 1.2.0 이상이 필요합니다.

.NET Core 앱

배포 매니페스트를 사용하여 Elastic Beanstalk 에서 .NET Core 애플리케이션을 실행할 수 있습니다. .NET Core는 .NET의 교차 플랫폼 버전으로, 명령 줄 도구(dotnet)와 함께 제공됩니다. 이 도구를 사용하여 애플리케이션을 생성하고 로컬로 실행하고 게시하도록 준비할 수 있습니다.

참고

배포 매니페스트를 사용하여 Elastic Beanstalk에서 .NET Core 애플리케이션을 실행하는 자습서 및 샘플 애플리케이션은 자습서: Elastic Beanstalk를 사용한 ASP.NET 코어 애플리케이션 배포 단원을 참조하십시오.

Elastic Beanstalk에서 .NET Core 애플리케이션을 실행하려면 dotnet publish를 실행하고 포함된 모든 디렉터리를 제외한 출력을 ZIP 아카이브로 패키징하면 됩니다. 배포 대상 유형이 aspNetCoreWeb인 배포 매니페스트를 사용하여 사이트 아카이브를 소스 번들에 배치합니다.

다음 배포 매니페스트는 루트 경로에서 dotnet-core-app.zip이라는 사이트 아카이브의 .NET Core 애플리케이션을 실행합니다.

예 aws-windows-deployment-manifest.json - .NET Core
{ "manifestVersion": 1, "deployments": { "aspNetCoreWeb": [ { "name": "my-dotnet-core-app", "parameters": { "archive": "dotnet-core-app.zip", "iisPath": "/" } } ] } }

매니페스트와 사이트 아카이브를 ZIP 아카이브로 번들링하여 소스 번들을 만듭니다.

예 dotnet-core-bundle.zip
. |-- aws-windows-deployment-manifest.json `-- dotnet-core-app.zip

사이트 아카이브에는 컴파일된 애플리케이션 코드, 종속 항목, web.config 파일이 들어 있습니다.

예 dotnet-core-app.zip
. |-- Microsoft.AspNetCore.Hosting.Abstractions.dll |-- Microsoft.AspNetCore.Hosting.Server.Abstractions.dll |-- Microsoft.AspNetCore.Hosting.dll |-- Microsoft.AspNetCore.Http.Abstractions.dll |-- Microsoft.AspNetCore.Http.Extensions.dll |-- Microsoft.AspNetCore.Http.Features.dll |-- Microsoft.AspNetCore.Http.dll |-- Microsoft.AspNetCore.HttpOverrides.dll |-- Microsoft.AspNetCore.Server.IISIntegration.dll |-- Microsoft.AspNetCore.Server.Kestrel.dll |-- Microsoft.AspNetCore.WebUtilities.dll |-- Microsoft.Extensions.Configuration.Abstractions.dll |-- Microsoft.Extensions.Configuration.EnvironmentVariables.dll |-- Microsoft.Extensions.Configuration.dll |-- Microsoft.Extensions.DependencyInjection.Abstractions.dll |-- Microsoft.Extensions.DependencyInjection.dll |-- Microsoft.Extensions.FileProviders.Abstractions.dll |-- Microsoft.Extensions.FileProviders.Physical.dll |-- Microsoft.Extensions.FileSystemGlobbing.dll |-- Microsoft.Extensions.Logging.Abstractions.dll |-- Microsoft.Extensions.Logging.dll |-- Microsoft.Extensions.ObjectPool.dll |-- Microsoft.Extensions.Options.dll |-- Microsoft.Extensions.PlatformAbstractions.dll |-- Microsoft.Extensions.Primitives.dll |-- Microsoft.Net.Http.Headers.dll |-- System.Diagnostics.Contracts.dll |-- System.Net.WebSockets.dll |-- System.Text.Encodings.Web.dll |-- dotnet-core-app.deps.json |-- dotnet-core-app.dll |-- dotnet-core-app.pdb |-- dotnet-core-app.runtimeconfig.json `-- web.config

전체 예제는 자습서를 참조하십시오.

여러 애플리케이션 실행

여러 배포 대상을 정의하여 배포 매니페스트로 여러 애플리케이션을 실행할 수 있습니다.

다음 배포 매니페스트는 .NET Core 애플리케이션 두 개를 구성합니다. WebAPITest 애플리케이션은 몇 개의 웹 API를 구현하며, /api 경로에서 비동기 요청을 수행합니다. ASPNetTest 애플리케이션은 루트 경로에서 요청을 수행하는 웹 애플리케이션입니다.

예 aws-windows-deployment-manifest.json - 여러 앱
{ "manifestVersion": 1, "deployments": { "aspNetCoreWeb": [ { "name": "WebAPITest", "parameters": { "appBundle": "webapi.zip", "iisPath": "/api" } }, { "name": "ASPNetTest", "parameters": { "appBundle": "aspnet.zip", "iisPath": "/" } } ] } }

다음을 통해 여러 애플리케이션으로 구성된 샘플 애플리케이션을 사용할 수 있습니다.

애플리케이션 풀 구성

Windows 환경에서 여러 애플리케이션을 지원할 수 있습니다. 다음 두 가지 방법을 사용할 수 있습니다.

  • Kestrel 웹 서버를 통해 프로세스 외 호스팅 모델을 사용할 수 있습니다. 이 모델을 사용하기 위해 여러 애플리케이션이 하나의 애플리케이션 풀에서 실행되도록 구성할 수 있습니다.

  • 프로세스 내 호스팅 모델을 사용할 수 있습니다. 이 모델에서는 여러 애플리케이션 풀을 사용하여 각 풀마다 하나씩 여러 애플리케이션을 실행할 수 있습니다. IIS 서버를 사용하고 있고 여러 애플리케이션을 실행해야 하는 경우 이 방법을 사용해야 합니다.

하나의 애플리케이션 풀에서 여러 애플리케이션을 실행하도록 Kestrel을 구성하려면 hostingModel="OutofProcess" 파일에 web.config를 추가합니다. 다음 예제를 살펴보세요.

예 web.config - Kestrel의 프로세스 외 호스팅 모델
<configuration> <location path="." inheritInChildApplications="false"> <system.webServer> <handlers> <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" /> </handlers> <aspNetCore processPath="dotnet" arguments=".\CoreWebApp-5-0.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="OutofProcess" /> </system.webServer> </location> </configuration>
예 aws-windows-deployment-manifest.json - 여러 애플리케이션
{ "manifestVersion": 1, "deployments": {"msDeploy": [ {"name": "Web-app1", "parameters": {"archive": "site1.zip", "iisPath": "/" } }, {"name": "Web-app2", "parameters": {"archive": "site2.zip", "iisPath": "/app2" } } ] } }

IIS는 프로세스 내 호스팅 모델을 사용하므로 하나의 애플리케이션 풀에서 여러 애플리케이션을 지원하지 않습니다. 따라서 각 애플리케이션을 하나의 애플리케이션 풀에 할당하여 여러 애플리케이션을 구성해야 합니다. 즉, 하나의 애플리케이션 풀에 하나의 애플리케이션만 할당합니다.

aws-windows-deployment-manifest.json 파일에서 여러 애플리케이션 풀을 사용하도록 IIS를 구성할 수 있습니다. 다음 예제 파일을 참조하여 다음과 같이 업데이트합니다.

  • iisConfig라는 하위 섹션이 포함된 appPools 섹션을 추가합니다.

  • appPools 블록에서 애플리케이션 풀을 나열합니다.

  • deployments 섹션에서 각 애플리케이션에 대한 parameters 섹션을 정의합니다.

  • parameters 섹션은 각 애플리케이션에 대해 아카이브, 실행 경로 및 실행할 appPool을 지정합니다.

다음 배포 매니페스트는 10분마다 애플리케이션을 다시 시작하는 2개의 애플리케이션 풀을 구성합니다. 또한 지정된 경로에서 실행되는 .NET Framework 웹 애플리케이션에 애플리케이션을 연결합니다.

예 aws-windows-deployment-manifest.json - 애플리케이션 풀당 하나의 애플리케이션
{ "manifestVersion": 1, "iisConfig": {"appPools": [ {"name": "MyFirstPool", "recycling": {"regularTimeInterval": 10} }, {"name": "MySecondPool", "recycling": {"regularTimeInterval": 10} } ] }, "deployments": {"msDeploy": [ {"name": "Web-app1", "parameters": { "archive": "site1.zip", "iisPath": "/", "appPool": "MyFirstPool" } }, {"name": "Web-app2", "parameters": { "archive": "site2.zip", "iisPath": "/app2", "appPool": "MySecondPool" } } ] } }

사용자 지정 배포 정의

더욱 세부적인 제어를 위해 사용자 지정 배포를 정의하여 애플리케이션 배포를 완전히 사용자 지정할 수 있습니다.

다음 배포 매니페스트는 install이라는 siteInstall.ps1 스크립트를 실행하도록 Elastic Beanstalk에 지시합니다. 이 스크립트는 인스턴스 시작 및 배포 중에 웹 사이트를 설치합니다. 또한 배포 매니페스트는배포 중에 새 버전을 설치하기 전에 uninstall 스크립트를 실행하고, AWS 관리 콘솔에서 앱 서버 다시 시작을 선택하면 애플리케이션을 다시 시작하는 restart 스크립트를 실행하도록 Elastic Beanstalk에 지시합니다.

예 aws-windows-deployment-manifest.json - 사용자 지정 배포
{ "manifestVersion": 1, "deployments": { "custom": [ { "name": "Custom site", "scripts": { "install": { "file": "siteInstall.ps1" }, "restart": { "file": "siteRestart.ps1" }, "uninstall": { "file": "siteUninstall.ps1" } } } ] } }

매니페스트와 스크립트를 사용하여 소스 번들에 애플리케이션을 실행하는 데 필요한 모든 결과물을 포함시킵니다.

예 Custom-site-bundle.zip
. |-- aws-windows-deployment-manifest.json |-- siteInstall.ps1 |-- siteRestart.ps1 |-- siteUninstall.ps1 `-- site-contents.zip