Amazon Redshift Serverless で必要なサブネットのサイズ ~ Insufficient free IP addresses found in subnets エラーについて

記事タイトルとURLをコピーする


コーヒーが好きな木谷映見です。

Amazon Redshift Serverless を既存の Amazon VPC 内に作成しようとしたら、Insufficient free IP addresses found in subnets というエラーで作成できませんでした。このエラーについて、気合いを入れて調査しました。

20221115 追記

サブネットの作成時に必要な空き IP アドレスの数が公式ドキュメントに追記されました。

Considerations when using Amazon Redshift Serverless - Amazon Redshift

サブネットの作成時に必要な空き IP アドレスの数

RPU 必要な空き IP 最小 CIDR
32 13 /27
64 21 /27
128 37 /26
256 69 /25
512 133 /24

サブネットの更新時に必要な空き IP アドレスの数

RPU 更新された RPU 必要な空き IP
32 64 16
64 128 28
128 256 52
256 512 100

以下内容は、ドキュメントに記載される前の奮闘記です。

検証結果(20220916 時点東京リージョン)

  • Redshift Serverless が作成できた:○
  • Redshift Serverless が作成できなかった:×
Redshift Serverless の RPU /28 /27 /26 /25 /24
32 ×
72 ×
80 × ×
176 × ×
184 × × ×
384 × × ×
392 × × × ×
512 × × × ×

Redshift Serverless を作成するには、Amazon VPC 内の 3 つのアベイラビリティゾーンに配置された 3 つ以上のサブネットが必要です。上の表の /2x は Redshift Serverless を作成する際に指定した 3 つのサブネットの CIDR ブロックを表します。

Redshift Serverless の RPU とは Redshift 処理ユニット(RPU:Redshift Processing Unit)のことで、1 RPU = 16 GiB メモリに相当し、8 刻みの 32~512 RPU の範囲でベース容量を設定できます。

  • /28 のサブネットは Redshift Serverless を作成できない
    • Insufficient free IP addresses found in subnets エラーになる
  • /27 のサブネットは RPU = 32~72 の Redshift Serverless が作成できる
  • /26 のサブネットは RPU = 32~176 の Redshift Serverless が作成できる
  • /25 のサブネットは RPU = 32~384 の Redshift Serverless が作成できる
  • /24 のサブネットは RPU = 32~512 の Redshift Serverless が作成できる

  • Redshift Serverless ワークグループ作成時に生成される ENI の数:(RPU ÷ 8) + 2

    • 内訳
      • Redshift Servreless のネットワークインターフェース:(RPU ÷ 8) + 1
      • VPC エンドポイントのネットワークインターフェース:1

Redshift Serverless の概要やコンポーネントについては Amazon Redshift Serverless の概要 - サーバーワークスエンジニアブログ をご参照ください。

blog.serverworks.co.jp

経緯

Redshift Serverless を既存の VPC 内に作成しようとしたら、以下のエラーで作成できませんでした。

Insufficient free IP addresses found in subnets: [subnet-xxxxxxxxxxxxxxxxx, subnet-xxxxxxxxxxxxxxxxx, subnet-xxxxxxxxxxxxxxxxx].

日本語に訳すと「サブネットで見つかった空き IP アドレスが不足しています」というエラーですが、Redshift Serverless 作成におけるサブネット CIDR 範囲等の制約を以下 AWS ドキュメント内で見つけることができませんでした。

そこで、どれくらいのスペックの Redshift Serverless が、どれくらいのサブネット CIDR 範囲で作成可能なのか、検証しました。

検証

VPC の準備

東京リージョンの VPC に、以下のように様々な CIDR ブロックを持つプライベートサブネットをたくさん作りました。ここから 3 つサブネットを選択して Redshift Serverless を作成していきます。
あまりイケてない切り方をしていますが、ご容赦ください…

ap-northeast-1a ap-northeast-1c ap-northeast-1d
/28 10.0.0.0/28 10.0.0.16/28 10.0.0.32/28
/27 10.0.0.64/27 10.0.0.96/27 10.0.0.128/27
/26 10.0.0.192/26 10.0.1.0/26 10.0.1.64/26
/25 10.0.1.128/25 10.0.2.0/25 10.0.2.128/25
/24 10.0.3.0/24 10.0.4.0/24 10.0.5.0/24

名前空間の作成

Redshift コンソール から名前空間だけを作成することはできなかったので、 CloudShell から AWS CLI で作成しました。ワークグループを持たない、空っぽの名前空間です。
今回は作成するだけで操作しませんので、必須パラメータである名前空間の名前だけ指定しました。

aws redshift-serverless create-namespace \
  --namespace-name namespace

参考:create-namespace — AWS CLI 2.8.4 Command Reference

ちなみに、AWS マネジメントコンソールから Redshift Serverles を作成しようとして Insufficient free IP addresses found in subnets エラーが発生した場合、名前空間のみ作成され、ワークグループが作成されていない、という状態になりますので、このエラーのあと Redshift Serverless を再作成する際は、先にできてしまった名前空間を削除するなどの操作をしてから再作成するようにしてください。

ワークグループの作成

作成した名前空間はそのまま、以下図のようなイメージで、ワークグループを繰り返し作成試行していきます。

Redshift コンソールから画面操作でワークグループを繰り返し作成するのは大変なので、ワークグループも名前空間同様 CLI で 作成します。

aws redshift-serverless create-workgroup \
  --base-capacity 32 \
  --namespace-name namespace \
  --subnet-ids "subnet-xxxxxxxxxxxxxxxxx" "subnet-xxxxxxxxxxxxxxxxx" "subnet-xxxxxxxxxxxxxxxxx" \
  --tags key=Name,value=subnetcidr27-32 \
  --workgroup-name subnetcidr27-32
  • --workgroup-name <value> ワークグループの名前は必須
  • --base-capacity <value> RPU を指定
  • --subnet-ids <value> サブネットを 3 つ指定

参考:create-workgroup — AWS CLI 2.8.4 Command Reference

ワークグループの削除も CLI で名前を指定するだけで簡単です。

aws redshift-serverless delete-workgroup \
  --workgroup-name subnetcidr27-32

参考: delete-workgroup — AWS CLI 2.8.11 Command Reference

実験

主な結果のみ記載していきます。

/28 のサブネット × 3、RPU = 32 ⇒失敗

ワークグループの作成に失敗すると、以下のようなエラーが出力されます。

An error occurred (ValidationException) when calling the CreateWorkgroup operation: Insufficient free IP addresses found in subnets: [subnet-xxxxxxxxxxxxxxxxx, subnet-xxxxxxxxxxxxxxxxx, subnet-xxxxxxxxxxxxxxxxx].

/27 のサブネット ×1 + /28 のサブネット × 2、RPU = 32 ⇒失敗
An error occurred (ValidationException) when calling the CreateWorkgroup operation: Insufficient free IP addresses found in subnets: [subnet-xxxxxxxxxxxxxxxxx, subnet-xxxxxxxxxxxxxxxxx].

/27 のサブネット ×2 + /28 のサブネット × 1、RPU = 32 ⇒失敗
An error occurred (ValidationException) when calling the CreateWorkgroup operation: Insufficient free IP addresses found in subnets: [subnet-xxxxxxxxxxxxxxxxx].

ここまでで、1 つでも空 IP が足りないサブネットが含まれていると、Redshift Servreless ワークグループは作成できないらしいということが分かりました。

/27 のサブネット × 3、RPU = 32 ⇒成功

ワークグループの作成に成功すると、以下のようにワークグループの設定が出力されます。

{
    "workgroup": {
        "baseCapacity": 32,
        "configParameters": [
            {
                "parameterKey": "datestyle",
                "parameterValue": "ISO, MDY"
            },
            {
                "parameterKey": "enable_user_activity_logging",
                "parameterValue": "true"
            },
            {
                "parameterKey": "query_group",
                "parameterValue": "default"
            },
            {
                "parameterKey": "search_path",
                "parameterValue": "$user, public"
            },
            {
                "parameterKey": "max_query_execution_time",
                "parameterValue": "14400"
            }
        ],
        "creationDate": "2022-09-15T16:16:47.025000+00:00",
        "endpoint": {
            "address": "subnetcidr27-32.xxxxxxxxxxxx.ap-northeast-1.redshift-serverless.amazonaws.com",
            "port": 5439
        },
        "enhancedVpcRouting": false,
        "namespaceName": "namespace",
        "publiclyAccessible": false,
        "securityGroupIds": [
            "sg-012eb4649347d3885"
        ],
        "status": "CREATING",
        "subnetIds": [
            "subnet-0916aa8f6f5cea666",
            "subnet-0a75332ca8ec636bb",
            "subnet-0c817a4a39fed9204"
        ],
        "workgroupArn": "arn:aws:redshift-serverless:ap-northeast-1:xxxxxxxxxxxx:workgroup/2c46422c-2267-4a9e-b554-b447119b2cb2",
        "workgroupId": "2c46422c-2267-4a9e-b554-b447119b2cb2",
        "workgroupName": "subnetcidr27-32"
    }
}

ワークグループが作成できたら、サブネットに含まれる ENI の数を確認してみます。

aws ec2 describe-network-interfaces \
 --filters Name=vpc-id,Values=vpc-0fa7854e489b8cce9 \
 --query 'NetworkInterfaces[].{
     PrivateIpAddress:PrivateIpAddress,
     AvailabilityZone:AvailabilityZone,
     SubnetId:SubnetId,
     Description:Description,
     RequesterId:RequesterId,
     RequesterManaged:RequesterManaged
 }'\
 --output table

実行結果

--------------------------------------------------------------------------------------------------------------------------------------------------------------
|                                                                  DescribeNetworkInterfaces                                                                 |
+------------------+-------------------------------------------------+-------------------+------------------+-------------------+----------------------------+
| AvailabilityZone |                   Description                   | PrivateIpAddress  |   RequesterId    | RequesterManaged  |         SubnetId           |
+------------------+-------------------------------------------------+-------------------+------------------+-------------------+----------------------------+
|  ap-northeast-1c |  RedshiftNetworkInterface                       |  10.0.0.107       |  amazon-redshift |  True             |  subnet-0a75332ca8ec636bb  |
|  ap-northeast-1c |  RedshiftNetworkInterface                       |  10.0.0.118       |  amazon-redshift |  True             |  subnet-0a75332ca8ec636bb  |
|  ap-northeast-1c |  VPC Endpoint Interface vpce-0b3f36612f3a97280  |  10.0.0.102       |  727180483921    |  True             |  subnet-0a75332ca8ec636bb  |
|  ap-northeast-1c |  RedshiftNetworkInterface                       |  10.0.0.105       |  amazon-redshift |  True             |  subnet-0a75332ca8ec636bb  |
|  ap-northeast-1c |  RedshiftNetworkInterface                       |  10.0.0.123       |  amazon-redshift |  True             |  subnet-0a75332ca8ec636bb  |
|  ap-northeast-1c |  RedshiftNetworkInterface                       |  10.0.0.116       |  amazon-redshift |  True             |  subnet-0a75332ca8ec636bb  |
+------------------+-------------------------------------------------+-------------------+------------------+-------------------+----------------------------+
  • Redshift Serverless ワークグループ作成時に生成される ENI:6
    • 内訳
      • Redshift Servreless のネットワークインターフェース:5
      • VPC エンドポイントのネットワークインターフェース:1

参考:describe-network-interfaces — AWS CLI 2.8.11 Command Reference

ちなみにこの VPC Endpoint Interface vpce-0b3f36612f3a97280 と表記されている VPC エンドポイント用の ENI はリクエスタマネージド型のネットワークインターフェイス というもので、AWS のサービスがユーザーに代わって VPC 内に作成するネットワークインターフェイスです。

/27 のサブネット × 3、RPU = 72 ⇒成功

/27 のサブネットは RPU = 32~72 の Redshift Serverless が作成できることが分かりました。

  • Redshift Serverless ワークグループ作成時に生成される ENI:11
    • 内訳
      • Redshift Servreless のネットワークインターフェース:10
      • VPC エンドポイントのネットワークインターフェース:1
/27 のサブネット × 3、RPU = 73 ⇒失敗

指定する RPU は 8 刻みの 32~512 RPU の範囲を指定しなければならないのですが、CLI なら好きな数字が入力できるのでは?と思い試してみましたが、そんなことはありませんでした。失敗します。

An error occurred (ValidationException) when calling the CreateWorkgroup operation: The base capacity must be a multiple of 8.
/27 のサブネット × 3、RPU = 80 ⇒失敗
An error occurred (ValidationException) when calling the CreateWorkgroup operation: Insufficient free IP addresses found in subnets: [subnet-0916aa8f6f5cea666, subnet-0a75332ca8ec636bb, subnet-0c817a4a39fed9204].
/27 のサブネット × 2、/26 のサブネット × 1、RPU = 80 ⇒失敗
An error occurred (ValidationException) when calling the CreateWorkgroup operation: Insufficient free IP addresses found in subnets: [subnet-0a75332ca8ec636bb, subnet-0c817a4a39fed9204].

/27 のサブネット × 1、/26 のサブネット × 2、RPU = 80 ⇒失敗
An error occurred (ValidationException) when calling the CreateWorkgroup operation: Insufficient free IP addresses found in subnets: [subnet-0c817a4a39fed9204].

/26 のサブネット × 3、RPU = 80 ⇒成功
  • Redshift Serverless ワークグループ作成時に生成される ENI:12
    • 内訳
      • Redshift Servreless のネットワークインターフェース:11
      • VPC エンドポイントのネットワークインターフェース:1
/26 のサブネット × 3、RPU = 176 ⇒成功

/26 のサブネットは RPU = 32~176 の Redshift Serverless が作成できることが分かりました。

  • Redshift Serverless ワークグループ作成時に生成される ENI:24
    • 内訳
      • Redshift Servreless のネットワークインターフェース:23
      • VPC エンドポイントのネットワークインターフェース:1
/26 のサブネット × 3、RPU = 184 ⇒失敗
An error occurred (ValidationException) when calling the CreateWorkgroup operation: Insufficient free IP addresses found in subnets: [subnet-0fef03cd5493fb1fe, subnet-07ea3c3469458c675, subnet-08b617abd07e5aca0].
/25 のサブネット × 3、RPU = 184 ⇒成功
  • Redshift Serverless ワークグループ作成時に生成される ENI:25
    • 内訳
      • Redshift Servreless のネットワークインターフェース:24
      • VPC エンドポイントのネットワークインターフェース:1
/25 のサブネット × 3、RPU = 384 ⇒成功

/25 のサブネットは RPU = 32~384 の Redshift Serverless が作成できることが分かりました。

  • Redshift Serverless ワークグループ作成時に生成される ENI:50
    • 内訳
      • Redshift Servreless のネットワークインターフェース:49
      • VPC エンドポイントのネットワークインターフェース:1
/25 のサブネット × 3、RPU = 392 ⇒失敗
An error occurred (ValidationException) when calling the CreateWorkgroup operation: Insufficient free IP addresses found in subnets: [subnet-0d7dcbab22eb39dea, subnet-07767eba9336e8a37, subnet-0d5adc79ef79d4f81].
/24 のサブネット × 3、RPU = 392 ⇒成功
  • Redshift Serverless ワークグループ作成時に生成される ENI:51
    • 内訳
      • Redshift Servreless のネットワークインターフェース:50
      • VPC エンドポイントのネットワークインターフェース:1
/24 のサブネット × 3、RPU = 512 ⇒成功

/24 のサブネットは RPU = 32~512 の Redshift Serverless が作成できることが分かりました。

  • Redshift Serverless ワークグループ作成時に生成される ENI:66
    • 内訳
      • Redshift Servreless のネットワークインターフェース:65
      • VPC エンドポイントのネットワークインターフェース:1

ここまでで、Redshift Serverless を作成した直後にサブネットに作成される ENI の数には 以下の法則があることが分かりました。

  • Redshift Serverless ワークグループ作成時に生成される ENI の数:(RPU ÷ 8) + 2
    • 内訳
      • Redshift Servreless のネットワークインターフェース:(RPU ÷ 8) + 1
      • VPC エンドポイントのネットワークインターフェース:1
ワークグループは放っておくと ENI が減る

Redshift Serverless ワークグループ作成直後に作成される ENI の数には上記のような法則がありましたが、何もせず 30 分ほど放っておくと以下のように減少しました。

  • Redshift Servreless のネットワークインターフェース:(RPU ÷ 8) + 1
  • VPC エンドポイントのネットワークインターフェース:1
## /27 のサブネット × 3、RPU = 32 でワークグループ作成直後
--------------------------------------------------------------------------------------------------------------------------------------------------------------
|                                                                  DescribeNetworkInterfaces                                                                 |
+------------------+-------------------------------------------------+-------------------+------------------+-------------------+----------------------------+
| AvailabilityZone |                   Description                   | PrivateIpAddress  |   RequesterId    | RequesterManaged  |         SubnetId           |
+------------------+-------------------------------------------------+-------------------+------------------+-------------------+----------------------------+
|  ap-northeast-1c |  RedshiftNetworkInterface                       |  10.0.0.107       |  amazon-redshift |  True             |  subnet-0a75332ca8ec636bb  |
|  ap-northeast-1c |  RedshiftNetworkInterface                       |  10.0.0.118       |  amazon-redshift |  True             |  subnet-0a75332ca8ec636bb  |
|  ap-northeast-1c |  VPC Endpoint Interface vpce-0b3f36612f3a97280  |  10.0.0.102       |  727180483921    |  True             |  subnet-0a75332ca8ec636bb  |
|  ap-northeast-1c |  RedshiftNetworkInterface                       |  10.0.0.105       |  amazon-redshift |  True             |  subnet-0a75332ca8ec636bb  |
|  ap-northeast-1c |  RedshiftNetworkInterface                       |  10.0.0.123       |  amazon-redshift |  True             |  subnet-0a75332ca8ec636bb  |
|  ap-northeast-1c |  RedshiftNetworkInterface                       |  10.0.0.116       |  amazon-redshift |  True             |  subnet-0a75332ca8ec636bb  |
+------------------+-------------------------------------------------+-------------------+------------------+-------------------+----------------------------+
## 30 分程度放置した後
--------------------------------------------------------------------------------------------------------------------------------------------------------------
|                                                                  DescribeNetworkInterfaces                                                                 |
+------------------+-------------------------------------------------+-------------------+------------------+-------------------+----------------------------+
| AvailabilityZone |                   Description                   | PrivateIpAddress  |   RequesterId    | RequesterManaged  |         SubnetId           |
+------------------+-------------------------------------------------+-------------------+------------------+-------------------+----------------------------+
|  ap-northeast-1c |  VPC Endpoint Interface vpce-0b3f36612f3a97280  |  10.0.0.102       |  727180483921    |  True             |  subnet-0a75332ca8ec636bb  |
|  ap-northeast-1c |  RedshiftNetworkInterface                       |  10.0.0.105       |  amazon-redshift |  True             |  subnet-0a75332ca8ec636bb  |
+------------------+-------------------------------------------------+-------------------+------------------+-------------------+----------------------------+

aws ec2 describe-network-interfaces を数分置きに実行していると ENI の数が減らなかったので、API リクエストを受け取っていると減らないのかもしれません。

おわりに

Redshift Serverless で必要なサブネットのサイズを調べました。
Redshift Serverless を作成するには少なくとも /27 以上のサブネットが 3 つ必要で、最大のスペックまでスケールするには /24 以上のサブネットが 3 つ必要なことが分かりました。
Aurora Serverless は RDS コンソールからノードの数が見えたのですが、Redshift Serverless は Redshift コンソールからノードの数が見えないので、気付いたら IP アドレスが枯渇してスケールできなくなってしまったということが起こる可能性がありそうです。

20221003 追記

Redshift Serverless マネジメントコンソール上で、IP アドレスが足りないことによるエラーの表示が変わっていました。参考情報として追記いたします。

There aren’t enough free IP addresses in subnets to allow this operation. Make sure that there are at least 37 free IP addresses in 3 subnets. Each subnet should be in a different Availability Zone.

この操作を許可するために、サブネットの空きIPアドレスが十分ではありません。3つのサブネットに少なくとも37の空きIPアドレスがあることを確認します。各サブネットは異なるアベイラビリティゾーンにある必要があります。

/27 のサブネット×3 に RPU = 128 のワークグループを作成しようとした際に出力されたエラー

参考

Considerations when using Amazon Redshift Serverless - Amazon Redshift

Quotas and limits in Amazon Redshift - Amazon Redshift

redshift-serverless — AWS CLI 2.8.11 Command Reference

emi kitani(執筆記事の一覧)

AS部LX課。2022/2入社、コーヒーとサウナが好きです。執筆活動に興味があります。AWS認定12冠。