使用 Amazon CLI 创建已启用 IPv4 的 VPC 和子网 - Amazon Virtual Private Cloud
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

使用 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 和子网
  1. 用下列 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
  2. 通过以下 create-subnet 命令,使用上一步中的 VPC ID 创建具有 10.0.1.0/24 CIDR 块的子网。

    aws ec2 create-subnet --vpc-id vpc-2f09a348 --cidr-block 10.0.1.0/24
  3. 在具有 10.0.0.0/24 CIDR 块的 VPC 中创建另一个子网。

    aws ec2 create-subnet --vpc-id vpc-2f09a348 --cidr-block 10.0.0.0/24

步骤 2:使您的子网成为公有子网

在创建 VPC 和子网后,您可以将互联网网关连接到您的 VPC,创建自定义路由表,并为子网配置到互联网网关的路由,从而使其中一个子网成为公有子网。

使您的子网成为公有子网
  1. 用下列 create-internet-gateway 命令创建互联网网关。

    aws ec2 create-internet-gateway --query InternetGateway.InternetGatewayId --output text

    该命令将返回新互联网网关的 ID。以下是示例。

    igw-1ff7a07b
  2. 用下列 attach-internet-gateway 命令,以先前返回的 ID 为参数,将新互联网网关添加到 VPC。

    aws ec2 attach-internet-gateway --vpc-id vpc-2f09a348 --internet-gateway-id igw-1ff7a07b
  3. 用下列 create-route-table 命令为 VPC 创建自定义路由表。

    aws ec2 create-route-table --vpc-id vpc-2f09a348 --query RouteTable.RouteTableId --output text

    该命令将返回新路由表的 ID。以下是示例。

    rtb-c1c8faa6
  4. 用下列 create-route 命令在路由表中创建路由条目,让所有流量 (0.0.0.0/0) 指向新互联网网关。

    aws ec2 create-route --route-table-id rtb-c1c8faa6 --destination-cidr-block 0.0.0.0/0 --gateway-id igw-1ff7a07b
  5. (可选)用下列 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" } ] } ] }
  6. 路由表当前未与任何子网相关联。您需要将它与您 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" } ]
  7. 可以用 associate-route-table 命令选择与自定义路由表关联的子网(本例中为 subnet-b46032ec)并执行关联操作。此子网是您的公有子网。

    aws ec2 associate-route-table --subnet-id subnet-b46032ec --route-table-id rtb-c1c8faa6
  8. (可选)您可以使用以下 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 密钥对

在您的公有子网中启动并连接到一个实例
  1. 创建一个密钥对,使用 --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
  2. 使用 create-security-group 命令在您的 VPC 中创建安全组。

    aws ec2 create-security-group --group-name SSHAccess --description "Security group for SSH access" --vpc-id vpc-2f09a348
    { "GroupId": "sg-e1fb8c9a" }

    使用 authorize-security-group-ingress 命令,添加允许从任意位置访问 SSH 的规则。

    aws ec2 authorize-security-group-ingress --group-id sg-e1fb8c9a --protocol tcp --port 22 --cidr 0.0.0.0/0
    注意

    如果使用 0.0.0.0/0,则允许所有 IPv4 地址使用 SSH 访问您的实例。对于这个简短练习来说,这是可接受的,但在生产中,请只向特定 IP 地址或地址范围授权。

  3. 使用您创建的安全组和密钥对在您的公有子网中启动一个实例。在输出中,记录您实例的实例 ID。

    aws ec2 run-instances --image-id ami-a4827dc9 --count 1 --instance-type t2.micro --key-name MyKeyPair --security-group-ids sg-e1fb8c9a --subnet-id subnet-b46032ec
    注意

    在此示例中,AMI 是美国东部(弗吉尼亚北部)区域中的 Amazon Linux AMI。如果您在其他区域,您需要适合您区域的 AMI 的 AMI ID。有关更多信息,请参阅适用于 Linux 实例的 Amazon EC2 用户指南 中的查找 Linux AMI

  4. 您的实例必须处于 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" } ] ]
  5. 当您的实例处于运行状态时,您可以通过使用以下命令,在 Linux 或 Mac OS X 计算机上使用 SSH 客户端连接到该实例:

    ssh -i "MyKeyPair.pem" ec2-user@52.87.168.235

    如果您从 Windows 计算机连接,请遵循以下说明:使用 PuTTY 从 Windows 连接到您的 Linux 实例

步骤 4:清除

在确认能够连接到您的实例后,如果不再需要该实例,您可以将其终止。要执行此操作,请使用 terminate-instances 命令。要删除您在此示例中创建的其他资源,请按列出的顺序使用以下命令:

  1. 删除您的安全组:

    aws ec2 delete-security-group --group-id sg-e1fb8c9a
  2. 删除您的子网:

    aws ec2 delete-subnet --subnet-id subnet-b46032ec
    aws ec2 delete-subnet --subnet-id subnet-a46032fc
  3. 删除您的自定义路由表:

    aws ec2 delete-route-table --route-table-id rtb-c1c8faa6
  4. 将您的互联网网关与您的 VPC 分离:

    aws ec2 detach-internet-gateway --internet-gateway-id igw-1ff7a07b --vpc-id vpc-2f09a348
  5. 删除您的互联网网关:

    aws ec2 delete-internet-gateway --internet-gateway-id igw-1ff7a07b
  6. 删除您的 VPC:

    aws ec2 delete-vpc --vpc-id vpc-2f09a348