

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

# 배포 매니페스트를 사용하여 여러 애플리케이션 및 ASP.NET Core 애플리케이션 실행
<a name="dotnet-manifest"></a>

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

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

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

배포 매니페스트를 사용하여 [사용자 지정 바인딩 및 물리적 경로로 IIS 웹 사이트를 구성](#dotnet-manifest-websites)할 수 있습니다. 이를 통해 애플리케이션을 배포하기 전에 특정 포트 또는 호스트 이름에서 수신 대기하는 웹 사이트를 설정할 수 있습니다.

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

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

배포 매니페스트와 관련 기능에는 Windows Server 플랫폼 [버전 1.2.0 이상](dotnet-v2migration.md)이 필요합니다.

사용 가능한 모든 구성 옵션, 속성, IIS 재설정 건너뛰기와 같은 고급 기능에 대한 자세한 내용은 [배포 매니페스트 스키마 참조](dotnet-manifest-schema.md)를 참조하세요.

**Topics**
+ [.NET Core 앱](#dotnet-manifest-dotnetcore)
+ [여러 애플리케이션 실행](#dotnet-manifest-multiapp)
+ [IIS 웹 사이트 구성](#dotnet-manifest-websites)
+ [Application Request Routing(ARR) 사용](#dotnet-manifest-arr)
+ [애플리케이션 풀 구성](#dotnet-manifest-apppool)
+ [사용자 지정 배포 정의](#dotnet-manifest-custom)
+ [배포 매니페스트 스키마 참조](dotnet-manifest-schema.md)

## .NET Core 앱
<a name="dotnet-manifest-dotnetcore"></a>

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

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

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

**Example aws-windows-deployment-manifest.json - .NET Core**  

```
{
  "manifestVersion": 1,
  "deployments": {
    "aspNetCoreWeb": [
      {
        "name": "my-dotnet-core-app",
        "parameters": {
          "archive": "dotnet-core-app.zip",
          "iisPath": "/"
        }
      }
    ]
  }
}
```

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

**Example dotnet-core-bundle.zip**  

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

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

**Example 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
```

## 여러 애플리케이션 실행
<a name="dotnet-manifest-multiapp"></a>

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

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

**Example aws-windows-deployment-manifest.json - 여러 앱**  

```
{
  "manifestVersion": 1,
  "deployments": {
    "aspNetCoreWeb": [
      {
        "name": "WebAPISample",
        "parameters": {
          "appBundle": "WebApiSampleApp.zip",
          "iisPath": "/api"
        }
      },
      {
        "name": "DotNetSample",
        "parameters": {
          "appBundle": "DotNetSampleApp.zip",
          "iisPath": "/"
        }
      }
    ]
  }
}
```

다음을 통해 여러 애플리케이션으로 구성된 샘플 애플리케이션을 사용할 수 있습니다.
+ **배포 가능한 소스 번들** - [dotnet-multiapp-sample-bundle-v2.zip](samples/dotnet-multiapp-sample-bundle-v2.zip)
+ **소스 코드** - [dotnet-multiapp-sample-source-v2.zip](samples/dotnet-multiapp-sample-source-v2.zip)

## IIS 웹 사이트 구성
<a name="dotnet-manifest-websites"></a>

배포 매니페스트를 사용하여 사용자 지정 바인딩 및 실제 경로로 IIS 웹 사이트를 구성할 수 있습니다. 이는 특정 포트에서 수신 대기하거나, 사용자 지정 호스트 이름을 사용하거나, 특정 디렉터리의 콘텐츠를 제공하는 웹 사이트를 설정해야 할 때 유용합니다.

다음 배포 매니페스트는 특정 포트 번호와 사용자 지정 실제 경로를 사용하여 HTTP에서 수신 대기하는 사용자 지정 IIS 웹 사이트를 구성합니다.

**Example aws-windows-deployment-manifest.json - IIS 웹 사이트 구성**  

```
{
  "manifestVersion": 1,
  "iisConfig": {
    "websites": [
      {
        "name": "MyCustomSite",
        "physicalPath": "C:\inetpub\wwwroot\mysite",
        "bindings": [
          {
            "protocol": "http",
            "port": 8080,
            "hostName": "mysite.local"
          }
        ]
      }
    ]
  },
  "deployments": {
    "aspNetCoreWeb": [
      {
        "name": "my-dotnet-core-app",
        "parameters": {
          "appBundle": "dotnet-core-app.zip",
          "iisWebSite": "MyCustomSite",
          "iisPath": "/"
        }
      }
    ]
  }
}
```

이 예시는 다음과 같이 설정되어 있습니다.
+ "MyCustomSite"라는 웹 사이트가 사용자 지정 물리적 경로로 생성됩니다.
+ 웹 사이트는 특정 호스트 이름으로 포트 8080에 HTTP 바인딩을 갖습니다.
+ ASP.NET Core 애플리케이션은 `iisWebSite` 파라미터를 사용하여 이 사용자 지정 웹 사이트에 배포됩니다.

## Application Request Routing(ARR) 사용
<a name="dotnet-manifest-arr"></a>

Application Request Routing(ARR) 및 URL Rewrite 모듈은 Elastic Beanstalk Windows AMI에 사전 설치되어 사용할 수 있습니다. 이러한 모듈을 사용하면 ebextensions 또는 애플리케이션 구성을 사용하는 IIS 구성을 통해 고급 라우팅 시나리오 및 URL 조작이 가능합니다.

다음 예제는 사용자 지정 포트로 웹 사이트를 구성하는 간단한 배포 매니페스트와 기본 ARR 라우팅을 설정하는 ebextensions 구성을 결합한 것을 보여줍니다.

**Example aws-windows-deployment-manifest.json - 간단한 ARR 설정**  

```
{
  "manifestVersion": 1,
  "iisConfig": {
    "websites": [
      {
        "name": "ARRSite",
        "physicalPath": "C:\\inetpub\\wwwroot\\arrsite",
        "bindings": [
          {
            "protocol": "http",
            "port": 8080,
            "hostName": "localhost"
          }
        ]
      }
    ]
  },
  "deployments": {
    "aspNetCoreWeb": [
      {
        "name": "BackendApp",
        "parameters": {
          "appBundle": "backend-app.zip",
          "iisWebSite": "ARRSite",
          "iisPath": "/backend"
        }
      }
    ]
  }
}
```

ARR 구성은 ebextensions를 통해 수행됩니다. 다음 구성은 기본 ARR 라우팅 규칙을 설정합니다.

**Example .ebextensions/arr-config.config - 기본 ARR 구성**  

```
files:
  "C:\\temp\\configure-arr.ps1":
    content: |
      # Enable ARR proxy at server level
      Set-WebConfigurationProperty -PSPath 'MACHINE/WEBROOT/APPHOST' -Filter 'system.webServer/proxy' -Name 'enabled' -Value 'True'
      
      # Clear any existing global rules to avoid conflicts
      Clear-WebConfiguration -PSPath 'MACHINE/WEBROOT/APPHOST' -Filter 'system.webServer/rewrite/globalRules'

      # Add global rule to route all requests to backend
      Add-WebConfigurationProperty -PSPath 'MACHINE/WEBROOT/APPHOST' `
        -Filter 'system.webServer/rewrite/globalRules' `
        -Name '.' `
        -Value @{
          name = 'Route_to_Backend'
          stopProcessing = 'True'
          match = @{ url = '^(?!backend/)(.*)' }
          action = @{
            type = 'Rewrite'
            url = 'http://localhost:8080/backend/{R:1}'
          }
        }

container_commands:
  01_configure_arr:
    command: powershell -ExecutionPolicy Bypass -File "C:\\temp\\configure-arr.ps1"
    waitAfterCompletion: 0
```

이 구성은 포트 8080에 웹 사이트를 생성하고 모든 수신 요청을 해당 사이트에서 실행되는 백엔드 애플리케이션으로 라우팅하도록 ARR을 설정합니다.

## 애플리케이션 풀 구성
<a name="dotnet-manifest-apppool"></a>

Windows 환경에서 여러 애플리케이션을 지원할 수 있습니다. 다음 두 가지 방법을 사용할 수 있습니다.
+ Kestrel 웹 서버를 통해 프로세스 외 호스팅 모델을 사용할 수 있습니다. 이 모델을 사용하기 위해 여러 애플리케이션이 하나의 애플리케이션 풀에서 실행되도록 구성할 수 있습니다.
+ 프로세스 내 호스팅 모델을 사용할 수 있습니다. 이 모델에서는 여러 애플리케이션 풀을 사용하여 각 풀마다 하나씩 여러 애플리케이션을 실행할 수 있습니다. IIS 서버를 사용하고 있고 여러 애플리케이션을 실행해야 하는 경우 이 방법을 사용해야 합니다.

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

**Example 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>
```

**Example 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 웹 애플리케이션에 애플리케이션을 연결합니다.

**Example 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"
          }
      }
     ]
    }
}
```

## 사용자 지정 배포 정의
<a name="dotnet-manifest-custom"></a>

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

이 배포 매니페스트는 Elastic Beanstalk에 32비트 모드에서 PowerShell 스크립트를 실행하도록 지시합니다. 인스턴스 시작 및 배포 중에 실행되는 스크립트`install`(`siteInstall.ps1`), 배포 중에 새 버전을 설치하기 전에 실행되는 `uninstall` 스크립트(`siteUninstall.ps1`), AWS 관리 콘솔에서 [앱 서버 재시작](environments-dashboard-actions.md)을 선택할 때 실행되는 `restart` 스크립트(`siteRestart.ps1`) 등 세 가지 스크립트를 지정합니다.

**Example aws-windows-deployment-manifest.json - 사용자 지정 배포**  

```
{
  "manifestVersion": 1,
  "deployments": {
    "custom": [
      {
        "name": "Custom site",
        "architecture" : 32,
        "scripts": {
          "install": {
            "file": "siteInstall.ps1"
          },
          "restart": {
            "file": "siteRestart.ps1"
          },
          "uninstall": {
            "file": "siteUninstall.ps1"
          }
        }
      }
    ]
  }
}
```

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

**Example Custom-site-bundle.zip**  

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