2023の19日目です。今年のもっとも労力に対するリターンが少なかった作業について経緯Webアプリケーションから使用する機能がfoo.example.comとしてAWSアカウントα上でAPIGateway経由のLambdaで稼働している。APIGatewayとLambdaはServerlessFrameworkで管理されている。Lambdaのコードも老朽化していたため、機能を作り直すことになった。この機能を別のAWSアカウントβへ切り出すことになった。AWSアカウントβに新版のLambda等一式をデプロイした。foo.example.comをAWSアカウントβに向き変えようとしたが、次項に述べる障壁によってうまくいかなかった。仕方が無いので、新たにbar.example.comを発行し、Webアプリケーションからの参照を切り替えた。1年経つも、foo.example.comのトラフィックは無くならず、また旧Lambdaで使用しているのランタイムのサポート終了が通知された。ゴール旧Lambdaを廃止し、AWSアカウントβのみで運用されている状態にする。foo.example.comは廃止せず、新Lambdaに流す。障壁APIGatewayのカスタムドメインAWSアカウントβのAPIGatewayのカスタムドメインにfoo.example.comを追加すれば済むように見えるが...エンドポイントタイプがedge(エッジ最適化)の場合は、全アカウント全リージョンで1つしか存在できない。foo.example.comが存在しているとき他アカウントでfoo.example.comを設定できない。エンドポイントタイプがregional(リージョナル)の場合は、APIGatewayの存在するリージョンで、全アカウントで1つしか存在できない。ap-northeast-1にfoo.example.comが存在しているとき他アカウントのap-northeast-1にfoo.example.comを設定できない。Route53のレコードDNSがRoute53の場合、APIGatewayエンドポイントにはAレコードのエイリアス、またはCNAMEレコードで設定する。参照Aレコードエイリアスの場合は、他のレコードと共存できるが、他のAWSアカウントのAPIGatewayエンドポイントを参照できない。CNAMEレコードの場合は他のAWSアカウントのAPIGatewayエンドポイントを参照できるが、他のレコードと共存できない。そのため、ゾーンのrootではCNAMEは設定できない。以下のようにドメイン移管する場合、既存のカスタムドメインへのレコードを維持できない。【AWSアカウントβ】foo.example.comの証明書を取得するカスタムドメインを設定するために、ACMで使えるようにする。【AWSアカウントα】APIGatewayのカスタムドメインfoo.example.comをregionalにするap-northeast-1以外のリージョンでfoo.example.comをカスタムドメインへ設定できるようにする。ほとんどのユースケースでは、エッジ最適化とリージョンの違いは問題にならないだろう。【AWSアカウントβ】新Lambdaをus-east-1にデプロイするap-northeast-1以外のリージョン、今回はus-east-1へデプロイする。これは一時的にトラフィックを退避させるためのものになる。カスタムドメインの設定こちらもregionalにする。疎通確認を行うus-east-1のAPIGWカスタムドメインで発行されたエンドポイントをdigしてIPを得る。得られたIPをfoo.example.comのホストとしてhostsファイルに書き込めば、foo.example.comとして新Lambda(us-east-1)に接続できる。foo.example.comのドメイン移管を行うAWSアカウントβで、foo.example.comをAPIGatewayのカスタムドメインを参照するゾーンを設定し、AWSアカウントαからfoo.example.comを移管する。このタイミングで動作するLambdaが旧から新に変わる。AWSアカウントα側の旧Lambdaへのトラフィックが無くなったことを確認できたら次へ【AWSアカウントα】APIGWカスタムドメインの削除AWSアカウントαに残ったAPIGWカスタムドメインfoo.example.comを消去する。ロールバックを考えないならばこの段階でLambdaやAPIGatewayも不要なので消去してもよい【AWSアカウントβ】APIGWカスタムドメインの設定これでAWSアカウントβのap-northeast-1のAPIGatewayにfoo.example.comが設定できる疎通確認を行う2ap-northeast-1のAPIGWカスタムドメインで発行されたエンドポイントをdigしてIPを得る。得られたIPをfoo.example.comのホストとしてhostsファイルに書き込めば、foo.example.comとして新Lambda(ap-northeast-1)に接続できる。【AWSアカウントβ】foo.example.comをap-northeast-1に向き変えこれでようやくアカウントβのap-northeast-1のAPIGatewayにfoo.example.comが設定できる【AWSアカウントβ】us-east-1の削除・設定の変更us-east-1のトラフィックが無くなったことを確認できたら、us-east-1にデプロイしたLambdaなど一式を削除。必要ならばAPIGWカスタムドメインのエンドポイント設定をedge変更できる。これで目指した形が得られた。謝辞この作業は弊社が加入しているAWSエンタープライズサポートの元、サポートと相談しながら計画を進めました。いつもお世話になっております。Proソーシャルデータバンク株式会社の開発チームです。インフラ、品質、UI/UX、DevOpsなど様々な活動に取り組んでいます。Proよくある質問LinksX(Twitter)GitHubメディアキットLegal利用規約プライバシーポリシ。