本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
網路組態和連接埠設定
本節涵蓋 IIS 遷移的網路組態選項,包括 VPC 設定、連接埠組態和多站台部署。
VPC 組態
eb migrate 命令為您的 Elastic Beanstalk 環境提供靈活的 VPC 組態選項。此工具可以從來源 EC2 執行個體偵測 VPC 設定,或透過命令列參數接受自訂 VPC 組態。檢閱以搭配 Amazon VPC 使用 Elastic Beanstalk了解如何使用 VPC 設定 Elastic Beanstalk。
自動 VPC 偵測
在 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 雲端主機
當 從內部部署伺服器或非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以了解 Elastic Beanstalk 如何為您的環境設定預設 VPC。
自訂 VPC 組態
對於需要特定 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
網路安全組態
根據預設, 會在目標執行個體上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
介面列舉防火牆規則 -
篩選規則,使其僅包含明確參考指定連接埠的規則
-
僅處理 HTTP 和 HTTPS 網站繫結及其相關聯的防火牆規則
-
保留規則屬性,包括顯示名稱、動作、通訊協定和啟用狀態
-
在防火牆規則中同時處理個別連接埠和連接埠範圍
-
將防火牆組態指令碼新增至部署資訊清單
負載平衡器組態
您可以透過 --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 環境的負載平衡器。
具有連接埠組態的多站台部署
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
共用組態和相依性
當網站共用組態或相依性時, 會適當地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>
遷移程序會完成下列任務:
-
識別跨網站共用組態
-
產生適當的 PowerShell 指令碼以套用這些設定
-
維護組態階層和繼承
最佳實務
建議您遵循遷移應用程式網路組態的最佳實務。下列分組提供摘要準則。
- VPC 設計
-
-
遵循 AWS VPC 設計最佳實務
-
針對負載平衡器和 EC2 執行個體使用不同的子網路
-
實作適當的路由表和 NACLs
-
考慮 AWS 服務的 VPC 端點
-
- 高可用性
-
-
在多個可用區域中進行部署
-
對負載平衡器使用至少兩個子網路
-
設定跨 AZs 的自動擴展
-
實作適當的運作狀態檢查
-
- 安全
-
-
遵循安全最佳實務
-
使用安全群組做為主要存取控制
-
實作網路存取控制清單 (ACLs) 以提高安全性
-
監控 VPC 流程日誌
-
故障診斷
常見的網路組態問題包括下列領域。下列每個主題都是範例命令,以取得您環境的網路組態和運作狀態的詳細資訊。
- 子網路組態
-
# 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