AWS アカウントに VPC があり、その VPC に関連付けられたサブネットが 5 つあります。サブネットには、パブリックとプライベートの 2 種類があります。どのサブネットがパブリックで、どのサブネットがプライベートかを識別するにはどうすればよいでしょうか。各サブネットの CIDR 範囲は 10.249.?.? です。
基本的に、 ec2SubnetIds のリストを含むそのサブネットで EMR を起動すると、「***サブネット構成が無効です: 指定されたサブネット リストには、パブリック サブネットとプライベート サブネットの両方が含まれています。許可されるサブネットの種類は 1 つだけです。」というメッセージが表示されます。
このエラーを修正する方法。
ベストアンサー1
問題は、パブリックサブネットとプライベートサブネットをどのように識別するかであり、その答えは、AWS において VPC のサブネットが「パブリック」であるか「プライベート」であるかが何を意味するかにあります。
パブリックサブネットには、インターネットゲートウェイ; プライベートサブネットではそうではありません。
したがって、特定のサブネットがパブリックかプライベートかを判断するには、そのサブネットに関連付けられているルート テーブルを記述する必要があります。これによりルートがわかり、0.0.0.0/0
ゲートウェイ ID がigw-xxxxxxxxxxxxxxxxx
(ではなくlocal
)のルートをテストできます。
AWS VPC コンソールでサブネットのルートテーブルを確認することで、サブネットがパブリックかどうかを確認できます。次に例を示します。
awscli を使用して、特定のサブネット ID に対して次のように実行することもできます。
aws ec2 describe-route-tables \
--filter Name=association.subnet-id,Values=subnet-0a123fc414ad5b999 \
--query "RouteTables[].Routes[]"
出力は次のようになります。
[
{
"DestinationCidrBlock": "10.0.0.0/16",
"GatewayId": "local",
"Origin": "CreateRouteTable",
"State": "active"
},
{
"DestinationCidrBlock": "0.0.0.0/0",
"GatewayId": "igw-0fca21fadaa22a1b2",
"Origin": "CreateRoute",
"State": "active"
}
]
0.0.0.0/0
ここでは、インターネット ゲートウェイ (GatewayId は ) をターゲットとするの宛先ルートを確認できますigw-xxxxxxxxxxxxxxxxx
。これにより、パブリック サブネットを参照していることが確認できます。