使用 Amazon CLI 创建已启用 IPv4 的 VPC 和子网
以下示例使用 Amazon CLI 命令来创建具有 IPv4 CIDR 块的非默认 VPC,以及 VPC 中的公有和私有子网。在您创建了 VPC 和子网后,您可以在公有子网中启动实例,然后连接到该实例。
您将创建以下Amazon资源:
-
一个 VPC
-
两个子网
-
一个互联网网关
-
一个路由表
-
一个 EC2 实例
先决条件
在开始之前,请安装并配置 Amazon CLI。在配置 Amazon CLI 时,指定您的 Amazon 凭证。本教程中的示例假定您已配置默认区域。否则,请为每个命令添加 --region
选项。有关更多信息,请参阅安装或更新 Amazon CLI和配置 Amazon CLI。
步骤 1:创建 VPC 和子网
第一步是创建 VPC 和两个子网。此示例对 VPC 使用 CIDR 块 10.0.0.0/16
,但您可以选择其他 CIDR 块。有关更多信息,请参阅VPC CIDR 块。
使用 Amazon CLI 创建 VPC 和子网
-
用下列 create-vpc 命令创建含
10.0.0.0/16
CIDR 块的 VPC。aws ec2 create-vpc --cidr-block
10.0.0.0/16
--query Vpc.VpcId --output text该命令将返回新 VPC 的 ID。以下是示例。
vpc-2f09a348
-
通过以下 create-subnet 命令,使用上一步中的 VPC ID 创建具有
10.0.1.0/24
CIDR 块的子网。aws ec2 create-subnet --vpc-id
vpc-2f09a348
--cidr-block10.0.1.0/24
-
在具有
10.0.0.0/24
CIDR 块的 VPC 中创建另一个子网。aws ec2 create-subnet --vpc-id
vpc-2f09a348
--cidr-block10.0.0.0/24
步骤 2:使您的子网成为公有子网
在创建 VPC 和子网后,您可以将互联网网关连接到您的 VPC,创建自定义路由表,并为子网配置到互联网网关的路由,从而使其中一个子网成为公有子网。
使您的子网成为公有子网
-
用下列 create-internet-gateway 命令创建互联网网关。
aws ec2 create-internet-gateway --query InternetGateway.InternetGatewayId --output text
该命令将返回新互联网网关的 ID。以下是示例。
igw-1ff7a07b
-
用下列 attach-internet-gateway 命令,以先前返回的 ID 为参数,将新互联网网关添加到 VPC。
aws ec2 attach-internet-gateway --vpc-id
vpc-2f09a348
--internet-gateway-idigw-1ff7a07b
用下列 create-route-table 命令为 VPC 创建自定义路由表。
aws ec2 create-route-table --vpc-id
vpc-2f09a348
--query RouteTable.RouteTableId --output text该命令将返回新路由表的 ID。以下是示例。
rtb-c1c8faa6
-
用下列 create-route 命令在路由表中创建路由条目,让所有流量 (
0.0.0.0/0
) 指向新互联网网关。aws ec2 create-route --route-table-id
rtb-c1c8faa6
--destination-cidr-block0.0.0.0/0
--gateway-idigw-1ff7a07b
-
(可选)用下列 describe-route-tables 命令描述路由表,确认路由条目已创建完毕且处于活动状态。
aws ec2 describe-route-tables --route-table-id
rtb-c1c8faa6
{ "RouteTables": [ { "Associations": [], "RouteTableId": "rtb-c1c8faa6", "VpcId": "vpc-2f09a348", "PropagatingVgws": [], "Tags": [], "Routes": [ { "GatewayId": "local", "DestinationCidrBlock": "10.0.0.0/16", "State": "active", "Origin": "CreateRouteTable" }, { "GatewayId": "igw-1ff7a07b", "DestinationCidrBlock": "0.0.0.0/0", "State": "active", "Origin": "CreateRoute" } ] } ] }
路由表当前未与任何子网相关联。您需要将它与您 VPC 中的子网进行关联,以便将来自该子网的流量路由到互联网网关。用下列 describe-subnet 命令获取子网 ID。
--filter
选项可仅将限制子网限制在新 VPC 中,--query
选项可仅返回子网 ID 及其 CIDR 块。aws ec2 describe-subnets --filters "Name=vpc-id,Values=
vpc-2f09a348
" --query "Subnets[*].{ID:SubnetId,CIDR:CidrBlock}"[ { "CIDR": "10.0.1.0/24", "ID": "subnet-b46032ec" }, { "CIDR": "10.0.0.0/24", "ID": "subnet-a46032fc" } ]
可以用 associate-route-table 命令选择与自定义路由表关联的子网(本例中为
subnet-b46032ec
)并执行关联操作。此子网是您的公有子网。aws ec2 associate-route-table --subnet-id
subnet-b46032ec
--route-table-idrtb-c1c8faa6
-
(可选)您可以使用以下 modify-subnet-attribute 命令修改您子网的公有 IP 寻址行为,以便在该子网中启动的实例可自动接收公有 IP 地址。否则,在启动后应将弹性 IP 地址与您的实例进行关联,以便可从 Internet 访问该实例。
aws ec2 modify-subnet-attribute --subnet-id
subnet-b46032ec
--map-public-ip-on-launch
步骤 3:在您的子网中启动实例
要测试您的子网是公有子网并且其中的实例可通过 Internet 访问,请在您的公有子网中启动一个实例,然后连接到该实例。首先,您必须创建一个与您实例进行关联的安全组,以及在您连接到该实例时将使用的密钥对。有关安全组的更多信息,请参阅 使用安全组控制到资源的流量。有关密钥对的更多信息,请参阅适用于 Linux 实例的 Amazon EC2 用户指南 中的 Amazon EC2 密钥对。
在您的公有子网中启动并连接到一个实例
创建一个密钥对,使用
--query
选项和--output
文本选项将您的私有密钥通过管道直接发送到扩展名为.pem
的文件中。aws ec2 create-key-pair --key-name
MyKeyPair
--query "KeyMaterial" --output text >MyKeyPair.pem
在此示例中,您将启动一个 Amazon Linux 实例。如果您在 Linux 或 Mac OS X 操作系统上使用 SSH 客户端连接到您的实例,请使用以下命令设置您的私有密钥文件的权限,以确保只有您可以读取该文件。
chmod 400
MyKeyPair.pem
使用 create-security-group 命令在您的 VPC 中创建安全组。
aws ec2 create-security-group --group-name
SSHAccess
--description "Security group for SSH access
" --vpc-idvpc-2f09a348
{ "GroupId": "sg-e1fb8c9a" }
使用 authorize-security-group-ingress 命令,添加允许从任意位置访问 SSH 的规则。
aws ec2 authorize-security-group-ingress --group-id
sg-e1fb8c9a
--protocoltcp
--port22
--cidr0.0.0.0/0
注意 如果使用
0.0.0.0/0
,则允许所有 IPv4 地址使用 SSH 访问您的实例。对于这个简短练习来说,这是可接受的,但在生产中,请只向特定 IP 地址或地址范围授权。使用您创建的安全组和密钥对在您的公有子网中启动一个实例。在输出中,记录您实例的实例 ID。
aws ec2 run-instances --image-id
ami-a4827dc9
--count 1 --instance-typet2.micro
--key-nameMyKeyPair
--security-group-idssg-e1fb8c9a
--subnet-idsubnet-b46032ec
注意 在此示例中,AMI 是美国东部(弗吉尼亚北部)区域中的 Amazon Linux AMI。如果您在其他区域,您需要适合您区域的 AMI 的 AMI ID。有关更多信息,请参阅适用于 Linux 实例的 Amazon EC2 用户指南 中的查找 Linux AMI。
-
您的实例必须处于
running
状态才能连接到该实例。用下列命令描述实例状态与 IP 地址。aws ec2 describe-instances --instance-id
i-0146854b7443af453
--query "Reservations[*].Instances[*].{State:State.Name,Address:PublicIpAddress}"下面是示例输出。
[ [ { "State": "running", "Address": "52.87.168.235" } ] ]
当您的实例处于运行状态时,您可以通过使用以下命令,在 Linux 或 Mac OS X 计算机上使用 SSH 客户端连接到该实例:
ssh -i "
MyKeyPair.pem
"ec2-user@52.87.168.235
如果您从 Windows 计算机连接,请遵循以下说明:使用 PuTTY 从 Windows 连接到您的 Linux 实例。
步骤 4:清除
在确认能够连接到您的实例后,如果不再需要该实例,您可以将其终止。要执行此操作,请使用 terminate-instances 命令。要删除您在此示例中创建的其他资源,请按列出的顺序使用以下命令:
-
删除您的安全组:
aws ec2 delete-security-group --group-id
sg-e1fb8c9a
-
删除您的子网:
aws ec2 delete-subnet --subnet-id
subnet-b46032ec
aws ec2 delete-subnet --subnet-id
subnet-a46032fc
-
删除您的自定义路由表:
aws ec2 delete-route-table --route-table-id
rtb-c1c8faa6
-
将您的互联网网关与您的 VPC 分离:
aws ec2 detach-internet-gateway --internet-gateway-id
igw-1ff7a07b
--vpc-idvpc-2f09a348
-
删除您的互联网网关:
aws ec2 delete-internet-gateway --internet-gateway-id
igw-1ff7a07b
-
删除您的 VPC:
aws ec2 delete-vpc --vpc-id
vpc-2f09a348