开始通过 AWS CLI 使用 IPAM - Amazon Virtual Private Cloud

开始通过 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:CreateIpamec2:CreateIpamPool 和其他相关权限。

  • 超出资源限制:默认情况下,只能为每个账户创建一个 IPAM。如果已经有一个 IPAM,则需要先将其删除,然后再创建新的 IPAM,或者使用现有的 IPAM。

  • CIDR 分配失败:向池预置 CIDR 时,请确保要预置的 CIDR 不会与其他池中的现有分配重叠。

  • API 请求超时:如果您遇到“RequestExpired”错误,这可能是由于网络延迟或时间同步问题所致。请尝试再次运行命令。

  • “状态错误”报错:如果您收到“IncorrectState”错误,这可能是因为您尝试对其执行操作的资源未处于正确状态。请等待资源创建或预置完毕再继续。

  • 分配大小错误:如果您收到有关分配大小的“InvalidParameterValue”错误,请确保您请求的网络掩码长度适合池大小。例如,您不能从 /24 池中分配 /25 CIDR。

  • 依赖项冲突:清理资源时,您可能会遇到“DependencyViolation”错误。这是因为资源之间存在依赖关系。在删除池之前,请确保按照与创建时相反的顺序删除资源,并取消预置 CIDR。

清理资源

完成本教程后,应清除您创建的资源,以免产生不必要的费用。

  1. 删除 VPC:

    aws ec2 delete-vpc --vpc-id vpc-0abcd1234
  2. 从开发池中取消预置 CIDR:

    aws ec2 deprovision-ipam-pool-cidr --ipam-pool-id ipam-pool-2abcd1234 --cidr 10.0.0.0/24
  3. 删除开发池:

    aws ec2 delete-ipam-pool --ipam-pool-id ipam-pool-2abcd1234
  4. 从区域池中取消预置 CIDR:

    aws ec2 deprovision-ipam-pool-cidr --ipam-pool-id ipam-pool-1abcd1234 --cidr 10.0.0.0/16
  5. 删除区域池:

    aws ec2 delete-ipam-pool --ipam-pool-id ipam-pool-1abcd1234
  6. 从顶级池中取消预置 CIDR:

    aws ec2 deprovision-ipam-pool-cidr --ipam-pool-id ipam-pool-0abcd1234 --cidr 10.0.0.0/8
  7. 删除顶级池:

    aws ec2 delete-ipam-pool --ipam-pool-id ipam-pool-0abcd1234
  8. 删除 IPAM:

    aws ec2 delete-ipam --ipam-id ipam-0abcd1234

将所有 ID 替换为实际的资源 ID。

注意

前后两个操作的间隔时间应稍微延长一些,以确保资源完全删除,然后再继续下一步操作。如果您遇到依赖项冲突的问题,请等待几秒,然后重试。

后续步骤

现在,您已经学会了如何通过 AWS CLI 创建和使用 IPAM,您可能需要探索更多高级功能: