less is more

心のフルスタックエンジニア👨‍💻バイブスでコードを書いています🤘

ap-northeast-1a は概念

f:id:bluepixel:20200512225558p:plain

アベイラビリティゾーンについて学ぶ

東京リージョンap-northeast-1 では4つの利用可能なAZ(アベイラビリティゾーン)が提供されている。

  • ap-northeast-1a
  • ap-northeast-1b
  • ap-northeast-1c
  • ap-northeast-1d

これらは実体として1つずつの独立したデータセンターを表しており、
耐障害性、安定性の確保のために物理的に分けられている。

いわゆるマルチAZ構成にして、片方のDCに隕石が直撃したときでもサービスを継続できるようにするためである。

全てのAZが使えるわけではない

アカウントで利用できるAZは以下のコマンドで確認できる。

$ aws ec2 describe-availability-zones --region ap-northeast-1 | jq -r '.AvailabilityZones[].ZoneName'
ap-northeast-1a
ap-northeast-1c
ap-northeast-1d

1bがない。
最近作ったアカウントでは1bは利用できない。
これはすでに廃止?に向かっているAZで、
新規リソースの作成ができないようになっているらしい。

1bが利用できないアカウントでは3つのAZを使ってリソースを構築していくことになる。

ap-northeast-1a

「あるAZは独立したデータセンターを表している」と最初に書きましたが、
これに関してよく勘違いされていることがあります。

ap-northeast-1aというデータセンターはありません。
あるアカウントにおける1aと、別のアカウントにおける1aが、
同じデータセンターを指しているとは限らないということです。

以下ドキュメントからの引用です。

アベイラビリティーゾーンは、リージョンコードとそれに続く文字識別子によって表されます (us-east-1a など)。 リソースがリージョンの複数のアベイラビリティーゾーンに分散するように、 アベイラビリティーゾーンは各 AWS アカウントの名前に個別にマップされます。 たとえば、ご使用の AWS アカウントのアベイラビリティーゾーン us-east-1a は 別の AWS アカウントのアベイラビリティーゾーン us-east-1a と同じ場所にはない可能性があります。

docs.aws.amazon.com

去年8月に東京リージョンで大規模な障害があった時、
1aと1dが障害を受けたとかそんなコメントがたくさん流れましたが、
これはあくまでその人のアカウントにおける1aとか1dの話であって、
「1aだけどうちは被害受けてない...」みたいなのがあったのはそういうわけです。

ちなみに公式の声明では単一のアベイラビリティゾーンとして具体的なAZは明らかにされていませんが、パートナー等各社のレポートを見るとapne1-az4だと思われます。

aws.amazon.com

閑話休題

AZ ID

じゃあ物理的なDCを特定するのって無理なの?というとそんなことはなくて、1aとか1c以外に一意にAZを特定できるAZ IDというものがあります。

先ほどのAPIZoneIdというプロパティにあたるものです。

$aws ec2 describe-availability-zones --region ap-northeast-1 | jq -r '.AvailabilityZones[] | { ZoneName, ZoneId }'
{
  "ZoneName": "ap-northeast-1a",
  "ZoneId": "apne1-az4"
}
{
  "ZoneName": "ap-northeast-1c",
  "ZoneId": "apne1-az1"
}
{
  "ZoneName": "ap-northeast-1d",
  "ZoneId": "apne1-az2"
}

上の例でいうと、あるDCに一意に割り振られているIDがapne1-az4であり、このアカウントにおいて1aにマッピングされていて、1aに作成したリソースは全てそのDCに配置されるということです。

で、これって何か役に立つの?

DCが特定できないと困ることがあります。
例えばアカウント間で共有VPCを作る場合、1aが指すDCが異なっていると適切な分散が行えません。 そういう時にこのAZ IDを使って調節を行います。

アカウント間でアベイラビリティーゾーンを調整するには、 アベイラビリティーゾーンの一意で一貫性のある識別子である AZ ID を使用する必要があります。 たとえば、use1-az1 は、us-east-1 リージョンの AZ ID で、すべての AWS アカウントで同じ場所になります。

docs.aws.amazon.com

DCの具体的な場所

基本的には非公開なのですが、WikiLeaksや協力事業会社の情報などから
ある程度の場所は推定されているようです。

xn--o9j8h1c9hb5756dt0ua226amc1a.com

以上です。