間違って解放してしまったElastic IPを復元してみた

Elastic IPを間違って開放してしまっても運が良ければ復元できます
2021.05.08

Elasic IPを間違って解放してもまだ絶望しないで

こんにちは、のん です。

皆さんは間違ってElastic IPを解放してしまったことはありますか? 私はないです。

ただ、今後やらかしそうな予感がしたので、間違って解放してしまった場合の対処方法をまとめようと思います。

Elastic IPを復元できる条件

残念ながらElastic IPは無条件で復元できません。 AWS公式ドキュメントに復元できる条件が記載してありました。

  1. Elastic IP アドレスが別の AWS アカウントに割り当てられている場合や Elastic IP アドレスの制限を超過する場合は、Elastic IP アドレスを復元できません。
  2. Elastic IP アドレスに関連付けられたタグを復旧することはできません。
  3. Elastic IP アドレスは、Amazon EC2 API コンソールまたはコマンドラインツールでのみ復元できます。

1つ目の Elastic IP アドレスが別の AWS アカウントに割り当てられている場合がポイントですね。要するにElastic IPを解放してから復元するまでの間に、解放してしまったElastic IPが他の利用者に割り当てられてしまうと復元できません。

やってみた

Elastic IPの復元

早速、試してみようと思います。コマンドラインツールで操作する必要があるとのことなので、Cloudshellを起動して、以下のようにElastic IPを払い出しました。

# Elastic IPの払い出し
$ aws ec2 allocate-address
{
    "PublicIp": "3.215.105.58",
    "AllocationId": "eipalloc-07830760a8b1ea062",
    "PublicIpv4Pool": "amazon",
    "NetworkBorderGroup": "us-east-1",
    "Domain": "vpc"
}

# Elastic IPの確認
$ aws ec2 describe-addresses
{
    "Addresses": [
        {
            "PublicIp": "3.215.105.58",
            "AllocationId": "eipalloc-07830760a8b1ea062",
            "Domain": "vpc",
            "PublicIpv4Pool": "amazon",
            "NetworkBorderGroup": "us-east-1"
        }
    ]
}
[cloudshell-user@ip-10-1-11-105 ~]$

Elastic IPが払い出されましたね。

それでは、Elastic IPを解放して、すぐ復元してみます。

# Elastic IPの解放
$ aws ec2 release-address --allocation-id eipalloc-07830760a8b1ea062

# Elastic IPが解放されたことの確認
$ aws ec2 describe-addresses
{
    "Addresses": []
}

# Elastic IPの復元
$ aws ec2 allocate-address --domain vpc --address 3.215.105.58
{
    "PublicIp": "3.215.105.58",
    "AllocationId": "eipalloc-017d7c5001d15dc50",
    "PublicIpv4Pool": "amazon",
    "NetworkBorderGroup": "us-east-1",
    "Domain": "vpc"
}

公式ドキュメントにある通り、Elastic IPの復元ができました!! ちなみに解放してから復元開始をするまでは1分程度でした。

解放してから時間が経過したElastic IPの復元

解放してからすぐ復元できることは確認できました。しかし、実際に復元を開始するは、調査などもあることから解放してからしばらく時間が経ってからだと思います。

そこで、私の環境で過去に解放したElastic IPを復元できるか確認してみようと思います。

復元するElastic IPは以下の通りです。

  • 5/7 20:50削除: 18.233.238.219
  • 5/3 17:28削除: 3.234.3.214
  • 4/30 10:40削除: 34.195.216.130

それでは、それぞれのElastic IPを復元してみます。結果は以下の通りです。
ちなみに作業時の時刻は 5/8 11:45 です。

$ aws ec2 allocate-address --domain vpc --address 18.233.238.219

An error occurred (InvalidAddress.NotFound) when calling the AllocateAddress operation: The Elastic IP address '18.233.238.219' does not exist or is not available.
$ 
$ aws ec2 allocate-address --domain vpc --address 3.234.3.214

An error occurred (InvalidAddress.NotFound) when calling the AllocateAddress operation: The Elastic IP address '3.234.3.214' does not exist or is not available.
$ 
$ aws ec2 allocate-address --domain vpc --address 34.195.216.130

An error occurred (InvalidAddress.NotFound) when calling the AllocateAddress operation: The Elastic IP address '34.195.216.130' does not exist or is not available.

なんと、いずれのElastic IPも復元できませんでした。解放してしまってから復元を始めるまでの時間が重要そうですね。

Elastic IPの復元は気付いてからの動きだしが重要

Elastic IPの復元は気付いてからの動きだしが重要ということが分かりました。
そのため、Elastic IPを間違って解放してしまっても、慌てたり、絶望するのではなく、「確か解放してもすぐになら復元できるはず」と復元への動きだしを開始すれば、まだ間に合うかも知れません。

このブログが誰かの助けになれば幸いです。

以上、東京オフィスの のん(@non____97)でした!