意外と複雑?VPCピアリング接続のライフサイクルを網羅する

「VPCピアリング接続、間違えて作っちゃった……あれ?却下?削除?どうすれば良いんだっけ?」と混乱したので、VPCピアリング接続のライフサイクルとそれぞれのステータスについて調べてみました。これでもう混乱とはおさらばだ!
2019.10.29

久しぶりに外を歩いてみたところ、世がハロウィン一色になっていて驚きました。
きっと次にブログを書く頃には、世はクリスマス一色になっているでしょう。
いつもワンテンポ遅れていますが、技術のブームくらいは乗り遅れない大人になれるよう精進する所存です。

▲ 部屋にハロウィンの装飾をしました。外に出ずとも浮かれています

深まる秋の向こうからこんにちは。AWS事業本部のShirotaです。皆さん秋をエンジョイしてますか?(時候の挨拶)

突然ですがクイズです

あなたのAWSアカウントに、あるVPCピアリング接続のリクエストが届きました。
許可しようとしましたが、その直前にリクエストを出した人から連絡が来ました。
「さっきのリクエスト、間違えたVPCを選んで申請しちゃったみたいなので許可を出さないで貰えると助かります!」
あなたが リクエストを受け付けない 為に取れる行動はどれでしょうか。

  1. リクエストの期限が切れるまで何もしない
  2. リクエストを却下(Rejected)する
  3. VPCピアリング接続を削除する

分かりますか?

▲ 丁度こんな状況でしょうか

正解は「 全て 」です。
勿論「リクエストを却下して下さい」と依頼された場合には「Reject Request」を選択して却下してあげる事が最適解だと思われます。
ですが、「リクエストを 受け付けない 」行動はどれかと言われると上記の全てが当てはまります。
今回はこれらの選択肢が実際どのような挙動になるのかを理解する為に、VPCピアリングのライフサイクルについて調べた事をまとめたいと思います。

VPCピアリング接続のライフサイクルと各ステータスについて

まず、AWSの公式ガイドの VPC ピアリング接続のライフサイクル にある図を見てみましょう。

▲ 今日話したかった事が濃縮されている

この図のフローを参考にして、様々なケースを想定しながら各ステータスについて説明していきたいと思います。
今回は、各ステータスがより分かりやすくなるようにリクエストするAWSアカウント(以下AWSアカウントA)とリクエストされるアカウント(以下AWSアカウントB)が別の状況を想定してみます。

リクエストが承認された場合

AWSアカウントAからAWSアカウントBに対して、VPCピアリング接続のリクエストを出して承認された場合を考えてみます。
この状況をフローチャートにすると以下のようになります。

▲ ステータスについてはこれから説明します

まず、フローチャートに出てきたステータスについて簡単に解説します。

  • Initiating-request: VPCピアリング接続のリクエスト開始時のステータス
  • Pending-acceptance: VPCピアリング接続のリクエストの承認を待っている状態。AWSアカウントAはVPCピアリング接続を削除(Delete)する事ができ、AWSアカウントBは承認(Accept)、却下(Reject)、削除(Delete)する事ができる。7日間有効
  • Provisioning: VPCピアリング接続が承認され、アクティブに移行している時のステータス
  • Active: VPCピアリング接続が承認され、アクティブになっている時のステータス

Initiating-requestとProvisioningの2つは、AWSアカウント間のレイテンシが低い場合には見る機会があまり無いのではないかと考えられます。

▲ 試しに、レイテンシの高そうな東京リージョンからサンパウロリージョンへリクエストを出してみた

▲ 折角なので承認もしてみました

リクエストが失敗した場合

次はAWSアカウントAからAWSアカウントBに対して、存在しないVPC IDを指定してリクエストを出してみました。

▲ FailedとFailedになった理由がコンソールに出た

リクエストが失敗しています。

この状況をフローチャートにすると以下のようになります。

▲ すごくシンプル

新たにフローチャートに出てきたステータスについて簡単に解説します。

  • Failed: VPCピアリング接続のリクエストが失敗。この状態からVPCピアリング接続は承認(Accept)、却下(Reject)、削除(Delete)の一切の操作が出来なくなる。2時間表示される

また、図に記載してある通り「Failed」のステータスになったVPCピアリング接続は 2時間後に消滅します

▲ AWSアカウントBには何も出ていない事も確認してみた

リクエスト期限が切れた場合

AWSアカウントAからAWSアカウントBに対して、VPCピアリング接続のリクエストを出したものの何もアクションが取られず7日間が経過した場合について考えてみます。
この状況をフローチャートにすると以下のようになります。

▲ 期限切れで接続が消滅してしまった

新たにフローチャートに出てきたステータスについて簡単に解説します。

  • Expired: VPCピアリング接続のリクエストが有効期限切れになった状態。双方とも一切の操作ができない。2日間表示される  

冒頭でクイズに出させてもらった1がこのパターンですね。
リクエスト期限が切れるまで何もしない事により、リクエストを受け付けなかった状態です。

リクエストが却下された場合

今度はAWSアカウントAからAWSアカウントBに対してVPCピアリング接続のリクエストを出したものの、AWSアカウントBから却下された場合について考えてみます。
この状況をフローチャートにすると以下のようになります。

▲ 却下されてしまった

新たにフローチャートに出てきたステータスについて簡単に解説します。

  • Rejected: VPCピアリング接続のリクエストが却下された状態。双方とも一切の操作ができない。リクエストを出し却下されたAWSアカウントでは2日間、リクエストを受け取り却下したAWSアカウントでは2時間表示される

冒頭でクイズに出させてもらった2がこのパターンですね。 因みに、同じAWSアカウント内でVPCピアリング接続のリクエストを出していた場合は、2時間だけ表示されます。

VPCピアリング接続が削除された場合

リクエストの削除に関しては、以下の状況が考えられます。

  • VPCピアリング接続がPending-acceptanceの時、リクエストを出したAWSアカウントAがVPCピアリング接続を削除する
  • VPCピアリング接続がPending-acceptanceの時、リクエストを受けたAWSアカウントBがVPCピアリング接続を削除する
  • VPCピアリング接続がActiveの時、AWSアカウントAがVPCピアリング接続を削除する
  • VPCピアリング接続がActiveの時、AWSアカウントBがVPCピアリング接続を削除する

Pending-acceptanceでもActiveでも、削除を実行後のステータスは同じになります。
ですが 削除を実行したアカウントとしていないアカウントで挙動が異なる 為、今回は上2つの場合についてフローチャートを作成してみました。

まずは、VPCピアリング接続がPending-acceptanceの時、 リクエストを出したAWSアカウントAがVPCピアリング接続を削除する 場合です。

▲ ステータス変更までの時間に注目

先に、新たにフローチャートに出てきたステータスについて簡単に解説します。

  • Deleting: Pending-acceptanceまたはActiveなVPCピアリング接続が削除中である状態。双方とも一切の操作ができない
  • Deleted: Pending-acceptanceまたはActiveなVPCピアリング接続が削除された状態。双方とも一切の操作ができない。VPCピアリング削除を実行したアカウントでは2時間、実行していないアカウントでは2日間表示される

今回、削除を実行したのはAWSアカウント A です。
なので、AWSアカウントAでは2時間、AWSアカウントBでは2日間表示されます。
冒頭でクイズに出させてもらった3がこのパターンですね。
Deletingは、前述した通りAWSアカウント間のレイテンシが低い場合は見る機会があまり無いのではないかと考えられます。

次に、VPCピアリング接続がPending-acceptanceの時、 リクエストを受けたAWSアカウントBがVPCピアリング接続を削除する 場合です。

▲ 今回もステータス変更までの時間に注目

今回、削除を実行したのはAWSアカウント B です。
なので、AWSアカウントAでは2日間、AWSアカウントBでは2時間表示されます。

全力で網羅してみたら結構ややこしかった

公式ガイドにあったライフサイクルのパターンを実際に試し、フローチャートにしてみましたがややこしいですね。特にVPCピアリング接続が表示されなくなるまでの時間の違いがややこしかったです。
時間に関しては

  • 作業実行をしたアカウントではステータスが短時間表示される
  • そうでないアカウントではステータスが長時間(確実に日付をまたぐ)表示される

と認識しておけば大丈夫です。
「あれ、いつまでもVPCピアリング接続が残っているな?」と思ったら上記を思い出して下さい。

また、個人的に検証していて引っかかったのは「却下したVPCピアリング接続が削除できない」と言ったような ステータスによって実行できる事が制限される 点です。

改めて、それぞれのステータスで実行できる/できない動作を表にまとめてみました。
(今回、表示される時間が短いと考えられるステータスは省略しました)

Pending-acceptance Active Expired Rejected Deleted
承認(Accept) できる(リクエスト受信アカウントのみ) できない できない できない できない
却下(Reject) できる(リクエスト受信アカウントのみ) できない できない できない できない
接続の削除(Delete) できる できる できない できない できない

基本的に、接続リクエスト期限が切れる・接続リクエストが却下される・接続(もしくは接続リクエスト)が削除された場合は 何もできなくなり、一定期間経過後VPCピアリング接続が消滅する と認識しておけば大丈夫です。

今回は、VPCピアリング接続のライフサイクルについて調べてみました。
VPCピアリング接続を設定する際に「どんな流れになるんだっけ?」とか「これを実行するとどうなるんだ?」と思われている方の助けになれば幸いです。