[小ネタ]迷子のEIPを追いかけつつまとめたEIPネタ詰め合わせ
いっけな〜い!リリースリリース!
私、EIP(Elastic IP)!
いつもはEC2インスタンスのパブリックIPアドレスを固定しているんだけど、今日はどこのインスタンスにもアタッチされてないの!
大変!このまま 起動しているインスタンスにアタッチされていない状態 だと、 0.005USD/h(2019年5月31日現在)ずつ課金 されちゃうよ〜!
急いでリリースしなきゃ!
あれ?
リリース出来ない……どこかにアタッチされているの?でもインスタンスIDはついてなかったし……
取り敢えず関連付けを解かない事には始まらないからまずはそっちを……
あ、あれ?
やっぱりどこかのリソースにアタッチされていて関連付けを解除する権限が無いって怒られているみたい。ちなみに、 日本語のコンソールにしていても英語で怒られちゃうんだよね 。それはさておき、どうなっているのかな?
取り敢えず、アタッチ先のENI(Elasitic Network Interface)はあるみたいだからちょっとそっちを見てみよう……
あ〜もう!ENIにつけて放置しっぱなしじゃダメじゃない〜!
でも良かった、アタッチ先が分かったからここからデタッチすればリリースする事が出来るようになるね!
EC2インスタンスが停止していても課金されちゃったり 、逆に 一つのEC2インスタンスに2つ以上のEIPがアタッチされていると追加分が課金されちゃったり 、 1ヶ月で100回以上アタッチされるインスタンスを変えちゃって課金されちゃったり とそそっかしいところがあるのがたまにキズって言われるんだよね……気をつけなきゃ本当。
EIPが課金される条件については、下のブログに詳しく纏まっているからそちらを参照してみてね!
さて、デタッチして……
ええぇ!?何で!?
※ 「Force detachment」にチェックを入れても デタッチ出来ません。エラーメッセージも変わりません。
さて、お分かり頂けただろうか。
そそっかしいEIPちゃんは見落としていたようだが……
▲ ちゃんと書いてある気配しかない
Descriptionはちゃんと読もう!エンジニアとの約束だぞ!
ここをきちんと読むと、 Interface for NAT Gateway と書いてあります。
そう、NAT GatewayはEIPを作成時に指定する必要があり、かつ変更する事が出来ません。
EC2インスタンス絡み以外のEIP、忘れがち問題
そもそも「You do not have permission to access the specified resource.」や「you are not allowed to manage 'ela-attach' attachments.」と怒られるようなアクションをとってしまわないよう、ちゃんとそれぞれのリソース(今回だとEIP、ENI)にタグつけて分かり易くしておけよってオチではあるのですがこの茶番だけだと折角のエントリが勿体無いので、もう少しだけEIPについて気になる事を纏めておきたいと思います。
でも、ブログに書こう!と思った内容は「 EIPが開放出来ない、デタッチも出来ない時はNAT Gatewayで使っているEIPの可能性が高い 」だけです。本題はここまでです。
遅くなりましたが、AWS事業本部のShirotaです。本題が終わったところではじめて挨拶をしました。中々斬新ですね。
▲ フェイントをかけるのが大好きです。でも下手なので大抵はフェイントになりません
ここからは、小ネタスタンスを崩さないようにEIPに関してちょっと気になった事を一問一答形式で纏めていきます。少しでも、皆様が気になったネタがあれば幸いです。
EIPって正確にはEC2インスタンスについている訳じゃないよね?
茶番でも出てきましたが、正確に記述すると EIPが関連付けられたENIがEC2インスタンスにアタッチされている という事になります。
更に正確に説明すると、EC2インスタンスそのものにEIPが関連付けられていた頃があったのです。
EIPを取得しようとする時に「スコープ」の確認だけさせられるんだけどあれ何?
丁度上の話に繋がります。
以前、VPCが存在しなかった時代には他のアカウントとサブネットを共有して使うEC2-Classicというものがありました。
2013年12月4日以前に作られたAWSアカウントでのみ使用できるサービスです。
そのようなアカウントでは、スコープの選択肢が「VPC」と「Classic」の二種類選べます。
▲ 噂の「Classic」スコープです
EC2-ClassicのEIPは今とどう違ったの?
はじめにお話ししたような、EIPへのタグ付けが出来ませんでした。EC2-Classicしか存在しなかった頃にはNAT Gatewayはそもそも無かった訳(2015年に登場したサービス)ですが。
他にも、EC2インスタンスを停止するとEC2インスタンスとの関連付けが解除されてしまったりします(今はEC2インスタンスを停止してもENIに紐づいたままです。 課金はされてしまいますが )。
EIPをアタッチしようとする時「インスタンス」か「Network Interface」か選べるけど?
インスタンスにEIPを関連付けするという事は、「インスタンスで使用しているENIにEIPを関連づけようとしている」という事です。
インスタンスを選択した後、プライベートIPアドレスがプルダウンで選択できるようになっているところからも分かるかと思います。
開放したEIPをまた使う事は可能?
他所で割り当てされてしまわなければ可能です。
試しに、とあるEIPを開放してからAWS CLIを用いて再取得してみます。
▲ さぁ、何処へでもお行きなさい
$ aws ec2 allocate-address --domain vpc --address 5X.XXX.XXX.XX6 { "PublicIp": "5X.XXX.XXX.XX6", "Domain": "vpc", "AllocationId": "eipalloc-0dXXXXXXXXXXXXXXX", "PublicIpv4Pool": "amazon" }
▲ この後スタッフがちゃんとAssociateしました
AllocationIdがユニークな事からも、再取得出来た同じEIPだという事が分かるかと思います。
EIPが開放できないオチに他のパターンはある?
逆引き設定に使用しているEIPは開放出来ません。Nat GatewayのEIPよりもこちらの対処は大変です。
そんな逆引きEIPの開放方法については、以下のブログが分かり易く説明してくれています。
迷子のEIPを追いかけ回した結果
さて、色々なEIPの話をしてきましたが自分で思っていた以上にEIPにも面白い背景や仕様が存在していました。
そしてこれだけ色々お話ししてきましたが、やはり今日一番私が伝えたかった事は、
「 EC2インスタンス関連じゃなさそうなのに開放出来ないEIPを見たらNAT Gatewayを疑え (逆引きEIPかもしれないけど!)」に尽きます。
寧ろ開放できてしまったら、「使ってないEIPでお金浪費しちゃっていたな」と反省すると共に、「今気付いて良かった」と胸を撫で下ろしてみても良いかもしれません。