Amazon VPC(Virtual Private Cloud) のルートテーブル(route table)のステータスが blackhole の状態になる原因について調べました。
ルートテーブル(route table)のステータスが blackhole に
下図のようにルートテーブルのステータスが「blackhole」になっています。
やった作業と言えば、「インターネットゲートウェイ」を作成し、VPC にアタッチしただけです。
ステータスが blackhole になる原因
AWS の公式サイトを調べました。
DescribeRouteTables
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/APIReference/API_DescribeRouteTables.html
route.state – The state of a route in the route table (active | blackhole). The blackhole state indicates that the route’s target isn’t available (for example, the specified gateway isn’t attached to the VPC, the specified NAT instance has been terminated, and so on).
■日本語訳
route.state – ルートテーブル内のルートの状態は、「active | blackhole」になります。
ブラックホール(blackhole)状態は、ルートのターゲットが利用できないことを示します(たとえば、指定されたゲートウェイがVPCに接続されていない、指定されたNATインスタンスが終了したなど)。
再度、設定を調べました。
以下が適切に結びついているかどうか確認しました。
■VPC(Virtual Private Cloud)の設定
- Vpc Id ← vpc-34776f56
-
Route table ← rtb-75150e17
■ルートテーブル(route table)の設定
- Vpc ID ← vpc-34776f56
- Route Table ID ← rtb-75150e17
- ルートテーブルのターゲット ← igw-c1b1a7a3
■インターネットゲートウェイ(Internet Gateway)の設定
- インターネットゲートウェイ ID ← igw-0218cf8531fe69358
- アタッチ済み VPC ID ← vpc-34776f56
インターネットゲートウェイは適切な VPC にアタッチされているものの、ルートテーブルのターゲットが存在しない「インターネットゲートウェイ」になっていました。
つまり、以前利用していて、その後削除したインターネットゲートウェイの設定が残っていたということです。
要するにちゃんと設定が出来ていなかったということでした。
いろいろ設定の修正を試してみましたが、一番確実に復旧できる方法は、一旦インターネットゲートウェイを削除して作り直し、VPC にアタッチしてルートテーブルを設定しなおすことです。
以下でその手順を記載します。
(ただし、すべてのケースに当てはまる手順ではありません)
blackhole 状態から復旧する手順
最初に手順の概要です。
- ルートテーブルから既存の「0.0.0.0/0」のルートを削除する
- 新規ルートテーブルを作成する
- 新規ルートテーブルをメイン(Main)にする
- 旧ルートテーブルを削除する
- 新規ルートテーブルにサブネットを割り当てる
- インターネットゲートウェイを削除する
- 新規でインターネットゲートウェイを作成する
- VPC にインターネットゲートウェイをアタッチする
- ルートテーブルに「0.0.0.0/0」のルートを新規インターネットゲートウェイに設定する
ルートテーブルから既存の「0.0.0.0/0」のルートを削除する
最初にルートテーブルから既存の「0.0.0.0/0」のルートを削除します。
VPC のダッシュボードより左側ペインの「ルートテーブル」をクリックし、対象のルートテーブルを選択します。
対象のルートテーブルの「Routes」タブをクリックし「Edit routes」ボタンをクリックします。
「blackhole」と表示されている「0.0.0.0/0」の「x」をクリックします。
「0.0.0.0/0」のルートが削除されたことを確認し「Save routes」ボタンをクリックします。
「Routes successfully edited」のメッセージが表示されたら「Close」ボタンをクリックします。
新規ルートテーブルを作成する
続けて新規ルートテーブルを作成します。
「Create route table」ボタンをクリックします。
「Create route table」画面で以下のように設定します。
- Name tag ← 新しいルートテーブルの名前を設定します。
- VPC ← 割り当てたい VPC を選択します。
設定したら「Create」ボタンをクリックします。
新規ルートテーブルが作成されたことを確認します。
新規ルートテーブルをメイン(Main)にする
次に下図のように旧ルートテーブルが「Main」になっています。
この状態では(Main になっている状態)では、ルートテーブルを削除できないので、新規ルートテーブルに「Main」を移動して、旧ルートテーブルを削除できる状態にします。
新規ルートテーブルにチェックを入れて、「アクション」-「Set Main Route Table」をクリックします。
「Set Main Route Talbe」の確認画面が表示されるので、「OK」ボタンをクリックします。
下図のように新規ルートテーブルに「Main」が移動したことを確認します。
旧ルートテーブルを削除する
次に旧ルートテーブルを削除します。
旧ルートテーブルにチェックを入れて「アクション」-「Delete Route Table」をクリックします。
「Delete Route Table」画面が表示されるので「Delete route table」ボタンをクリックします。
下図のようにルートテーブルが削除されたことを確認します。
新規ルートテーブルにサブネットを割り当てる
新規ルートテーブルにサブネットを割り当てます。
新規ルートテーブルを作成しただけでは、以下のように「You do not have any subnet association」のメッセージが表示され、サブネットが割り当てられていないことが分かります。
「Subnet Associations」タブをクリックして「Edit subnet associations」ボタンをクリックします。
割り当てたいサブネットを選択し、「Save」ボタンをクリックします。
下図のようにサブネットが割り当てられたことを確認します。
インターネットゲートウェイを削除する
次に既存のインターネットゲートウェイを削除します。
「VPC ダッシュボード」より左側ペインの「インターネットゲートウェイ」をクリックします。
対象の「インターネットゲートウェイ」を選択し、「アクション」-「VPC からデタッチ」をクリックします。
VPC からデタッチの確認画面で「デタッチ」ボタンをクリックします。
下図のように「状態」が「detached」になっていることを確認します。
新規でインターネットゲートウェイを作成する
新規でインターネットゲートウェイを作成ます。
先ほどの画面より「インターネットゲートウェイの作成」ボタンをクリックします。
インターネットゲートウェイ作成画面で「Name タグ」を入力(例:New_Internet_Gateway01)し、「作成」ボタンをクリックします。
下図のようにインターネットゲートウェイが作成されたメッセージが表示されたら「閉じる」ボタンをクリックします。
VPC にインターネットゲートウェイをアタッチする
次に VPC にインターネットゲートウェイをアタッチします。
新規インターネットゲートウェイを選択して「アクション」-「VPC にアタッチ」をクリックします。
「VPC にアタッチ」画面で、アタッチする VPC を選択して「アタッチ」ボタンをクリックします。
下図のように新規インターネットゲートウェイの「状態」が「attached」になっていることを確認します。
ルートテーブルに「0.0.0.0/0」のルートを新規インターネットゲートウェイに設定する
最後にルートテーブルにデフォルトゲートウェイ「0.0.0.0/0」のルートに先ほど作成した新規インターネットゲートウェイを割り当てれば完了です。
「VPC ダッシュボード」の左側ペインより「ルートテーブル」をクリックします。
新規作成したルートテーブルを選択し、「Routes」タブをクリックし「Edit routes」ボタンをクリックします。
「Edit routes」画面で「ルートの追加」ボタンをクリックします。
下図のように「0.0.0.0/0」を入力し、「Target」に新規インターネットゲートウェイを選択し「Save routes」ボタンをクリックします。
下図のようにルートの追加が完了したメッセージが表示されることを確認して「Close」ボタンをクリックします。
下図のように先ほど設定したルートが表示されていることを確認します。
コメント