

 适用于 Java 的 Amazon SDK 1.x于2025年 end-of-support 12月31日达到。我们建议您迁移到 [Amazon SDK for Java 2.x](https://docs.amazonaws.cn/sdk-for-java/latest/developer-guide/home.html) 以继续获得新功能、可用性改进和安全更新。

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

# 在 Amazon EC2 中使用弹性 IP 地址
<a name="examples-ec2-elastic-ip"></a>

## EC2-Classic 将停用
<a name="retiringEC2Classic"></a>

**警告**  
我们将于 2022 年 8 月 15 日停用 EC2-Classic。我们建议您从 EC2-Classic 迁移到 VPC。有关更多信息，请参阅博客文章 [EC2-Classic-Classic Networking is Retiring – Here's How to Prepare](https://www.amazonaws.cn/blogs/aws/ec2-classic-is-retiring-heres-how-to-prepare/)。

## 分配弹性 IP 地址
<a name="allocating-an-elastic-ip-address"></a>

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

要分配弹性 IP 地址，请使用包含网络类型（经典 EC2 或 VPC）的 [AllocateAddressRequest](https://docs.amazonaws.cn/sdk-for-java/v1/reference/com/amazonaws/services/ec2/model/AllocateAddressRequest.html) 对象调用 AmazonEC2Client 的 `allocateAddress` 方法。

返回的 [AllocateAddressResult](https://docs.amazonaws.cn/sdk-for-java/v1/reference/com/amazonaws/services/ec2/model/AllocateAddressResult.html) 包含一个分配 ID，您可以用它来将地址与实例关联，方法是在 [AssociateAddressRequest](https://docs.amazonaws.cn/sdk-for-java/v1/reference/com/amazonaws/services/ec2/model/AssociateAddressRequest.html) 中将分配 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);
```

请参阅[完整示例](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/ec2/src/main/java/aws/example/ec2/AllocateAddress.java)。

## 描述弹性 IP 地址
<a name="describing-elastic-ip-addresses"></a>

要列出分配到您的账户的弹性 IP 地址，请调用 AmazonEC2Client 的 `describeAddresses` 方法。它会返回 [DescribeAddressesResult](https://docs.amazonaws.cn/sdk-for-java/v1/reference/com/amazonaws/services/ec2/model/DescribeAddressesResult.html)，您可以使用它来获取在账户中代表弹性 IP 地址的 [Address](https://docs.amazonaws.cn/sdk-for-java/v1/reference/com/amazonaws/services/ec2/model/Address.html) 对象的列表。

 **导入**。

```
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());
}
```

请参阅[完整示例](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/ec2/src/main/java/aws/example/ec2/DescribeAddresses.java)。

## 释放弹性 IP 地址
<a name="releasing-an-elastic-ip-address"></a>

要释放弹性 IP 地址，请调用 AmazonEC2Client 的 `releaseAddress` 方法，向其传递 [ReleaseAddressRequest](https://docs.amazonaws.cn/sdk-for-java/v1/reference/com/amazonaws/services/ec2/model/ReleaseAddressRequest.html)，包含您要释放的弹性 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*)。

请参阅[完整示例](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/ec2/src/main/java/aws/example/ec2/ReleaseAddress.java)。

## 更多信息
<a name="more-information"></a>
+  《Amazon EC2 用户指南（适用于 Linux 实例）》中的[弹性 IP 地址](https://docs.amazonaws.cn/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html)
+  《Amazon EC2 API Reference》中的 [AllocateAddress](https://docs.amazonaws.cn/AWSEC2/latest/APIReference/API_AllocateAddress.html)
+  《Amazon EC2 API Reference》中的 [DescribeAddresses](https://docs.amazonaws.cn/AWSEC2/latest/APIReference/API_DescribeAddresses.html)
+  《Amazon EC2 API Reference》中的 [ReleaseAddress](https://docs.amazonaws.cn/AWSEC2/latest/APIReference/API_ReleaseAddress.html)