仅使用 AWS CLI 自带公有 IPv4 CIDR 到 IPAM 中 - Amazon Virtual Private Cloud

仅使用 AWS CLI 自带公有 IPv4 CIDR 到 IPAM 中

按照以下步骤将 IPv4 CIDR 带入 IPAM 中,然后仅使用 AWS CLI 使用 CIDR 分配弹性 IP 地址 (EIP)。

重要

第 1 步:创建 AWS CLI 命名配置文件和 IAM 角色

要以单个 AWS 用户的身份完成本教程,您可以使用 AWS CLI 命名配置文件在 IAM 角色之间切换。命名配置文件 是您在将 --profile 选项与 AWS CLI 结合使用时引用的设置和凭证集合。有关如何为 AWS 账户创建 IAM 角色和命名配置文件的更多信息,请参阅《AWS Identity and Access Management 用户指南》中的 在 AWS CLI 中使用 IAM 角色

为您将在本教程中使用的三个 AWS 账户分别创建一个角色和一个命名配置文件:

  • 为 AWS Organizations 管理账户创建名为 management-account 的配置文件。

  • 为配置为 IPAM 管理员的 AWS Organizations 成员账户创建名为 ipam-account 的配置文件。

  • 为将从 IPAM 池中分配 CIDR 的企业中的 AWS Organizations 成员账户创建名为 member-account 的配置文件。

创建 IAM 角色和命名配置文件后,请返回本页面并转至下一步。在本教程的其余部分中,您将注意到示例 AWS CLI 命令会将 --profile 选项与其中一个命名配置文件一起使用,以指示哪个账户必须运行该命令。

步骤 2:创建 IPAM

此为可选步骤。如果您已在创建了 us-east-1us-west-2 的运营区域的情况下创建了 IPAM,您可以跳过此步骤。创建 IPAM 并指定 us-east-1us-west-2 的运营区域。您必须选择一个运营区域,以便在创建 IPAM 池时可以使用区域设置选项。IPAM 与 BYOIP 集成要求在将用于 BYOIP CIDR 的任何一个池上设置区域设置。

此步骤必须由 IPAM 账户完成。

运行以下命令:

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

在输出中,您将看到您创建的 IPAM。记下 PublicDefaultScopeId 值。在下一步中,您将需要使用公有范围 ID。您使用公有范围是因为 BYOIP CIDR 是公有 IP 地址,这就是公有范围的用途。

{ "Ipam": { "OwnerId": "123456789012", "IpamId": "ipam-090e48e75758de279", "IpamArn": "arn:aws:ec2::123456789012:ipam/ipam-090e48e75758de279", "PublicDefaultScopeId": "ipam-scope-0087d83896280b594", "PrivateDefaultScopeId": "ipam-scope-08b70b04fbd524f8d", "ScopeCount": 2, "Description": "my-ipam", "OperatingRegions": [ { "RegionName": "us-east-1" }, { "RegionName": "us-west-2" } ], "Tags": [] } }

步骤 3:创建顶级 IPAM 池

完成本部分中的步骤创建顶级 IPAM 池。

此步骤必须由 IPAM 账户完成。

使用 AWS CLI 为您的所有 AWS 资源创建 IPv4 地址池
  1. 运行以下命令以创建 IPAM 池。请使用您在上一步中创建的 IPAM 的公有范围的 ID。

    此步骤必须由 IPAM 账户完成。

    aws ec2 create-ipam-pool --region us-east-1 --ipam-scope-id ipam-scope-0087d83896280b594 --description "top-level-IPv4-pool" --address-family ipv4 --profile ipam-account

    在输出中,您将会看到 create-in-progress,这表明池的创建正在进行中。

    { "IpamPool": { "OwnerId": "123456789012", "IpamPoolId": "ipam-pool-0a03d430ca3f5c035", "IpamPoolArn": "arn:aws:ec2::123456789012:ipam-pool/ipam-pool-0a03d430ca3f5c035", "IpamScopeArn": "arn:aws:ec2::123456789012:ipam-scope/ipam-scope-0087d83896280b594", "IpamScopeType": "public", "IpamArn": "arn:aws:ec2::123456789012:ipam/ipam-090e48e75758de279", "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 --region us-east-1 --profile ipam-account

    下面的示例输出显示池的状态。

    { "IpamPools": [ { "OwnerId": "123456789012", "IpamPoolId": "ipam-pool-0a03d430ca3f5c035", "IpamPoolArn": "arn:aws:ec2::123456789012:ipam-pool/ipam-pool-0a03d430ca3f5c035", "IpamScopeArn": "arn:aws:ec2::123456789012:ipam-scope/ipam-scope-0087d83896280b594", "IpamScopeType": "public", "IpamArn": "arn:aws:ec2::123456789012:ipam/ipam-090e48e75758de279", "Locale": "None", "PoolDepth": 1, "State": "create-complete", "Description": "top-level-IPV4-pool", "AutoImport": false, "AddressFamily": "ipv4", "Tags": [] } ] }

步骤 4:向顶级池预置 CIDR

向顶级池预置 CIDR 块。请注意,将 IPv4 CIDR 预置到顶级池中的资源池时,您可以预置的最低 IPv4 CIDR 为 /24;不允许使用更具体的 CIDR(例如 /25)。

注意

在向顶级池预置 BYOIP CIDR 时,您只需要验证域控制权。对于顶级池中的区域池,您可以省略域所有权验证选项。

此步骤必须由 IPAM 账户完成。

重要

在向顶级池预置 BYOIP CIDR 时,您只需要验证域控制权。对于顶级池中的区域池,您可以省略域控制权选项。一旦您将自己的 BYOIP 登录到 IPAM,在跨区域和账户划分 BYOIP 时,您无需执行所有权验证。

使用 AWS CLI 向池预置 CIDR 块
  1. 要为 CIDR 预置证书信息,请使用以下示例命令。除了根据需要替换示例中的值外,务必还要将 MessageSignature 值替换为在 使用 X.509 证书验证域 中获得的 text_messagesigned_message 值。

    aws ec2 provision-ipam-pool-cidr --region us-east-1 --ipam-pool-id ipam-pool-0a03d430ca3f5c035 --cidr 130.137.245.0/24 --verification-method remarks-x509 --cidr-authorization-context Message="1|aws|470889052444|130.137.245.0/24|20250101|SHA256|RSAPSS",Signature="W3gdQ9PZHLjPmrnGM~cvGx~KCIsMaU0P7ENO7VRnfSuf9NuJU5RUveQzus~QmF~Nx42j3z7d65uyZZiDRX7KMdW4KadaLiClyRXN6ps9ArwiUWSp9yHM~U-hApR89Kt6GxRYOdRaNx8yt-uoZWzxct2yIhWngy-du9pnEHBOX6WhoGYjWszPw0iV4cmaAX9DuMs8ASR83K127VvcBcRXElT5URr3gWEB1CQe3rmuyQk~gAdbXiDN-94-oS9AZlafBbrFxRjFWRCTJhc7Cg3ASbRO-VWNci-C~bWAPczbX3wPQSjtWGV3k1bGuD26ohUc02o8oJZQyYXRpgqcWGVJdQ__" --profile ipam-account

    要为 CIDR 预置验证令牌信息,请使用以下示例命令。除了根据需要替换示例中的值外,务必还要将 ipam-ext-res-ver-token-0309ce7f67a768cf0 替换为在 使用 DNS TXT 记录验证域 中获得的 IpamExternalResourceVerificationTokenId 令牌 ID。

    aws ec2 provision-ipam-pool-cidr --region us-east-1 --ipam-pool-id ipam-pool-0a03d430ca3f5c035 --cidr 130.137.245.0/24 --verification-method dns-token --ipam-external-resource-verification-token-id ipam-ext-res-ver-token-0309ce7f67a768cf0 --profile ipam-account

    在输出中,您将看到 CIDR 待定预置。

    { "IpamPoolCidr": { "Cidr": "130.137.245.0/24", "State": "pending-provision" } }
  2. 在继续之前,请确保已预置此 CIDR。

    重要

    虽然大多数预配置将在两小时内完成,但对于公开发布的范围,完成预配置过程可能需要长达一周的时间。

    运行以下命令,直到您在输出中看到 provisioned 的状态。

    aws ec2 get-ipam-pool-cidrs --region us-east-1 --ipam-pool-id ipam-pool-0a03d430ca3f5c035 --profile ipam-account

    下面的示例输出显示状态。

    { "IpamPoolCidrs": [ { "Cidr": "130.137.245.0/24", "State": "provisioned" } ] }

步骤 5:在顶级池中创建区域池

在顶级池中创建区域池。

池的区域设置应为以下选项之一:

  • 您希望此 IPAM 池可用于分配的 AWS 区域。

  • 您希望此 IPAM 池可用于分配的 AWS 本地区域的网络边界组(支持的本地区域)。此选项仅适用于公共范围内的 IPAM IPv4 池。

  • AWS 专用本地区域。要在 AWS 专用本地区域内创建池,请在选择器输入中输入 AWS 专用本地区域。

例如,您只能从与 VPC 的区域共享区域设置的 IPAM 池中为 VPC 分配 CIDR。请注意,当您为池选择了区域设置后,无法对其进行修改。如果 IPAM 的主区域由于中断而不可用,并且池的区域设置与 IPAM 的主区域不同,则该池仍可用于分配 IP 地址。

运行本部分中的命令时,--region 的值必须包括您在创建将用于 BYOIP CIDR 的池时输入的 --locale 选项。例如,如果您使用区域设置 us-east-1 创建 BYOIP 池,则 --region 应为 us-east-1。如果您使用区域设置 us-east-1-scl-1(用于本地区域的网络边界组)创建 BYOIP 池,则 --region 应为 us-east-1,因为该区域管理区域设置 us-east-1-scl-1

此步骤必须由 IPAM 账户完成。

选择区域设置可确保池与从中分配的资源之间没有跨区域依赖关系。可用的选项来自您在创建 IPAM 时选择的运营区域。在本教程中,我们将使用 us-west-2 作为区域池的区域设置。

重要

创建池时,您必须包括 --aws-service ec2。您选择的服务将决定可传播 CIDR 的 AWS 服务。目前,唯一的选择是 ec2,这意味着从此池中分配的 CIDR 在 Amazon EC2 服务(适用于弹性 IP 地址)和 Amazon VPC 服务(适用于与 VPC 关联的 CIDR)中是可传播的。

要使用 AWS CLI 创建区域池
  1. 运行以下命令以创建池。

    aws ec2 create-ipam-pool --description "Regional-IPv4-pool" --region us-east-1 --ipam-scope-id ipam-scope-0087d83896280b594 --source-ipam-pool-id ipam-pool-0a03d430ca3f5c035 --locale us-west-2 --address-family ipv4 --aws-service ec2 --profile ipam-account

    在输出中,您将看到创建池的 IPAM。

    { "IpamPool": { "OwnerId": "123456789012", "IpamPoolId": "ipam-pool-0d8f3646b61ca5987", "SourceIpamPoolId": "ipam-pool-0a03d430ca3f5c035", "IpamPoolArn": "arn:aws:ec2::123456789012:ipam-pool/ipam-pool-0d8f3646b61ca5987", "IpamScopeArn": "arn:aws:ec2::123456789012:ipam-scope/ipam-scope-0087d83896280b594", "IpamScopeType": "public", "IpamArn": "arn:aws:ec2::123456789012:ipam/ipam-090e48e75758de279", "Locale": "us-west-2", "PoolDepth": 2, "State": "create-in-progress", "Description": "Regional--pool", "AutoImport": false, "AddressFamily": "ipv4", "Tags": [], "ServiceType": "ec2" } }
  2. 运行以下命令,直到您在输出中看到 create-complete 的状态。

    aws ec2 describe-ipam-pools --region us-east-1 --profile ipam-account

    在输出中,您可以看到您在 IPAM 中拥有的池。在本教程中,我们创建了一个顶级池和一个区域池,所以您会看到这两个池。

步骤 6:向区域池预置 CIDR

向区域池预置 CIDR 块。

注意

将 CIDR 预置到顶级池中的区域池时,您可以预置的最具体的 IPv4 CIDR 为 /24;不允许使用更具体的 CIDR(例如 /25)。创建区域池后,您可以在该区域池内创建较小的池(例如 /25)。请注意,如果您共享该区域池内的一个或多个区域池,则这些池只能在该区域池上设置的区域中使用。

此步骤必须由 IPAM 账户完成。

要使用 AWS CLI 将 CIDR 块分配到区域池
  1. 请运行以下命令以预置 CIDR。

    aws ec2 provision-ipam-pool-cidr --region us-east-1 --ipam-pool-id ipam-pool-0d8f3646b61ca5987 --cidr 130.137.245.0/24 --profile ipam-account

    在输出中,您将看到 CIDR 待定预置。

    { "IpamPoolCidr": { "Cidr": "130.137.245.0/24", "State": "pending-provision" } }
  2. 运行以下命令,直到您在输出中看到 provisioned 的状态。

    aws ec2 get-ipam-pool-cidrs --region us-east-1 --ipam-pool-id ipam-pool-0d8f3646b61ca5987 --profile ipam-account

    下面的示例输出显示正确的状态。

    { "IpamPoolCidrs": [ { "Cidr": "130.137.245.0/24", "State": "provisioned" } ] }

步骤 7:传播 CIDR

本部分中的步骤必须由 IPAM 账户完成。将弹性 IP 地址 (EIP) 与实例或 Elastic Load Balancer 关联后,您就可以开始传播您带到处于已定义了 --aws-service ec2 的池中的 AWS 的 CIDR。在本教程中,这就是您的区域池。默认情况下,CIDR 不会被传播,这意味着它不能通过互联网公开访问。运行本部分中的命令时,--region 的值必须与您在创建将用于 BYOIP CIDR 的池时输入的 --locale 选项匹配。

此步骤必须由 IPAM 账户完成。

注意

传播状态不会限制您分配弹性 IP 地址的能力。即使您的 BYOIPv4 CIDR 未传播,您仍然可以从 IPAM 池中创建 EIP。

开始使用 AWS CLI 传播 CIDR
  • 请运行以下命令以传播 CIDR。

    aws ec2 advertise-byoip-cidr --region us-west-2 --cidr 130.137.245.0/24 --profile ipam-account

    在输出中,您将看到 CIDR 被传播。

    { "ByoipCidr": { "Cidr": "130.137.245.0/24", "State": "advertised" } }

步骤 8:共享区域池

按照本部分中的步骤使用 AWS Resource Access Manager(RAM)共享 IPAM 池。

在 AWS RAM 中启用资源共享

创建 IPAM 后,您需要与组织中的其他账户共享区域池。在共享 IPAM 池之前,请先完成本部分中的步骤,启用与 AWS RAM 的资源共享。如果要使用 AWS CLI 启用资源共享,请使用 --profile management-account 选项。

启用资源共享
  1. 使用 AWS Organizations 管理账户打开 AWS RAM 控制台,地址:https://console.aws.amazon.com/ram/

  2. 在左侧导航窗格中,依次选择设置启用与 AWS Organizations 共享保存设置

您现在可以与组织的其他成员共享 IPAM 池。

使用 AWS RAM 共享 IPAM 池

在这一部分,您将与其他 AWS Organizations 成员账户共享区域池。有关共享 IPAM 池的完整说明,例如所需 IAM 权限的相关信息,请参阅 使用 AWS RAM 共享 IPAM 池。如果要使用 AWS CLI 启用资源共享,请使用 --profile ipam-account 选项。

使用 AWS RAM 共享 IPAM 池
  1. 使用 IPAM 管理员账户打开 IPAM 控制台,地址:https://console.aws.amazon.com/ipam/

  2. 在导航窗格中,选择

  3. 依次选择私有范围、IPAM 池以及操作 > 查看详细信息

  4. 资源共享下,选择创建资源共享。AWS RAM 控制台将打开。您将使用 AWS RAM 来共享该池。

  5. 选择创建资源共享

  6. 在 AWS RAM 控制台中,再次选择创建资源共享

  7. 为共享资源添加名称

  8. 选择资源类型下,选择 IPAM 池,然后选择要共享的池的 ARN。

  9. 选择下一步

  10. 选择 AWSRAMPermissionIpamPoolByoipCidrImport 权限。本教程不提供权限选项的详细信息,但您可以在 使用 AWS RAM 共享 IPAM 池 中查看有关这些选项的更多信息。

  11. 选择下一步

  12. 委托人 > 选择主体类型下,选择 AWS 账户,输入要为 IPAM 提供 IP 地址范围的账户的账户 ID,然后选择添加

  13. 选择下一步

  14. 查看资源共享选项和要共享的主体,然后选择创建

  15. 要允许 member-account 账户从 IPAM 池中分配 IP 地址 CIDRS,请使用 AWSRAMDefaultPermissionsIpamPool 创建第二个资源共享。--resource-arns 的值是您在上一部分中创建的 IPAM 池的 ARN。--principals 的值是 member-account 的账户 ID。--permission-arns 的值是 AWSRAMDefaultPermissionsIpamPool 权限的 ARN。

步骤 9:从池中分配弹性 IP 地址

完成本部分中的步骤,以从池中分配弹性 IP 地址。请注意,如果您使用公有 IPv4 池来分配弹性 IP 地址,则可以使用 步骤 9 的替代方案 中的替代步骤而不是本部分中的步骤。

重要

如果您看到与无权调用 ec2:AllocateAddress 相关的错误,则需要更新当前分配给与您共享的 IPAM 池的托管权限。联系创建资源共享的人员,要求他们将托管权限 AWSRAMPermissionIpamResourceDiscovery 更新为默认版本。有关更多信息,请参阅《AWS RAM 用户指南》中的更新资源共享

AWS Management Console

按照《Amazon EC2 用户指南》中的分配弹性 IP 地址中的步骤分配地址,但请注意以下几点:

  • 此步骤必须由成员账户完成。

  • 确保您的 EC2 控制台所在的 AWS 区域与您在创建区域池时选择的区域设置选项相匹配。

  • 选择地址池时,选择使用 IPv4 IPAM 池分配选项,然后选择您创建的区域池。

Command line

使用 allocate-address 命令从池中分配一个地址。您使用的 --region 必须与您在步骤 2 中创建池时选择的 -locale 选项相匹配。包括您在 --ipam-pool-id 中在步骤 2 中创建的 IPAM 池的 ID。或者,您也可以使用 --address 选项在 IPAM 池中选择特定的 /32

aws ec2 allocate-address --region us-east-1 --ipam-pool-id ipam-pool-07ccc86aa41bef7ce

响应示例:

{ "PublicIp": "18.97.0.41", "AllocationId": "eipalloc-056cdd6019c0f4b46", "PublicIpv4Pool": "ipam-pool-07ccc86aa41bef7ce", "NetworkBorderGroup": "us-east-1", "Domain": "vpc" }

有关更多信息,请参阅《Amazon EC2 用户指南》中的分配弹性 IP 地址

步骤 10:将弹性 IP 地址与 EC2 实例相关联

完成本部分中的步骤将弹性 IP 地址与 EC2 实例相关联。

AWS Management Console

按照《Amazon EC2 用户指南》中的关联弹性 IP 地址中的步骤从 IPAM 池中分配弹性 IP 地址,但请注意以下几点:使用 AWS 管理控制台选项时,您关联弹性 IP 地址所在的 AWS 区域必须与您在创建区域池时选择的区域设置选项相匹配。

此步骤必须由成员账户完成。

Command line

此步骤必须由成员账户完成。使用 --profile member-account 选项。

使用 associate-address 命令将弹性 IP 地址与实例相关联。您关联弹性 IP 地址所在的 --region 区域必须与您创建区域池时选择的 --locale 选项匹配。

aws ec2 associate-address --region us-east-1 --instance-id i-07459a6fca5b35823 --public-ip 18.97.0.41

响应示例:

{ "AssociationId": "eipassoc-06aa85073d3936e0e" }

有关更多信息,请参阅《Amazon EC2 用户指南》中的将弹性 IP 地址与实例或网络接口相关联

步骤 11:清除

按照本部分中的步骤清除您在本教程中预置和创建的资源。运行本部分中的命令时,--region 的值必须包括您在创建将用于 BYOIP CIDR 的池时输入的 --locale 选项。

使用 AWS CLI 清除
  1. 查看 IPAM 中管理的 EIP 分配。

    此步骤必须由 IPAM 账户完成。

    aws ec2 get-ipam-pool-allocations --region us-west-2 --ipam-pool-id ipam-pool-0d8f3646b61ca5987 --profile ipam-account

    输出将显示 IPAM 中的分配。

    { "IpamPoolAllocations": [ { "Cidr": "130.137.245.0/24", "IpamPoolAllocationId": "ipam-pool-alloc-5dedc8e7937c4261b56dc3e3eb53dc45", "ResourceId": "ipv4pool-ec2-0019eed22a684e0b2", "ResourceType": "ec2-public-ipv4-pool", "ResourceOwner": "123456789012" } ] }
  2. 停止传播 IPv4 CIDR。

    此步骤必须由 IPAM 账户完成。

    aws ec2 withdraw-byoip-cidr --region us-west-2 --cidr 130.137.245.0/24 --profile ipam-account

    在输出中,您将看到 CIDR 状态从 advertised(已传播)更改为 provisioned(已预置)。

    { "ByoipCidr": { "Cidr": "130.137.245.0/24", "State": "provisioned" } }
  3. 释放弹性 IP 地址。

    此步骤必须由成员账户完成。

    aws ec2 release-address --region us-west-2 --allocation-id eipalloc-0db3405026756dbf6 --profile member-account

    运行此命令时,您不会看到任何输出。

  4. 查看 IPAM 中不再管理的 EIP 分配。IPAM 可能需要一些时间才能发现弹性 IP 地址已被删除。在看到已从 IPAM 中删除分配之前,您无法继续清理和取消预置 IPAM 池 CIDR。运行本部分中的命令时,--region 的值必须包括您在创建将用于 BYOIP CIDR 的池时输入的 --locale 选项。

    此步骤必须由 IPAM 账户完成。

    aws ec2 get-ipam-pool-allocations --region us-west-2 --ipam-pool-id ipam-pool-0d8f3646b61ca5987 --profile ipam-account

    输出将显示 IPAM 中的分配。

    { "IpamPoolAllocations": [] }
  5. 取消预置区域池 CIDR。运行本步骤中的命令时,--region 的值必须与 IPAM 的区域匹配。

    此步骤必须由 IPAM 账户完成。

    aws ec2 deprovision-ipam-pool-cidr --region us-east-1 --ipam-pool-id ipam-pool-0d8f3646b61ca5987 --cidr 130.137.245.0/24 --profile ipam-account

    在输出中,您将看到 CIDR 待定取消预置。

    { "IpamPoolCidr": { "Cidr": "130.137.245.0/24", "State": "pending-deprovision" } }

    取消预置需要一些时间才能完成。检查取消预置的状态。

    aws ec2 get-ipam-pool-cidrs --region us-east-1 --ipam-pool-id ipam-pool-0d8f3646b61ca5987 --profile ipam-account

    等到您看到 deprovisioned(取消预置)后再继续下一步。

    { "IpamPoolCidr": { "Cidr": "130.137.245.0/24", "State": "deprovisioned" } }
  6. 删除 RAM 共享并禁用与 AWS Organizations 的 RAM 集成。完成《AWS RAM 用户指南》中 删除 AWS RAM 中的资源共享禁用与 AWS Organizations 的资源共享 所述的步骤,删除 RAM 共享并禁用与 AWS Organizations 的 RAM 集成。

    此步骤必须分别由 IPAM 账户和管理账户完成。要使用 AWS CLI 删除 RAM 共享并禁用 RAM 集成,请使用 --profile ipam-account --profile management-account 选项。

  7. 删除区域池。运行本步骤中的命令时,--region 的值必须与 IPAM 的区域匹配。

    此步骤必须由 IPAM 账户完成。

    aws ec2 delete-ipam-pool --region us-east-1 --ipam-pool-id ipam-pool-0d8f3646b61ca5987 --profile ipam-account

    在输出中,您可以看到删除状态。

    { "IpamPool": { "OwnerId": "123456789012", "IpamPoolId": "ipam-pool-0d8f3646b61ca5987", "SourceIpamPoolId": "ipam-pool-0a03d430ca3f5c035", "IpamPoolArn": "arn:aws:ec2::123456789012:ipam-pool/ipam-pool-0d8f3646b61ca5987", "IpamScopeArn": "arn:aws:ec2::123456789012:ipam-scope/ipam-scope-0087d83896280b594", "IpamScopeType": "public", "IpamArn": "arn:aws:ec2::123456789012:ipam/ipam-090e48e75758de279", "Locale": "us-east-1", "PoolDepth": 2, "State": "delete-in-progress", "Description": "reg-ipv4-pool", "AutoImport": false, "Advertisable": true, "AddressFamily": "ipv4" } }
  8. 取消预置顶级池 CIDR。运行本步骤中的命令时,--region 的值必须与 IPAM 的区域匹配。

    此步骤必须由 IPAM 账户完成。

    aws ec2 deprovision-ipam-pool-cidr --region us-east-1 --ipam-pool-id ipam-pool-0a03d430ca3f5c035 --cidr 130.137.245.0/24 --profile ipam-account

    在输出中,您将看到 CIDR 待定取消预置。

    { "IpamPoolCidr": { "Cidr": "130.137.245.0/24", "State": "pending-deprovision" } }

    取消预置需要一些时间才能完成。运行以下命令检查取消预置的状态。

    aws ec2 get-ipam-pool-cidrs --region us-east-1 --ipam-pool-id ipam-pool-0a03d430ca3f5c035 --profile ipam-account

    等到您看到 deprovisioned(取消预置)后再继续下一步。

    { "IpamPoolCidr": { "Cidr": "130.137.245.0/24", "State": "deprovisioned" } }
  9. 删除顶级池。运行本步骤中的命令时,--region 的值必须与 IPAM 的区域匹配。

    此步骤必须由 IPAM 账户完成。

    aws ec2 delete-ipam-pool --region us-east-1 --ipam-pool-id ipam-pool-0a03d430ca3f5c035 --profile ipam-account

    在输出中,您可以看到删除状态。

    { "IpamPool": { "OwnerId": "123456789012", "IpamPoolId": "ipam-pool-0a03d430ca3f5c035", "IpamPoolArn": "arn:aws:ec2::123456789012:ipam-pool/ipam-pool-0a03d430ca3f5c035", "IpamScopeArn": "arn:aws:ec2::123456789012:ipam-scope/ipam-scope-0087d83896280b594", "IpamScopeType": "public", "IpamArn": "arn:aws:ec2::123456789012:ipam/ipam-090e48e75758de279", "Locale": "us-east-1", "PoolDepth": 2, "State": "delete-in-progress", "Description": "top-level-pool", "AutoImport": false, "Advertisable": true, "AddressFamily": "ipv4" } }
  10. 删除 IPAM。运行本步骤中的命令时,--region 的值必须与 IPAM 的区域匹配。

    此步骤必须由 IPAM 账户完成。

    aws ec2 delete-ipam --region us-east-1 --ipam-id ipam-090e48e75758de279 --profile ipam-account

    在输出中,您将看到 IPAM 响应。这意味着 IPAM 已删除。

    { "Ipam": { "OwnerId": "123456789012", "IpamId": "ipam-090e48e75758de279", "IpamArn": "arn:aws:ec2::123456789012:ipam/ipam-090e48e75758de279", "PublicDefaultScopeId": "ipam-scope-0087d83896280b594", "PrivateDefaultScopeId": "ipam-scope-08b70b04fbd524f8d", "ScopeCount": 2, "OperatingRegions": [ { "RegionName": "us-east-1" }, { "RegionName": "us-west-2" } ], } }

步骤 9 的替代方案

如果您使用公有 IPv4 池来分配弹性 IP 地址,则可以本部分中的步骤,而不是 步骤 9:从池中分配弹性 IP 地址 中的步骤。

步骤 1:创建公有 IPv4 池

此步骤通常由不同的想要预调配弹性 IP 地址的 AWS 账户完成,如成员账户。

重要

公有 IPv4 池和 IPAM 池由 AWS 中的不同资源管理。公共 IPv4 池是单一账户资源,使您能够将公有 CIDR 转换为弹性 IP 地址。IPAM 池可用于将公有空间分配给公有 IPv4 池。

要使用 AWS CLI 创建公有 IPv4 池
  • 请运行以下命令以预置 CIDR。运行本部分中的命令时,--region 的值必须与您在创建将用于 BYOIP CIDR 的池时输入的 --locale 选项匹配。

    aws ec2 create-public-ipv4-pool --region us-west-2 --profile member-account

    在输出中,您将看到公有 IPv4 池 ID。在下一步骤中,您需要用到此 ID。

    { "PoolId": "ipv4pool-ec2-0019eed22a684e0b2" }

步骤 2:将公有 IPv4 CIDR 预调配到您的公有 IPv4 池

将公有 IPv4 CIDR 预置到您的公有 IPv4 池。--region 的值为必须与您在创建将用于 BYOIP CIDR 的池时输入的 --locale 值匹配。您可以定义的最不具体的 --netmask-length24

此步骤必须由成员账户完成。

要使用 AWS CLI 创建公有 IPv4 池
  1. 请运行以下命令以预置 CIDR。

    aws ec2 provision-public-ipv4-pool-cidr --region us-west-2 --ipam-pool-id ipam-pool-0d8f3646b61ca5987 --pool-id ipv4pool-ec2-0019eed22a684e0b2 --netmask-length 24 --profile member-account

    在输出中,您将看到预置的 CIDR。

    { "PoolId": "ipv4pool-ec2-0019eed22a684e0b2", "PoolAddressRange": { "FirstAddress": "130.137.245.0", "LastAddress": "130.137.245.255", "AddressCount": 256, "AvailableAddressCount": 256 } }
  2. 运行以下命令,以查看公有 IPv4 池中预置的 CIDR。

    aws ec2 describe-byoip-cidrs --region us-west-2 --max-results 10 --profile member-account

    在输出中,您将看到预置的 CIDR。默认情况下,CIDR 不会被传播,这意味着它不能通过互联网公开访问。在本教程的最后一步中,您将有机会将此 CIDR 设置为进行传播。

    { "ByoipCidrs": [ { "Cidr": "130.137.245.0/24", "StatusMessage": "Cidr successfully provisioned", "State": "provisioned" } ] }

步骤 3:从公有 IPv4 池创建弹性 IP 地址

从公有 IPv4 池创建弹性 IP 地址 (EIP)。运行本部分中的命令时,--region 的值必须与您在创建将用于 BYOIP CIDR 的池时输入的 --locale 选项匹配。

此步骤必须由成员账户完成。

要使用 AWS CLI 从公有 IPv4 池中创建 EIP
  1. 运行以下命令以创建 EIP。

    aws ec2 allocate-address --region us-west-2 --public-ipv4-pool ipv4pool-ec2-0019eed22a684e0b2 --profile member-account

    在输出中,您将看到分配。

    { "PublicIp": "130.137.245.100", "AllocationId": "eipalloc-0db3405026756dbf6", "PublicIpv4Pool": "ipv4pool-ec2-0019eed22a684e0b2", "NetworkBorderGroup": "us-east-1", "Domain": "vpc" }
  2. 运行以下命令,以查看 IPAM 中管理的 EIP 分配。

    此步骤必须由 IPAM 账户完成。

    aws ec2 get-ipam-pool-allocations --region us-west-2 --ipam-pool-id ipam-pool-0d8f3646b61ca5987 --profile ipam-account

    输出将显示 IPAM 中的分配。

    { "IpamPoolAllocations": [ { "Cidr": "130.137.245.0/24", "IpamPoolAllocationId": "ipam-pool-alloc-5dedc8e7937c4261b56dc3e3eb53dc45", "ResourceId": "ipv4pool-ec2-0019eed22a684e0b2", "ResourceType": "ec2-public-ipv4-pool", "ResourceOwner": "123456789012" } ] }

步骤 9 清理的替代方案

完成以下步骤,以清理使用步骤 9 的替代方法创建的公有 IPv4 池。在 步骤 10:清除 中的标准清理过程中,您应在释放弹性 IP 地址后完成这些步骤。

  1. 查看您的 BYOIP CIDR。

    此步骤必须由成员账户完成。

    aws ec2 describe-public-ipv4-pools --region us-west-2 --profile member-account

    在输出中,您将看到 BYOIP CIDR 中的 IP 地址。

    { "PublicIpv4Pools": [ { "PoolId": "ipv4pool-ec2-0019eed22a684e0b2", "Description": "", "PoolAddressRanges": [ { "FirstAddress": "130.137.245.0", "LastAddress": "130.137.245.255", "AddressCount": 256, "AvailableAddressCount": 256 } ], "TotalAddressCount": 256, "TotalAvailableAddressCount": 256, "NetworkBorderGroup": "us-east-1", "Tags": [] } ] }
  2. 从公有 IPv4 池中释放 CIDR 中的最后一个 IP 地址。输入网络掩码为 /32 的 IP 地址。您必须为 CIDR 范围内的每个 IP 地址重新运行此命令。如果您的 CIDR 是 /24,则必须运行此命令才能取消预置 /24 CIDR 中 256 个 IP 地址中的每个地址。运行本部分中的命令时,--region 的值必须与 IPAM 的区域匹配。

    此步骤必须由成员账户完成。

    aws ec2 deprovision-public-ipv4-pool-cidr --region us-east-1 --pool-id ipv4pool-ec2-0019eed22a684e0b2 --cidr 130.137.245.255/32 --profile member-account

    在输出中,您将看到取消预置的 CIDR。

    { "PoolId": "ipv4pool-ec2-0019eed22a684e0b2", "DeprovisionedAddresses": [ "130.137.245.255" ] }
  3. 再次查看您的 BYOIP CIDR,并确保没有更多的预置地址。运行本部分中的命令时,--region 的值必须与 IPAM 的区域匹配。

    此步骤必须由成员账户完成。

    aws ec2 describe-public-ipv4-pools --region us-east-1 --profile member-account

    在输出中,您将看到公有 IPv4 池中的 IP 地址计数。

    { "PublicIpv4Pools": [ { "PoolId": "ipv4pool-ec2-0019eed22a684e0b2", "Description": "", "PoolAddressRanges": [], "TotalAddressCount": 0, "TotalAvailableAddressCount": 0, "NetworkBorderGroup": "us-east-1", "Tags": [] } ] }