教程:使用 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-id11111111111
您应看到以下输出,它表明启用成功。
{
"Success": true
}
步骤 2:创建 IPAM
按照本部分中的步骤创建 IPAM 并查看有关创建范围的其他信息。在后面的步骤中创建池并为这些池预置 IP 地址范围时,您将使用此 IPAM。
注意
允许区域选项确定了 IPAM 池可用于的哪些 AWS 区域。有关这些运营区域的更多信息,请参阅 创建 IPAM。
要使用 AWS CLI 创建 IPAM
-
运行以下命令以创建 IPAM 实例。
aws ec2 create-ipam --description
my-ipam
--regionus-east-1
--operating-regionsRegionName=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": [] } }
-
运行以下命令以查看与范围相关的其他信息。公有范围适用于将要通过公共互联网访问的 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 地址池
-
运行以下命令以创建 IPv4 地址池。请使用您在上一步中创建的 IPAM 的私有范围的 ID。
aws ec2 create-ipam-pool --ipam-scope-id
ipam-scope-065e7dfe880df679c
--description"top-level-pool"
--address-familyipv4
在输出中,您将看到池的
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": [] } }
-
运行以下命令,直到您在输出中看到
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 块
-
请运行以下命令以预置 CIDR。
aws ec2 provision-ipam-pool-cidr --region
us-east-1
--ipam-pool-idipam-pool-0008f25d7187a08d9
--cidr10.0.0.0/8
在输出中,您可以验证预置的状态。
{ "IpamPoolCidr": { "Cidr": "10.0.0.0/8", "State": "pending-provision" } }
-
运行以下命令,直到您在输出中看到
provisioned
的状态。aws ec2 get-ipam-pool-cidrs --region
us-east-1
--ipam-pool-idipam-pool-0008f25d7187a08d9
下面的示例输出显示正确的状态。
{ "IpamPoolCidrs": [ { "Cidr": "10.0.0.0/8", "State": "provisioned" } ] }
第 5 步。使用来自顶级池的 CIDR 创建区域池
创建 IPAM 池时,该池默认情况下属于 IPAM 的 AWS 区域。创建 VPC 时,VPC 从中进行提取的池必须与 VPC 位于同一个区域中。创建池时,您可以使用 --locale
选项使池可用于 IPAM 的区域之外的区域中的服务。按照本部分中的步骤在另一个区域设置中创建区域池。
要使用 AWS CLI 通过来自上一个池的 CIDR 创建池
-
运行以下命令以创建池并插入带有前一个池中已知可用 CIDR 的空间。
aws ec2 create-ipam-pool --description
"regional--pool"
--regionus-east-1
--ipam-scope-idipam-scope-065e7dfe880df679c
--source-ipam-pool-idipam-pool-0008f25d7187a08d9
--localeus-west-2
--address-familyipv4
在输出中,您将看到创建的池的 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": [] } }
-
运行以下命令,直到您在输出中看到
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 块分配到区域池
-
请运行以下命令以预置 CIDR。
aws ec2 provision-ipam-pool-cidr --region
us-east-1
--ipam-pool-idipam-pool-0da89c821626f1e4b
--cidr10.0.0.0/16
在输出中,您将看到池的状态。
{ "IpamPoolCidr": { "Cidr": "10.0.0.0/16", "State": "pending-provision" } }
-
运行以下命令,直到您在输出中看到
provisioned
的状态。aws ec2 get-ipam-pool-cidrs --region
us-east-1
--ipam-pool-idipam-pool-0da89c821626f1e4b
下面的示例输出显示正确的状态。
{ "IpamPoolCidrs": [ { "Cidr": "10.0.0.0/16", "State": "provisioned" } ] }
-
运行以下命令查询顶级池以查看分配。区域池被看作是顶级池中的分配。
aws ec2 get-ipam-pool-allocations --region
us-east-1
--ipam-pool-idipam-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
--namepool_share
--resource-arnsarn:aws:ec2::123456789012:ipam-pool/ipam-pool-0dec9695bca83e606
--principals123456
输出表明,该池已创建。
{
"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-idipam-pool-04111dca0d960186e
--cidr-block10.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 资源。
-
删除 VPC。
aws ec2 delete-vpc --vpc-id
vpc-0983f3c454f3d8be5
-
删除 IPAM 池 RAM 共享。
aws ram delete-resource-share --resource-share-arn
arn:aws:ram:us-west-2:123456789012:resource-share/3ab63985-99d9-1cd2-7d24-75e93EXAMPLE
-
从区域池中取消预置池 CIDR。
aws ec2 deprovision-ipam-pool-cidr --ipam-pool-id
ipam-pool-0da89c821626f1e4b
--regionus-east-1
-
从顶级池中取消预置池 CIDR。
aws ec2 deprovision-ipam-pool-cidr --ipam-pool-id
ipam-pool-0008f25d7187a08d9
--regionus-east-1
-
删除 IPAM
aws ec2 delete-ipam --region
us-east-1