Amazon Virtual Private Cloud
用户指南
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

示例:使用 AWS CLI 创建 IPv4 VPC 和子网

以下示例使用 AWS CLI 命令来创建具有 IPv4 CIDR 块的非默认 VPC,以及 VPC 中的公有和私有子网。在您创建了 VPC 和子网后,您可以在公有子网中启动实例,然后连接到该实例。要开始此操作,您必须首先安装和配置 AWS CLI。有关更多信息,请参阅使用 AWS 命令行界面进行设置

第 1 步:创建 VPC 和子网

第一步是创建 VPC 和两个子网。此示例对 VPC 使用 CIDR 块 10.0.0.0/16,但您可以选择其他 CIDR 块。有关更多信息,请参阅 VPC 和子网大小调整

使用 AWS CLI 创建 VPC 和子网

  1. 创建具有 10.0.0.0/16 CIDR 块的 VPC。

    Copy
    aws ec2 create-vpc --cidr-block 10.0.0.0/16

    在返回的输出中,记录 VPC ID。

    {
        "Vpc": {
            "VpcId": "vpc-2f09a348", 
            ...
        }
    }
  2. 使用上一步中的 VPC ID 创建具有 10.0.1.0/24 CIDR 块的子网。

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

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

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

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

使您的子网成为公有子网

  1. 创建 Internet 网关.

    Copy
    aws ec2 create-internet-gateway

    在返回的输出中,记录 Internet 网关 ID。

    {
        "InternetGateway": {
            ...
            "InternetGatewayId": "igw-1ff7a07b", 
            ...
        }
    }
  2. 使用上一步中的 ID 将 Internet 网关连接到您的 VPC。

    Copy
    aws ec2 attach-internet-gateway --vpc-id vpc-2f09a348 --internet-gateway-id igw-1ff7a07b
  3. 为您的 VPC 创建自定义路由表。

    Copy
    aws ec2 create-route-table --vpc-id vpc-2f09a348

    在返回的输出中,记录路由表 ID。

    {
        "RouteTable": {
            ... 
            "RouteTableId": "rtb-c1c8faa6", 
            ...
        }
    }
  4. 在路由表中创建一个将所有流量 (0.0.0.0/0) 指向 Internet 网关的路由。

    Copy
    aws ec2 create-route --route-table-id rtb-c1c8faa6 --destination-cidr-block 0.0.0.0/0 --gateway-id igw-1ff7a07b
  5. 要确认您的路由已创建并且处于活动状态,您可以描述路由表并查看结果。

    Copy
    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 中的子网进行关联,以便将来自该子网的流量路由到 Internet 网关。首先,使用 describe-subnets 命令获取您的子网 ID。您可以使用 --filter 选项仅返回新 VPC 的子网,使用 --query 选项仅返回子网 ID 及其 CIDR 块。

    Copy
    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. 您可以选择将哪个子网与自定义路由表进行关联,例如 subnet-b46032ec。此子网将是您的公有子网。

    Copy
    aws ec2 associate-route-table --subnet-id subnet-b46032ec --route-table-id rtb-c1c8faa6
  8. 您可以选择修改您子网的公有 IP 寻址行为,以便在该子网中启动的实例可自动接收公有 IP 地址。否则,在启动后您应将弹性 IP 地址与您的实例进行关联,以便可从 Internet 访问该实例。

    Copy
    aws ec2 modify-subnet-attribute --subnet-id subnet-b46032ec --map-public-ip-on-launch

第 3 步:在您的子网中启动实例

要测试您的子网是公有子网并且其中的实例可通过 Internet 访问,请在您的公有子网中启动一个实例,然后连接到该实例。首先,您必须创建一个与您实例进行关联的安全组,以及在您连接到该实例时将使用的密钥对。有关安全组的更多信息,请参阅 您的 VPC 的安全组。更多有关密钥对的信息,请参阅Amazon EC2 用户指南(适用于 Linux 实例) 中的 Amazon EC2 密钥对

在您的公有子网中启动并连接到一个实例

  1. 创建一个密钥对,使用 --query 选项和 --output 文本选项将您的私有密钥通过管道直接发送到扩展名为 .pem 的文件中。

    Copy
    aws ec2 create-key-pair --key-name MyKeyPair --query 'KeyMaterial' --output text > MyKeyPair.pem

    在此示例中,您可以启动 Amazon Linux 实例。如果您在 Linux 或 Mac OS X 操作系统上使用 SSH 客户端连接到您的实例,请使用以下命令设置您的私有密钥文件的权限,以确保只有您可以读取该文件。

    Copy
    chmod 400 MyKeyPair.pem
  2. 在您的 VPC 中创建一个安全组,然后添加一个允许从任何地方进行 SSH 访问的规则。

    Copy
    aws ec2 create-security-group --group-name SSHAccess --description "Security group for SSH access" --vpc-id vpc-2f09a348
    {
        "GroupId": "sg-e1fb8c9a"
    }
    Copy
    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。

    Copy
    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。有关更多信息,请参阅 Amazon EC2 用户指南(适用于 Linux 实例) 中的查找 Linux AMI

  4. 您的实例必须处于 running 状态才能连接到该实例。描述您的实例并确认其状态,然后记录其公有 IP 地址。

    Copy
    aws ec2 describe-instances --instance-id i-0146854b7443af453
    {
        "Reservations": [
            {
                ... 
                "Instances": [
                    {
                        ...
                        "State": {
                            "Code": 16, 
                            "Name": "running"
                        }, 
                        ...
                        "PublicIpAddress": "52.87.168.235", 
                        ...
                    }
                ]
            }
        ]
    }
  5. 当您的实例处于运行状态时,您可以通过使用以下命令,在 Linux 或 Mac OS X 计算机上使用 SSH 客户端连接到该实例:

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

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

步骤 4:清除

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

  1. 删除您的安全组:

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

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

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

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

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

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