「EFSを別アカウントと共有したい」——一見シンプルですが、ここには落とし穴が潜んでいます。EFSはリージョンサービスに見えて、実体へのアクセスはAZごとのマウントターゲット(それぞれ固有のIP)を通ります。Multi-AZならIPが2つ。そしてアカウントを跨いだ瞬間、この「2つのIP」が厄介の源になります。順に解きほぐします。

01EFSの構造 — リージョンサービスだが、入口はAZごと

まず前提です。EFSファイルシステム自体はリージョンのサービスですが、そこへ接続する入口はマウントターゲットで、これはAZ(サブネット)ごとに1つ作ります。各マウントターゲットはそのサブネット内のENIとして、固有のIPアドレスを持ちます。

つまり、2つのAZから使うEFSには、マウントターゲットが2つ、IPアドレスが2つ存在します。これが「IPが2つある」の正体です。

所有アカウント(EFS所有) EFS(リージョンサービス) MT / AZ-a IP1 .10 MT / AZ-c IP2 .20 マウントターゲット=AZごと=IP2つ 利用アカウント(別VPC) EC2 / AZ-a EC2 / AZ-c ○同AZ × DNS(fs-xxx.efs…)は所有VPC内でしか 解決しない → IP直マウントになりがち ○ 同AZ:同じAZのMTに接続(速い・無料) × クロスAZ:別AZのMTを掴む(遅延+データ転送課金)
クロスアカウント×Multi-AZ EFSの構図(簡略化しています)

02DNSがAZアフィニティを吸収してくれる — 同一アカウント内なら

同一アカウント(同一VPC)内では、この2つのIPは意識せずに済みます。EFSのDNS名(fs-xxxx.efs.リージョン.amazonaws.com)でマウントすると、接続元インスタンスと同じAZのマウントターゲットのIPが自動的に返る——AZアフィニティが効くからです。

これは重要な仕組みです。同一AZのマウントターゲットに繋がることで、クロスAZの遅延とデータ転送課金を避けられる。DNSが「2つのIPのうち正しい方」を勝手に選んでくれているわけです。問題は、この便利なDNSがアカウントを跨ぐと効かなくなることです。

03アカウントを跨ぐと、DNSが効かない

別アカウントのVPCからEFSを使いたい場合、ネットワークはVPCピアリングやTransit Gatewayでつなぎます(接続設計の考え方)。ところが、EFSのDNS名は所有アカウントのVPC内でしか正しく解決しません。ピアリング先の別アカウントからそのDNS名を引いても、期待どおりには解決しない。

結果、多くの現場がマウントターゲットのIPを直接指定してマウントする形に行き着きます。そしてIPを直打ちした瞬間、DNSが吸収してくれていたAZアフィニティが消え、「2つのIPのどちらを掴むか」を人間が設計しなければならなくなります。ここからが本題です。

04難しさ① どちらのIPを掴むか — クロスAZ課金とAZ名のランダム性

IP直マウントで最初に問われるのが、クライアントと同じAZのマウントターゲットIPを選べているかです。AZ-aのEC2がAZ-cのマウントターゲット(IP2)を掴むと、通信は毎回AZをまたぎ、遅延が乗り、クロスAZのデータ転送課金が発生し続けます。EFSは頻繁にI/Oするので、この積み重ねは無視できません。

現場のコツ:さらに厄介なのが、AZ名(us-east-1a等)はアカウントごとにランダムに割り当てられることです。所有アカウントの「AZ-a」と、利用アカウントの「AZ-a」が、物理的に同じAZとは限りません。名前で揃えると物理AZがずれ、気づかぬうちにクロスAZになります。物理AZを正しく揃えるには、名前ではなくAZ ID(use1-az1 のような不変の識別子)で対応を確認してください。ここはCIDR設計(アドレスプラン)と並ぶ、クロスアカウント設計の基本作法です。

05難しさ② 冗長性の喪失 — 片方のAZが落ちたら?

もう1つの罠が可用性です。DNSでマウントしていれば、各インスタンスが自AZのマウントターゲットに繋がることで、全体としてMulti-AZの回復力が保たれます。ところが1つのマウントターゲットIPを全クライアントに直打ちすると、そのAZが単一障害点になります。そのAZのマウントターゲットに障害が起きれば、全クライアントがEFSを見失う。

「IP直打ちで動いた」で満足すると、Multi-AZのはずが実質シングルAZ依存になっている——これが最も見落とされる劣化です。せっかく2つあるIPを、1つしか活かせていない状態です。

06現実的な設計 — どう2つのIPと付き合うか

まとめ

EFSは「リージョンサービス」の顔をしていますが、アクセスの実体はAZごとのマウントターゲット=2つのIPです。同一アカウントならDNSがAZアフィニティを吸収してくれますが、アカウントを跨ぐとDNSが効かず、IP直マウントになり、「どちらのIPを掴むか」でクロスAZ課金・AZ名のランダム性・冗長性の喪失という三つの罠が一気に表面化します。2つあるIPを、正しいAZに・冗長性を保って使う——ここを設計で押さえないと、クロスアカウントEFSは「動いてはいるが遅くて高くて脆い」状態に静かに陥ります。

クロスアカウントのEFS共有(マウントターゲットとIPの扱い、AZ ID整合、DNS再構築、可用性設計)は、EMWのマルチアカウント設計の知見が活きる領域です。「IP直打ちで動いているが不安」な構成の是正からご相談ください。

相談する
← ブログ一覧へ戻る