Set up an API Gateway API with private integrations using the AWS CLI
The following tutorial shows how to use the AWS CLI to create a VPC link and a private integration. The following prerequisites are required:
-
You need an Network Load Balancer created and configured with your VPC source as the target. For more information, see Set up a Network Load Balancer for API Gateway private integrations. This must be in the same AWS account as your API. You need the Network Load Balancer ARN to create your VPC link.
-
To create and manage a
VpcLink, you need the permissions to create aVpcLinkin your API. You don't need the permissions to use theVpcLink. For more information, see Grant permissions for API Gateway to create a VPC link.
To set up an API with the private integration using AWS CLI
-
Use the following create-vpc-link command to create a
VpcLinktargeting the specified Network Load Balancer: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/1234567890abcdefThe output of this command acknowledges the receipt of the request and shows the
PENDINGstatus for theVpcLinkbeing created.{ "status": "PENDING", "targetArns": [ "arn:aws:elasticloadbalancing:us-east-2:123456789012:loadbalancer/net/my-vpclink-test-nlb/1234567890abcdef" ], "id": "gim7c3", "name": "my-test-vpc-link" }It takes 2-4 minutes for API Gateway to finish creating the
VpcLink. When the operation finishes successfully, thestatusisAVAILABLE. You can verify this by using the following get-vpc-link command:aws apigateway get-vpc-link --vpc-link-idgim7c3If the operation fails, you get a
FAILEDstatus, with thestatusMessagecontaining the error message. For example, if you attempt to create aVpcLinkwith a Network Load Balancer that is already associated with a VPC endpoint, you get the following on thestatusMessageproperty:"NLB is already associated with another VPC Endpoint Service"After the
VpcLinkis created successfully, you can create an API and integrate it with the VPC resource through theVpcLink.Note the
idvalue of the newly createdVpcLink. In this example output, it'sgim7c3. You need it to set up the private integration. -
Use the following create-rest-api command to create an API Gateway
RestApiresource:aws apigateway create-rest-api --name 'My VPC Link Test'Note the
RestApi'sidvalue and theRestApi'srootResourceIdvalue in the returned result. You need this value to perform further operations on the API.Next, you create an API with only a
GETmethod on the root resource (/) and integrate the method with theVpcLink. -
Use the following put-method command to create the
GET /method:aws apigateway put-method \ --rest-api-idabcdef123\ --resource-idskpp60rab7\ --http-method GET \ --authorization-type "NONE"If you don't use the proxy integration with the
VpcLink, you must also set up at least a method response of the200status code. You use the proxy integration here. -
After you create the
GET /method, you set up the integration. For a private integration, you use theconnection-idparameter to provide theVpcLinkID. You can use either a stage variable or directly enter theVpcLinkID. Theuriparameter is not used for routing requests to your endpoint, but is used for setting theHostheader and for certificate validation.At any point, you can also update the integration to change the
connection-id. Use the following update-integration command to update your integration:aws apigateway update-integration \ --rest-api-idabcdef123\ --resource-idskpp60rab7\ --http-method GET \ --patch-operations '[{"op":"replace","path":"/connectionId","value":"${stageVariables.vpcLinkId}"}]'Make sure to use a stringified JSON list as the
patch-operationsparameter value.Because you used the private proxy integration, your API is now ready for deployment and for test runs.
-
If you used the stage variable to define your
connection-id, you need to deploy your API to test it. Use the following create-deployment command to deploy your API with a stage variable:aws apigateway create-deployment \ --rest-api-idabcdef123\ --stage-name test \ --variables vpcLinkId=gim7c3To update the stage variable with a different
VpcLinkID, such as, use the following update-stage command:asf9d7aws apigateway update-stage \ --rest-api-idabcdef123\ --stage-name test \ --patch-operations op=replace,path='/variables/vpcLinkId',value='asf9d7'When you hardcode the
connection-idproperty with theVpcLinkID literal, you don't need to deploy your API to test it. Use the test-invoke-method command to test your API before it is deployed. -
Use the following command to invoke your API:
curl -X GET https://abcdef123.execute-api.us-east-2.amazonaws.com/testAlternatively, you can enter your API's invoke-URL in a web browser to view the result.