

# Configuración de una API de API Gateway con integraciones privadas a través de la AWS CLI (heredado)
<a name="set-up-api-with-vpclink-cli"></a>

**nota**  
La siguiente implementación de integraciones privadas utiliza enlaces de VPC V1. Los enlaces de VPC V1 son recursos heredados. Se recomienda utilizar los [enlaces de VPC V2 para las API de REST](apigateway-vpc-links-v2.md).

En el siguiente tutorial se muestra cómo utilizar la AWS CLI para crear un enlace de VPC y una integración privada. Los siguientes requisitos previos son necesarios:
+ Es necesario haber creado y configurado un Equilibrador de carga de red con el origen de la VPC como el objetivo. Para obtener más información, consulte [Configuración de un equilibrador de carga de red para integraciones privadas de API Gateway (heredado)](set-up-nlb-for-vpclink-using-console.md). Este debe estar en la misma Cuenta de AWS que la API. Necesita el ARN del Equilibrador de carga de red para crear el enlace de la VPC.
+ Para crear y administrar un `VpcLink`, necesita los permisos necesarios para crear un `VpcLink` en la API. No necesita los permisos para utilizar el `VpcLink`. Para obtener más información, consulte [Concesión de permisos para API Gateway para crear un enlace de VPC (heredado)](grant-permissions-to-create-vpclink.md).

**Para configurar una API con integración privada a través de la AWS CLI**

1. Utilice el siguiente comando [create-vpc-link](https://docs.aws.amazon.com/cli/latest/reference/apigateway/create-vpc-link.html) para crear un `VpcLink` que apunte al equilibrador de carga de red especificado:

   ```
   aws apigateway create-vpc-link \
       --name my-test-vpc-link \
       --target-arns arn:aws:elasticloadbalancing:us-east-2:123456789012:loadbalancer/net/my-vpclink-test-nlb/1234567890abcdef
   ```

   El resultado de este comando confirma la recepción de la solicitud y muestra el estado `PENDING` para `VpcLink` que se está creando.

   ```
   {
       "status": "PENDING", 
       "targetArns": [
           "arn:aws:elasticloadbalancing:us-east-2:123456789012:loadbalancer/net/my-vpclink-test-nlb/1234567890abcdef"
       ], 
       "id": "gim7c3", 
       "name": "my-test-vpc-link"
   }
   ```

   API Gateway tarda de 2 a 4 minutos en completar la creación de `VpcLink`. Si la operación finaliza correctamente, el valor de `status` es `AVAILABLE`. Puede verificarlo llamando al siguiente comando [get-vpc-link](https://docs.aws.amazon.com/cli/latest/reference/apigateway/get-vpc-link.html):

   ```
   aws apigateway get-vpc-link --vpc-link-id gim7c3
   ```

   Si se produce un error en la operación, obtendrá el estado `FAILED` y `statusMessage` contendrá el mensaje de error. Por ejemplo, si intenta crear un enlace `VpcLink` con un equilibrador de carga de red que ya está asociado a un punto de conexión de VPC, obtendrá lo siguiente en la propiedad `statusMessage`:

   ```
   "NLB is already associated with another VPC Endpoint Service"
   ```

   Después de que se cree `VpcLink` correctamente, puede crear una API e integrarla con el recurso de la VPC a través de `VpcLink`. 

   Anote el valor de `id` del `VpcLink` recién creado. En este resultado de ejemplo, es `gim7c3`. Lo necesitará para configurar la integración privada.

1. Utilice el siguiente comando [create-rest-api](https://docs.aws.amazon.com/cli/latest/reference/apigateway/create-rest-api.html) para crear un recurso [https://docs.aws.amazon.com/apigateway/latest/api/API_RestApi.html](https://docs.aws.amazon.com/apigateway/latest/api/API_RestApi.html) de API Gateway:

   ```
   aws apigateway create-rest-api --name 'My VPC Link Test'
   ```

   Anote el valor de `id` de `RestApi` y el valor de `rootResourceId` de `RestApi` del resultado devuelto. Necesitará este valor para realizar otras operaciones en la API. 

   A continuación, cree una API con solo un método `GET` en el recurso raíz (`/`) e integre el método con el `VpcLink`.

1. Utilice el siguiente comando [put-method](https://docs.aws.amazon.com/cli/latest/reference/apigateway/put-method.html) para crear el método `GET /`:

   ```
   aws apigateway put-method \
          --rest-api-id  abcdef123 \
          --resource-id skpp60rab7 \
          --http-method GET \
          --authorization-type "NONE"
   ```

   Si no utiliza la integración de proxy con `VpcLink`, también debe configurar al menos un método de respuesta del código de estado `200`. En este caso, utilizará la integración de proxy.

1. Tras crear el método `GET /`, se configura la integración. En el caso de una integración privada, se utiliza el parámetro `connection-id` para proporcionar el ID de `VpcLink`. Puede utilizar una variable de fase o ingresar directamente el ID de `VpcLink`. El parámetro `uri` no se utiliza para direccionar las solicitudes al punto de conexión, sino para configurar el encabezado `Host` y validar el certificado. 

------
#### [ Use the VPC link ID ]

   Utilice el siguiente comando [put-integration](https://docs.aws.amazon.com/cli/latest/reference/apigateway/put-integration.html) para usar el ID de `VpcLink` directamente en la integración:

   ```
   aws apigateway put-integration \
       --rest-api-id abcdef123 \
       --resource-id skpp60rab7 \
       --uri 'http://my-vpclink-test-nlb-1234567890abcdef.us-east-2.amazonaws.com' \
       --http-method GET \
       --type HTTP_PROXY \
       --integration-http-method GET \
       --connection-type VPC_LINK \
       --connection-id gim7c3
   ```

------
#### [ Use a stage variable ]

   Utilice el siguiente comando [put-integration](https://docs.aws.amazon.com/cli/latest/reference/apigateway/put-integration.html) para usar una variable de etapa para hacer referencia al ID de enlace de VPC. Cuando implementa la API en una etapa, se establece el ID de enlace de la VPC.

   ```
   aws apigateway put-integration \
       --rest-api-id abcdef123 \
       --resource-id skpp60rab7 \
       --uri 'http://my-vpclink-test-nlb-1234567890abcdef.us-east-2.amazonaws.com' \
       --http-method GET \
       --type HTTP_PROXY \
       --integration-http-method GET \
       --connection-type VPC_LINK \
       --connection-id "\${stageVariables.vpcLinkId}"
   ```

   No olvide utilizar comillas dobles en la expresión de la variable de etapa (`${stageVariables.vpcLinkId}`) y utilizar caracteres de escape con `$`.

------

   En cualquier momento, también puede actualizar la integración para cambiar el `connection-id`. Utilice el siguiente comando [update-integration](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-integration.html) para actualizar su integración:

   ```
    aws apigateway update-integration \
       --rest-api-id abcdef123 \
       --resource-id skpp60rab7 \
       --http-method GET \
       --patch-operations '[{"op":"replace","path":"/connectionId","value":"${stageVariables.vpcLinkId}"}]'
   ```

   No olvide utilizar una lista JSON con forma de cadena como valor del parámetro `patch-operations`.

   Puesto que ha utilizado la integración de proxy privada, ahora la API está lista para la implementación y ejecuciones de pruebas.

1. Si usó la variable de etapa para definir el `connection-id`, necesita implementar la API para probarla. Utilice el siguiente comando [create-deployment](https://docs.aws.amazon.com/cli/latest/reference/apigateway/create-deployment.html) para implementar la API con una variable de etapa:

   ```
   aws apigateway create-deployment \
       --rest-api-id abcdef123 \
       --stage-name test \
       --variables vpcLinkId=gim7c3
   ```

   Para actualizar la variable de etapa con un ID de `VpcLink` diferente (por ejemplo, `asf9d7`), utilice el siguiente comando [update-stage](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-stage.html):

   ```
   aws apigateway update-stage \
       --rest-api-id abcdef123 \
       --stage-name test \
       --patch-operations op=replace,path='/variables/vpcLinkId',value='asf9d7'
   ```

   Si codifica la propiedad `connection-id` con el literal del ID de `VpcLink`, no necesita implementar la API para probarla. Use el comando [test-invoke-method](https://docs.aws.amazon.com/cli/latest/reference/apigateway/test-invoke-method.html) para probar la API antes de implementarla. 

1. Use los siguientes comandos para invocar la API:

   ```
   curl -X GET https://abcdef123.execute-api.us-east-2.amazonaws.com/test
   ```

   Si lo desea, también puede ingresar la URL de invocación de la API en un navegador web para ver los resultados.