

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

# 네트워크 구성 및 포트 설정
<a name="dotnet-migrating-applications-network"></a>

이 섹션은 VPC 설정, 포트 구성, 다중 사이트 배포를 포함한 IIS 마이그레이션의 네트워크 구성 옵션을 다룹니다.

## VPC 구성
<a name="dotnet-migrating-applications-network-vpc"></a>

**eb migrate** 명령은 Elastic Beanstalk 환경을 위한 유연한 VPC 구성 옵션을 제공합니다. 이 도구는 소스 EC2 인스턴스에서 VPC 설정을 감지하거나, 명령줄 파라미터를 통해 사용자 지정 VPC 구성을 받을 수 있습니다. VPC와 함께 Elastic Beanstalk을 구성하는 방법을 이해하려면 [Amazon VPC에서 Elastic Beanstalk 사용](vpc.md)을 검토하세요.

### 자동 VPC 감지
<a name="dotnet-migrating-applications-network-vpc-auto"></a>

**eb migrate**가 EC2 인스턴스에서 실행될 때는, 소스 환경의 EC2 인스턴스에서 VPC 구성을 자동으로 검색해 사용합니다. 다음 예시 출력은 감지한 구성 정보를 보여 줍니다.

```
PS C:\migrations_workspace > eb migrate
Identifying VPC configuration of this EC2 instance (i-0123456789abcdef0):
  id: vpc-1234567890abcdef0
  publicip: true
  elbscheme: public
  ec2subnets: subnet-123,subnet-456,subnet-789
  securitygroups: sg-123,sg-456
  elbsubnets: subnet-123,subnet-456,subnet-789
...
```

감지된 구성에는 다음이 포함됩니다.
+ VPC 식별자
+ 퍼블릭 IP 할당 설정
+ 로드 밸런서 체계(퍼블릭/프라이빗)
+ EC2 인스턴스 서브넷 할당
+ 보안 그룹 연결
+ 로드 밸런서 서브넷 할당

### 온프레미스 또는 비AWS 클라우드 호스트
<a name="dotnet-migrating-applications-network-vpc-onprem"></a>

가 온프레미스 서버 또는 클라우드가 아닌AWS 호스트에서 **eb migrate** 실행되면 Elastic Beanstalk 서비스는 AWS 계정의 기본 VPC를 사용합니다. 다음은 예시 명령 및 출력입니다.

```
PS C:\migrations_worspace> eb migrate `
      -k windows-test-pem `
      --region us-east-1 `
      -a EBMigratedEnv `
      -e EBMigratedEnv-test2 `
      --copy-firewall-config
Determining EB platform based on host machine properties
Using .\migrations\latest to contain artifacts for this migration run.
...
```

Elastic Beanstalk가 환경에 대해 기본 VPC를 어떻게 구성하는지 이해하려면 [Amazon VPC에서 Elastic Beanstalk 사용](vpc.md)를 검토하세요.

### 사용자 지정 VPC 구성
<a name="dotnet-migrating-applications-network-vpc-custom"></a>

특정 VPC 설정이 필요한 소스 환경(EC2, 온프레미스 또는 비AWS 클라우드)의 경우 다음 예제와 같은 VPC 구성 파일을 제공합니다.

```
{
    "id": "vpc-12345678",
    "publicip": "true",
    "elbscheme": "public",
    "ec2subnets": ["subnet-a1b2c3d4", "subnet-e5f6g7h8"],
    "securitygroups": "sg-123456,sg-789012",
    "elbsubnets": ["subnet-a1b2c3d4", "subnet-e5f6g7h8"]
}
```

다음 명령을 사용하여 이 구성을 적용합니다.

```
PS C:\migrations_workspace> eb migrate --vpc-config vpc-config.json
```

**참고**  
VPC 구성 파일에는 VPC ID를 지정하는 `id` 필드가 필요합니다. 나머지 필드는 선택 사항이며, Elastic Beanstalk은 지정하지 않은 필드에 대해 기본값을 사용합니다.

**중요**  
**`--vpc-config` * 파라미터를 지정하면, 마이그레이션 시 소스 환경의 기존 VPC 설정은 무시됩니다.* 이 파라미터를 사용하면 마이그레이션은 전달되는 구성 파일에 지정된 VPC 설정만 사용합니다. 이 파라미터를 사용하면 기본 동작(소스 인스턴스의 VPC 구성을 자동으로 탐색하거나 기본 VPC를 사용하는 동작)이 재정의됩니다.

다음과 같은 시나리오에서는 `--vpc-config` 파라미터를 사용하세요.
+ 탐지 가능한 VPC 설정이 없는 비EC2 환경을 마이그레이션할 경우
+ 소스 환경에서 사용한 VPC와 다른 VPC로 마이그레이션할 경우
+ 서브넷 선택 또는 보안 그룹 구성을 사용자 지정해야 하는 경우
+ 자동 검색에서 원하는 VPC 설정을 올바르게 식별하지 못하는 경우
+ 온프레미스에서 마이그레이션할 때 기본 VPC를 사용하고 싶지 않은 경우

### 네트워크 보안 구성
<a name="dotnet-migrating-applications-network-vpc-security"></a>

기본적으로 **eb migrate**는 대상 인스턴스에서 포트 80만 엽니다. 그러나 소스 시스템의 다른 Windows 방화벽 규칙은 복사하지 않습니다. 모든 방화벽 구성을 포함하려면 다음 명령을 사용하세요.

```
PS C:\migrations_workspace> eb migrate --copy-firewall-config
```

이 명령은 다음 작업을 수행합니다.
+ IIS 사이트 바인딩에서 사용하는 포트 식별
+ 해당 방화벽 규칙 검색
+ PowerShell 스크립트를 생성하여 대상 인스턴스에 대한 규칙 재생성
+ 소스 시스템에서 포트 80에 대한 모든 거부 규칙 보존(그렇지 않으면 포트 80이 기본적으로 허용됨)

소스 시스템에 다음 예제에 지정된 방화벽 규칙이 있는 사용 사례를 고려합니다.

```
# Source machine firewall configuration
Get-NetFirewallRule | Where-Object {$_.Enabled -eq 'True'} | Get-NetFirewallPortFilter | Where-Object {$_.LocalPort -eq 80 -or $_.LocalPort -eq 443 -or $_.LocalPort -eq 8081}
# Output shows rules for ports 80, 443, and 8081
```

마이그레이션은 다음 구성을 포함하는 스크립트(`modify_firewall_config.ps1`)를 생성합니다.

```
New-NetFirewallRule -DisplayName "Allow Web Traffic" -Direction Inbound -Action Allow -Protocol TCP -LocalPort 80,443
New-NetFirewallRule -DisplayName "Allow API Traffic" -Direction Inbound -Action Allow -Protocol TCP -LocalPort 8081
```

마이그레이션 도구는 다음 작업을 자동으로 수행합니다.
+ 모든 IIS 사이트 바인딩에서 HTTP/HTTPS 포트 추출
+ [INetFwPolicy2](https://learn.microsoft.com/en-us/windows/win32/api/netfw/nn-netfw-inetfwpolicy2) 인터페이스를 사용해 방화벽 규칙 열거
+ 지정한 포트를 명시적으로 참조하는 규칙만 포함하도록 필터링
+ HTTP 및 HTTPS 사이트 바인딩과 해당 바인딩에 연결된 방화벽 규칙만 처리
+ 표시 이름, 작업, 프로토콜 및 활성화 상태를 포함한 규칙 속성 유지
+ 방화벽 규칙에서 개별 포트와 포트 범위를 모두 처리
+ 배포 매니페스트에 방화벽 구성 스크립트를 추가합니다.

### 로드 밸런서 구성
<a name="dotnet-migrating-applications-network-vpc-lb"></a>

`--vpc-config` 인수를 통해 로드 밸런서 구성을 지정할 수 있습니다. 다음 예시는 해당 파라미터의 사용 방법을 보여줍니다.

스키마 선택  
퍼블릭 및 프라이빗 로드 밸런서 방식을 선택합니다.  

```
{
    "id": "vpc-12345678",
    "elbscheme": "private",
    "elbsubnets": ["subnet-private1", "subnet-private2"]
}
```

서브넷 배포  
고가용성을 위해 로드 밸런서 서브넷을 여러 가용 영역에 분산하세요.  

```
{
    "elbsubnets": [
        "subnet-az1", // Availability Zone 1
        "subnet-az2", // Availability Zone 2
        "subnet-az3"  // Availability Zone 3
    ]
}
```

**참고**  
Elastic Beanstalk은 Application Load Balancer, Network Load Balancer 및 Classic Load Balancer를 사용하는 환경 생성을 지원하지만, **eb migrate** 명령은 Application Load Balancer만 지원합니다. 로드 밸런서 유형에 대한 자세한 내용은 [Elastic Beanstalk 환경의 로드 밸런서](using-features.managing.elb.md)을 참조하세요.

## 포트 구성이 포함된 다중 사이트 배포
<a name="dotnet-migrating-applications-network-multi"></a>

이 **eb migrate** 명령은 애플리케이션이 종속성을 공유하거나 비표준 포트를 사용할 수 있는 복잡한 다중 사이트 IIS 배포를 처리합니다. 다중 사이트를 포함한 일반적인 엔터프라이즈 설정의 다음 예시를 고려하세요.

```
<!-- IIS Configuration -->
<sites>
    <site name="Default Web Site" id="1">
        <bindings>
            <binding protocol="http" bindingInformation="*:80:www.example.com" />
        </bindings>
    </site>
    <site name="InternalAPI" id="2">
        <bindings>
            <binding protocol="http" bindingInformation="*:8081:api.internal" />
        </bindings>
    </site>
    <site name="ReportingPortal" id="3">
        <bindings>
            <binding protocol="http" bindingInformation="*:8082:reports.internal" />
        </bindings>
    </site>
</sites>
```

이 구성을 마이그레이션하려면 다음 예제 명령과 파라미터를 사용하세요.

```
PS C:\migrations_workspace> eb migrate `
    --sites "Default Web Site,InternalAPI,ReportingPortal" `
    --copy-firewall-config `
    --instance-type "c5.large"
```

**eb migrate** 명령은 각 사이트의 ID와 구성을 유지하는 배포 패키지를 생성합니다. 명령은 이러한 사이트가 어떻게 배포되어야 하는지 정의하는 `aws-windows-deployment-manifest.json`를 생성합니다. 다음 예제에서는 생성된 JSON 파일을 보여 줍니다.

```
{
    "manifestVersion": 1,
    "deployments": {
        "msDeploy": [
            {
                "name": "DefaultWebSite",
                "parameters": {
                    "appBundle": "DefaultWebSite.zip",
                    "iisPath": "/",
                    "iisWebSite": "Default Web Site"
                }
            }
        ],
        "custom": [
            {
                "name": "InternalAPI",
                "scripts": {
                    "install": {
                        "file": "ebmigrateScripts\\install_site_InternalAPI.ps1"
                    },
                    "restart": {
                        "file": "ebmigrateScripts\\restart_site_InternalAPI.ps1"
                    },
                    "uninstall": {
                        "file": "ebmigrateScripts\\uninstall_site_InternalAPI.ps1"
                    }
                }
            },
            {
                "name": "ReportingPortal",
                "scripts": {
                    "install": {
                        "file": "ebmigrateScripts\\install_site_ReportingPortal.ps1"
                    },
                    "restart": {
                        "file": "ebmigrateScripts\\restart_site_ReportingPortal.ps1"
                    },
                    "uninstall": {
                        "file": "ebmigrateScripts\\uninstall_site_ReportingPortal.ps1"
                    }
                }
            }
        ]
    }
}
```

마이그레이션 프로세스는 원래 라우팅 로직을 유지하는 다음과 같은 Application Load Balancer 리스너 규칙을 생성합니다.
+ 포트 80 트래픽은 Default Web Site로 라우팅됨
+ 포트 8081 트래픽은 InternalAPI로 라우팅됨
+ 포트 8082 트래픽은 ReportingPortal로 라우팅됨

## 공유 구성 및 종속성
<a name="dotnet-migrating-applications-network-shared"></a>

사이트가 구성을 공유하거나 종속성을 갖는 경우, **eb migrate**는 이러한 관계를 적절하게 처리합니다. 여러 사이트가 공통 구성을 공유하는 다음 예제를 참조하세요.

```
<!-- Shared configuration in applicationHost.config -->
<location path="Default Web Site">
    <system.webServer>
        <asp enableSessionState="true" />
        <caching enabled="true" enableKernelCache="true" />
    </system.webServer>
</location>
```

마이그레이션 프로세스는 다음 작업을 완료합니다.

1. 사이트 간에 공유되는 구성 식별

1. 이러한 설정을 적용하기 위한 적절한 PowerShell 스크립트를 생성합니다.

1. 구성 계층 구조와 상속 유지

## 모범 사례
<a name="dotnet-migrating-applications-network-best"></a>

마이그레이션된 애플리케이션의 네트워크 구성을 설정할 때에는 모범 사례를 따르는 것이 좋습니다. 다음 그룹은 요약 지침을 제공합니다.

VPC 설계  
+  AWS VPC 설계 모범 사례 준수
+ 로드 밸런서 및 EC2 인스턴스에 별도의 서브넷 사용
+ 적절한 라우팅 테이블과 NACL 구현
+  AWS 서비스에 대한 VPC 엔드포인트 고려

높은 가용성  
+ 여러 가용 영역에 걸쳐 배포
+ 로드 밸런서에 두 개 이상의 서브넷 사용
+ AZ 전반에 오토 스케일링 구성
+ 적절한 상태 확인 구현

보안  
+ 보안 모범 사례 준수
+ 보안 그룹을 기본 액세스 제어로 사용
+ 추가적인 보안을 위해 네트워크 액세스 제어 목록(ACL) 구현
+ VPC 흐름 로그 모니터링

## 문제 해결
<a name="dotnet-migrating-applications-network-troubleshooting"></a>

일반적인 네트워크 구성 문제에는 다음 영역이 포함됩니다. 각 주제 뒤에는 환경의 네트워크 구성과 상태에 대한 정보를 더 확인할 수 있는 예시 명령이 제공됩니다.

서브넷 구성  

```
# Verify subnet availability
PS C:\migrations_workspace> aws ec2 describe-subnets --subnet-ids subnet-id

# Check available IP addresses
PS C:\migrations_workspace>aws ec2 describe-subnets --subnet-ids subnet-id --query 'Subnets[].AvailableIpAddressCount'
```

보안 그룹 액세스  

```
# Verify security group rules
PS C:\migrations_workspace> aws ec2 describe-security-groups --group-ids sg-id

# Test network connectivity
PS C:\migrations_workspace> aws ec2 describe-network-interfaces --filters Name=group-id,Values=sg-id
```

로드 밸런서 상태  

```
# Check load balancer health
PS C:\migrations_workspace> aws elbv2 describe-target-health --target-group-arn arn:aws:elasticloadbalancing:region:account-id:targetgroup/group-name/group-id
```