Japan
サイト内の現在位置を表示しています。
AWS VPCエンドポイントを利用したHAクラスターの構築を試してみました (Windows/Linux)
CLUSTERPRO オフィシャルブログ ~クラブロ~はじめに
VPCエンドポイントはインターネットを経由することなく、VPCと他のAWSのサービスとをプライベートに接続できるAWSのサービスです。
今回はVPCエンドポイントを利用して、プライベートな接続による「VIP制御によるHAクラスター」を構築します。
この記事の内容
1. VPCエンドポイント
VPCエンドポイントとはインターネットゲートウェイやNATゲートウェイ、NATインスタンスなどを経由することなく、VPCと他のAWSのサービスとをプライベートに接続できるAWSのサービスです。
例えば、VPC内に配置させたEC2 インスタンスからS3へアクセスする場合、VPCエンドポイントを利用することでEC2 インスタンスからS3へのアクセスはインターネットを経由しないプライベートなアクセス経路を実現することができます。
VPCエンドポイントを利用することにより、以下のようなメリットがあります。
- プライベートなサブネットからAWSのサービスにアクセスする際にNATゲートウェイ、NATインスタンスなどが不要となるため、AWSの利用料を削減できる
- インターネットを経由せずAWSのサービスにアクセスできるため、よりセキュアなアクセス経路が実現できる
今までのAWS上でのHAクラスター構成では、HAクラスターを構成する各インスタンスがAmazon EC2 APIへアクセスするためにインターネットを経由する必要がありました。VPCエンドポイントを利用することで、インターネットを経由しない、つまりプライベートな接続が可能となります。
2. HAクラスター構成
上記の構成では、VPCエンドポイントを経由することによりインターネットにアクセスすることなく、AWSのサービス(Amazon EC2 API)にアクセスします。
HAクラスターを構成するインスタンスにはWindows、Linuxのそれぞれが利用可能です。今回はインスタンスにLinuxを用いたHAクラスターを構築します。
3. HAクラスター構築手順
3.1 HAクラスター構築の事前準備
- 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エンドポイントの作成
以降、記載のコマンド実行結果はLinuxでの実行結果になります。基本的にはWindowsでも同一です。
3.2.1 VPCの設定
- DNS解決:はい
# aws ec2 modify-vpc-attribute --vpc-id vpc-1234abcd --enable-dns-support "{\"Value\":true}"
- DNSホスト名:はい
# aws ec2 modify-vpc-attribute --vpc-id vpc-1234abcd --enable-dns-hostnames "{\"Value\":true}"
3.2.2 セキュリティグループの作成
今回利用するAWS EC2 APIでは、セキュリティグループによるVPCエンドポイントへのアクセス制御が可能です。
各インスタンスはAWS CLIを実行するためにリージョンのエンドポイントに対してHTTPSの通信を行う必要があり、セキュリティグループによってHTTPSでの通信を許可します。
- グループ名: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
- ■プロトコル: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エンドポイントで利用可能なサービス名の一覧から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-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の情報が表示されることを確認します。
# 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クラスターの作成
HAクラスターの構築手順の詳細は「Amazon Web Services向けHAクラスタ構築ガイド」を参照ください。
以下はHAクラスターを構成するインスタンスにLinuxを用いた場合のCLUSTERPROの構成例です。
- CLUSTERPRO
- -フェールオーバーグループ (failover)
- ■AWS仮想IPリソース
- >IPアドレス:20.0.0.100
- ■ミラーディスクリソース
- >データパーティション:/dev/xvdb2
- >クラスターパーティション:/dev/xvdb1
4. 動作確認
さいごに
VPCエンドポイントを利用することでプライベートなサブネットからインターネットにアクセスしないHAクラスターが構築可能であることを確認できました。
HAクラスターの構築に関する疑問点や気になる点などがございましたら後述の窓口までお問い合わせください。
お問い合わせ