教程:使用 Amazon CLI 创建 IPAM、创建池并分配 VPC - Amazon Virtual Private Cloud
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

教程:使用 Amazon CLI 创建 IPAM、创建池并分配 VPC

按照本教程中的步骤使用 Amazon CLI 创建 IPAM、创建池并分配 VPC。

以下示例显示了池结构的层次结构,您可以通过遵照本部分中的步骤来创建这些结构:

  • IPAM 在 Amazon 区域 1、Amazon 区域 2 中运营

    • 私有范围

      • 顶级池

        • Amazon 区域 2 中的区域池

          • 开发池

            • VPC 的分配

注意

在本部分中,您将创建一个 IPAM。默认情况下,您只能创建一个 IPAM。有关更多信息,请参阅IPAM 的配额。如果您已委派了 IPAM 账户并创建了 IPAM,则可以跳过步骤 1 和步骤 2。

步骤 1:在企业中启用 IPAM

此为可选步骤。完成此步骤以在企业中启用 IPAM,然后使用 Amazon CLI 配置委派的 IPAM。有关 IPAM 账户角色的更多信息,请参阅 将 IPAM 与 Amazon Organizations 集成

此请求必须来自 Amazon Organizations 管理账户。运行以下命令时,请确保您使用的角色具有允许执行以下操作的 IAM 策略:

  • ec2:EnableIpamOrganizationAdminAccount

  • organizations:EnableAwsServiceAccess

  • organizations:RegisterDelegatedAdministrator

  • iam:CreateServiceLinkedRole

aws ec2 enable-ipam-organization-admin-account --region us-east-1 --delegated-admin-account-id 11111111111

您应看到以下输出,它表明启用成功。

{ "Success": true }

步骤 2:创建 IPAM

按照本部分中的步骤创建 IPAM 并查看有关创建范围的其他信息。在后面的步骤中创建池并为这些池预置 IP 地址范围时,您将使用此 IPAM。

注意

允许区域选项确定了 IPAM 池可用于的哪些 Amazon 区域。有关这些运营区域的更多信息,请参阅 创建 IPAM

要使用 Amazon CLI 创建 IPAM

  1. 运行以下命令以创建 IPAM 实例。

    aws ec2 create-ipam --description my-ipam --region us-east-1 --operating-regions RegionName=us-west-2

    创建 IPAM 时,Amazon 自动执行以下操作:

    • 为 IPAM 返回全局唯一的资源 ID (IpamId)。

    • 创建默认的公有范围 (PublicDefaultScopeId) 和默认的私有范围 (PrivateDefaultScopeId)。

    { "Ipam": { "OwnerId": "123456789012", "IpamId": "ipam-0de83dba6694560a9", "IpamArn": "arn:aws:ec2::123456789012:ipam/ipam-0de83dba6694560a9", "PublicDefaultScopeId": "ipam-scope-02a24107598e982c5", "PrivateDefaultScopeId": "ipam-scope-065e7dfe880df679c", "ScopeCount": 2, "Description": "my-ipam", "OperatingRegions": [ { "RegionName": "us-west-2" }, { "RegionName": "us-east-1" } ], "Tags": [] } }
  2. 运行以下命令以查看与范围相关的其他信息。公有范围适用于将要通过公共互联网访问的 IP 地址。私有范围适用于不会通过公共互联网访问的 IP 地址。

    aws ec2 describe-ipam-scopes --region us-east-1

    在输出中,您将看到可用的范围。您将在下一步中使用私有范围 ID。

    { "IpamScopes": [ { "OwnerId": "123456789012", "IpamScopeId": "ipam-scope-02a24107598e982c5", "IpamScopeArn": "arn:aws:ec2::123456789012:ipam-scope/ipam-scope-02a24107598e982c5", "IpamArn": "arn:aws:ec2::123456789012:ipam/ipam-0de83dba6694560a9", "IpamScopeType": "public", "IsDefault": true, "PoolCount": 0 }, { "OwnerId": "123456789012", "IpamScopeId": "ipam-scope-065e7dfe880df679c", "IpamScopeArn": "arn:aws:ec2::123456789012:ipam-scope/ipam-scope-065e7dfe880df679c", "IpamArn": "arn:aws:ec2::123456789012:ipam/ipam-0de83dba6694560a9", "IpamScopeType": "private", "IsDefault": true, "PoolCount": 0 } ] }

步骤 3:创建 IPv4 地址池

按照本部分中的步骤创建 IPv4 地址池。

使用 Amazon CLI 为您的所有 Amazon 资源创建 IPv4 地址池

  1. 运行以下命令以创建 IPv4 地址池。请使用您在上一步中创建的 IPAM 的私有范围的 ID。

    aws ec2 create-ipam-pool --ipam-scope-id ipam-scope-065e7dfe880df679c --description "top-level-pool" --address-family ipv4

    在输出中,您将看到池的 create-in-progress 的状态。

    { "IpamPool": { "OwnerId": "123456789012", "IpamPoolId": "ipam-pool-0008f25d7187a08d9", "IpamPoolArn": "arn:aws:ec2::123456789012:ipam-pool/ipam-pool-0008f25d7187a08d9", "IpamScopeArn": "arn:aws:ec2::123456789012:ipam-scope/ipam-scope-065e7dfe880df679c", "IpamScopeType": "private", "IpamArn": "arn:aws:ec2::123456789012:ipam/ipam-0de83dba6694560a9", "Locale": "None", "PoolDepth": 1, "State": "create-in-progress", "Description": "top-level-pool", "AutoImport": false, "AddressFamily": "ipv4", "Tags": [] } }
  2. 运行以下命令,直到您在输出中看到 create-complete 的状态。

    aws ec2 describe-ipam-pools

    下面的示例输出显示正确的状态。

    { "IpamPools": [ { "OwnerId": "123456789012", "IpamPoolId": "ipam-pool-0008f25d7187a08d9", "IpamPoolArn": "arn:aws:ec2::123456789012:ipam-pool/ipam-pool-0008f25d7187a08d9", "IpamScopeArn": "arn:aws:ec2::123456789012:ipam-scope/ipam-scope-065e7dfe880df679c", "IpamScopeType": "private", "IpamArn": "arn:aws:ec2::123456789012:ipam/ipam-0de83dba6694560a9", "Locale": "None", "PoolDepth": 1, "State": "create-complete", "Description": "top-level-pool", "AutoImport": false, "AddressFamily": "ipv4" } ] }

步骤 4:向顶级池预置 CIDR

按照本部分中的步骤向顶级池预置 CIDR,然后验证是否已预置 CIDR。有关更多信息,请参阅将 CIDR 预置到池

使用 Amazon CLI 向池预置 CIDR 块

  1. 请运行以下命令以预置 CIDR。

    aws ec2 provision-ipam-pool-cidr --region us-east-1 --ipam-pool-id ipam-pool-0008f25d7187a08d9 --cidr 10.0.0.0/8

    在输出中,您可以验证预置的状态。

    { "IpamPoolCidr": { "Cidr": "10.0.0.0/8", "State": "pending-provision" } }
  2. 运行以下命令,直到您在输出中看到 provisioned 的状态。

    aws ec2 get-ipam-pool-cidrs --region us-east-1 --ipam-pool-id ipam-pool-0008f25d7187a08d9

    下面的示例输出显示正确的状态。

    { "IpamPoolCidrs": [ { "Cidr": "10.0.0.0/8", "State": "provisioned" } ] }

第 5 步 使用来自顶级池的 CIDR 创建区域池

创建 IPAM 池时,该池默认情况下属于 IPAM 的 Amazon 区域。创建 VPC 时,VPC 从中进行提取的池必须与 VPC 位于同一个区域中。创建池时,您可以使用 --locale 选项使池可用于 IPAM 的区域之外的区域中的服务。按照本部分中的步骤在另一个区域设置中创建区域池。

要使用 Amazon CLI 通过来自上一个池的 CIDR 创建池

  1. 运行以下命令以创建池并插入带有前一个池中已知可用 CIDR 的空间。

    aws ec2 create-ipam-pool --description "regional--pool" --region us-east-1 --ipam-scope-id ipam-scope-065e7dfe880df679c --source-ipam-pool-id ipam-pool-0008f25d7187a08d9 --locale us-west-2 --address-family ipv4

    在输出中,您将看到创建的池的 ID。在下一步骤中,您需要用到此 ID。

    { "IpamPool": { "OwnerId": "123456789012", "IpamPoolId": "ipam-pool-0da89c821626f1e4b", "SourceIpamPoolId": "ipam-pool-0008f25d7187a08d9", "IpamPoolArn": "arn:aws:ec2::123456789012:ipam-pool/ipam-pool-0da89c821626f1e4b", "IpamScopeArn": "arn:aws:ec2::123456789012:ipam-scope/ipam-scope-065e7dfe880df679c", "IpamScopeType": "private", "IpamArn": "arn:aws:ec2::123456789012:ipam/ipam-0de83dba6694560a9", "Locale": "us-west-2", "PoolDepth": 2, "State": "create-in-progress", "Description": "regional--pool", "AutoImport": false, "AddressFamily": "ipv4", "Tags": [] } }
  2. 运行以下命令,直到您在输出中看到 create-complete 的状态。

    aws ec2 describe-ipam-pools

    在输出中,您可以看到您在 IPAM 中拥有的池。在本教程中,我们创建了一个顶级池和一个区域池,所以您会看到这两个池。

    { "IpamPools": [ { "OwnerId": "123456789012", "IpamPoolId": "ipam-pool-0008f25d7187a08d9", "IpamPoolArn": "arn:aws:ec2::123456789012:ipam-pool/ipam-pool-0008f25d7187a08d9", "IpamScopeArn": "arn:aws:ec2::123456789012:ipam-scope/ipam-scope-065e7dfe880df679c", "IpamScopeType": "private", "IpamArn": "arn:aws:ec2::123456789012:ipam/ipam-0de83dba6694560a9", "Locale": "None", "PoolDepth": 1, "State": "create-complete", "Description": "top-level-pool", "AutoImport": false, "AddressFamily": "ipv4" }, { "OwnerId": "123456789012", "IpamPoolId": "ipam-pool-0da89c821626f1e4b", "SourceIpamPoolId": "ipam-pool-0008f25d7187a08d9", "IpamPoolArn": "arn:aws:ec2::123456789012:ipam-pool/ipam-pool-0da89c821626f1e4b", "IpamScopeArn": "arn:aws:ec2::123456789012:ipam-scope/ipam-scope-065e7dfe880df679c", "IpamScopeType": "private", "IpamArn": "arn:aws:ec2::123456789012:ipam/ipam-0de83dba6694560a9", "Locale": "us-west-2", "PoolDepth": 2, "State": "create-complete", "Description": "regional--pool", "AutoImport": false, "AddressFamily": "ipv4" } ] }

步骤 6:向区域池预置 CIDR

按照本部分中的步骤向池分配 CIDR 块,并验证它是否已成功预置。

要使用 Amazon CLI 将 CIDR 块分配到区域池

  1. 请运行以下命令以预置 CIDR。

    aws ec2 provision-ipam-pool-cidr --region us-east-1 --ipam-pool-id ipam-pool-0da89c821626f1e4b --cidr 10.0.0.0/16

    在输出中,您将看到池的状态。

    { "IpamPoolCidr": { "Cidr": "10.0.0.0/16", "State": "pending-provision" } }
  2. 运行以下命令,直到您在输出中看到 provisioned 的状态。

    aws ec2 get-ipam-pool-cidrs --region us-east-1 --ipam-pool-id ipam-pool-0da89c821626f1e4b

    下面的示例输出显示正确的状态。

    { "IpamPoolCidrs": [ { "Cidr": "10.0.0.0/16", "State": "provisioned" } ] }
  3. 运行以下命令查询顶级池以查看分配。区域池被看作是顶级池中的分配。

    aws ec2 get-ipam-pool-allocations --region us-east-1 --ipam-pool-id ipam-pool-041ff84c50166914f

    在输出中,您将区域池看作是顶级池中的分配。

    { "IpamPoolAllocations": [ { "Cidr": "10.0.0.0/16", "IpamPoolAllocationId": "ipam-pool-alloc-fbd525f6c2bf4e77a75690fc2d93479a", "ResourceId": "ipam-pool-0da89c821626f1e4b", "ResourceType": "ipam-pool", "ResourceOwner": "123456789012" } ] }

第 7 步 创建 RAM 共享以启用跨账户的 IP 分配

此为可选步骤。只有完成 将 IPAM 与 Amazon Organizations 集成 后,您才能完成此步骤。

当您创建 IPAM 池 Amazon RAM 共享时,它将支持跨账户分配 IP。RAM 共享仅在主 Amazon 区域中可用。请注意,您可以在与 IPAM 相同的区域中创建此共享,而不能在池的本地区域中。IPAM 资源的所有管理操作都是通过 IPAM 的主区域进行的。本教程中的示例为单个池创建单个共享,但是您可以将多个池添加到单个共享中。有关更多信息,包括必须输入的选项的说明,请参阅 使用 Amazon RAM 共享 IPAM 池

使用以下命令创建资源共享。

aws ram create-resource-share --region us-east-1 --name pool_share --resource-arns arn:aws:ec2::123456789012:ipam-pool/ipam-pool-0dec9695bca83e606 --principals 123456

输出表明,该池已创建。

{ "resourceShare": { "resourceShareArn": "arn:aws:ram:us-west-2:123456789012:resource-share/3ab63985-99d9-1cd2-7d24-75e93EXAMPLE", "name": "pool_share", "owningAccountId": "123456789012", "allowExternalPrincipals": false, "status": "ACTIVE", "creationTime": 1565295733.282, "lastUpdatedTime": 1565295733.282 } }

第 8 步 创建 VPC

运行以下命令以创建 VPC 并将 CIDR 块从新创建的 IPAM 中的池分配给 VPC。

aws ec2 create-vpc --region us-east-1 --ipv4-ipam-pool-id ipam-pool-04111dca0d960186e --cidr-block 10.0.0.0/24

输出表明,VPC 已创建。

{ "Vpc": { "CidrBlock": "10.0.0.0/24", "DhcpOptionsId": "dopt-19edf471", "State": "pending", "VpcId": "vpc-0983f3c454f3d8be5", "OwnerId": "123456789012", "InstanceTenancy": "default", "Ipv6CidrBlockAssociationSet": [], "CidrBlockAssociationSet": [ { "AssociationId": "vpc-cidr-assoc-00b24cc1c2EXAMPLE", "CidrBlock": "10.0.0.0/24", "CidrBlockState": { "State": "associated" } } ], "IsDefault": false } }

第 9 步 清除

按照本部分中的步骤删除您在本教程中创建的 IPAM 资源。

  1. 删除 VPC

    aws ec2 delete-vpc --vpc-id vpc-0983f3c454f3d8be5
  2. 删除 IPAM 池 RAM 共享。

    aws ram delete-resource-share --resource-share-arn arn:aws:ram:us-west-2:123456789012:resource-share/3ab63985-99d9-1cd2-7d24-75e93EXAMPLE
  3. 从区域池中取消预置池 CIDR。

    aws ec2 deprovision-ipam-pool-cidr --ipam-pool-id ipam-pool-0da89c821626f1e4b --region us-east-1
  4. 从顶级池中取消预置池 CIDR。

    aws ec2 deprovision-ipam-pool-cidr --ipam-pool-id ipam-pool-0008f25d7187a08d9 --region us-east-1
  5. 禁用 IPAM 与 Amazon Organizations 的集成

    aws ec2 get-ipam-address-history --region us-east-1 --ipam-scope-id ipam-scope-0e2a31e8866c27cbb --cidr 10.0.0.0/24 --max-results 10
  6. 删除 IPAM

    aws ec2 delete-ipam --region us-east-1