サイト内の現在位置を表示しています。

AWS VPCエンドポイントを利用したHAクラスターの構築を試してみました (Windows/Linux)

CLUSTERPRO オフィシャルブログ ~クラブロ~

はじめに

Amazon Web Services(以降、AWS)において、VPCエンドポイントを利用したHAクラスターの構築を試してみました。
VPCエンドポイントはインターネットを経由することなく、VPCと他のAWSのサービスとをプライベートに接続できるAWSのサービスです。
今回はVPCエンドポイントを利用して、プライベートな接続による「VIP制御によるHAクラスター」を構築します。

この記事の内容

1. VPCエンドポイント

VPCエンドポイントとはインターネットゲートウェイやNATゲートウェイ、NATインスタンスなどを経由することなく、VPCと他のAWSのサービスとをプライベートに接続できるAWSのサービスです。
例えば、VPC内に配置させたEC2 インスタンスからS3へアクセスする場合、VPCエンドポイントを利用することでEC2 インスタンスからS3へのアクセスはインターネットを経由しないプライベートなアクセス経路を実現することができます。

アクセス経路(VPCエンドポイントなし)

EC2 インスタンスからS3へのアクセス経路(VPCエンドポイントなしの場合)

アクセス経路(VPCエンドポイントあり)

EC2 インスタンスからS3へのアクセス経路(VPCエンドポイントありの場合)

VPCエンドポイントを利用することにより、以下のようなメリットがあります。

  • プライベートなサブネットからAWSのサービスにアクセスする際にNATゲートウェイ、NATインスタンスなどが不要となるため、AWSの利用料を削減できる
  • インターネットを経由せずAWSのサービスにアクセスできるため、よりセキュアなアクセス経路が実現できる

これまでVPCエンドポイントに対応したAWSのサービスはS3とDynamoDBの2つのみでしたが、2017年11月にアップデートが行われ、新たに対応するAWSのサービスとして「Amazon EC2 API」などが追加されたことが発表されました。
アップデート後のVPCエンドポイントについての記載は下記を参照してください。

今までのAWS上でのHAクラスター構成では、HAクラスターを構成する各インスタンスがAmazon EC2 APIへアクセスするためにインターネットを経由する必要がありました。VPCエンドポイントを利用することで、インターネットを経由しない、つまりプライベートな接続が可能となります。

2. HAクラスター構成

HAクラスター構成は2ノードのミラーディスク型で、AWS仮想IPリソースを用いた「VIP制御によるHAクラスター」です。

VIP制御によるHAクラスター構成では、インスタンスがAWS CLIによるVIP制御処理を実行するために、インスタンスからリージョンのエンドポイントに対してHTTPSによる通信を行う必要があります。
上記の構成では、VPCエンドポイントを経由することによりインターネットにアクセスすることなく、AWSのサービス(Amazon EC2 API)にアクセスします。
HAクラスターを構成するインスタンスにはWindows、Linuxのそれぞれが利用可能です。今回はインスタンスにLinuxを用いたHAクラスターを構築します。

以降、インスタンスにはAWS CLIのインストール、リージョンの設定、セキュリティキーの設定、ネットワークの設定が完了していることを前提とします。

3. HAクラスター構築手順

3.1 HAクラスター構築の事前準備

事前にVPCを作成します。VPCの構成は以下の通りです。

  • VPC(VPC ID:vpc-1234abcd)
  • CIDR:10.0.0.0/16
  • Subnets
  • Subnet-1a (サブネット ID:sub-1111aaaa):10.0.10.0/24
  • Subnet-2a (サブネット ID:sub-2222aaaa):10.0.110.0/24
  • Subnet-2c (サブネット ID:sub-2222cccc):10.0.120.0/24

  • RouteTables
  • Main (ルートテーブル ID:rtb-00000001)
  • >10.0.0.0/16 → local
  • >0.0.0.0/0 → igw-1234abcd (Internet Gateway)
  • >20.0.0.100/32 → eni-1234abcd (ENI ID)
  • Route-A (ルートテーブル ID:rtb-0000000a)
  • >10.0.0.0/16 → local
  • >20.0.0.100/32 → eni-1234abcd (ENI ID)
  • Route-C (ルートテーブル ID:rtb-0000000c)
  • >10.0.0.0/16 → local
  • >20.0.0.100/32 → eni-1234abcd (ENI ID)

図と差し替える

3.2 VPCエンドポイントの作成

今回はAWS CLI(AWS CLIのバージョンは「1.14.3」)を使ってVPCエンドポイントを作成します。AWS CLIはAWSのマネジメントコンソール同様、CLUSTERPRO Xをインストールしている環境から実行する必要はなく、任意の環境から実行可能です。
以降、記載のコマンド実行結果はLinuxでの実行結果になります。基本的にはWindowsでも同一です。

3.2.1 VPCの設定

VPCの設定を行います。下記のコマンドを実行して、VPCのDNS解決の属性を「はい」にします。

  • DNS解決:はい

# aws ec2 modify-vpc-attribute --vpc-id vpc-1234abcd --enable-dns-support "{\"Value\":true}"

下記のコマンドを実行して、VPCのDNSホスト名の属性を「はい」にします。

  • DNSホスト名:はい

# aws ec2 modify-vpc-attribute --vpc-id vpc-1234abcd --enable-dns-hostnames "{\"Value\":true}"

3.2.2 セキュリティグループの作成

VPCエンドポイントに関連付けるセキュリティグループを作成します。
今回利用するAWS EC2 APIでは、セキュリティグループによるVPCエンドポイントへのアクセス制御が可能です。
各インスタンスはAWS CLIを実行するためにリージョンのエンドポイントに対してHTTPSの通信を行う必要があり、セキュリティグループによってHTTPSでの通信を許可します。

まず下記のコマンドを実行して、事前に作成したVPC(vpc-1234abcd)に向けたセキュリティグループを作成します。

  • グループ名:SG-HTTPS
  • 説明:SG-HTTPS
  • VPC:vpc-1234abcd

# aws ec2 create-security-group --group-name SG-HTTPS --description SG-HTTPS --vpc-id vpc-1234abcd
{
    "GroupId": "sg-1234abcd"
}

次に下記のコマンドを実行して、セキュリティグループのインバウンドのルールにHTTPSの通信を許可するルールを追加します。アウトバウンドについてはデフォルトのままでルールの追加や削除は行いません。

  • セキュリティグループの詳細
  • インバウンドのルール
  • タイプ:HTTPS
  • プロトコル:TCP(6)
  • ポート範囲:443
  • ソース:10.0.0.0/16

  • アウトバウンドのルール
  • タイプ:すべてのトラフィック
  • プロトコル:すべて
  • ポート範囲:すべて
  • 送信先:0.0.0.0/0

# aws ec2 authorize-security-group-ingress --group-id sg-1234abcd --protocol tcp --port 443 --cidr 10.0.0.0/16

3.2.3 VPCエンドポイントの作成

VPCエンドポイントで指定するサービス名は利用するAWSのサービスごとに異なります。
下記のコマンドを実行して、VPCエンドポイントで利用可能なサービス名の一覧からAmazon EC2 APIに対応するサービス名を確認します。ここで確認したサービス名は後述の手順で用いるため、メモを取っておきます。
今回利用するAWSのサービス名は「com.amazonaws.ap-northeast-1.ec2」です。

# aws ec2 describe-vpc-endpoint-services
{
    "ServiceDetails": [
       ・・・(省略)・・・
    ],
    "ServiceNames": [
       "com.amazonaws.ap-northeast-1.dynamodb",
       "com.amazonaws.ap-northeast-1.ec2", ← Amazon EC2 APIに対応するサービス名
       "com.amazonaws.ap-northeast-1.ec2messages",
       "com.amazonaws.ap-northeast-1.elasticloadbalancing",
       "com.amazonaws.ap-northeast-1.kinesis-streams",
       "com.amazonaws.ap-northeast-1.s3",
       "com.amazonaws.ap-northeast-1.servicecatalog",
       "com.amazonaws.ap-northeast-1.ssm"
    ]
}

下記のコマンドを実行して、VPCエンドポイントを作成します。

  • VPC:vpc-1234abcd
  • VPCエンドポイントタイプ:Interface
  • サービス名:com.amazonaws.ap-northeast-1.ec2
  • サブネットの関連付け
  • sub-2222aaaa
  • sub-2222cccc
  • セキュリティグループ:sg-1234abcd

# aws ec2 create-vpc-endpoint --vpc-id vpc-1234abcd --vpc-endpoint-type Interface --service-name com.amazonaws.ap-northeast-1.ec2 --subnet-id subnet-2222aaaa subnet-2222cccc --security-group-id sg-1234abcd
{
    "VpcEndpoint": {
    "PolicyDocument": "{\n \"Statement\": [\n {\n \"Action\": \"*\", \n \"Effect\": \"Allow\", \n \"Principal\": \"*\", \n \"Resource\": \"*\"\n }\n ]\n}",
       "VpcId": "vpc-1234abcd",
       "NetworkInterfaceIds": [
          "eni-00000001",
          "eni-00000002"
       ],
          "SubnetIds": [
             "subnet-2222aaaa",
             "subnet-2222cccc"
         ],
         "PrivateDnsEnabled": true,
             "State": "pending",
             "ServiceName": "com.amazonaws.ap-northeast-1.ec2",
             "RouteTableIds": [],
             "Groups": [
               {
                   "GroupName": "SG-HTTPS",
                   "GroupId": "sg-1234abcd"
                }
             ],
       "VpcEndpointId": "vpce-00000000000000001",
       ・・・(省略)・・・
    }
}

VPCエンドポイントの作成後に、HAクラスターを構成する各インスタンスからAWS CLIが実行できることを確認します。
下記のコマンドを実行して、VPCの情報が表示されることを確認します。

# aws ec2 describe-vpcs --vpc-ids vpc-1234abcd
{
    "Vpcs": [
      {
         "VpcId": "vpc-1234abcd",
         "InstanceTenancy": "default",
         "Tags": [
            {
                "Value": "VPC-01",
                "Key": "Name"
             }
         ],
          "CidrBlockAssociationSet": [
             {
               "AssociationId": "vpc-cidr-assoc-1234abcd",
               "CidrBlock": "10.0.0.0/16",
               "CidrBlockState": {
                   "State": "associated"
               }
            }
         ],
         "State": "available",
         "DhcpOptionsId": "dopt-1234abcd",
         "CidrBlock": "10.0.0.0/16",
         "IsDefault": false
      }
    ]
}

3.3 VIP制御によるHAクラスターの作成

「VIP制御によるHAクラスター」を作成します。CLUSTERPROの構成は以下の通りです。CLUSTERPROのフェールオーバーグループには「AWS仮想IPリソース」と「ミラーディスクリソース」のみを登録します。
HAクラスターの構築手順の詳細は「popupAmazon Web Services向けHAクラスタ構築ガイド」を参照ください。
以下はHAクラスターを構成するインスタンスにLinuxを用いた場合のCLUSTERPROの構成例です。

  • CLUSTERPRO
  • フェールオーバーグループ (failover)
  • AWS仮想IPリソース
  • >IPアドレス:20.0.0.100
  • ミラーディスクリソース
  • >データパーティション:/dev/xvdb2
  • >クラスターパーティション:/dev/xvdb1

4. 動作確認

各インスタンスでフェールオーバーグループが正常に起動できることを確認します。

図と差し替える

さいごに

今回はAWS VPCエンドポイントを利用して、プライベートな接続によるHAクラスターの構築手順をご紹介しました。
VPCエンドポイントを利用することでプライベートなサブネットからインターネットにアクセスしないHAクラスターが構築可能であることを確認できました。
HAクラスターの構築に関する疑問点や気になる点などがございましたら後述の窓口までお問い合わせください。

お問い合わせ

本記事に関するお問い合わせは、popupお問い合わせ窓口までお問い合わせください。