

# Administración y conexión a clústeres de Amazon Aurora DSQL mediante AWS PrivateLink
<a name="privatelink-managing-clusters"></a>

Con AWS PrivateLink para Amazon Aurora DSQL, puede aprovisionar puntos de conexión de Amazon VPC de la interfaz (puntos de conexión de interfaz) en Amazon Virtual Private Cloud. A estos puntos de conexión se puede acceder directamente desde las aplicaciones que se encuentran en las instalaciones a través de Amazon VPC y Direct Connect, o bien, en una Región de AWS diferente mediante el emparejamiento de Amazon VPC. Al usar AWS PrivateLink y puntos de conexión de interfaz, puede simplificar la conectividad de la red privada desde las aplicaciones a Aurora DSQL.

Las aplicaciones en la Amazon VPC pueden acceder a Aurora DSQL mediante los puntos de conexión de interfaz de Amazon VPC sin necesidad de direcciones IP públicas.

Los puntos de conexión de la interfaz se representan mediante una o más interfaces de red elásticas (ENI) a las que se asignan direcciones IP privadas desde subredes de la Amazon VPC. Las solicitudes a Aurora DSQL a través de puntos de conexión de interfaz permanecen en la red de AWS. Para obtener más información sobre cómo conectar Amazon VPC a la red en las instalaciones, consulte la [Guía del usuario de Direct Connect](https://docs.aws.amazon.com/directconnect/latest/UserGuide/) y la [Guía del usuario de AWS Site-to-Site VPN](https://docs.aws.amazon.com/vpn/latest/s2svpn/VPC_VPN.html).

Para obtener información general sobre los puntos de conexión de interfaz, consulte [Acceso a un servicio de AWS mediante un punto de conexión de Amazon VPC](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html) en la [Guía del usuario de AWS PrivateLink](https://docs.aws.amazon.com/vpc/latest/privatelink/what-is-privatelink).

## Tipos de puntos de conexión de Amazon VPC para Aurora DSQL
<a name="endpoint-types-dsql"></a>

 Aurora DSQL requiere dos tipos diferentes de puntos de conexión de AWS PrivateLink. 

1. *Punto de conexión de administración*: este punto de conexión se utiliza para operaciones de administración, como `get`, `create`, `update`, `delete` y `list` en clústeres de Aurora DSQL. Consulte [Administración de clústeres de Aurora DSQL mediante AWS PrivateLink](#managing-dsql-clusters-using-privatelink).

1. *Punto de conexión*: este punto de conexión se utiliza para conectarse a los clústeres de Aurora DSQL a través de clientes de PostgreSQL. Consulte [Conexión a clústeres de Aurora DSQL mediante AWS PrivateLink](#privatelink-connecting-clusters). 

## Consideraciones al utilizar AWS PrivateLink para Aurora DSQL
<a name="privatelink-dsql-considerations"></a>

Las consideraciones de Amazon VPC se aplican a AWS PrivateLink para Aurora DSQL. Para obtener más información, consulte [Acceso a un servicio de AWS con un punto de conexión de VPC de interfaz](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html#vpce-interface-limitations) y [Cuotas de AWS PrivateLink](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-limits-endpoints.html) en la Guía de AWS PrivateLink.

## Administración de clústeres de Aurora DSQL mediante AWS PrivateLink
<a name="managing-dsql-clusters-using-privatelink"></a>

Puede utilizar la AWS Command Line Interface o los kits de desarrollo de software (SDK) de AWS para administrar clústeres de Aurora DSQL a través de puntos de conexión de interfaz de Aurora DSQL.

### Creación de un punto de conexión de VPC de Amazon
<a name="create-vpc-endpoint"></a>

Para crear un punto de conexión de interfaz de Amazon VPC, consulte [Creación de un punto de conexión de Amazon VPC](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html#create-interface-endpoint-aws) en la Guía de AWS PrivateLink. 

```
aws ec2 create-vpc-endpoint \
--region region \
--service-name com.amazonaws.region.dsql \
--vpc-id your-vpc-id \
--subnet-ids your-subnet-id \
--vpc-endpoint-type Interface \
--security-group-ids client-sg-id \
```

Para utilizar el nombre DNS regional predeterminado para las solicitudes de la API de Aurora DSQL, no desactive el DNS privado cuando cree el punto de conexión de interfaz de Aurora DSQL. Cuando el DNS privado esté habilitado, las solicitudes al servicio Aurora DSQL realizadas desde dentro de Amazon VPC se resolverán automáticamente en la dirección IP privada del punto de conexión de VPC de Amazon, en lugar del nombre DNS público. Si el DNS privado está habilitado, las solicitudes de Aurora DSQL realizadas dentro de Amazon VPC se resolverán automáticamente en el punto de conexión de VPC de Amazon. 

Si el DNS privado no está habilitado, utilice los parámetros `--region` y `--endpoint-url` con comandos de la AWS CLI para administrar los clústeres de Aurora DSQL a través de los puntos de conexión de interfaz de Aurora DSQL.

### Enumeración de clústeres mediante una URL de punto de conexión
<a name="list-clusters-endpoint-url"></a>

En el siguiente ejemplo, reemplace la Región de AWS `us-east-1` y el nombre DNS del ID de punto de conexión de Amazon VPC `vpce-1a2b3c4d-5e6f.dsql.us-east-1.vpce.amazonaws.com` con información propia.

```
aws dsql --region us-east-1 --endpoint-url https://vpce-1a2b3c4d-5e6f.dsql.us-east-1.vpce.amazonaws.com list-clusters
```

### Operaciones de API
<a name="api-operations"></a>

Consulte la [referencia de la API de Aurora DSQL](CHAP_api_reference.md) para obtener documentación sobre la administración de recursos en Aurora DSQL.

### Administración de políticas de punto de conexión
<a name="managing-endpoint-policies"></a>

Al probar y configurar detenidamente las políticas de punto de conexión de Amazon VPC, puede ayudar a garantizar que el clúster de Aurora DSQL sea seguro, cumpla las normas y se ajuste a los requisitos específicos de control de acceso y gobernanza de la organización.

**Ejemplo: política de acceso completo a Aurora DSQL**

La siguiente política concede acceso completo a todas las acciones y recursos de Aurora DSQL a través del punto de conexión de Amazon VPC especificado. 

```
aws ec2 modify-vpc-endpoint \
    --vpc-endpoint-id vpce-xxxxxxxxxxxxxxxxx \
    --region region \
    --policy-document '{
      "Version": "2012-10-17",		 	 	 
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": "*",
          "Action": "dsql:*",
          "Resource": "*"
        }
      ]
    }'
```

**Ejemplo: política de acceso restringido a Aurora DSQL**

La siguiente política solo permite estas acciones de Aurora DSQL.
+ `CreateCluster`
+ `GetCluster`
+ `ListClusters`

Se deniegan todas las demás acciones de Aurora DSQL.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": "*",
      "Action": [
        "dsql:CreateCluster",
        "dsql:GetCluster",
        "dsql:ListClusters"
      ],
      "Resource": "*"
    }
  ]
}
```

------

## Conexión a clústeres de Aurora DSQL mediante AWS PrivateLink
<a name="privatelink-connecting-clusters"></a>

Una vez que el punto de conexión de AWS PrivateLink esté configurado y activo, podrá conectarse al clúster de Aurora DSQL mediante un cliente de PostgreSQL. Las instrucciones de conexión que aparecen a continuación describen los pasos para construir el nombre de host adecuado para conectarse a través del punto de conexión de AWS PrivateLink.

### Configuración de un punto de conexión de AWS PrivateLink
<a name="setting-up-privatelink-endpoint"></a>

******Paso 1: obtención del nombre del servicio del clúster**

Cuando cree un punto de conexión de AWS PrivateLink para conectarse al clúster, primero deberá obtener el nombre de servicio específico del clúster.

------
#### [ AWS CLI ]

```
aws dsql get-vpc-endpoint-service-name \
--region us-east-1 \
--identifier your-cluster-id
```

Respuesta de ejemplo

```
{
    "serviceName": "com.amazonaws.us-east-1.dsql-fnh4"
}
```

El nombre del servicio incluye un identificador, como `dsql-fnh4` en el ejemplo. Este identificador también es necesario al construir el nombre de host para conectarse al clúster.

------
#### [ AWS SDK for Python (Boto3) ]

```
import boto3

dsql_client = boto3.client('dsql', region_name='us-east-1')
response = dsql_client.get_vpc_endpoint_service_name(
    identifier='your-cluster-id'
)
service_name = response['serviceName']
print(f"Service Name: {service_name}")
```

------
#### [ AWS SDK for Java 2.x ]

```
import software.amazon.awssdk.auth.credentials.DefaultCredentialsProvider;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.dsql.DsqlClient;
import software.amazon.awssdk.services.dsql.model.GetVpcEndpointServiceNameRequest;
import software.amazon.awssdk.services.dsql.model.GetVpcEndpointServiceNameResponse;

String region = "us-east-1";
String clusterId = "your-cluster-id";

DsqlClient dsqlClient = DsqlClient.builder()
    .region(Region.of(region))
    .credentialsProvider(DefaultCredentialsProvider.create())
    .build();

GetVpcEndpointServiceNameResponse response = dsqlClient.getVpcEndpointServiceName(
    GetVpcEndpointServiceNameRequest.builder()
        .identifier(clusterId)
        .build()
);
String serviceName = response.serviceName();
System.out.println("Service Name: " + serviceName);
```

------<a name="create-vpc-endpoint"></a>

**Paso 2: creación del punto de conexión de Amazon VPC**

Mediante el nombre de servicio obtenido en el paso anterior, cree un punto de conexión de Amazon VPC. 

**importante**  
Las instrucciones de conexión que aparecen a continuación solo funcionan para conectarse a clústeres cuando está habilitado el DNS privado. No utilice la marca `--no-private-dns-enabled` al crear el punto de conexión, ya que esto impedirá que las instrucciones de conexión que figuran a continuación funcionen correctamente. Si desactiva el DNS privado, tendrá que crear un registro DNS privado comodín propio que apunte al punto de conexión creado.

------
#### [ AWS CLI ]

```
aws ec2 create-vpc-endpoint \
    --region us-east-1 \
    --service-name service-name-for-your-cluster \
    --vpc-id your-vpc-id \
    --subnet-ids subnet-id-1 subnet-id-2  \
    --vpc-endpoint-type Interface \
    --security-group-ids security-group-id
```

**Ejemplo de respuesta**

```
{
    "VpcEndpoint": {
        "VpcEndpointId": "vpce-0123456789abcdef0",
        "VpcEndpointType": "Interface",
        "VpcId": "vpc-0123456789abcdef0",
        "ServiceName": "com.amazonaws.us-east-1.dsql-fnh4",
        "State": "pending",
        "RouteTableIds": [],
        "SubnetIds": [
            "subnet-0123456789abcdef0",
            "subnet-0123456789abcdef1"
        ],
        "Groups": [
            {
                "GroupId": "sg-0123456789abcdef0",
                "GroupName": "default"
            }
        ],
        "PrivateDnsEnabled": true,
        "RequesterManaged": false,
        "NetworkInterfaceIds": [
            "eni-0123456789abcdef0",
            "eni-0123456789abcdef1"
        ],
        "DnsEntries": [
            {
                "DnsName": "*.dsql-fnh4.us-east-1.vpce.amazonaws.com",
                "HostedZoneId": "Z7HUB22UULQXV"
            }
        ],
        "CreationTimestamp": "2025-01-01T00:00:00.000Z"
    }
}
```

------
#### [ SDK for Python ]

```
import boto3

ec2_client = boto3.client('ec2', region_name='us-east-1')
response = ec2_client.create_vpc_endpoint(
    VpcEndpointType='Interface',
    VpcId='your-vpc-id',
    ServiceName='com.amazonaws.us-east-1.dsql-fnh4',  # Use the service name from previous step
    SubnetIds=[
        'subnet-id-1',
        'subnet-id-2'
    ],
    SecurityGroupIds=[
        'security-group-id'
    ]
)

vpc_endpoint_id = response['VpcEndpoint']['VpcEndpointId']
print(f"VPC Endpoint created with ID: {vpc_endpoint_id}")
```

------
#### [ SDK for Java 2.x ]

Uso de una URL de punto de conexión para las API de Aurora DSQL

```
import software.amazon.awssdk.auth.credentials.DefaultCredentialsProvider;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.ec2.Ec2Client;
import software.amazon.awssdk.services.ec2.model.CreateVpcEndpointRequest;
import software.amazon.awssdk.services.ec2.model.CreateVpcEndpointResponse;
import software.amazon.awssdk.services.ec2.model.VpcEndpointType;

String region = "us-east-1";
String serviceName = "com.amazonaws.us-east-1.dsql-fnh4";  // Use the service name from previous step
String vpcId = "your-vpc-id";

Ec2Client ec2Client = Ec2Client.builder()
    .region(Region.of(region))
    .credentialsProvider(DefaultCredentialsProvider.create())
    .build();

CreateVpcEndpointRequest request = CreateVpcEndpointRequest.builder()
    .vpcId(vpcId)
    .serviceName(serviceName)
    .vpcEndpointType(VpcEndpointType.INTERFACE)
    .subnetIds("subnet-id-1", "subnet-id-2")
    .securityGroupIds("security-group-id")
    .build();

CreateVpcEndpointResponse response = ec2Client.createVpcEndpoint(request);
String vpcEndpointId = response.vpcEndpoint().vpcEndpointId();
System.out.println("VPC Endpoint created with ID: " + vpcEndpointId);
```

------<a name="additional-setup-for-peering"></a>

**Configuración adicional al conectarse mediante Direct Connect o el emparejamiento de Amazon VPC**

Puede que se requiera una configuración adicional para conectarse a los clústeres de Aurora DSQL mediante un punto de conexión de AWS PrivateLink desde dispositivos en las instalaciones a través del emparejamiento de Amazon VPC o Direct Connect. Esta configuración no es necesaria si su aplicación se ejecuta en la misma instancia de Amazon VPC que su punto de conexión de AWS PrivateLink. Las entradas de DNS privado creadas anteriormente no se resolverán de forma correcta fuera de la instancia de Amazon VPC del punto de conexión, pero puede crear sus propios registros DNS privados que se resuelvan en su punto de conexión de AWS PrivateLink. 

Cree un registro DNS de CNAME privado que apunte al nombre de dominio completo del punto de conexión de AWS PrivateLink. El nombre de dominio del registro DNS creado debe construirse a partir de los siguientes componentes:

1. El identificador del servicio a partir del nombre del servicio. Por ejemplo: .: `dsql-fnh4`

1. la Región de AWS,

Cree el registro DNS de CNAME con un nombre de dominio que tenga el siguiente formato: `*.service-identifier.region.on.aws` 

El formato del nombre de dominio es importante por dos motivos:

1. El nombre de host utilizado para conectarse a Aurora DSQL debe coincidir con el certificado de servidor de Aurora DSQL cuando se utilice el modo SSL `verify-full`. Esto garantiza el máximo nivel de seguridad de la conexión.

1. Aurora DSQL utiliza la parte del ID de clúster del nombre de host que se utiliza para conectarse a Aurora DSQL a fin de identificar el clúster que se conecta.

Si no es posible crear registros DNS privados, puede seguir conectándose a Aurora DSQL. Consulte [Conexión a un clúster de Aurora DSQL mediante un punto de conexión de AWS PrivateLink sin DNS privado.](#connecting-cluster-id-option).

### Conexión a un clúster de Aurora DSQL mediante un punto de conexión de AWS PrivateLink
<a name="connecting-endpoints"></a>

Una vez que el punto de conexión de AWS PrivateLink esté configurado y activo (compruebe que `State` es `available`), puede conectarse al clúster de Aurora DSQL mediante un cliente de PostgreSQL. Para obtener instrucciones sobre cómo utilizar los AWS SDK, puede seguir las guías de [Programación con Aurora DSQL](https://docs.aws.amazon.com/aurora-dsql/latest/userguide/programming-with.html). Debe cambiar el punto de conexión del clúster para que coincida con el formato del nombre de host.

#### Construcción del nombre de host
<a name="construct-hostname"></a>

El nombre de host para conectarse a través de AWS PrivateLink difiere del nombre de host DNS público. Debe construirlo con los siguientes componentes.

1. `Your-cluster-id`

1. El identificador del servicio a partir del nombre del servicio. Por ejemplo: .: `dsql-fnh4` 

1. La Región de AWS. Por ejemplo: .: `us-east-1` 

Use el siguiente formato: `cluster-id.service-identifier.region.on.aws`

**Ejemplo: conexión mediante PostgreSQL**

```
# Set environment variables
export CLUSTERID=your-cluster-id
export REGION=us-east-1
export SERVICE_IDENTIFIER=dsql-fnh4  # This should match the identifier in your service name

# Construct the hostname
export HOSTNAME="$CLUSTERID.$SERVICE_IDENTIFIER.$REGION.on.aws"

# Generate authentication token
export PGPASSWORD=$(aws dsql --region $REGION generate-db-connect-admin-auth-token --hostname $HOSTNAME)

# Connect using psql
psql -d postgres -h $HOSTNAME -U admin
```

#### Conexión a un clúster de Aurora DSQL mediante un punto de conexión de AWS PrivateLink sin DNS privado.
<a name="connecting-cluster-id-option"></a>

Las instrucciones de conexión anteriores se basan en registros DNS privados. Si la aplicación se ejecuta en la misma instancia de Amazon VPC que el punto de conexión de AWS PrivateLink, los registros DNS se crean de forma automática. Como alternativa, si se conecta desde dispositivos en las instalaciones a través del emparejamiento de Amazon VPC o Direct Connect, podrá crear sus propios registros DNS privados. Sin embargo, la configuración de los registros DNS no es siempre posible debido a las restricciones de red impuestas por sus equipos de seguridad. Si la aplicación debe conectarse mediante Direct Connect o desde una instancia de Amazon VPC emparejada, y la configuración de registros DNS no es posible, puede seguir conectándose a Aurora DSQL.

 Aurora DSQL utiliza la parte del ID de clúster del nombre de host para identificar el clúster que se conecta, pero si la configuración de registros DNS no es posible, Aurora DSQL permite especificar el clúster de destino mediante la opción de conexión `amzn-cluster-id`. Con esta opción, es posible utilizar el nombre de dominio completo del punto de conexión de AWS PrivateLink como nombre de host al conectarse.

**importante**  
Al conectarse con la dirección IP o el nombre de dominio completo del punto de conexión de AWS PrivateLink, no se admite el modo SSL `verify-full`. Por este motivo, se prefiere configurar un DNS privado.

**Ejemplo: Especificación de la opción de conexión de ID de clúster mediante PostgreSQL**

```
# Set environment variables
export CLUSTERID=your-cluster-id
export REGION=us-east-1
export HOSTNAME=vpce-04037adb76c111221-d849uc2p.dsql-fnh4.us-east-1.vpce.amazonaws.com # This should match your endpoint's fully-qualified domain name

# Construct the hostname used to generate the authentication token
export AUTH_HOSTNAME="$CLUSTERID.dsql.$REGION.on.aws"

# Generate authentication token
export PGPASSWORD=$(aws dsql --region $REGION generate-db-connect-admin-auth-token --hostname $AUTH_HOSTNAME)

# Specify the amzn-cluster-id connection option
export PGOPTIONS="-c amzn-cluster-id=$CLUSTERID"

# Connect using psql
psql -d postgres -h $HOSTNAME -U admin
```

### Solución de problemas con AWS PrivateLink
<a name="troubleshooting-privatelink"></a>

#### Problemas y soluciones comunes
<a name="common-issues"></a>

En la siguiente tabla se muestran los problemas y las soluciones más comunes relacionados con AWS PrivateLink con Aurora DSQL.


| Problema | Causa posible | Solución | 
| --- | --- | --- | 
|  Tiempo de espera de conexión  |  El grupo de seguridad no está configurado correctamente  |  Utilice Analizador de accesibilidad de Amazon VPC para asegurarse de que la configuración de red permite el tráfico en el puerto 5432.  | 
|  Error de resolución de DNS  |  DNS privado no habilitado  |  Compruebe que el punto de conexión de VPC de Amazon se ha creado con el DNS privado habilitado.  | 
|  Error de autenticación  |  Credenciales incorrectas o token caducado  |  Genere un nuevo token de autenticación y verifique el nombre de usuario.  | 
|  No se ha encontrado el nombre de servicio  |  ID de clúster incorrecto  |  Compruebe el ID del clúster y Región de AWS al obtener el nombre del servicio.  | 

### Activos relacionados
<a name="related-resources"></a>

Para obtener más información, consulte los siguientes recursos:
+ [Guía del usuario de Amazon Aurora DSQL](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/aurora-dsql.html)
+ [AWS PrivateLink documentación](https://docs.aws.amazon.com/vpc/latest/privatelink/what-is-privatelink.html)
+ [Acceso a los servicios de AWS a través de AWS PrivateLink](https://docs.aws.amazon.com/vpc/latest/privatelink/privatelink-access-aws-services.html)