Edited at

AWSの複数アカウントのAZ名の対応を調査する

More than 3 years have passed since last update.


AZ名と実データセンターの対応はアカウント毎に異なるということ

AWSのアベイラビリティゾーン名(以下AZ名)と実データセンターの対応は実はユーザ毎に異なります。

これは多分使用されるAZが偏ることを防止する為だと思われます(一番上のAZを選ぶユーザが多いと予想される)が、まぁ真相はわかりません(^^;


AZ名の対応不一致に関わる問題

AZの不一致はアカウント間のデータ転送料金に影響してきます。

同一AZ同士の通信(Availability Zone Data Transfer)は無料ですが、同一リージョンの別AZ間の通信(Regional Data Transfer)は低価格ながら料金が発生するからです。

要はアカウントAのap-northeast-1aとアカウントBのap-northeast-1aの間で通信を行う際は、どちらもap-northeast-1aというAZ名ですが、それぞれのAZ名が本当に同一AZなのかどうかを確認しておかない限りはそのデータ転送が無料なのか有料なのかが不定で困ります。

まぁ、AZ間通信の料金はそんな高くないから神経質になる程のものではないんだけど、知らないままよりは把握してた方が気分が良いし確認手段は持っておいて損はないからね。

あとそこまで神経質になる程ではないだろうけどレイテンシにも影響しますね。


アカウント間のAZ名対応の確認方法

まず公式にはこれを確認できる画面のようなものはありません。なので自分で何かしらの手段で調べる他ありません。

最初に簡単に思いつくのはグローバルIPのアドレス帯を比べてみたり、アカウント間でtracerouteしてホップ数を調べたりする方法ですが、結構これ面倒くさいです。それに調査のためにインスタンスを起動したり実際に通信を行ってみる必要があるため多少ながらもお金がかかってしまいます。

そこでオススメなのがスポットインスタンスの料金履歴を比較する方法です。アカウントAのあるAZのスポット料金グラフと、アカウントBのあるAZのスポット料金のグラフが一致していればそれは同じAZと断定してよいはずです。というか全インスタンスタイプ×全OSタイプ×全時間変化の履歴が全て一致していれば断定というより完全一致とみなしてよいでしょう。

この手法の良い所はプログラマブルに処理しやすいことと、調査にかかる費用はゼロということです。


調査用スクリプトを作った

ここでは1日分のスポットインスタンスの価格履歴情報を使うことで、手っ取り早く、しかも無料で調査する方法をとってみます。 その調査用スクリプトが以下です。


calc-aws-az-hash.sh

#!/bin/bash

ec2-describe-regions |
while read dummy region dummy; do
for
az in a b c d; do
history="$(ec2-describe-spot-price-history \
--region $region \
-s "$(date -u -d "2 day ago" +%Y-%m-%dT00:00:00)" \
-e "$(date -u -d "1 day ago" +%Y-%m-%dT00:00:00)" \
-a $region$az 2>/dev/null | sed -e s/$region$az// | sort
)"
if [[ -n $history ]]; then
echo "$region$az $(sha1sum<<<"$history")"
fi
done
done


※ 実行の前提として、Access KeyとSecret Access Keyが環境変数AWS_ACCESS_KEYAWS_SECRET_KEYで設定されているか、または実行中インスタンスにIAMロールが設定されている必要があります。


使い方

上記スクリプトはGistに保存してあるので以下のように実行可能です。

curl -L https://gist.github.com/kawaz/6103296/raw/a33282169bff70aa53b09338b6f125fd3185fe8f/calc-aws-az-hash.sh | bash

# または短縮URLで
curl -L http://bit.ly/154Hifb | bash

これを各アカウントのアクセスキーで実行してやることでAZ毎の1日分の料金表のハッシュ値を一覧できます。この値を複数アカウント間で比べることでAZ名の対応を確認することが出来ます。

※ 直近の1日分を元にハッシュを計算しているので別の日に取得したハッシュ値リストを比べても無意味です。同じ日に複数アカウントで実行して比べてください。


実行例


アカウントAでの出力

eu-west-1a 17e8315fe5b4aa486ec536ce810e4bf24309ba02  -

eu-west-1b 12549e7c02ad5b65be4cbc7bb55e2a4a76a58fcd -
eu-west-1c f8f899d9a8c4cd31de6e54bca6863526323bd6e8 -
sa-east-1a 21eff3974acec88e893bbab897db977636892aa1 -
sa-east-1b 161d52ac3341fcb9a18679216756ad95ab97069e -
us-east-1b 316a5a3a7322481e3838a1fa214f7ca642d83035 -
us-east-1c 3122bb9130554d086ddf0fc8b0c84f6bed89df55 -
us-east-1d 4872eaa5b1b3c1075a46ffd2cf03ae8af8efcb51 -
ap-northeast-1a e16e96781d6194cb96c03bd965d6a1a0bd029d2e -
ap-northeast-1c f62f5300138346db4f84c33cd86deb11574e5501 -
us-west-2a 7f5833cfb883ac6839be234ec03d0975985a0b79 -
us-west-2b 99bcfa3f2e0b8c257846b0af350c173ac7a6b12f -
us-west-2c 490c895ae3bca355b1d6b7e58ce7132091ac779a -
us-west-1a e9163d61923a35da64a407505d267f8217c9e661 -
us-west-1c e17e8905b08e7e3d7a3625579f55788567a565db -
ap-southeast-1a b8b2a38f9168b62eb2b7d036fd826b1620277531 -
ap-southeast-1b 16cad4e6d6cc0e6b109fdb67ca1fbebc967fa005 -
ap-southeast-2a 0b71661f82e3ffa9c517db94d96649e1ae357f67 -
ap-southeast-2b 349e1da2a79e421387af116c31faf5a737af210d -


アカウントBでの出力

eu-west-1a f8f899d9a8c4cd31de6e54bca6863526323bd6e8  -

eu-west-1b 17e8315fe5b4aa486ec536ce810e4bf24309ba02 -
eu-west-1c 12549e7c02ad5b65be4cbc7bb55e2a4a76a58fcd -
sa-east-1a 21eff3974acec88e893bbab897db977636892aa1 -
sa-east-1b 161d52ac3341fcb9a18679216756ad95ab97069e -
us-east-1a 3122bb9130554d086ddf0fc8b0c84f6bed89df55 -
us-east-1b 4872eaa5b1b3c1075a46ffd2cf03ae8af8efcb51 -
us-east-1d 316a5a3a7322481e3838a1fa214f7ca642d83035 -
ap-northeast-1a e16e96781d6194cb96c03bd965d6a1a0bd029d2e -
ap-northeast-1c f62f5300138346db4f84c33cd86deb11574e5501 -
us-west-2a 99bcfa3f2e0b8c257846b0af350c173ac7a6b12f -
us-west-2b 7f5833cfb883ac6839be234ec03d0975985a0b79 -
us-west-2c 490c895ae3bca355b1d6b7e58ce7132091ac779a -
us-west-1a e17e8905b08e7e3d7a3625579f55788567a565db -
us-west-1b e9163d61923a35da64a407505d267f8217c9e661 -
ap-southeast-1a b8b2a38f9168b62eb2b7d036fd826b1620277531 -
ap-southeast-1b 16cad4e6d6cc0e6b109fdb67ca1fbebc967fa005 -
ap-southeast-2a 349e1da2a79e421387af116c31faf5a737af210d -
ap-southeast-2b 0b71661f82e3ffa9c517db94d96649e1ae357f67 -


判明した対応表

アカウントA
アカウントB
ハッシュ値

eu-west-1a
eu-west-1b
17e8315fe5b4aa486ec536ce810e4bf24309ba02

eu-west-1b
eu-west-1c
12549e7c02ad5b65be4cbc7bb55e2a4a76a58fcd

eu-west-1c
eu-west-1a
f8f899d9a8c4cd31de6e54bca6863526323bd6e8

sa-east-1a
sa-east-1a
21eff3974acec88e893bbab897db977636892aa1

sa-east-1b
sa-east-1b
161d52ac3341fcb9a18679216756ad95ab97069e

us-east-1b
us-east-1d
316a5a3a7322481e3838a1fa214f7ca642d83035

us-east-1c
us-east-1a
3122bb9130554d086ddf0fc8b0c84f6bed89df55

us-east-1d
us-east-1b
4872eaa5b1b3c1075a46ffd2cf03ae8af8efcb51

ap-northeast-1a
ap-northeast-1a
e16e96781d6194cb96c03bd965d6a1a0bd029d2e

ap-northeast-1c
ap-northeast-1c
f62f5300138346db4f84c33cd86deb11574e5501

us-west-2a
us-west-2b
7f5833cfb883ac6839be234ec03d0975985a0b79

us-west-2b
us-west-2a
99bcfa3f2e0b8c257846b0af350c173ac7a6b12f

us-west-2c
us-west-2c
490c895ae3bca355b1d6b7e58ce7132091ac779a

us-west-1a
us-west-1b
e9163d61923a35da64a407505d267f8217c9e661

us-west-1b
us-west-1a
e17e8905b08e7e3d7a3625579f55788567a565db

ap-southeast-1a
ap-southeast-1a
b8b2a38f9168b62eb2b7d036fd826b1620277531

ap-southeast-1b
ap-southeast-1b
16cad4e6d6cc0e6b109fdb67ca1fbebc967fa005

ap-southeast-2a
ap-southeast-2b
0b71661f82e3ffa9c517db94d96649e1ae357f67

ap-southeast-2b
ap-southeast-2a
349e1da2a79e421387af116c31faf5a737af210d

※ところでこの例だと us-east-1 がそうなんですが、アカウント毎にAZ名の対応が違うどころかアカウントによっては同名のAZが無いなんてこともあります。こういう場合は更に別の問題も発生しうるので注意しまましょう。(こちらの記事の注意点参照)