

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

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

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

数据 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 连接。有关为数据 API 创建 VPC 端点的详细说明，请参阅[为 Amazon RDS 数据 API 创建 Amazon VPC 端点（AWS PrivateLink）](data-api.vpc-endpoint.md)。

在创建 VPC 端点以支持 IPv6 时，请确保：
+ 您的 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 和双栈连接。