我们宣布
本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在 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)。
请参阅完整示例
更多信息
-
《Amazon EC2 用户指南(适用于 Linux 实例)》中的弹性 IP 地址
-
《Amazon EC2 API Reference》中的 AllocateAddress
-
《Amazon EC2 API Reference》中的 DescribeAddresses
-
《Amazon EC2 API Reference》中的 ReleaseAddress