VPCピアリングの概要はわかっているものの、今ひとつ具体的にイメージできなかったので実際に手を動かして勉強しました。
以下に作業メモをまとめます。
作業内容はこちらの動画を参考にさせてもらいました。
VPCを作成します。
Name: VPC-A
CIDR block: 10.100.0.0/16
インターネットゲートウェイを作成します。
Name: VPC-A-IGW
パブリックサブネットを作成します。
Name: VPC-A-Subnet-Public
VPC: VPC-A
CIDR block: 10.100.0.0/24
ルートテーブルを作成します。
Name: VPC-A-RT-Public
VPC: VPC-A
ルートテーブルにルートを追加します。
Destination: 0.0.0.0/0
Target: VPC-A-IGW
ルートテーブルにサブネットを関連づけます。
Subnet: VPC-A-Subnet-Public
プライベートサブネットを作成します。
Name: VPC-A-Subnet-Private
VPC: VPC-A
CIDR block: 10.100.1.0/24
ルートテーブルを作成します。
Name: VPC-A-RT-Private
VPC: VPC-A
ルートテーブルにプライベートサブネットを関連づけます。
パブリックサブネットにEC2インスタンスを作成します。
VPC: VPC-A
Subnet: VPC-A-Subnet-Public
Auto-assign Public IP: Enable
Name: VPC-A-EC2-Public
Security Group name: VPC-A-SG-Public
Type: SSH
Source: 0.0.0.0/0
パブリックサブネットにEC2インスタンスが作成されます。
プライベートサブネットにEC2を作成します。
VPC: VPC-A
Subnet: VPC-A-Subnet-Private
Auto-assign Public IP: Disable
Name: VPC-A-EC2-Private
Security group name: VPC-A-SG-Private
Type: SSH
Source: 10.100.0.0/24(パブリックサブネットのIPレンジ)
launchをクリックして、EC2インスタンスが二つ作成されていることを確認します。
次に外部から接続させないVPC-Bを作成します。
name: VPC-B
CIDR block: 10.200.0.0/16
※外部から接続させないため、インターネットゲートウェイなどはアタッチしない
VPC-Bにサブネットを作成します。
Name: VPC-B-Subnet-Private
VPC: VPC-B
CIDR block: 10.200.1.0/24
ルートテーブルを作成します。
Name: VPC-B-RT-Private
VPC: VPC-B
ルートテーブルをサブネットに関連づけます。
Subnet: VPC-B-Subnet-Private
VPC-BにEC2インスタンスを作成します。
VPC: VPC-B
Subnet: VPC-B-Subnet-Private
Auto-assign Public IP: Disable
Name: VPC-B-EC2-Private
Security group name: VPC-B-SG-Private
Type: SSH
Source: 10.100.1.0/24(VPC-AのプライベートサブネットのIPレンジ)
Type: All ICMP
Source: 10.100.1.0/24
lauchをクリックしてEC2インスタンスがVPC-Aに二つ、VPC-Bに一つ作成されていることを確認します。
VPC-AのパブリックサブネットのEC2にSSHで接続します。
次にVPC-AのプライベートサブネットのEC2にSSH接続するために、ローカルのSSHキーをcatコマンドなどで表示して、VPC-AのパブリックサブネットのEC2にvimコマンドで同じキー名のSSHキーを作成し、中身を貼り付けます。
SSHキーが準備できたのでプライベートサブネットのEC2にSSH接続しようとすると以下のエラーが出ました。
Permissions 0664 for 'rdsconnect20210104.pem' are too open. It is required that your private key files are NOT accessible by others. This private key will be ignored. Load key "rdsconnect20210104.pem": bad permissions Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
権限設定に問題があるようなので以下のchmodコマンドで権限を400にして他者から読み取られないようにしました。
chmod 400 rdsconnect20210104.pem
権限を変更したあとプライベートサブネットのEC2にSSH接続すると成功しました。
次にVPC-BのEC2インスタンスに接続するために、VPCのマネジメントコンソールからVPC Peeringを選択します。
VPCピアリングを作成します。
Name: VPC-A-VPC-B-Peering
VPC(Requester): VPC-A ※Requesterはリクエストを送る側
Select another VPC to peer with
Account: My accountc
Region: This region
VPC()Accepter): VPC-B
興味本位でAccountをAnother accountにしてみるとIDなどを入力する項目が出てきました。
Create Peering ConnectionをクリックするとVPCピアリングが作成されました。
作成されたVPCピアリングを見ると、statusがPending Acceptanceになっています。
ActionsからAccept Requestをクリックします。
ポップアップが表示されるので、Yes Acceptをクリックします。
VPCピアリングのステータスがActiveになりました。
VPCピアリングができたのでVPC-AのプライベートEC2からPingがVPC-BのEC2に通るか試すと、レスポンスが返ってきませんでした。
これはルートテーブルにVPCピアリングが設定されていないからのようです。
VPC-A-RT-Privateにルートを追加する画面に行くと、VPCピアリングが選択できるようになっています。
VPC-BのEC2向きの通信はVPCピアリングに行くようにします。
VPC-AのプアイベートサブネットからVPC-Bへのルートができました。
この時点ではまだPingは通っていないので、VPC-BからVPC-Aのプライベートサブネット行きのルートも設定します。
VPC-BからVPC-Aのプライベートサブネットへの通信はVPCピアリングに行くルートが設定されています。
改めてPingを送ると無事通信が成功することが確認できました。
雑感
AWS SAAの試験勉強をするまではVPCピアリングなどは特に勉強したことなかったので、最初はイメージしにくい部分もありましたらひとつずつ手を動かすと頭が整理されていって良いですね。