开始通过 AWS CLI 使用 IPAM
本教程将指导您完成使用单个 AWS 账户在 AWS CLI 中设置和使用 Amazon VPC IP 地址管理器(IPAM)的过程。到本教程结束时,您将已经创建 IPAM 和 IP 地址池层次结构,并将 CIDR 分配给了 VPC。
先决条件
在开始本教程之前,请确保您具有:
-
有权创建和管理 IPAM 资源的 AWS 账户。
-
已安装 AWS CLI 并配置了相应的凭证。有关安装 AWS CLI 的信息,请参阅安装或更新最新版本的 AWS CLI。有关配置 AWS CLI 的信息,请参阅基本配置。
-
有关 IP 寻址和 CIDR 表示法的基础知识。
-
有关 Amazon VPC 概念的基础知识。
-
完成本教程大约需要 30 分钟。
创建 IPAM
第一步是根据运营区域创建 IPAM。您可以使用 IPAM 来计划、跟踪和监控 AWS 工作负载的 IP 地址。
创建 IPAM,其运营区域为 us-east-1 和 us-west-2:
aws ec2 create-ipam \ --description "My IPAM" \ --operating-regions RegionName=us-east-1 RegionName=us-west-2
此命令会创建 IPAM 并使其能够管理指定区域中的 IP 地址。运营区域是允许 IPAM 在其中管理 IP 地址 CIDR 的 AWS 区域。
验证 IPAM 是否已创建:
aws ec2 describe-ipams
记下输出中的 IPAM ID,您将在后续步骤中用到它。
等待 IPAM 创建完毕并可用(约 20 秒):
sleep 20
获取 IPAM 范围 ID
创建 IPAM 时,AWS 将自动创建一个私有范围和一个公有范围。在本教程中,我们将使用私有范围。
检索 IPAM 详细信息并提取私有范围 ID:
aws ec2 describe-ipams --ipam-id ipam-0abcd1234
将 ipam-0abcd1234
替换为实际的 IPAM ID。
在输出中,找到 PrivateDefaultScopeId
字段中的私有范围 ID 并记下来。该条目看起来类似于 ipam-scope-0abcd1234
。
创建顶级 IPv4 池
现在,我们在私有范围中创建一个顶级池。该池将作为层次结构中所有其他池的父池。
创建顶级 IPv4 池:
aws ec2 create-ipam-pool \ --ipam-scope-id ipam-scope-0abcd1234 \ --address-family ipv4 \ --description "Top-level pool"
将 ipam-scope-0abcd1234
替换为实际的私有范围 ID。
等待池创建完毕并可用:
aws ec2 describe-ipam-pools --ipam-pool-ids ipam-pool-0abcd1234 --query 'IpamPools[0].State' --output text
将 ipam-pool-0abcd1234
替换为实际的顶级池 ID。应等待状态显示 create-complete
之后,再继续操作。
池可用后,向池预置 CIDR 块:
aws ec2 provision-ipam-pool-cidr \ --ipam-pool-id ipam-pool-0abcd1234 \ --cidr 10.0.0.0/8
等待 CIDR 预置完毕:
aws ec2 get-ipam-pool-cidrs --ipam-pool-id ipam-pool-0abcd1234 --query "IpamPoolCidrs[?Cidr=='10.0.0.0/8'].State" --output text
应等待状态显示 provisioned
之后,再继续操作。
创建区域 IPv4 池
接下来,在顶级池中创建区域池。该池特定于某个特别的 AWS 区域。
创建区域 IPv4 池:
aws ec2 create-ipam-pool \ --ipam-scope-id ipam-scope-0abcd1234 \ --source-ipam-pool-id ipam-pool-0abcd1234 \ --locale us-east-1 \ --address-family ipv4 \ --description "Regional pool in us-east-1"
将 ipam-scope-0abcd1234
替换为实际的私有范围 ID,将 ipam-pool-0abcd1234
替换为顶级池 ID。
等待区域池创建完毕并可用:
aws ec2 describe-ipam-pools --ipam-pool-ids ipam-pool-1abcd1234 --query 'IpamPools[0].State' --output text
将 ipam-pool-1abcd1234
替换为实际的区域池 ID。应等待状态显示 create-complete
之后,再继续操作。
池可用后,向池预置 CIDR 块:
aws ec2 provision-ipam-pool-cidr \ --ipam-pool-id ipam-pool-1abcd1234 \ --cidr 10.0.0.0/16
等待 CIDR 预置完毕:
aws ec2 get-ipam-pool-cidrs --ipam-pool-id ipam-pool-1abcd1234 --query "IpamPoolCidrs[?Cidr=='10.0.0.0/16'].State" --output text
应等待状态显示 provisioned
之后,再继续操作。
创建开发 IPv4 池
现在,在区域池中创建开发池。该池将用于开发环境。
创建开发 IPv4 池:
aws ec2 create-ipam-pool \ --ipam-scope-id ipam-scope-0abcd1234 \ --source-ipam-pool-id ipam-pool-1abcd1234 \ --locale us-east-1 \ --address-family ipv4 \ --description "Development pool"
将 ipam-scope-0abcd1234
替换为实际的私有范围 ID,将 ipam-pool-1abcd1234
替换为区域池 ID。
注意:务必添加 --locale
参数,以便与父池的区域一致。
等待开发池创建完毕并可用:
aws ec2 describe-ipam-pools --ipam-pool-ids ipam-pool-2abcd1234 --query 'IpamPools[0].State' --output text
将 ipam-pool-2abcd1234
替换为实际的开发池 ID。应等待状态显示 create-complete
之后,再继续操作。
池可用后,向池预置 CIDR 块:
aws ec2 provision-ipam-pool-cidr \ --ipam-pool-id ipam-pool-2abcd1234 \ --cidr 10.0.0.0/24
等待 CIDR 预置完毕:
aws ec2 get-ipam-pool-cidrs --ipam-pool-id ipam-pool-2abcd1234 --query "IpamPoolCidrs[?Cidr=='10.0.0.0/24'].State" --output text
应等待状态显示 provisioned
之后,再继续操作。
创建使用 IPAM 池 CIDR 的 VPC
最后,创建使用 IPAM 池中 CIDR 的 VPC。此处演示了如何使用 IPAM 为 AWS 资源分配 IP 地址空间。
创建使用 IPAM 池 CIDR 的 VPC:
aws ec2 create-vpc \ --ipv4-ipam-pool-id ipam-pool-2abcd1234 \ --ipv4-netmask-length 26 \ --tag-specifications 'ResourceType=vpc,Tags=[{Key=Name,Value=IPAM-VPC}]'
将 ipam-pool-2abcd1234
替换为实际的开发池 ID。
--ipv4-netmask-length 26
参数指定了您希望从池中分配 /26 CIDR 块(64 个 IP 地址)。选择此网络掩码长度是为了确保它小于池的 CIDR 块(/24)。
验证 VPC 是否已创建:
aws ec2 describe-vpcs --filters "Name=tag:Name,Values=IPAM-VPC"
验证 IPAM 池的分配情况
检查 CIDR 是否已从 IPAM 池中分配:
aws ec2 get-ipam-pool-allocations \ --ipam-pool-id ipam-pool-2abcd1234
将 ipam-pool-2abcd1234
替换为实际的开发池 ID。
此命令显示了来自指定 IPAM 池的所有分配,包括您刚刚创建的 VPC。
故障排除
以下是在使用 IPAM 时可能会遇到的一些常见问题:
-
权限错误:请确保 IAM 用户或角色具有创建和管理 IPAM 资源所需的权限。您可能需要
ec2:CreateIpam
、ec2:CreateIpamPool
和其他相关权限。 -
超出资源限制:默认情况下,只能为每个账户创建一个 IPAM。如果已经有一个 IPAM,则需要先将其删除,然后再创建新的 IPAM,或者使用现有的 IPAM。
-
CIDR 分配失败:向池预置 CIDR 时,请确保要预置的 CIDR 不会与其他池中的现有分配重叠。
-
API 请求超时:如果您遇到“RequestExpired”错误,这可能是由于网络延迟或时间同步问题所致。请尝试再次运行命令。
-
“状态错误”报错:如果您收到“IncorrectState”错误,这可能是因为您尝试对其执行操作的资源未处于正确状态。请等待资源创建或预置完毕再继续。
-
分配大小错误:如果您收到有关分配大小的“InvalidParameterValue”错误,请确保您请求的网络掩码长度适合池大小。例如,您不能从 /24 池中分配 /25 CIDR。
-
依赖项冲突:清理资源时,您可能会遇到“DependencyViolation”错误。这是因为资源之间存在依赖关系。在删除池之前,请确保按照与创建时相反的顺序删除资源,并取消预置 CIDR。
清理资源
完成本教程后,应清除您创建的资源,以免产生不必要的费用。
-
删除 VPC:
aws ec2 delete-vpc --vpc-id vpc-0abcd1234
-
从开发池中取消预置 CIDR:
aws ec2 deprovision-ipam-pool-cidr --ipam-pool-id ipam-pool-2abcd1234 --cidr 10.0.0.0/24
-
删除开发池:
aws ec2 delete-ipam-pool --ipam-pool-id ipam-pool-2abcd1234
-
从区域池中取消预置 CIDR:
aws ec2 deprovision-ipam-pool-cidr --ipam-pool-id ipam-pool-1abcd1234 --cidr 10.0.0.0/16
-
删除区域池:
aws ec2 delete-ipam-pool --ipam-pool-id ipam-pool-1abcd1234
-
从顶级池中取消预置 CIDR:
aws ec2 deprovision-ipam-pool-cidr --ipam-pool-id ipam-pool-0abcd1234 --cidr 10.0.0.0/8
-
删除顶级池:
aws ec2 delete-ipam-pool --ipam-pool-id ipam-pool-0abcd1234
-
删除 IPAM:
aws ec2 delete-ipam --ipam-id ipam-0abcd1234
将所有 ID 替换为实际的资源 ID。
注意
前后两个操作的间隔时间应稍微延长一些,以确保资源完全删除,然后再继续下一步操作。如果您遇到依赖项冲突的问题,请等待几秒,然后重试。
后续步骤
现在,您已经学会了如何通过 AWS CLI 创建和使用 IPAM,您可能需要探索更多高级功能:
-
计划 IP 地址预置:了解如何有效规划 IP 地址空间
-
按资源监控 CIDR 使用情况:了解如何监控 IP 地址使用情况
-
使用 AWS RAM 共享 IPAM 池:了解如何跨 AWS 账户共享 IPAM 池
-
将 IPAM 与 AWS Organization 中的账户集成:了解如何在整个组织中使用 IPAM