

# Configurar uma API do API Gateway com integrações privadas usando a AWS CLI (legado)
<a name="set-up-api-with-vpclink-cli"></a>

**nota**  
A implementação de integrações privadas a seguir utiliza links da VPC V1. Os links da VPC V1 são recursos legados. Recomendamos que você utilize [links da VPC V2 para APIs REST](apigateway-vpc-links-v2.md).

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:
+ É necessário ter um Network Load Balancer criado e configurado com a origem da VPC como o destino. Para obter mais informações, consulte [Configurar um Network Load Balancer para integrações privadas do API Gateway (legado)](set-up-nlb-for-vpclink-using-console.md). Isso deve ser feito na mesma Conta da AWS que a API. É necessário ter o ARN do Network Load Balancer para criar o link da VPC.
+ Para criar e gerenciar um `VpcLink`, é preciso ter permissões para criar um `VpcLink` na API. Não é necessário ter permissões para usar o `VpcLink`. Para obter mais informações, consulte [Conceder permissões para o API Gateway criar um link de VPC (legado)](grant-permissions-to-create-vpclink.md).

**Para configurar uma API com a integração privada usando a AWS CLI**

1. Use o comando [create-vpc-link](https://docs.aws.amazon.com/cli/latest/reference/apigateway/create-vpc-link.html) a seguir para criar 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 usando o comando [get-vpc-link](https://docs.aws.amazon.com/cli/latest/reference/apigateway/get-vpc-link.html) indicado abaixo:

   ```
   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.

1. Use o comando [create-rest-api](https://docs.aws.amazon.com/cli/latest/reference/apigateway/create-rest-api.html) indicado abaixo para criar um recurso [https://docs.aws.amazon.com/apigateway/latest/api/API_RestApi.html](https://docs.aws.amazon.com/apigateway/latest/api/API_RestApi.html) 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. 

   Em seguida, crie uma API com apenas um método `GET` no recurso raiz (`/`) e integre o método ao `VpcLink`.

1. Use o comando [put-method](https://docs.aws.amazon.com/cli/latest/reference/apigateway/put-method.html) indicado abaixo para criar o método `GET /`:

   ```
   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`. Use a integração de proxy aqui.

1. 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 ]

   Use o comando [put-integration](https://docs.aws.amazon.com/cli/latest/reference/apigateway/put-integration.html) indicado abaixo para utilizar 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 ]

   Use o comando [put-integration](https://docs.aws.amazon.com/cli/latest/reference/apigateway/put-integration.html) a seguir para fazer referência ao ID do link de VPC por meio de uma variável de estágio. 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`. Use o comando [update-integration](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-integration.html) indicado abaixo para 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 você usou a integração de proxy privada, a API agora está pronta para implantação e execução de testes.

1. Se você usou a variável de estágio para definir o `connection-id`, precisará implantar a API para testá-la. Use o comando [create-deployment](https://docs.aws.amazon.com/cli/latest/reference/apigateway/create-deployment.html) indicado abaixo para 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`), use o comando [update-stage](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-stage.html) indicado abaixo:

   ```
   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](https://docs.aws.amazon.com/cli/latest/reference/apigateway/test-invoke-method.html) para testar a API antes que ela seja implantada. 

1. 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.