Configurar uma API do API Gateway com integrações privadas usando a AWS CLI - Amazon API Gateway

Configurar uma API do API Gateway com integrações privadas usando a AWS CLI

O tutorial a seguir mostra como usar a AWS CLI para criar um link de VPC e uma integração privada. Os seguintes pré-requisitos se aplicam:

Para configurar uma API com a integração privada usando a AWS CLI
  1. O comando create-vpc-link a seguir cria um VpcLink para o 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

    A saída desse comando confirma o recebimento da solicitação e mostra o status PENDING da VpcLink que está sendo criada.

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

    Demora de 2 a 4 minutos para que o API Gateway conclua a criação do VpcLink. Quando a operação é concluída com êxito, o status é AVAILABLE. É possível verificar isso chamando o seguinte comando get-vpc-link:

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

    Se a operação falhar, você obterá o status FAILED e a statusMessage conterá uma mensagem de erro. Por exemplo, se você tentar criar um VpcLink com um Network Load Balancer que já esteja associado a um VPC endpoint, obterá a seguinte mensagem na propriedade statusMessage:

    "NLB is already associated with another VPC Endpoint Service"

    Depois que a VpcLink for criada com sucesso, você poderá criar uma API e integrá-la ao recurso da VPC por meio da VpcLink.

    Anote o valor de id do VpcLink recém-criado. Neste exemplo de saída, é gim7c3. Você precisará dele para configurar a integração privada.

  2. O seguinte comando create-rest-api cria um recurso RestApi do API Gateway:

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

    Anote o valor de id da RestApi e o valor de rootResourceId da RestApi no resultado obtido. Você precisa desse valor para executar outras operações na API.

    Para fins de ilustração, criaremos uma API com apenas um método GET no recurso raiz (/) e integraremos o método ao VpcLink.

  3. Configure o método GET /. Use o seguinte comando put-method e insira o Id como o rest-api-id e o rootResourceId como o resource-id:

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

    Se você não usa a integração de proxy com o VpcLink, também deve configurar pelo menos uma resposta do método para o código de status 200. Vamos usar a integração de proxy aqui.

  4. Depois de criar o método GET /, você configura a integração. Em uma integração privada, use o parâmetro connection-id para fornecer o ID do VpcLink. É possível usar uma variável de estágio ou inserir diretamente o ID do VpcLink. O parâmetro uri não é usado para rotear solicitações para o endpoint, mas sim para configurar o cabeçalho do Host e para a validação do certificado.

    Use the VPC link ID

    O seguinte comando put-integration usa o ID do VpcLink diretamente na integração:

    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

    O seguinte comando put-integration usa uma variável de estágio para fazer referência ao ID do link da VPC. Ao implantar a API em um estágio, você define o ID do link da 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}"

    Inclua aspas duplas na expressão da variável de estágio (${stageVariables.vpcLinkId}) e insira um caractere de escape para o caractere $.

    A qualquer momento, também é possível atualizar a integração para alterar o connection-id. O seguinte comando update-integration mostra como atualizar a integração:

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

    Certifique-se de usar uma lista JSON transformada em string como o valor do parâmetro patch-operations.

    Como usamos a integração de proxy privada, a API agora está pronta para implantação e execução de testes. Com a integração não proxy, você também deve configurar a resposta do método e a resposta da integração da mesma forma que faria ao configurar uma API com integrações personalizadas de HTTP.

  5. Se você usou a variável de estágio para definir o connection-id, precisará implantar a API para testá-la. O seguinte comando create-deployment mostra como implantar a API com uma variável de estágio:

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

    Para atualizar a variável de estágio com um ID do VpcLink diferente (por exemplo, asf9d7), chame o comando update-stage:

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

    Ao codificar a propriedade connection-id com o ID literal do VpcLink, não é necessário implantar a API para testá-la. Use o comando test-invoke-method para testar a API antes que ela seja implantada.

  6. Use o seguinte comando para invocar a API:

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

    Também é possível inserir o URL de invocação da API em um navegador da web para visualizar o resultado.