在 Amazon EC2 中使用弹性 IP 地址 - Amazon SDK for Java 1.x
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

我们宣布了即将推出 end-of-support 的 Amazon SDK for Java (v1)。建议您迁移到 Amazon SDK for Java v2。有关日期、其他详细信息以及如何迁移的信息,请参阅链接的公告。

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

在 Amazon EC2 中使用弹性 IP 地址

警告

我们将于 2022 年 8 月 15 日停用 EC2-Classic。我们建议您从 EC2-Classic 迁移到 VPC。有关更多信息,请参阅适用于 Linux 实例的 Amazon EC2 用户指南适用于 Windows 实例的 Amazon EC2 用户指南中的从 EC2-Classic 迁移到 VPC。另请参阅博客文章 EC2-Classic Networking is Retiring – Here's How to Prepare

分配弹性 IP 地址

要使用弹性 IP 地址,您应首先向您的账户分配这样一个地址,然后将其与您的实例或网络接口关联。

要分配弹性 IP 地址,请使用包含网络类型(经典 EC2 或 VPC)的 AllocateAddressRequest 对象调用 AmazonEC2Client 的 allocateAddress 方法。

返回的 AllocateAddressResult 包含一个分配 ID,您可以用它来将地址与实例关联,方法是在 AssociateAddressRequest 中将分配 ID 和实例 ID 传递给 AmazonEC2Client 的 associateAddress 方法。

导入

import com.amazonaws.services.ec2.AmazonEC2; import com.amazonaws.services.ec2.AmazonEC2ClientBuilder; import com.amazonaws.services.ec2.model.AllocateAddressRequest; import com.amazonaws.services.ec2.model.AllocateAddressResult; import com.amazonaws.services.ec2.model.AssociateAddressRequest; import com.amazonaws.services.ec2.model.AssociateAddressResult; import com.amazonaws.services.ec2.model.DomainType;

代码

final AmazonEC2 ec2 = AmazonEC2ClientBuilder.defaultClient(); AllocateAddressRequest allocate_request = new AllocateAddressRequest() .withDomain(DomainType.Vpc); AllocateAddressResult allocate_response = ec2.allocateAddress(allocate_request); String allocation_id = allocate_response.getAllocationId(); AssociateAddressRequest associate_request = new AssociateAddressRequest() .withInstanceId(instance_id) .withAllocationId(allocation_id); AssociateAddressResult associate_response = ec2.associateAddress(associate_request);

请参阅完整示例

描述弹性 IP 地址

要列出分配到您的账户的弹性 IP 地址,请调用 AmazonEC2Client 的 describeAddresses 方法。它会返回 DescribeAddressesResult,您可以使用它来获取在账户中代表弹性 IP 地址的 Address 对象的列表。

导入

import com.amazonaws.services.ec2.AmazonEC2; import com.amazonaws.services.ec2.AmazonEC2ClientBuilder; import com.amazonaws.services.ec2.model.Address; import com.amazonaws.services.ec2.model.DescribeAddressesResult;

代码

final AmazonEC2 ec2 = AmazonEC2ClientBuilder.defaultClient(); DescribeAddressesResult response = ec2.describeAddresses(); for(Address address : response.getAddresses()) { System.out.printf( "Found address with public IP %s, " + "domain %s, " + "allocation id %s " + "and NIC id %s", address.getPublicIp(), address.getDomain(), address.getAllocationId(), address.getNetworkInterfaceId()); }

请参阅完整示例

释放弹性 IP 地址

要释放弹性 IP 地址,请调用 AmazonEC2Client 的 releaseAddress 方法,向其传递 ReleaseAddressRequest,包含您要释放的弹性 IP 地址的分配 ID。

导入

import com.amazonaws.services.ec2.AmazonEC2; import com.amazonaws.services.ec2.AmazonEC2ClientBuilder; import com.amazonaws.services.ec2.model.ReleaseAddressRequest; import com.amazonaws.services.ec2.model.ReleaseAddressResult;

代码

final AmazonEC2 ec2 = AmazonEC2ClientBuilder.defaultClient(); ReleaseAddressRequest request = new ReleaseAddressRequest() .withAllocationId(alloc_id); ReleaseAddressResult response = ec2.releaseAddress(request);

在释放弹性 IP 地址后,它将回到 Amazon IP 地址池,您此后可能不能再使用该地址。请务必更新您的 DNS 记录和通过该地址进行通信的任何服务器或设备。如果您尝试释放已释放的弹性 IP 地址,且该地址已分配到另一个 Amazon Web Services 账户 账户,您会收到 AuthFailure 错误。

如果您使用的是 EC2-Classic默认 VPC,则释放弹性 IP 地址会自动断开该地址与任何实例的关联。要在不释放的情况下取消关联弹性 IP 地址,请使用 AmazonEC2Client 的 disassociateAddress 方法。

如果您使用的是非默认 VPC,则必须使用 disassociateAddress 取消弹性 IP 地址的关联,然后再尝试释放它。否则,Amazon EC2 会返回错误 (InvalidIPAddress.InUse)。

请参阅完整示例

更多信息