

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# ネットワーク設定とポート設定
<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>

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.
...
```

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 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` 引数を使用してロードバランサー設定を指定できます。次の例はパラメータを示しています。

スキームの選択  
パブリックロードバランサースキームとプライベートロードバランサースキームから選択します。  

```
{
    "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 トラフィックはデフォルトウェブサイトにルーティングされる
+ ポート 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 エンドポイントを検討する

高可用性  
+ 複数のアベイラビリティゾーンにデプロイする
+ ロードバランサーに少なくとも 2 つのサブネットを使用する
+ 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
```