[AWS] ClassicLinkでClassic EC2インスタンスをVPCに相互接続する

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

2015/01/09 13:15訂正 : 制限事項の2つ目の説明に誤りがあったため訂正しました。
2015/01/09 10:15追記 : VPCルーティングテーブルについての言及と「CLIも使えます!」を追加しました。

ども、大瀧です。
本日、Amazon VPCにClassicLinkという機能が追加されました。どんな機能なのか、どう使えるのか解説します。

Amazon EC2を始めとするAWSのサービスでは、インスタンス同士を接続する内部ネットワークとしてClassicとVPCの2種類を利用することができます。Classicは他のアカウントとサブネットを共有するネットワークモデル、VPCはアカウントごとに隔離されたネットワークモデルになっており、現在はVPCが主流になっています *1。Classicで構築したEC2インスタンスを、セキュアで高機能なVPCに移行するケースが最近増えている印象です。具体的な移行手順は以下のドキュメントを参照ください。

EC2インスタンス自体の移行は上記手順で対応できるのですが、インスタンスで扱うアプリケーションやデータベースのデータ移行は、EBSスナップショットによる移行だけではなく、ネットワークで相互接続し差分更新やデータの同期を行うのが一般的です。従来、相互接続の手段はPublic IPを介したインターネット経由しかなかったのですが、今回のClassicLinkを利用することでインターネットを介さず高速でセキュアな相互接続ができるようになりました。

ClassicのEC2インスタンスをVPCに接続する機能です。

設定手順

ClassicLinkは、VPCごとに設定します。ClassicLinkで接続するVPCをVPCの管理画面で選択、右クリックし、[Enable ClassicLink]をクリックします。

classiclink01

確認ダイアログが表示されるので、[Yes, Enable]をクリックし、有効化します。

classiclink02

VPC側はこれで準備OKです。VPCに定義済みのルーティングテーブルを確認すると、Classicの10.0.0.0/8がターゲットLocalで追加されていることがわかります。

classiclink08

任意のClassic EC2インスタンスから接続できそうでちょっと怖い感じがしますが、ClassicLinkを利用するClassic EC2インスタンスは明示的に設定しない限り、VPCには接続できません。EC2の管理画面からEC2インスタンスを選択、右クリックし[ClassicLink] - [Link to VPC]をクリックします。

classiclink03

[Select a VPC]のドロップダウンから、接続するVPCを選択します。続いて、接続するVPCに定義済みのセキュリティグループがリストされるので、セキュリティグループを選択します。これは、VPCからClassic EC2インスタンスへの通信に適用されます。[Link to VPC]ボタンをクリックして設定完了です。

classiclink05

EC2インスタンスの[Description]タブに[ClassicLink]の項目が追加され、VPCとセキュリティグループが確認できます。

classiclink06

動作確認

ClassicLinkでのネットワーク接続は、通常のインスタンス間の通信と特に変わりません。Classic EC2インスタンス(ip-10-186-159-176)からVPCのEC2インスタンス(ip-172-30-1-154)にSSH接続してみます。

[ec2-user@ip-10-186-159-176 ~]$ ssh testuser@172.30.1.154
The authenticity of host '172.30.1.154 (172.30.1.154)' can't be established.
ECDSA key fingerprint is cd:62:cc:30:de:03:ab:df:59:86:ac:81:61:72:1d:1e.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '172.30.1.154' (ECDSA) to the list of known hosts.
testuser@172.30.1.154's password:
Last login: Thu Jan  8 22:15:40 2015

       __|  __|_  )
       _|  (     /   Amazon Linux AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-ami/2014.09-release-notes/
18 package(s) needed for security, out of 42 available
Run "sudo yum update" to apply all updates.
[testuser@ip-172-30-1-154 ~]$

できてますね!相互接続ですので、逆方向も問題なく動作します。

制限事項

  • Dedicated hardware tenancyが有効なVPCはClassicLink不可
  • ClassicのIPアドレス帯域(10.0.0.0/8)と重複する帯域のうち、Classicで未使用の10.0.0.0/16と10.1.0.0/16のVPCはClassicLink可 *2、それ以外(10.2.0.0/16〜10.255.0.0/16)はClassicLink不可。

以下のドキュメントが詳しいですが、アドレス帯域の重複は注意が必要ですね。

CLIも使えます!

移行要件の場合、全てのClassic EC2インスタンスでClassicLinkを使いたいというケースが多いでしょう。その場合はCLIでの一括実行がオススメです。まだリリースノートが出ていませんが、最新のAWS CLI バージョン1.7.0でClassicLinkがサポートされましたので、以下のコマンドでClassicLinkを有効化することができます。

  • aws ec2 enable-vpc-classic-linkコマンド : VPCのClassicLink有効化
  • aws ec2 attach-classic-link-vpcコマンド : Classic EC2インスタンスのVPCへの接続

各コマンドのオプションなどの詳細は、<コマンド名> helpで参照ください。

まとめ

ClassicLinkの概要と設定方法をご紹介しました。VPCへの移行をサポートする強力な機能としてどんどん活用していきましょう!

脚注

  1. 最近作成したアカウントではClassicが無効です
  2. ルーティングテーブルのLocalターゲットはロンゲストマッチで正常に動作します。

  • Yoshinori Ehara

    「ClassicのIPアドレス帯域(10.0.0.0/8)と帯域が重複するVPC(10.0.0.0/16や10.1.0.0/16)はClassicLink不可。」とありますが、公式ドキュメントを見ると、10.0.0.0/8 は原則不可であるものの 10.0.0.0/16, 10.1.0.0/16 は制限付きながら例外的に ClassicLink 可能と読めました。

    • takipone

      ご指摘ありがとうございます!訂正、追記しました!