VPNアタッチメントを持つAWS Transit GatewayのAmazon ASNを変更してみた

VPNアタッチメントを持つAWS Transit GatewayのAmazon ASNを変更してみた

のっぴきならない事情で、構築後のTransit GatewayのAmazon ASNを変更する必要がありました。VPNアタッチメントが存在すると変更できないので、少し遠回りする必要があります。

コンバンハ、千葉(幸)です。

AWS Transit Gateway(以降、Transit Gateway)を作成する際にはAmazon ASN(ASN = Autonomous System Number)の指定が必要です。デフォルトでは64512が採番されます。

事前に他のコンポーネントとASNが重複しないよう十分考慮すべきですが、なんらか接続要件が増えてTransit GatewayのAmazon ASNを後から変更したいこともあるでしょう。作成済みのTransit GatewayのAmazon ASNを変更する場合、特定のタイプのアタッチメントが関連づいているとエラーになります。

「特定のタイプ」の一つであるVPNアタッチメントを持つTransit Gatewayを想定した際に必要となる作業の流れをまとめてみます。

先にまとめ

  • Transit Gatewayに特定のタイプのアタッチメントが存在するとAmazon ASNを変更できない
    • アタッチメントのタイプごとの変更可否は以下の通り
アタッチメントタイプ 変更可否
VPCアタッチメント
VPNアタッチメント 不可
Direct Connectゲートウェイアタッチメント 不可
Transit Gateway Connect アタッチメント 不可
Transit Gateway Peering アタッチメント
  • 特定のタイプのアタッチメントが存在する場合、一度アタッチメントを削除してからAmazon ASNを変更する必要がある
  • VPNアタッチメントを明示的に削除はできず、削除したいときは以下のいずれかの手法を用いる
    • サイト間VPN接続自体を削除する
    • サイト間VPNのターゲットをTransit Gatewayから一時的に変更する
  • 基本的にVPN接続断を回避しながらの設定変更作業はできない

事前に押さえておきたいTransit Gateway用語

今回のブログは、以下の用語の理解を前提としています。

  • Transit Gateway
  • Transit Gatewayルートテーブル
  • Transit Gatewayアタッチメント
  • アソシエーション
  • プロパゲーション

ちょっと理解が怪しい、という場合は以下のブログに目を通しておいてください。

https://dev.classmethod.jp/articles/transitgateway-cross-account-diagram/

Transit GatewayのAmazon ASN変更について今回やりたいこと

今回想定する構成

今回は以下のような構成を想定して説明していきます。

Transit Gatewayアタッチメント

  • Transit Gatewayは1つ以上のVPCアタッチメントと、1つ以上のVPNアタッチメントを持つ
  • 各アタッチメントは個別にTransit Gatewayルートテーブルとアソシエーションされており、他のアタッチメントを対象にしたプロパゲーション(伝播)が作成されている

ここで、VPNアタッチメントがTransit Gatewayに存在する状態ではAmazon ASNを変更できません。

この仕様については例えば以下に記載があります。

AmazonSideAsn -> (long)

A private Autonomous System Number (ASN) for the Amazon side of a BGP session. The range is 64512 to 65534 for 16-bit ASNs and 4200000000 to 4294967294 for 32-bit ASNs.

The modify ASN operation is not allowed on a transit gateway if it has the following attachments:

  • Dynamic VPN
  • Static VPN
  • Direct Connect Gateway
  • Connect

You must first delete all transit gateway attachments configured prior to modifying the ASN on the transit gateway.

VPNアタッチメントの削除

Transit GatewayのAmazon ASNの変更のためVPNアタッチメントを削除する必要があります。しかし、「VPNアタッチメントを削除する」というAWS APIは用意されていません。VPNアタッチメントの削除のためにはサイト間VPN接続側の設定を変更する必要があります。

VPNアタッチメントはアタッチメント作成時に「アタッチメントタイプとしてVPNを選択」「接続先カスタマーゲートウェイを選択」することで作成するものです。[1]それにより、カスタマーゲートウェイとTransit Gateway間でサイト間VPN接続が作成されます。

そのサイト間VPN接続に対して以下のいずれかを行うことでVPNアタッチメントを削除できます。

  • サイト間VPN接続を削除する
  • サイト間VPN接続のターゲットを一時的に変更する

今回はリソースの削除を伴うのはできるだけ避けたいため、後者のパターンで対応します。

Transit Gatewayアタッチメント2

サイト間VPN接続のターゲットは、任意のもので問題ありません。今回は一時的にVGW(仮想プライベートゲートウェイ)を作成し、そこを指定しました。(このVGWはVPCに関連づいている必要はありません。)

もちろんここでターゲットを変更している間は、サイト間VPN接続はダウンしているためそれを経由した通信は行えません。 作業のタイミングは関係者に調整の上決定しましょう。

VPNアタッチメントが削除されることで、以下もあわせて削除されます。

  • 当該VPNアタッチメントとTransit Gatewayルートテーブルのアソシエーション
  • Transit Gatewayルートテーブルから当該VPNアタッチメントを指定したプロパゲーション

Transit Gateway Amazon ASNの変更および後続作業

VPNアタッチメントが存在しない状態であれば、Transit GatewayのAmazon ASNが変更できます。

従来はAWSマネジメントコンソールからの変更に対応していませんでしたが、2025年3月現在は対応しているようです。

Transit Gatewayアタッチメント2(1)

Amazon ASNの変更が完了したら、そのために行った一連の作業の戻しを行います。

  • サイト間VPN接続のターゲットを「一時的なVGW」からTransit Gatewayに変更

これにより、新たにVPNアタッチメントが作成されます。作成されたVPNアタッチメントに対し、以下を作成します。

  • 当該VPNアタッチメントとTransit Gatewayルートテーブルのアソシエーション
  • Transit Gatewayルートテーブルから当該VPNアタッチメントを指定したプロパゲーション

サイト間VPN接続のターゲットを戻した後、CGW(カスタマーゲートウェイ)側の端末でも設定変更が必要な場合があります。オンプレミス側の担当者とも調整しておきましょう。

これで一連の作業が完了です。

Transit GatewayのAmazon ASN変更をやってみた

ここまで説明してきたような内容を実際にやってみます。

というか過去にやりました。このブログを書いているのは2025年3月ですが、実際にやったのは2023年12月です。当時とUIが変わったりしていますが、気にしないでください。

全体の流れ

簡単にやることを押さえておきます。

前提構成

  • Transit Gatewayには13個のVPCアタッチメント、2個のVPNアタッチメントが存在する
  • VPCアタッチメントにはそれぞれ独自のTransit Gatewayルートテーブルがアソシエーションされている
  • VPNアタッチメントには共通のTransit Gatewayルートテーブルがアソシエーションされている
  • VPCアタッチメント用Transit Gatewayルートテーブルでは2個のVPNアタッチメントを対象にしたプロパゲーションが作成されている

作業の流れ

  1. 一時的なVGWを作成する

  2. VPNアタッチメントによって作成されたサイト間VPN接続のターゲットを、Transit Gatewayから1で作成した一時的なVGWに変更する(VPN接続2個分)

    • これにより、既存のVPNアタッチメントが削除される
  3. Transit GatewayのAmazon ASNを変更する(64512→64514)

  4. 2で操作したサイト間VPN接続(2個分)のターゲットを、1のVGWからTransit Gatewayに変更する

    • これにより、新規のVPNアタッチメントが作成される
  5. 新規のVPNアタッチメント(2個)にそれぞれTransit Gatewayルートテーブルをアソシエーションする

  6. 各VPCアタッチメント用Transit Gatewayルートテーブル(13個)から、新規VPNアタッチメント(2個)を対象としたプロパゲーションを作成する

  7. (1で作成した一時的なVGWを削除する)

アタッチメントの数が多いので、一連の作業ボリュームがそこそこになっています。なるべく後からのAmazon ASNの変更は避けたいなと改めて思います。

このうち、いくつかポイントをかいつまんで紹介していきます。

変更前の状態

Amazon ASNがデフォルトの64512であるTransit Gatewayがあります。

TGW1

このTransit Gatewayには複数のVPCアタッチメントとVPNアタッチメントが存在します。

TGW3

今回はVPNアタッチメントを2個削除する必要があります。

VPNアタッチメントがある状態でAmazon ASNの変更を試みてみる

仕様上変更できないことは分かっていますが、念のため今の状態でAmazon ASNの変更を試みてみます。

$ aws ec2 modify-transit-gateway \
>   --transit-gateway-id tgw-0abcdexxxxxxxxxx \
>   --options AmazonSideAsn=64514

An error occurred (IncorrectState) when calling the ModifyTransitGateway operation: You cannot modify this Transit Gateway as there exists at least one active attachment that uses the current ASN.

以下のエラーが出ました。

An error occurred (IncorrectState) when calling the ModifyTransitGateway operation: You cannot modify this Transit Gateway as there exists at least one active attachment that uses the current ASN.

現状のASNを利用するアタッチメントが少なくとも1個以上存在するため変更不可、と言われました。

余談

別に読まなくても本筋には影響はないことをいくつか書いておきます。

余談1 CLIリファレンスの記述

先述の通り、Amazon ASNの変更の際に考慮すべきアタッチメントタイプについてCLIリファレンスに記述があります。

AmazonSideAsn -> (long)

A private Autonomous System Number (ASN) for the Amazon side of a BGP session. The range is 64512 to 65534 for 16-bit ASNs and 4200000000 to 4294967294 for 32-bit ASNs.

The modify ASN operation is not allowed on a transit gateway if it has the following attachments:

  • Dynamic VPN
  • Static VPN
  • Direct Connect Gateway
  • Connect

You must first delete all transit gateway attachments configured prior to modifying the ASN on the transit gateway.

2023年当時は以下の記述になっており、「アクティブなBGPセッションがあるTransit Gatewayでは不可」という説明にとどまっていました。

The modify ASN operation is not allowed on a transit gateway with active BGP sessions. You must first delete all transit gateway attachments that have BGP configured prior to modifying the ASN on the transit gateway.

この記述もアタッチメントタイプのことを指している、ということに気づくまで時間がかかりました。今は分かりやすい説明に変わっているので助かりますね。

余談2 マネジメントコンソールからの変更可否

当時のAWSマネジメントコンソールでのTransit Gatewayの変更画面は以下のようになっていました。

TGW2

Amazon ASNが変更対象として表示されていません。

2025年現在はこのように変更ができそうです。コンソールから行うのもよいでしょう。

Transit_Gateway_modify

一方で、Amazon ASNでない箇所を変更する際にも、本来関係ない「特定のタイプのアタッチメントが存在するとエラー」が発生することがあったそうです。

上記は2024年3月の記事で現在も再現するか不明ですが、コンソールとCLIで挙動の違いが生まれ得る、ということを覚えておくといいかもしれません。

余談3 CloudFormationでの置換

一連のネットワークリソースはCloudFormationでデプロイしていました。

CloudFormationのスタック変更によってAmazon ASNの変更を試みようとすると、Transit Gateway自体の置換が発生することが分かりました。

Transit_Gateway_CloudFormation-2526518

置換を伴うと影響が大きそうなので、手動での変更を試みることにしました。

VPNアタッチメントの削除

VPNアタッチメントを削除していきます。

まず一時的な VGW を作成しました。このVGWは単に作成しただけで、VPCに関連づけることもしていません。今回の作業においてはそれで差し支えありません。

VPNアタッチメント用のサイト間VPN接続のターゲットを、Transit GatewayからVGWに変更します。

TGW4
VGWの正式名称ってVPNゲートウェイでしたっけね。

数分程度でサイト間VPN 接続のステータスがAvailableになりました。だいたい時を同じくして、Transit GatewayのVPNアタッチメントがDeletedステータスになっています。

TGW5

VPNアタッチメントが削除されたことで、そのアタッチメントを対象にしたプロパゲーション(伝播)も削除されています。

今回はVPCアタッチメント用Transit Gatewayルートテーブル(13個)からVPNアタッチメントを対象にプロパゲーションを作成していたので、このように消えていることが確認できます。

TGW6

当たり前ですが、削除されたVPNアタッチメントとTransit Gatewayルートテーブルのアソシエーションも削除されています。

Transit GatewayのAmazon ASNの変更

VPCアタッチメントしか存在しない状態になったため、Transit GatewayのAmazon ASNが変更可能になりました。

AWS CLIで変更します。今回は64514に変更しています。

$ aws ec2 modify-transit-gateway \
    --transit-gateway-id tgw-0abcdexxxxxxxxxx \
    --options AmazonSideAsn=64514
{
    "TransitGateway": {
        "TransitGatewayId": "tgw-0abcdexxxxxxxxxx",
        "TransitGatewayArn": "64514",
        "State": "modifying",
        "OwnerId": "012345678910",
        "CreationTime": "2023-10-26T01:35:30+00:00",
        "Options": {
            "AmazonSideAsn": 64514,
            "AutoAcceptSharedAttachments": "disable",
            "DefaultRouteTableAssociation": "disable",
            "DefaultRouteTablePropagation": "disable",
            "VpnEcmpSupport": "enable",
            "DnsSupport": "enable"
        }
    }
}

成功した際は特に何も表示されません。

コンソールから確認すると、きちんと変更が反映されていることが確認できます。

TGW7

各種戻しの作業

あとはやったことの戻しをしていきます。

サイト間VPN接続のターゲットを一時的なVGWからTransit Gatewayに変更する

変更作業により新たにVPNアタッチメントが作成されてきます。

Transit_Gateway_VPN_attchment

このアタッチメントは数分でAvailableになりました。

作成されたVPNアタッチメントを対象とするTransit Gatewayルートテーブルのアソシエーションを作成する

作られたVPNアタッチメントにはどのTransit Gatewayルートテーブルもアソシエーション(関連づけ)されていない状態なので、元々関連づけていたTransit Gatewayルートテーブルを改めてアソシエーションします。

Transit_Gateway_route_table

作成されたVPNアタッチメントを対象とするTransit Gatewayルートテーブルのプロパゲーションを作成する

各種VPCアタッチメント用のTransit Gatewayルートテーブルから、新規に作成されたVPNアタッチメントを対象としたプロパゲーション(伝播)を作成します。

Transit_Gateway_propagation

今回はこれが13個分あったのでなかなか大変でした。。

コンソールからポチポチする以外の手段を取ればよかったなとは思います。

その他

サイト間VPN接続の設定ファイルをマネジメントコンソールからダウンロードしてオンプレミス側の担当者に連携する、一時的なVGWを削除する、などの後続処理を行い一連の作業が完了しました。

終わりに

VPNアタッチメントを持つTransit GatewayのAmazon ASNを変更してみた、という話でした。

  • VPNアタッチメントがあるままではAmazon ASNの変更ができないので一度削除する必要がある
  • VPNアタッチメントを削除するためにはサイト間VPN接続を削除するか、ターゲットを変更する必要がある

あたりが今回の肝ですので、覚えておいていただければと思います。

Amazon ASNの変更が発生しないに越したことはないので、直近は接続要件が無いとしても、関連しそうなASN番号がある場合にはなるべく避けて設定することをお勧めします。

以上、チバユキ (@batchicchi)がお送りしました。

脚注
  1. 参考:[AWS] 新機能 Transit Gateway にVPNで接続する #reinvent | DevelopersIO ↩︎

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.