Configuración de una API de API Gateway con integraciones privadas a través de la AWS CLI - Amazon API Gateway

Configuración de una API de API Gateway con integraciones privadas a través de la AWS CLI

Antes de crear una API con la integración privada, debe haber configurado el recurso de VPC y haber creado y configurado un Network Load Balancer con el origen de la VPC como el objetivo. Si no se cumplen los requisitos, siga Configuración de un Network Load Balancer para integraciones privadas de API Gateway para instalar el recurso de VPC, crear un Network Load Balancer y definir el recurso de VPC como objetivo del Network Load Balancer.

nota

El Network Load Balancer y la API deben pertenecer a la misma cuenta de AWS.

Para crear y administrar un VpcLink, también debe haber configurado los permisos correspondientes. Para obtener más información, consulte Concesión de permisos para crear un enlace VPC.

nota

Solo necesita los permisos para crear un VpcLink en la API. No necesita los permisos para utilizar el VpcLink.

Una vez que haya creado el Network Load Balancer, anote su ARN. Lo necesitará para crear un enlace VPC para la integración privada.

Para configurar una API con integración privada a través de la AWS CLI
  1. Cree un enlace VpcLink que tenga como destino el Network Load Balancer 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 comprobarlo llamando al siguiente comando de la CLI:

    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 Network Load Balancer que ya está asociado a un punto de enlace de la 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 id del enlace VpcLink creado (gim7c3 en la salida anterior). Lo necesitará para configurar la integración privada.

  2. Configure una API creando un recurso RestApi de API Gateway:

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

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

    A efectos de esta explicación, crearemos una API con un solo método GET en el recurso raíz (/) y lo integraremos con VpcLink.

  3. Configure el método GET /. En primer lugar, obtenga el identificador del recurso raíz (/):

    aws apigateway get-resources --rest-api-id abcdef123

    En la salida, anote el valor id de la ruta de acceso /. En este ejemplo, supondremos que es skpp60rab7.

    Cree la solicitud del método de la AP 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. Aquí, utilizaremos la integración de proxy.

  4. Configure la integración privada de tipo HTTP_PROXY y llame al comando put-integration tal y como se indica a continuació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

    En las integraciones privadas, establezca connection-type en VPC_LINK y connection-id en el identificador de VpcLink o en una variable de etapa que haga referencia al ID de VpcLink. El parámetro uri no se utiliza para direccionar las solicitudes al punto de enlace, sino para configurar el encabezado Host y validar el certificado.

    El comando devuelve el siguiente resultado:

    { "passthroughBehavior": "WHEN_NO_MATCH", "timeoutInMillis": 29000, "connectionId": "gim7c3", "uri": "http://my-vpclink-test-nlb-1234567890abcdef.us-east-2.amazonaws.com", "connectionType": "VPC_LINK", "httpMethod": "GET", "cacheNamespace": "skpp60rab7", "type": "HTTP_PROXY", "cacheKeyParameters": [] }

    Al utilizar una variable de etapa, la propiedad connectionId queda definida al crear 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 "\${stageVariables.vpcLinkId}"

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

    Si lo desea, también puede actualizar la integración para restablecer el valor connectionId con una variable de etapa:

    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.

    Puede usar una variable de etapa para integrar la API con una VPC o equilibrador de carga de red diferente restableciendo el valor de la variable de etapa de VpcLink.

    Como hemos utilizado la integración de proxy privada, ahora la API está lista para la implementación y para que la prueba se ejecute. En las integraciones que no son de proxy, también debe configurar la respuesta del método y la integración, al igual que haría al configurar una API con integraciones personalizadas de HTTP.

  5. Para probar la API, impleméntela. Esto es necesario si ha utilizado la variable de etapa como marcador del ID de VpcLink. Para implementar la API con una variable de etapa, llame al comando create-deployment tal y como se muestra a continuación:

    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), llame al comando update-stage:

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

    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 escribir la URL de invocación de la API en un navegador web para ver los resultados.

    Si codifica la propiedad connection-id con el literal del ID de VpcLink, también puede llamar a test-invoke-method para probar la invocación de la API antes de implementarla.