教程:使用 AWS CLI 创建 IPAM 和池 - Amazon Virtual Private Cloud

教程:使用 AWS CLI 创建 IPAM 和池

按照本教程中的步骤使用 AWS CLI 创建 IPAM、创建 IP 地址池并使用 IPAM 池中的 CIDR 分配 VPC。

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

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

    • 私有范围

      • 顶级池

        • AWS 区域 2 中的区域池

          • 开发池

            • VPC 的分配

注意

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

步骤 1:在企业中启用 IPAM

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

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

  • 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 池可用于的哪些 AWS 区域。有关这些运营区域的更多信息,请参阅 创建 IPAM

要使用 AWS CLI 创建 IPAM
  1. 运行以下命令以创建 IPAM 实例。

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

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

    • 为 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 地址池。

重要

您不会在这个顶级池上使用 --locale 选项。稍后您将在区域池中设置区域设置选项。区域设置是您希望有一个池可用于 CIDR 分配的 区域。由于未在顶级池上设置区域设置,该区域设置将为原定设置 None。如果池的区域设置为 None,则任何 AWS 区域的 VPC 资源都无法使用该池。您只能在池中手动分配 IP 地址空间以预订空间。

使用 AWS CLI 为您的所有 AWS 资源创建 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 预置到池

使用 AWS 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 的 AWS 区域。创建 VPC 时,VPC 从中进行提取的池必须与 VPC 位于同一个区域中。创建池时,您可以使用 --locale 选项使池可用于 IPAM 的区域之外的区域中的服务。按照本部分中的步骤在另一个区域设置中创建区域池。

要使用 AWS 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 块,并验证它是否已成功预置。

要使用 AWS 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-0008f25d7187a08d9

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

    { "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 与 AWS Organization 中的账户集成 后,您才能完成此步骤。

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

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