AWSのAvailability Zoneとロケーションの関係
シンプルなんだけど面白かったのでまとめました。
AZ(アベイラビリティーゾーン)とは
ご存知の方も多いと思いますが、AWS(EC2)のロケーションは、リージョンとアベイラビリティーゾーンという概念があります。
リージョンというのは、 東京
や バージニア
、 サンパウロ
などです。最近だと ソウル
も追加されました。
アベイラビリティーゾーンというのは、同一リージョン内の独立したロケーションの単位(データセンターを想定するとだいたいあってる)で、 アベイラビリティーゾーン間の距離は「近距離」(数キロ〜数十キロらしい)にあるそうです。
参考: http://www.atmarkit.co.jp/ait/articles/1411/20/news106.html
AWSのドキュメントの図を引用するとこんな感じ。 http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/using-regions-availability-zones.html
素朴な疑問
たとえば、東京リージョンであれば、 ap-northeast-1a
, ap-northeast-1b
, ap-northeast-1c
3つのAZがあります。
ここで疑問に思うのが「(冗長化構成を取らない場合) とりあえず ap-northeast-1a
でインスタンス立てそうだし、 ap-northeast-1a
ばっかり選択されてAZごとのリソースの使用状況が偏るんじゃないか」ってことです。
僕だったらとりあえず1台立てるなら 1a
を使ってますし、同じことを考えてる人が何百万人と居ると大変です。
シンプルな解決方法
ドキュメントをよく読んでみました。 http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/using-regions-availability-zones.html
リソースがリージョンの複数のアベイラビリティーゾーンに分散されるようにするため、アベイラビリティーゾーンは各アカウントの識別子に個別にマップされます。たとえば、あるアカウントのアベイラビリティーゾーンは別のアカウントのus-east-1aアベイラビリティーゾーンと同じ場所にはない可能性がありますus-east-1a。
実はAZの識別子と実際のAZのロケーションの対応関係はAWSアカウントによって違う可能性があるようです。
この事を知っていると、以下のような疑問にも納得が行きます。
Tokyoリージョンにて、Regional data transferが計上されない現象について
異なるAZの間(ap-northeast-1aとap-northeast-1b)でプライベートIPアドレスを用いたTCP通信を行い、5GBのデータを送信しましたが、送信側アカウントにも受信側アカウントにもregional data transferの課金が生じません。これは正常な動作となりますでしょうか? https://forums.aws.amazon.com/thread.jspa?messageID=273850
単純ですが一番効果的な解決方法ですね!
追記 (2018/12/29)
AZ名と実際のAZのロケーションはAWSアカウントによって対応が違う場合があるのは変わっていませんが、AZ名とは別にAZ IDというものがリリースされました。これは実際のロケーションと対応していて、東京リージョンだと、 apne-az1
のようなフォーマットのようです。AZ IDを見れば異なるアカウント間の接続の際に同じロケーションで接続してレイテンシを抑えることができそうですね。