Help us understand the problem. What is going on with this article?

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

More than 5 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が無いなんてこともあります。こういう場合は更に別の問題も発生しうるので注意しまましょう。(こちらの記事の注意点参照)

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした