

# 将 IPv6 与 Amazon RDS Data API 结合使用
<a name="data-api.ipv6"></a>

Amazon RDS Data API 支持通过双栈端点实现 IPv6 连接。这样，您就可以使用 IPv6 地址连接到 Data API，同时保持与 IPv4 的向后兼容性。

## IPv6 端点支持
<a name="data-api.ipv6.endpoints"></a>

Data API 提供同时支持 IPv4 和 IPv6 连接的双栈端点。这些端点使用 `.aws` 域而不是传统 `.amazonaws.com` 域。

### 可用的端点类型
<a name="data-api.ipv6.endpoint-types"></a>

公共双栈端点  
格式：`rds-data.region.api.aws`  
示例：`rds-data.us-east-1.api.aws`

FIPS 双栈端点  
格式：`rds-data-fips.region.api.aws`  
示例：`rds-data-fips.us-east-1.api.aws`

PrivateLink IPv6 端点  
可通过支持 IPv6 的 VPC 端点使用  
允许在 VPC 内进行私有 IPv6 连接

### 仅 IPv4 传统端点
<a name="data-api.ipv6.legacy-endpoints"></a>

现有 `.amazonaws.com` 端点继续支持仅 IPv4 连接：
+ `rds-data.region.amazonaws.com`
+ `rds-data-fips.region.amazonaws.com`

**注意**  
传统端点保持不变，以确保与现有应用程序的向后兼容。

## 使用 IPv6 端点
<a name="data-api.ipv6.using"></a>

要将 IPv6 与 Data API 配合使用，请更新您的应用程序以使用新的双栈端点。您的应用程序将自动使用 IPv6（若可用），或者回退到 IPv4。

有关在您的 VPC 中设置 IPv6 的一般指南，请参阅《Amazon VPC 用户指南》**中的[迁移到 IPv6](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-migrate-ipv6.html)。

您可以通过两种方式配置 IPv6 端点：
+ **使用环境变量**：在 IPv6 环境中设置 `AWS_USE_DUALSTACK_ENDPOINT=true`。AWS CLI 和 AWS SDK 将自动构造相应的 `api.aws` 端点，而无需您手动指定端点 URL。
+ **使用显式端点 URL**：直接在 AWS CLI 命令或 SDK 配置中指定双栈端点 URL，如下例所示。

### AWS CLI 配置
<a name="data-api.ipv6.cli"></a>

通过指定端点 URL 将 AWS CLI 配置为使用 IPv6 端点：

对于 Linux、macOS 或 Unix：

```
aws rds-data execute-statement \
    --endpoint-url https://rds-data.us-east-1.api.aws \
    --resource-arn "arn:aws:rds:us-east-1:123456789012:cluster:my-cluster" \
    --secret-arn "arn:aws:secretsmanager:us-east-1:123456789012:secret:my-secret" \
    --database "mydb" \
    --sql "SELECT * FROM users LIMIT 10"
```

对于：Windows

```
aws rds-data execute-statement ^
    --endpoint-url https://rds-data.us-east-1.api.aws ^
    --resource-arn "arn:aws:rds:us-east-1:123456789012:cluster:my-cluster" ^
    --secret-arn "arn:aws:secretsmanager:us-east-1:123456789012:secret:my-secret" ^
    --database "mydb" ^
    --sql "SELECT * FROM users LIMIT 10"
```

### AWS SDK 配置
<a name="data-api.ipv6.sdk"></a>

将 AWS SDK 配置为使用双栈端点：

------
#### [ Python ]

```
import boto3

# Create RDS Data API client with IPv6 dual-stack endpoint
client = boto3.client(
    'rds-data',
    endpoint_url='https://rds-data.us-east-1.api.aws'
)

# Execute a SQL statement
response = client.execute_statement(
    resourceArn='arn:aws:rds:us-east-1:123456789012:cluster:my-cluster',
    secretArn='arn:aws:secretsmanager:us-east-1:123456789012:secret:my-secret',
    database='mydb',
    sql='SELECT * FROM users LIMIT 10'
)

print(response['records'])
```

------
#### [ Java ]

```
import software.amazon.awssdk.services.rdsdata.RdsDataClient;
import software.amazon.awssdk.services.rdsdata.model.ExecuteStatementRequest;
import software.amazon.awssdk.services.rdsdata.model.ExecuteStatementResponse;
import java.net.URI;

// Create RDS Data API client with IPv6 dual-stack endpoint
RdsDataClient client = RdsDataClient.builder()
    .endpointOverride(URI.create("https://rds-data.us-east-1.api.aws"))
    .build();

// Execute a SQL statement
ExecuteStatementRequest request = ExecuteStatementRequest.builder()
    .resourceArn("arn:aws:rds:us-east-1:123456789012:cluster:my-cluster")
    .secretArn("arn:aws:secretsmanager:us-east-1:123456789012:secret:my-secret")
    .database("mydb")
    .sql("SELECT * FROM users LIMIT 10")
    .build();

ExecuteStatementResponse response = client.executeStatement(request);
System.out.println(response.records());
```

------
#### [ JavaScript ]

```
const { RDSDataClient, ExecuteStatementCommand } = require("@aws-sdk/client-rds-data");

// Create RDS Data API client with IPv6 dual-stack endpoint
const client = new RDSDataClient({
    endpoint: "https://rds-data.us-east-1.api.aws"
});

// Execute a SQL statement
const command = new ExecuteStatementCommand({
    resourceArn: "arn:aws:rds:us-east-1:123456789012:cluster:my-cluster",
    secretArn: "arn:aws:secretsmanager:us-east-1:123456789012:secret:my-secret",
    database: "mydb",
    sql: "SELECT * FROM users LIMIT 10"
});

const response = await client.send(command);
console.log(response.records);
```

------

## 将 AWS PrivateLink 与 IPv6 结合使用
<a name="data-api.ipv6.privatelink"></a>

您可以为数据 API 创建 VPC 端点，这些端点在您的 VPC 内支持 IPv6 连接。有关为 Data API 创建 VPC 端点的详细说明，请参阅[为 Amazon RDS 数据 API 创建 Amazon VPC 端点（AWS PrivateLink）](data-api.vpc-endpoint.md)。

在创建支持 IPv6 的 VPC 端点时，请确保：
+ 您的 VPC 和子网配置为支持 IPv6
+ 安全组允许 IPv6 流量通过所需的端口（HTTPS 通常为 443）
+ 网络 ACL 配置为允许 IPv6 流量

## 迁移注意事项
<a name="data-api.ipv6.migration"></a>

在迁移到 IPv6 端点时，请考虑以下事项：
+ **逐步迁移**：您可以通过一次更新一个应用程序的端点 URL 来逐步迁移应用程序。
+ **网络兼容性**：在迁移之前，请确保您的网络基础设施支持 IPv6。
+ **安全策略**：如果需要，更新安全组规则和网络 ACL 以允许 IPv6 流量。
+ **监控**：更新监控和日志配置以处理 IPv6 地址。

**注意**  
**数据库连接地址**：将 IPv6 端点用于数据 API 时，底层数据库连接和数据库日志仍将显示 IPv4 地址。这是预期行为，不会影响启用 IPv6 的应用程序的功能。

## 排查 IPv6 连接性问题
<a name="data-api.ipv6.troubleshooting"></a>

如果 IPv6 连接出现问题，请检查以下各项：

网络配置  
确认您的网络支持 IPv6，并且 IPv6 路由配置正确。

DNS 解析  
确保您的 DNS 解析器可以解析双栈端点的 AAAA 记录。

安全组  
更新安全组规则以允许所需端口上的 IPv6 流量（HTTPS 通常为 443）。

客户端库  
确认您的 HTTP 客户端库支持 IPv6 和双栈连接。