

# 教程：使用 AWS CLI 创建 IPAM 和池
<a name="tutorials-create-vpc-ipam"></a>

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

以下示例显示了池结构的层次结构，您可以通过遵照本部分中的步骤来创建这些结构：
+ IPAM 在 AWS 区域 1、AWS 区域 2 中运营
  + 私有范围
    + 顶级池
      + AWS 区域 2 中的区域池
        + 开发池
          + VPC 的分配

**注意**  
在本部分中，您将创建一个 IPAM。默认情况下，您只能创建一个 IPAM。有关更多信息，请参阅 [IPAM 的配额](quotas-ipam.md)。如果您已委派了 IPAM 账户并创建了 IPAM，则可以跳过步骤 1 和步骤 2。

**Topics**
+ [步骤 1：在企业中启用 IPAM](#cli-tut-enable-org-ipam)
+ [步骤 2：创建 IPAM](#cli-tut-create-ipam)
+ [步骤 3：创建 IPv4 地址池](#cli-tut-create-top-ipam)
+ [步骤 4：向顶级池预置 CIDR](#cli-tut-provision-cidr-ipam)
+ [步骤 5。使用来自顶级池的 CIDR 创建区域池](#cli-tut-create-reg-ipam)
+ [步骤 6：向区域池预置 CIDR](#cli-tut-assign-cidr-reg-pool)
+ [第 7 步。创建 RAM 共享以启用跨账户的 IP 分配](#cli-tut-create-ram-share-ipam)
+ [步骤 8：创建 VPC](#cli-tut-create-vpc-ipam)
+ [第 9 步。清理](#cli-tut-cleanup-ipam)

## 步骤 1：在企业中启用 IPAM
<a name="cli-tut-enable-org-ipam"></a>

此为可选步骤。完成此步骤以在企业中启用 IPAM，然后使用 AWS CLI 配置委派的 IPAM。有关 IPAM 账户角色的更多信息，请参阅 [将 IPAM 与 AWS Organization 中的账户集成](enable-integ-ipam.md)。

此请求必须来自 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
<a name="cli-tut-create-ipam"></a>

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

**注意**  
允许区域选项确定了 IPAM 池可用于的哪些 AWS 区域。有关这些运营区域的更多信息，请参阅 [创建 IPAM](create-ipam.md)。

**要使用 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": []
       }
   }
   ```

1. 运行以下命令以查看与范围相关的其他信息。公有范围适用于将通过公共互联网访问的 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 地址池
<a name="cli-tut-create-top-ipam"></a>

按照本部分中的步骤创建 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": []
       }
   }
   ```

1. 运行以下命令，直到您在输出中看到 `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
<a name="cli-tut-provision-cidr-ipam"></a>

按照本部分中的步骤向顶级池预置 CIDR，然后验证是否已预置 CIDR。有关更多信息，请参阅 [将 CIDR 预置到池](prov-cidr-ipam.md)。

**使用 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"      
       }                                     
   }
   ```

1. 运行以下命令，直到您在输出中看到 `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 创建区域池
<a name="cli-tut-create-reg-ipam"></a>

创建 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": []
       }
   }
   ```

1. 运行以下命令，直到您在输出中看到 `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
<a name="cli-tut-assign-cidr-reg-pool"></a>

按照本部分中的步骤向池分配 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"      
       }                                     
   }
   ```

1. 运行以下命令，直到您在输出中看到 `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"         
           }                                  
       ]                                      
   }
   ```

1. 运行以下命令查询顶级池以查看分配。区域池被看作是顶级池中的分配。

   ```
   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 分配
<a name="cli-tut-create-ram-share-ipam"></a>

此为可选步骤。只有完成 [将 IPAM 与 AWS Organization 中的账户集成](enable-integ-ipam.md) 后，您才能完成此步骤。

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

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

```
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
<a name="cli-tut-create-vpc-ipam"></a>

运行以下命令以创建 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 步。清理
<a name="cli-tut-cleanup-ipam"></a>

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

1. 删除 VPC。

   ```
   aws ec2 delete-vpc --vpc-id vpc-0983f3c454f3d8be5
   ```

1. 删除 IPAM 池 RAM 共享。

   ```
   aws ram delete-resource-share --resource-share-arn arn:aws:ram:us-west-2:123456789012:resource-share/3ab63985-99d9-1cd2-7d24-75e93EXAMPLE
   ```

1. 从区域池中取消预置池 CIDR。

   ```
    aws ec2 deprovision-ipam-pool-cidr --ipam-pool-id ipam-pool-0da89c821626f1e4b --region us-east-1 
   ```

1. 从顶级池中取消预置池 CIDR。

   ```
    aws ec2 deprovision-ipam-pool-cidr --ipam-pool-id ipam-pool-0008f25d7187a08d9 --region us-east-1
   ```

1. 删除 IPAM

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