

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 網路組態和連接埠設定
<a name="dotnet-migrating-applications-network"></a>

本節涵蓋 IIS 遷移的網路組態選項，包括 VPC 設定、連接埠組態和多站台部署。

## VPC 組態
<a name="dotnet-migrating-applications-network-vpc"></a>

**eb migrate** 命令為您的 Elastic Beanstalk 環境提供靈活的 VPC 組態選項。此工具可以從來源 EC2 執行個體偵測 VPC 設定，或透過命令列參數接受自訂 VPC 組態。檢閱以[搭配 Amazon VPC 使用 Elastic Beanstalk](vpc.md)了解如何使用 VPC 設定 Elastic Beanstalk。

### 自動 VPC 偵測
<a name="dotnet-migrating-applications-network-vpc-auto"></a>

在 EC2 執行個體**eb migrate**上執行時，會自動從來源環境的 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.
...
```

檢閱[搭配 Amazon VPC 使用 Elastic Beanstalk](vpc.md)以了解 Elastic Beanstalk 如何為您的環境設定預設 VPC。

### 自訂 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 設定*`--vpc-config`。 **當您使用此參數時，遷移只會使用您傳入的組態檔案中指定的 VPC 設定。使用此參數會覆寫探索來源執行個體 VPC 組態或使用預設 VPC 的預設行為。

在這些案例中使用 `--vpc-config` 參數：
+ 當您遷移沒有可探索 VPC 設定non-EC2 環境時
+ 當您遷移到與來源環境使用的 VPC 不同的 VPC 時
+ 當您需要自訂子網路選擇或安全群組組態時
+ 當自動探索無法正確識別所需的 VPC 設定時
+ 當您從內部部署遷移時，不想使用預設 VPC

### 網路安全組態
<a name="dotnet-migrating-applications-network-vpc-security"></a>

根據預設， 會在目標執行個體上**eb migrate**開啟連接埠 80，但不會從來源機器複製其他 Windows Firewall 規則。若要包含所有防火牆組態，請使用下列命令：

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

此命令會執行下列動作：
+ 識別 IIS 網站繫結所使用的連接埠
+ 擷取對應的防火牆規則
+ 產生 PowerShell 指令碼以在目標執行個體上重新建立規則
+ 從來源機器保留連接埠 80 的任何 DENY 規則 （否則預設允許連接埠 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 連接埠
+ 使用 Windows Firewall [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`引數指定 Load Balancer 組態。以下範例示範參數。

結構描述選擇  
選擇公有和私有負載平衡器方案：  

```
{
    "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** 命令會建立部署套件，以保留每個網站的身分和組態。命令會產生 `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 流量路由至預設網站
+ 連接埠 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 執行個體使用不同的子網路
+ 實作適當的路由表和 NACLs
+ 考慮 AWS 服務的 VPC 端點

高可用性  
+ 在多個可用區域中進行部署
+ 對負載平衡器使用至少兩個子網路
+ 設定跨 AZs自動擴展
+ 實作適當的運作狀態檢查

安全  
+ 遵循安全最佳實務
+ 使用安全群組做為主要存取控制
+ 實作網路存取控制清單 (ACLs) 以提高安全性
+ 監控 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
```